> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stateset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retry Job V1

> Re-queue a failed or cancelled job with the same params. Creates a NEW job record (new id, new idempotency key namespace) so the original run remains intact…

Re-queue a failed or cancelled job with the same params.

Creates a NEW job record (new id, new idempotency key namespace) so
the original run remains intact for audit. The retry inherits the
source job's `template`, `params`, and `agent_mode`, then enters the
queue identically to a `/trigger` call.

Only `failed` and `cancelled` jobs can be retried; in-flight or
already-succeeded jobs return 409.

**Idempotency.** Pass an `Idempotency-Key` header to make the retry
replay-safe: a duplicate POST returns the original retry's job id and
sets `Idempotency-Replayed: true` rather than queueing a second run.
The key is namespaced per source job, so the same key is reusable
across different source jobs without collision.

### Path parameters

<ParamField path="job_id" type="string (uuid)" required />

### Response

`TriggerResponse`

<ResponseField name="job_id" type="string" required>
  UUID of the queued job. Use it for subsequent /jobs/:id calls.
</ResponseField>

<ResponseField name="status" type="string" required>
  Initial job status — usually 'queued'. Replays of an idempotent request return the existing job's current status.
</ResponseField>

### Status codes

| Code  | Meaning             |
| ----- | ------------------- |
| `200` | Successful Response |
| `422` | Validation Error    |

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url 'https://api.computer.stateset.app/api/v1/jobs/{job_id}/retry' \
    --header 'X-API-Key: YOUR_API_KEY'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "job_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "status": "pending"
  }
  ```
</ResponseExample>
