Failed Sume job: read category, retryable and next_action first

Failed jobs expose public error metadata: category, stage, retryable, retry-after, reason and next action. Map each category to retry, fix or stop.

5 min readSume
All posts

A failed Sume job carries public error metadata: category, stage, retryability, retry-after seconds, a public reason and a next action. Read those before deciding to retry. Validation and quota failures need a fix on your side, while queue, unavailable and timeout failures are candidates to retry later with the same idempotency key.

Where to read it

GET /v1/jobs/{id} returns the job record with its error. GET /v1/jobs/{id}/result is only for completed jobs and answers 409 job_not_completed for others, so do not read failures from it. On /v1/videos, the poll response's error is the same public remap. Provider payloads are never exposed as public fields.

Category to action

The errors guide lists the common categories and their typical next action.

Use the table as a default policy, then let retryable and retry-after override it.

CategoryTypical next actionRetry?
validationCorrect the inputNo
authCheck the API key and workspace accessNo
quotaAdd funds or reduce the costNo
queueRetry later, same idempotency keyYes
generation_unavailableRetry laterYes
generation_rejectedRead events and fix the unsupported inputNo
generation_timeoutPoll status or retry laterYes
worker_timeoutPoll status or retry laterYes
internalRead events and contact support with the job idNo

A small decision function

Treat the server's retryable flag as the first signal and fall back to the category.

const RETRY = new Set([
  'queue', 'generation_unavailable', 'generation_timeout',
  'worker_timeout', 'runtime_unavailable',
]);
export function shouldRetry(err) {
  if (typeof err.retryable === 'boolean') return err.retryable;
  return RETRY.has(err.category);
}

Retrying without double billing

Resubmit with the same Idempotency-Key only when the body is identical. If you changed the prompt or inputs, that is a new intent and needs a new key. Failed and canceled image generations are not charged, and the job events (job.failed, webhook.delivery) give a public timeline when you need to debug.

Related posts

More in Developers

All Developers posts

Written by Sume