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

# Download the signed PDF

> GET /v1/signatures/:id/download — stream the archived, signed PDF (authenticated only).

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

Streams the archived signed PDF. The signed document is a sensitive legal artifact, so it is served
**only** through the authenticated API (streamed from storage) — it is never reachable from a public
bucket URL or a provider-hosted link. Returns `409` until the document has been archived (until
`signedDownloadUrl` is non-null on the request).

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

On success, the signed PDF bytes with `Content-Type: application/pdf`, served as an attachment named
`<id>-signed.pdf`.

<ResponseField name="(binary)" type="application/pdf">The signed PDF stream.</ResponseField>

## Errors

| Status | code           | Meaning                                                                             |
| ------ | -------------- | ----------------------------------------------------------------------------------- |
| 401    | `unauthorized` | Missing/invalid/revoked key.                                                        |
| 404    | `not_found`    | No such signature request in this key's project.                                    |
| 409    | `conflict`     | Signed document is not archived yet — poll status until `signedDownloadUrl` is set. |

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

```json 409 theme={null}
{
  "error": {
    "code": "conflict",
    "message": "Signed document is not available yet (status: sent)."
  }
}
```
