Start an agent run
Starts an agent on a set of files and returns the run.
Files take the usual two shapes: { "url": "…" } registers the file and fetches it, { "id": "…" } reuses one you already registered with POST /v1/files. Files you pass by URL join your reusable corpus, so a long-running agent never loses its inputs.
Waiting for the result. The call holds open up to ?wait= seconds (default 60, max 120, 0 returns immediately) and releases early the moment the run either finishes or blocks on a person.
The 202 is a graceful degrade, never an error — poll the run; the run id is yours from this response on either way.
A queued run is not working yet: its files are still being prepared, which for scanned documents or long audio can take minutes, and reading the run is what picks it up once they are ready. So a queued run has to be polled — waiting on a webhook instead leaves it queued, because a run that has not started has nothing to report. Once it is running, its events are delivered as they happen.
Agent runs are long-lived: one blocked on a person waits days, up to the expiresAt on the run (about seven days), after which an unfinished run parks itself for good. Its files, and anything it already filed, are never taken back. Replaying an idempotency-key returns the original run alongside an idempotent-replay: true response header.
Learn more: Agents guide
Authentication
Bearer authentication of the form Bearer <token>, where token is your auth token.
Headers
Query parameters
How many seconds to hold the request open. Releases early the moment the run finishes or blocks on a person. Maximum 120; 0 returns immediately.
Request
Arbitrary JSON you attach to the run and get back on every read of it.
Use it to carry your own identifiers — an order number, a customer id — so a webhook or a polled run reconciles without a lookup table. Capped at 10 KB serialized.
Where to deliver this run's events, given one of two ways.
{ "url": "…" }— a one-off https endpoint for this run only.{ "id": "whe_…" }— a saved endpoint fromPOST /v1/webhooks. Runs hold the reference, so pausing or re-pointing that endpoint applies to this run too.
Deliveries are at-least-once and signed — dedupe on eventId and verify against GET /v1/webhooks/jwks.json.
Response headers
true when this response replays an earlier request.
Response
Where the agent run is in its life.
completed, failed, cancelled and expired are terminal. A completed run that still had outstanding work also carries incomplete: true.
The run’s deadline: about seven days after it starts, an unfinished run parks itself for good and its status becomes expired. null once the run is finished. Files and anything the run already filed are never taken back.
What is blocking the run. Present while status is waiting.
Why the run parked. Present while status is paused. A paused run keeps everything it produced and can be started again.
Sign-offs the run is waiting on, oldest first.
Present and true on a completed run that still had outstanding work — read tasks[] to see what.
Why the run failed. Present whenever status is failed.