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

# Cancel a signature request

> POST /v1/signatures/:id/cancel — cancel an in-flight signature request.

<Info>**POST** `https://api.craftkit.dev/v1/signatures/:id/cancel`</Info>

Cancels an in-flight request with the signature service and marks it `cancelled`. Rejected with `409`
when the request is already in a terminal state (`completed`, `declined`, `expired`, `cancelled`, or
`failed`).

## Authorization

<ParamField header="Authorization" type="string" required>
  `Bearer ck_live_…` — a project API key.
</ParamField>

## Path parameters

<ParamField path="id" type="string" required>The signature request id (UUID).</ParamField>

## Body

The body is optional — an empty body is accepted.

<ParamField body="reason" type="string">
  Cancellation reason (≤500 chars). Stored on the request as `errorMessage`.
</ParamField>

## Response

The updated signature request (same shape as the [create](/api-reference/create-signature)
response), now with `status: "cancelled"`.

<ResponseField name="id" type="string" />

<ResponseField name="status" type="string">`cancelled` after a successful cancel.</ResponseField>
<ResponseField name="errorMessage" type="string | null">The supplied `reason`, if any.</ResponseField>

<ResponseField name="completedAt" type="string | null" />

## Errors

| Status | code                       | Meaning                                              |
| ------ | -------------------------- | ---------------------------------------------------- |
| 400    | `invalid_json`             | Body is not valid JSON.                              |
| 400    | `invalid_request`          | Body failed schema validation (`issues` included).   |
| 401    | `unauthorized`             | Missing/invalid/revoked key.                         |
| 404    | `not_found`                | No such signature request in this key's project.     |
| 409    | `conflict`                 | Request is already terminal and cannot be cancelled. |
| 502    | `signature_provider_error` | The signature service failed to cancel the request.  |

```bash cURL theme={null}
curl -X POST https://api.craftkit.dev/v1/signatures/$SIGNATURE_ID/cancel \
  -H "Authorization: Bearer $CRAFTKIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Customer changed the terms" }'
```

```json 200 theme={null}
{
  "id": "0193c2c3-2222-7aaa-8bbb-000000000002",
  "renderId": "0193c2c3-1111-7aaa-8bbb-000000000001",
  "name": "Charter handover — BK-12345",
  "status": "cancelled",
  "recipients": [],
  "expirationHours": 168,
  "signedDownloadUrl": null,
  "certificateUrl": null,
  "errorMessage": "Customer changed the terms",
  "createdAt": "2026-06-05T10:00:00.000Z",
  "completedAt": null
}
```
