Skip to content

Requests

Serverless › Requests tracks every async request in the workspace (async images, image edits, all videos) — including the exact failure cause, which the sync path can’t always give you. Sync calls return their result directly and don’t appear here.

queued ──▶ running ──▶ succeeded
│ ├▶ failed
└──────────────── ▶ canceled
  • Every accepted request terminates. Even if a worker dies mid-job, a sweeper resolves it to failed/canceled — nothing stays stuck.
  • Execution timeouts: image > 5 min, video > 30 min → model_timeout.
  • The three terminal states map 1:1 to webhook events.
  • Newest first; filters: status × modality; rows show id, status, modality, model, created/finished time.
  • Same data over the API: GET /v1/requests?status=...&limit=... (reference).
FieldNotes
statusSee lifecycle above
output_object_key / output_bucketWhere the result landed (storage)
output_urlsPresigned links — only when succeeded, valid ~1 hour; re-open for fresh ones
error_code / error_messageSet when failed — table below
queued_at / started_at / completed_atTimestamps
error_codeMeaningWhat to do
vram_exceededJob exceeded GPU memorySmaller size/steps, a more quantized model, or raise the deployment’s price cap
model_timeoutNo result within budget (image 5 min / video 30 min)Retry; reduce job size if persistent
pod_crashWorker ran out of host memoryContact support
storage_upload_failedCouldn’t write to your output bucketRe-verify the credential under Settings → Integrations
  • Only queued requests can be canceled — row button or POST /v1/requests/{id}/cancel.
  • Once running, the GPU is committed: cancel attempts return 409 with the current status.
  • A successful cancel is terminal (canceled) and fires request.canceled.
  • Nothing to refund either way — billing is the deployment’s GPU-hours, not request counts.

Workspace members only — other workspaces’ request ids return 403/404.