---
title: "Upload a KYC document"
method: POST
path: "/v1/phone-numbers/kyc/upload-document"
tags: ["Phone Numbers"]
---

# Upload a KYC document

`POST /v1/phone-numbers/kyc/upload-document`

Upload ONE document and get back its provider document id, to reference
from POST /v1/phone-numbers/kyc via `documents[].documentId`.
Send the RAW file bytes as the request body (not base64); put the filename
in the `X-Filename` header. Uploading documents one-per-request keeps each
request under the ~4.5MB body limit. The document streams straight to the
number provider and is not stored by Zernio.

## Headers

- `X-Filename` string, required

## Response `200`

Document uploaded.

- object
  - `documentId` string — Reference this id in the KYC submit's documents[].documentId.

## Other responses

- `400` — Missing X-Filename, empty body, or file too large (over 20MB).
- `401` — Unauthorized

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/f81ca70ea6b9/schema)
