# Re-run a job

> Run a finished workflow run again, as a new attempt: every job, with failed_only the jobs that did not succeed, or with job one job (by its id in the latest attempt); each with the jobs that need them.

<div class="g1t-endpoint"><span class="g1t-method" data-method="post">POST</span><code>/repos/{owner}/{name}/actions/jobs/{job}/rerun</code></div>

`debug` (or GitHub's `enable_debug_logging`) runs the attempt with debug logging. The attempt before is kept, with its jobs' logs. Needs the Write role or higher.

Runs the job again with every job that needs it, as a new attempt; the rest keep how they ended. A job of a matrix runs again with the rest of its matrix, and a job of a called workflow with the job that calls it. The run must have finished.

- **Authentication:** Required. Send an [access token](/reference/api/#authentication) as `Authorization: Bearer`.
- **MCP tool:** [`workflow`](/reference/mcp/#workflow) with `action` `rerun`, and the same inputs
- **Scope:** An access token needs [`workflows:write`](/guides/authentication/#scopes).
- **Also at:** [`POST /repos/{owner}/{name}/actions/runs/{id}/rerun`](/reference/api/actions/rerun-workflow-run/), [`POST /repos/{owner}/{name}/actions/runs/{id}/rerun-failed-jobs`](/reference/api/actions/rerun-failed-jobs/)

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `owner` | string | Yes | The workspace that owns the repository. |
| `name` | string | Yes | The repository's name. |
| `job` | string | Yes | One job to run again, by its id in the latest attempt, with the jobs that need it. |

## Body parameters

Send a JSON object. Names are `snake_case`, as in responses; the `camelCase` spelling is accepted too.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | No | The run's id. Not needed with `job`. |
| `failed_only` | boolean | No | Only the jobs that did not succeed, and those that need them. |
| `debug` | boolean | No | Run the new attempt with debug logging: RUNNER_DEBUG=1, and ACTIONS_STEP_DEBUG and ACTIONS_RUNNER_DEBUG set to true. |
| `enable_debug_logging` | boolean | No | The same as `debug`, by GitHub's name for it. |

## Example request

```sh
curl -X POST https://api.g1t.sh/repos/flagon-io/hello/actions/jobs/job_01kpx7b3d0e4f8g2h6j0k4m8ns/rerun \
  -H "Authorization: Bearer $G1T_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "enable_debug_logging": true
  }'
```

## Example response

A successful request answers `200` with:

```json
{
  "id": "run_01kpx7b3c6d9e2f5g8h1j4k7mr",
  "workflow_id": "wfl_01kpw2c5d8e1f4g7h0j3k6m9np",
  "path": ".g1t/workflows/ci.yml",
  "name": "CI",
  "title": "Greeting should name the caller",
  "number": 12,
  "attempt": 2,
  "event": "push",
  "ref": "refs/heads/main",
  "sha": "9f2c4e1a7b3d5f60812a4c6e8b0d2f4a6c8e0b13",
  "pull": null,
  "status": "queued",
  "conclusion": null,
  "error": null,
  "actor": "syntaqx",
  "created_at": "2026-10-04T15:42:07.318Z",
  "started_at": null,
  "finished_at": null
}
```

## Errors

A failed request answers with one of these statuses and a body like `{"error": {"code": "not_found", "message": "Repository not found."}}`. See [errors](/reference/api/#errors).

| Status | Code | When |
| --- | --- | --- |
| 401 | `unauthenticated` | A token is required, or the one sent is not valid. |
| 403 | `forbidden` | The token is valid but not allowed to do this, such as a member-only change or an agent token outside its repository. |
| 404 | `not_found` | It does not exist, or you cannot see it. |
| 409 | `conflict` | The request conflicts with the current state. |
| 422 | `invalid` | The input is not valid. `message` says which field and why. |
