> ## 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.

# Duplicate Job V1

> Clone any job's params + template + agent_mode into a fresh queued run…

Clone any job's params + template + agent\_mode into a fresh queued run.

Difference from `/replay-as-new` (succeeded only) and `/retry`
(failed/cancelled only): this works for **any** source status
including `running` and `awaiting_approval`. Useful when you want to
fork an in-flight run rather than wait for it to terminate, or copy
a config from a long-lived sandbox session into a one-off task.

Source row is never modified; the new job is independent. Quota is
charged as a brand-new task.

**Idempotency.** Pass an `Idempotency-Key` header to make the
duplicate replay-safe: a retried POST returns the original
duplicate's job id with `Idempotency-Replayed: true` instead of
creating another. The key is namespaced per source job so the same
caller key can be reused across different sources 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}/duplicate' \
    --header 'X-API-Key: YOUR_API_KEY'
  ```
</RequestExample>

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