---
title: "Retry a run"
description: "Only a run that failed or was stopped."
canonical: "https://grid82.com/docs/app-api/my/workflows-runs-retry"
updated: "2026-11-13"
---

# Retry a run

`POST https://your-suite.grid82.app/your-app/v1/workflow-runs/{runId}/retry`

Only a run that failed or was stopped.

> **Note: Generic contract**
>
> Your own version of this operation, with your tables and the fields you can read, is in
> your app's document: `https://{suite}.grid82.app/{app}/v1/openapi.json`, behind your credential.
> [Why each person gets their own](/docs/start/studio-and-runtime#why-an-app-has-an-api-of-its-own).

It restarts at the step that did not finish: every step before it keeps its saved result and does not run again. `from` names that step; null means the run restarted from the beginning, where the steps before it run again, except record writes, which return the record they wrote the first time. Use it after fixing the data or the roles, not for a code error (save and activate a new version).

Requires the scopes `workflows:write`, `records:read`, `records:write`, `schema:read`. Operation `my.workflows.runs.retry`. MCP tool `my_workflows_runs_retry`. CLI: `grid82 my workflows runs retry` (`npx grid82`).

## Path parameters

| Name    | Type   | Required | Description |
| ------- | ------ | -------- | ----------- |
| `runId` | string | yes      |             |

## Headers

| Name              | Type   | Required | Description                                                                                                                                                                                                                                                        |
| ----------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Idempotency-Key` | string | no       | Any unique string. Sending the same key with the same request again returns the first response (marked `Idempotency-Replayed: true`) instead of running it twice. Reusing it for a different request is refused with 409. Kept for 24 hours. Up to 255 characters. |

**Authorizations**

- `Authorization` (bearer, in header, required)

## Response

**200**: Success

- `data` (`object`, required)
- `data.runId` (`string`, required)
- `data.from` (`string,null`, required)

```json
{
  "data": {
    "runId": "<string>",
    "from": null
  }
}
```

**4XX**: Refused

- `error` (`object`, required)
- `error.code` (`enum<string>`, required, one of: `not_found, forbidden, unauthenticated, validation_failed, conflict, rate_limited, payment_required, not_implemented, internal`)
- `error.message` (`string`, required)
- `error.details` (`Record<string, unknown>`)

```json
{
  "error": {
    "code": "not_found",
    "message": "<string>",
    "details": {}
  }
}
```

**Example request**

```bash
curl --request POST \
  --url 'https://your-suite.grid82.app/your-app/v1/workflow-runs/<runId>/retry' \
  --header 'Authorization: Bearer <token>'
```
