> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allocait.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Prices

> An agent supplies every price it uses, and the app shows quotes for reference.

A call to the REST API or MCP server uses only prices you or your agent supply in the request. Allocait doesn't look one up.

> [!WARNING]
>
> Allocait's agent surface returns nothing computed from Allocait's own market quote: no price, no day change, and no value, total or exposure. Every value it returns comes from prices your agent supplied, or from the mark you recorded on an option. If your agent needs a price or a dollar figure, it supplies it. The one reading from the stored quote is `standing`, returned only to a connection you sign in to yourself (OAuth). See [Standing](https://docs.allocait.app/concepts/standing.md).

This is deliberate. The quote in the app is there for you to read. Allocait doesn't supply a price to an agent or script, so a price used in a call is one that you or your agent supplied. On the MCP server, Allocait's instructions to a connected agent say to use a price from you or a source you trust, never a remembered or estimated one.

The app works differently. See [App prices](https://docs.allocait.app/concepts/app-prices.md).

## The two-call pattern

**1. Read the snapshot with no prices**

Use `GET /portfolio/snapshot`, or `get_portfolio_snapshot`. It returns your holdings in shares, your rules and `symbols_to_price`. On the MCP server it also returns `holdings_to_price`, the held symbols a status needs; `symbols_to_price` adds symbols only monitors use.

**2. Send the prices back**

Fetch those prices from your own source, then send them as `prices`, a `{SYMBOL: price}` map: `POST /portfolio/snapshot`, or `get_portfolio_snapshot` with `prices`.

## A partial map

The snapshot accepts a partial map. A holding you priced keeps its value, and one you didn't comes back with no value.

Anything computed across the whole portfolio stays empty until every non-cash holding is priced, because one missing price affects every downstream number. That includes a class's share of the total, a compliance status, `total_value` and `exposure`.

`exposure` needs a number in your `prices` for every non-cash holding, even when Allocait holds a quote of its own for the one you left out. An option with a mark is the exception. See [Options](https://docs.allocait.app/concepts/options.md).

## Stricter calls

These calls refuse a map that misses a held non-cash symbol, or, for `check_trades`, a traded one:

* `POST /compliance/check`
* `POST /rebalance/preview`
* `POST /trades/check`
* the MCP tool `check_trades`

The refusal is `PRICES_INCOMPLETE`, with the symbols still needed. See [Error codes](https://docs.allocait.app/api/error-codes.md).

## Next steps

> [card] [App prices](https://docs.allocait.app/concepts/app-prices.md)
>
> How the app keeps its quotes current.

> [card] [Standing](https://docs.allocait.app/concepts/standing.md)
>
> The one reading from a stored quote.

> [card] [Check a change](https://docs.allocait.app/guides/check-before-you-trade.md)
>
> Send prices with a check.

> [card] [Options](https://docs.allocait.app/concepts/options.md)
>
> An option owns its price.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.