An instruction and its outcome fail independently
Most broker APIs give you one object. You send an order, and what comes back is both your request and the live state of that order at the venue. While that is convenient, it collapses two things that do not fail together. A broker can be unreachable. It can reject an order. It can acknowledge an order and then lose it. It can fill an order 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 begins only once the broker accepts cannot describe the moment in between, and it cannot answer the question a review asks first: what was attempted when nothing came back? Anthid keeps the two apart. An intent is what you asked for. An order is what came of it at the broker. The intent exists first, and it exists whether or not an order ever does.What “recorded before acknowledged” means in practice
When you submit an intent, Anthid commits it to an append-only event stream in the same database transaction that queues it for execution. You receive a response only after that transaction commits.The record cannot be rewritten
The instruction stream is append-only, and that is enforced by the database rather than by application code. A trigger rejects any attempt to update or delete a row. The application has no path to modify a recorded instruction, and neither does an ordinary database session. Corrections are not edits. A replace or a cancel is appended as a new, sequenced action against the same intent, carrying the credential that sent it. Amend an order twice and then pull it, and the intent holds four actions in order: the create, two replaces, and the cancel. Read them back with one call.A
REPLACE carries a complete order specification, not a patch. Fields left out of the replacement are not inherited from the original. The record keeps every version, so the history shows exactly what each amendment asked for, but a replace that names only a new price will not preserve the original quantity. See the Intents API.What each record carries
A record is only useful in a dispute if it can say who, when, and from where. Every action carries:
Attribution is taken from the request every time and never inherited from the thing being changed. One credential cancelling what another credential placed is visible rather than hidden. That is the half of a disputed order that turns out to matter, and it cannot be reconstructed afterwards if it was not written at the time.
Refusals are recorded too
A record of what Anthid accepted is only half of what a supervisory review asks for. The other half is what it stopped. Submissions refused by your controls, by an entitlement, or by authorization are written to their own append-only stream with the same attribution and the submission exactly as it arrived. A controls refusal carries the specific limits that triggered, which is the same detail the caller received. The record is written independently of the transaction the order would have used, so a refusal cannot be lost to the same rollback that discarded the order.What this lets you answer
Put the pieces together and the awkward questions get short answers. The broker never responded. The intent exists, its actions are recorded, and its dispatch state says how far the platform got. Nothing about the instruction depends on the broker having spoken. Two systems trade the same account and one of them placed something it should not have. The credential on the action says which one. The client reference says which run. An order was amended and nobody remembers what it originally said. The action chain holds every version in sequence. A limit blocked an order last Tuesday and someone wants to know why. The refusal record names the controls that fired, and the control change stream says who set them and when. A regulator asks two years from now. The instruction stream is retained for six years, with the attribution intact. See Compliance for the full retention model.Why this makes the broker a setting
The same separation is what keeps the layer broker-agnostic. An intent is expressed in Anthid’s own terms and recorded that way. It is translated into a broker’s dialect only at routing time, which is after the record exists. So the instruction reads the same whether it goes to Alpaca or Lightspeed, and the record of it does not change when the account behind it does.Intents
The model in detail: intents, actions, dispatch, and outcome.
Compliance
What is recorded, how it is protected, and how long it is kept.