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

# Documents

> The documents each proprietor needs, and how they're checked.

Each proprietor needs three documents before a registration can be submitted:

| `kind` | What it is |
| - | - |
| `means_of_id` | The proprietor's paper NIN slip. CAC doesn't accept other IDs or the digital NIN slip. |
| `passport` | A clear, recent passport photograph of the proprietor. |
| `signature` | The proprietor's signature on plain paper. |
| `supporting_document` | Optional. A professional certificate, when a [name check](https://docs.fastcac.com/guides/name-checks.md) says `requires_certificate`. |

Upload each as multipart form data. Files can be up to 5 MB.

```bash theme={null}
curl https://api.fastcac.com/v1/registrations/$REG_ID/documents \
  -H "Authorization: Bearer $FASTCAC_KEY" \
  -F kind=passport -F proprietor=0 -F file=@passport.jpg
```

**kind** `string` *required*

`means_of_id`, `passport`, `signature` or `supporting_document`.

**proprietor** `integer` (default: 0)

The proprietor's index in `proprietors`.

**file** `file` *required*

The document, at most 5 MB.

```json Response (201) theme={null}
{
  "object": "document",
  "id": "doc_1f3vn4z6FzDYjcbdUYUVtK",
  "registration_id": "reg_5iLOZvP27DZ2zDQTjOzY1O",
  "proprietor": 0,
  "kind": "passport",
  "filename": "passport.jpg",
  "content_type": "image/jpeg",
  "size": 8,
  "status": "verified",
  "reason": null,
  "created_at": "2026-10-23T22:06:51Z"
}
```

Each upload is checked and comes back `verified` or `rejected` with a `reason`. A
`document.verified` or `document.rejected` webhook follows. To replace a document, upload another
of the same `kind`; the latest one counts.

```json Rejected (test mode, ?simulate=rejected) theme={null}
{
  "object": "document",
  "id": "doc_4WXZ9tOUBC1o9hp6qkLXnB",
  "registration_id": "reg_2G3HOP060V7RRGlHZcehtP",
  "proprietor": 0,
  "kind": "passport",
  "filename": "passport.jpg",
  "content_type": "image/jpeg",
  "size": 8,
  "status": "rejected",
  "reason": "The image is too blurred to read. Upload a clearer photo.",
  "created_at": "2026-10-23T22:06:51Z"
}
```

A registration can't be submitted until each proprietor's latest document of every required kind
is `verified`:

```json 400 theme={null}
{
  "error": {
    "type": "invalid_request_error",
    "code": "registration_incomplete",
    "message": "Still needed: proprietors[0].documents.passport, proprietors[0].documents.signature.",
    "param": "proprietors[0].documents.passport",
    "request_id": "req_Zz1mlZtOn3SbpYf5CW7K3nvy"
  }
}
```

List a registration's documents with `GET /v1/registrations/{id}/documents`.

| Error `code` | Meaning |
| - | - |
| `file_too_large` | Over 5 MB. |
| `file_empty` | The file has no content. |
| `registration_locked` | The registration isn't editable now. |
| `field_not_queried` | The registration is queried, and CAC didn't ask about this document. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.