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

# Get a signature request

> GET /v1/signatures/:id — poll status, signed-document URL, and certificate for one request.

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

Poll a single signature request for its current status and, once available, the signed-document URL
and completion certificate.

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

## Response

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

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

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

<ResponseField name="status" type="string">See the status lifecycle below.</ResponseField>
<ResponseField name="recipients" type="object[]">May include per-recipient `signedAt` / `declinedAt` once those events arrive.</ResponseField>

<ResponseField name="expirationHours" type="number | null" />

<ResponseField name="signedDownloadUrl" type="string | null">Authenticated download URL; `null` until the document is archived.</ResponseField>
<ResponseField name="certificateUrl" type="string | null">Authenticated completion-certificate / audit-trail URL (`/v1/signatures/{id}/certificate`); `null` until available.</ResponseField>

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

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

<ResponseField name="completedAt" type="string | null">Set when the request completes.</ResponseField>

### Status lifecycle

| Status      | Meaning                                                         |
| ----------- | --------------------------------------------------------------- |
| `sent`      | Request created; the signature service emailed the recipients.  |
| `viewed`    | A recipient opened the signing UI.                              |
| `declined`  | A recipient declined to sign (terminal).                        |
| `expired`   | The request passed its expiration window (terminal).            |
| `cancelled` | The request was cancelled (terminal).                           |
| `completed` | All recipients signed and the document is finalized (terminal). |
| `failed`    | Processing failed (terminal).                                   |

Recipient-level signing arrives as a `signature.signed` webhook (and per-recipient `signedAt`
timestamps) without moving the top-level `status`. On `completed`, Craftkit archives the signed PDF
and populates `signedDownloadUrl` and `certificateUrl`.

## Errors

| Status | code           | Meaning                                          |
| ------ | -------------- | ------------------------------------------------ |
| 401    | `unauthorized` | Missing/invalid/revoked key.                     |
| 404    | `not_found`    | No such signature request in this key's project. |

```bash cURL theme={null}
curl https://api.craftkit.dev/v1/signatures/$SIGNATURE_ID \
  -H "Authorization: Bearer $CRAFTKIT_API_KEY"
```

```json 200 theme={null}
{
  "id": "0193c2c3-2222-7aaa-8bbb-000000000002",
  "renderId": "0193c2c3-1111-7aaa-8bbb-000000000001",
  "name": "Charter handover — BK-12345",
  "status": "completed",
  "recipients": [
    {
      "id": "rcp_8e10-12ab34cd56ef",
      "firstName": "Jane",
      "lastName": "Doe",
      "email": "jane@example.com",
      "designation": "Signer",
      "order": 1,
      "signedAt": "2026-06-05T11:40:00.000Z"
    }
  ],
  "expirationHours": 168,
  "signedDownloadUrl": "https://api.craftkit.dev/v1/signatures/0193c2c3-2222-7aaa-8bbb-000000000002/download",
  "certificateUrl": "https://api.craftkit.dev/v1/signatures/0193c2c3-2222-7aaa-8bbb-000000000002/certificate",
  "errorMessage": null,
  "createdAt": "2026-06-05T10:00:00.000Z",
  "completedAt": "2026-06-05T11:42:08.000Z"
}
```
