---
title: Cancel and replay requests
description: Cancel active durable delivery work or create a new request from a completed request through the HTTP API.
---

Cancellation and replay are actions on request resources. Neither action deletes or mutates completed attempt history.

## Cancel a request

```http
POST https://api.stormedo.com/requests/{request_id}/cancel
```

```bash
curl --request POST \
  'https://api.stormedo.com/requests/req_33uZSQsVaf8aZjDuzkuAq/cancel' \
  --header "Authorization: Bearer $STORMEDO_TOKEN"
```

An accepted durable cancellation returns `202 Accepted`:

```json
{
  "success": true,
  "data": {
    "id": "req_33uZSQsVaf8aZjDuzkuAq",
    "status": "cancellation_requested"
  },
  "error": null,
  "meta": null,
  "request_id": "95c07a5c-3d44-4b89-84a6-c5a71313bff2"
}
```

If the request is already cancelled, the endpoint returns `200 OK` with `status: "cancelled"`.

Cancellation stops a scheduled wait or later retry after the durable workflow observes the signal. An HTTP attempt already in flight may still finish. Requests that already succeeded or failed return `409 Conflict`.

## Replay a request

```http
POST https://api.stormedo.com/requests/{request_id}/replay
```

Replay accepts an optional `Idempotency-Key` header containing 1 to 255 bytes.

```bash
curl --request POST \
  'https://api.stormedo.com/requests/req_33uZSQsVaf8aZjDuzkuAq/replay' \
  --header "Authorization: Bearer $STORMEDO_TOKEN"
```

Stormedo returns `202 Accepted` with a new request:

```json
{
  "success": true,
  "data": {
    "id": "req_45vATRtWbg9bAkEv0lvBr",
    "project_id": "prj_2Z5mQe7cB9kP4sV8xH1nD",
    "replayed_from_request_id": "req_33uZSQsVaf8aZjDuzkuAq",
    "status": "queued",
    "scheduled_at": null,
    "created_at": "2026-08-28T11:15:30Z"
  },
  "error": null,
  "meta": null,
  "request_id": "67d18b7c-5f3e-4a58-b748-40b555c8d9a1"
}
```

Replay copies the destination, method, headers, body, content type, retry configuration, timeout, queue, and metadata. It does not copy the original delivery time or recurring schedule ownership. The new request begins immediately with a fresh attempt budget.

Only completed or cancelled requests can be replayed. Active requests return `409 Conflict`.

## Errors

| Status | When it occurs |
| --- | --- |
| `401` | The project API key is missing or invalid. |
| `404` | The request does not exist in the API key project. |
| `409` | Cancellation targets a completed request, replay targets an active request, or an idempotency key conflicts. |
| `422` | A replayed stored definition no longer satisfies current delivery validation. |
| `429` | Replay would exceed the workspace monthly request allowance. |
| `502` or `503` | Stormedo could not durably accept the action. |
