List runs
limit max 200,
cursor opaque).
These runs are correctly scoped to your tenant. The run mirror carries a
company but not a tenant, so the route joins through the card to reach the tenant.
This matters because the older company-scoped ledger at
GET /v1/runs is not tenant-scoped: under
an operator key it returns every tenant’s runs regardless of which team or tenant
you asked about. Use this address, not that one.status is the run’s recorded outcome; where none is recorded it is ended if
the run has an end time and running if it does not. model is null on every
row — per-run model selection is a manifest field and no manifest is stored.
One run
summary, error, and two URLs:
stream_url is emitted even though the address refuses, because the URL is the
correct one and hiding it would make the shape change when the stream lands.
Check the status code, not the presence of the field.
404 not_found means no run with that id belongs to this tenant.
The paged transcript
source is always platform: these rows are written by the API from the runtime
mirror, never from a caller’s request body.
Streaming — refused, and why
Stopping a run — refused
POST /v1/companies/{id}/ceo/runs/{runId}/stop, which is the frozen surface and
keeps answering. See Orchestration.