API essentials

Events

The journal and the stream carry one shape. On the stream, id is the journal seq, event is the type below, and data is a { delivery, seq, payload } frame; resume with Last-Event-ID or ?cursor=.

  • run.started — Opens a new run: the engine admitted it and is about to process the input, whether an ordinary turn or an automation firing. Emitted once, at admission — a run resumed after an approval does not get a second one. run.ended closes what this event opened.
  • run.ended — The run stopped occupying its execution slot: completed or failed once the model finished, aborted when stopped early, or paused while an approval is pending. Carries token usage and cost once known, and the failure message when it failed. A paused run resumes without a fresh run.started.
  • agent.entry — One durable message in the conversation: the user's message, the assistant's completed reply, or a tool's display text once it resolves. Streaming assistant text arrives first as agent.text_delta and lands here only when the turn completes.
  • agent.text_delta — A chunk of the assistant's reply while it is still generating. Delivered live only — never written to the durable journal or replayed on reconnect — and superseded by the complete text in the agent.entry that follows.
  • tool.call — The assistant asked to call a tool. Emitted once the call is committed to the conversation, before it runs; approval.opened follows if a human must decide first, otherwise the call proceeds straight to tool.result.
  • tool.result — One tool call resolved: outcome says what happened (completed, denied, parked for approval, or failed). Immediately followed by an agent.entry (role tool) carrying that outcome's own display text.
  • approval.opened — A tool call is parked, waiting on a human decision. Carries the terms the approval card renders: the call's input, a summary, and the authorization contract in effect, if any. approval.decided or approval.expired closes it.
  • approval.decided — The user, or a partner integration, approved or denied a parked approval. approve says which way; a denial may carry reason. Consuming the decision to execute the tool follows as approval.consumed, but only when the decision was an approval — a denial never reaches consumption.
  • approval.consumed — The approval was spent to authorize its tool call, immediately before that call runs. This is when the call is authorized, not when it finishes: the call can still fail after this event lands, and nothing here rolls it back. Marks the approval used; it cannot authorize a second execution.
  • approval.expired — A parked approval lapsed before anyone decided: its deadline passed, or the run it belongs to stopped while it was still pending.
  • automation.fired — An automation triggered this conversation's run. Emitted once, immediately before the run.started it precedes, naming the automation and its name at fire time.
  • intents.settlement — A later, independently verified financial fact about one leg of an authorized swap — settled, refunded, or never executed — never inferred from the model's own tool result. Appended whenever the provider confirms the outcome, independent of the run that requested it; legId and operationId join it back to its financial request, progress and authorizing approval. Archived receipts retain their original occurrenceId.
  • intents.progress — Best-effort, display-only progress for an authorized swap, between approval and its settlement receipt: freezing the plan (planning), the frozen legs (planned), then each leg's own stage (stage). Never gates execution and may arrive out of order or not at all; an intents.settlement receipt always takes precedence, and a terminal outcome is never reported here.
Fin documentation Built from the API contract · v1

Search all documentation