paused. Continuing it with background=true flips the same job back to queued, merges your confirmations into its payload, and lets whichever replica claims it finish the run. Kill the server after the 202 and restart it: the continuation still runs.
Flow
1
Submit
2
Poll until PAUSED
status: "PAUSED" and a tools array with the pending delete_temp_files call. The job is paused too: GET /queue/jobs/{run_id} shows status: "paused".3
Continue through the queue
Set
confirmed: true on the tool entry and send it back with background=true:4
Poll to completion
The same poll URL returns
COMPLETED. GET /queue/jobs/{run_id} shows status: "completed", attempt: 2, max_attempts: 2./teams/{team_id}/runs/{run_id}/continue with requirements; workflows use /workflows/{workflow_id}/runs/{run_id}/continue with step_requirements. The queue semantics are identical.
Job lifecycle
There is one row per run. Poll, resume, cancel, and idempotency all key on the original
run_id across any number of pause and continue cycles. A continuation gets exactly one execution regardless of max_attempts. A continuation that crashes is marked failed and re-driven with requeue, which replays the same confirmations.
Responses
Why inline continues are refused
A job inpaused, queued, or running owns its run’s continuation. Every other continue path (inline sync, inline SSE, MCP, AG-UI, Slack) refuses with 409. Without that rule, an inline continue could validate against the run row while a durable continue validated against the job, and both could pass before either persisted. An approved tool would then execute twice. If the job cannot be looked up at all, the request fails with 503 instead of proceeding unverified.
Runs that never rode the queue, and fork or regenerate requests (which mint a new run), are unaffected.
Cancel and retention
Paused jobs are exempt from retention. A paused run is waiting for a person, and there is no bound on how long that takes, so the job is never removed on age. An abandoned paused run persists until it is cancelled:cancelled and the run row to CANCELLED. A later continue gets 409 instead of resurrecting the run.
With
serialize_sessions=True (the default), a paused run also holds its session’s line. Later submissions to the same session wait until the paused run is continued or cancelled. See Session serialization.Streaming continuations
If the original submission usedstream=true, continue with stream=true and background=true to receive an SSE tail of the post-approval events. Earlier events belong to /resume. Event indices keep increasing across the pause, so a client that resumes with its last index does not replay pre-approval history.