---
title: "Upload a document"
method: POST
path: "/documents"
tags: ["Signing Requests"]
---

# Upload a document

`POST /documents`

Request a presigned upload URL for a document. Upload the file directly to the returned URL, then pass the document_id when creating a signing request. Use this for documents larger than 5MB that exceed the inline base64 request size limit.

## Request body

- object
  - `file_name` string, required — Name of the document file
  - `file_size` integer, required — File size in bytes. Maximum 50MB (52,428,800 bytes).
  - `content_type` 'application/pdf' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', required — MIME type of the document

## Response `201`

Upload URL created

- object
  - `document_id` string, uuid — Document ID to pass in the signing request
  - `upload_url` string, uri — Presigned URL to PUT the document file to. Send the raw file bytes with Content-Type matching the requested content_type.
  - `upload_token` string — Upload authentication token (included in the upload_url)
  - `expires_in` integer — Seconds until the upload URL expires

## Other responses

- `400` — Validation error (invalid file_size, content_type, etc.)
- `401` — Invalid or missing API key

---

[API](https://skmtc.dev/firma/apis/firma-partner-api.md) · [All operations](https://skmtc.dev/firma/apis/firma-partner-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/firma/firma-partner-api/revisions/5c03d6a9d080/schema)
