Why the separation exists
An instruction and its outcome fail independently. A broker can be unreachable, reject an order, acknowledge it and then lose it, or fill it hours later. In every one of those cases your instruction was real, was authorized, and was acted on by the platform. A model where the record only begins once the broker accepts cannot describe the moment in between, and cannot answer what was attempted when nothing came back. Anthid records the intent before it contacts the broker, in the same operation that queues the work. The order record comes later, when there is something at the broker to record. See Compliance for the guarantees around that ordering. The separation is also what keeps the platform broker-agnostic. An intent is expressed in Anthid’s own terms and translated into each broker’s dialect at routing time. The intent reads the same whether it goes to Alpaca or Lightspeed.What happens to an intent
Two separate things happen to an instruction, and an intent reports both. Dispatch is how far Anthid got in handing the instruction to the broker. It moves through four states.
Dispatch stops changing once it reaches
SENT or FAILED. It stays SENT afterwards no matter what the broker goes on to do.
Outcome is what the broker did with the order that followed. It is reported alongside the dispatch state, and it keeps moving after dispatch has stopped.
The distinction between “not yet reported” and
PENDING is deliberate. The first says Anthid has heard nothing back; the second is the broker saying it has the order and has not worked it. Anything watching for a stuck order needs to tell them apart.
For the exact quantity traded, read the resulting order. The outcome tells you where the order stands; filled quantity tells you how much of it happened.
Amendments build a history, not a replacement
An intent is opened by a create, and can carry later amendments and cancellations.
Each command is added to the intent as a new, sequenced entry rather than overwriting the previous one. So the intent accumulates a history: what was instructed, in what order, and by whom. Nothing is lost when an order is amended twice and then pulled.
An amendment restates the whole order
A replace carries a complete replacement order, not a partial edit. Anything it does not name is not inherited from the original, so an amendment that changes only the price will not preserve the original quantity. This is worth knowing when reviewing how a system was built to amend orders.
Attributing an order to the system that sent it
Anthid mints its own identifier for an intent and returns it on the response, which makes it useless for identifying a request that is still in flight or one whose response was lost. For that, your systems can set their own reference on submission. Anthid records it before the request goes out, carries it unchanged through every amendment and cancellation under that intent, and returns it on the resulting order. Where several of your systems trade the same account, it is what makes an order attributable to the one that placed it.Where to see them
Anthid serves intents from two places, each built for a different question. What is working right now comes from the live surface. It holds only the intents you can still act on, so a read returns the current state of your working orders without paging through everything that came before. What happened comes from the ledger. Every completed intent is kept there with its full instruction history, filterable and sortable, alongside the aggregate counts that reporting and reconciliation run on. An intent moves from the first to the second when its order reaches a terminal state: filled, cancelled, or rejected. Live reads stay fast because they only ever cover active work, and the historical record is retained for six years with the attribution intact, so a supervisory review can answer who instructed what years after the fact.Related
- Orders for the record of what exists at the broker
- Positions for resulting holdings
- Controls for what is evaluated before an intent is accepted
- Intents API reference for endpoints, request shapes, and field names