---
title: Jobs and lifecycle
description: The states a job moves through and what each one means.
---
A job is the record of one generation. Its id (`job_...`) is returned by the submit call and is the key for status, result, cancel and webhooks. Store it as soon as the submit returns.

## States

| `sume_status` | `status` | Terminal | Meaning |
|---|---|---|---|
| `queued` | `IN_QUEUE` | No | Accepted and waiting for a worker. |
| `processing` | `IN_PROGRESS` | No | A worker has started the model. |
| `completed` | `COMPLETED` | Yes | `result.artifacts` holds the output. |
| `failed` | `FAILED` | Yes | `error` says why. The reserved price is refunded. |
| `canceled` | `CANCELED` | Yes | Canceled before generation started. Refunded. |

The status endpoint returns both spellings: `sume_status` in lower case and `status` in the queue style some SDKs expect. They always agree.

## What the status tells you to do

Each status response has `next_action`:

| `next_action` | Do this |
|---|---|
| `poll_status` | Wait `next_poll_after_seconds`, then poll again. |
| `fetch_result` | Read `result_url`. |
| `inspect_events` | The job ended without a result. Read `error` on the job, or its events. |

## Outputs

Artifacts live on `media.sume.com` and are readable by anyone with the link (`visibility: "public_by_link"`). Copy them to your own storage if you need to control access.

## Canceling

A job can be canceled only before generation starts. The status response says whether that is still possible (`cancelable`, `cancel_url`). Many models start within a second, so most jobs are no longer cancelable by the time you look. See [Cancel a job](/docs/reference/jobs/cancel).

## Who can read a job

A job belongs to the workspace of the key that made it, and it shows up in that workspace's dashboard. A job id from another workspace answers `404 not_found`.
