Documentation Index
Fetch the complete documentation index at: https://apidocs.scripe.io/llms.txt
Use this file to discover all available pages before exploring further.
not_cancellable
HTTP status: 409 Conflict
You called POST /v1/jobs/{jobId}/cancel on a job that is already
running, finished, failed, or cancelled.
Why running jobs aren’t cancellable
The worker pool processes a job to completion once it picks it up — it doesn’t poll for cancellation mid-run. Accepting a cancel on aRUNNING job would be a lie: the AI provider call would still bill,
the post would still be created, and the job would still flip to
DONE. Returning a hard 409 is honest.
A future revision (Phase 6) may add a cooperative cancellation hook on
the per-handler dispatch table. For now, only QUEUED jobs are
cancellable.
Common triggers
- Cancel called too late. The worker dequeue cadence is fast
(sub-second). If you submit and immediately cancel, the worker may
already have moved the row to
RUNNING. Add a small delay if the submit-cancel pattern is intentional (e.g. a user clicking “stop” immediately after submit). - Stale state on the client. You polled a
QUEUEDsnapshot but acted on it after the worker started. Re-fetchGET /v1/jobs/{jobId}and check status before retrying cancel. - The job already finished.
DONE,FAILED, andCANCELLEDare all terminal — there’s nothing left to cancel.
How to handle it
- Don’t retry the cancel. A retry will hit the same 409 every time.
- Re-fetch
GET /v1/jobs/{jobId}so your client UI reflects the actual state. - If you genuinely need to abort a running job, the workspace admin can manually neutralize the result — but the worker will still complete and bill.
Related
- Jobs — full lifecycle reference.
- Conventions — error envelope shape.