409 job_not_completed: why the result call fails and what to poll

GET /v1/jobs/:id/result answers 409 job_not_completed until the job completes. Poll status for terminal, read failures from the job record, and never resubmit.

4 min readSume
All posts

409 job_not_completed means you asked for GET /v1/jobs/:id/result before the job finished, or after it failed. The result route is only for completed jobs. Poll GET /v1/jobs/:id/status until terminal is true, then fetch the result only if sume_status is completed.

This follows the Jobs and results docs, read 2026-09-29.

Which statuses are terminal?

Sume job statuses, from the Jobs and results docs, read 2026-09-29.
StatusMeaningTerminal
queuedAccepted, waiting to runNo
processingRunning or being finalizedNo
completedResult is readyYes
failedTerminal failure with a public errorYes
canceledCancellation requested and terminalYes

What should the polling loop do?

Poll on the booleans terminal and result_ready, or on sume_status. Honor next_poll_after_seconds when present and back off exponentially otherwise. Stop on completed, failed or canceled.

A failed or canceled job has no result to fetch, so read the failure from the job record with GET /v1/jobs/:id (the error is on job.error) instead of the result route.

curl https://api.sume.com/v1/jobs/job_123/status \
  -H "Authorization: Bearer $SUME_API_KEY"
# when "result_ready": true
curl https://api.sume.com/v1/jobs/job_123/result \
  -H "Authorization: Bearer $SUME_API_KEY"

Should I resubmit if my client times out?

No. A 2xx on submit means the job exists and paid work is in flight. In sync mode the wait is at most 30 seconds; if it ends before a terminal state, keep polling. If you must retry the submit itself, reuse the same Idempotency-Key so you get the original job back and are not billed twice.

Does this hold over MCP?

Yes in spirit: jobs_wait holds at most about 55 seconds per call, and on wait_slice_expired you call it again with the same ids rather than resubmitting. A 524, 522, 523 or 525 on jobs_wait is a transport failure, not a job outcome.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume