---
title: "Submit a document for signing and create a signing process."
method: POST
path: "/epost/signing/processes"
tags: ["ePost Sign"]
---

# Submit a document for signing and create a signing process.

`POST /epost/signing/processes`

## Request

- Base URL: `https://api.klara.ch`
- URL: `https://api.klara.ch/epost/signing/processes`
- Auth: one of:
  - API key in header `X-API-KEY`
  - HTTP bearer

Submits exactly ONE document to be signed and creates a signing process. Uses <code>multipart/form-data</code> analogous to <code>POST /epost/v2/deliveries</code>: a <code>file</code> part (the PDF) and a <code>metadata</code> JSON part (<code>SigningProcessCreateRequest</code>). The document is stored, a slot per participant is created, and the signature document is made available to each participant in the signing room. Participants without an ePost account receive a forced-onboarding email when <code>forceOnboarding = true</code> AND the credential is an email address (onboarded users can complete only <code>SES</code>). Returns the created process id and its initial status; full details via <code>GET /signing/processes/{processId}</code>. Access requires the ePost Sign widget subscription. Billing a signing to a company requires the <code>DOCUMENT_SIGN_BILLING</code> company role in the KLARA web client role system on the paying company.

## Headers

- `Idempotency-Key` string

## Response `202`

Signing process accepted and created.

- SigningProcessCreated
  - `processId` string, uuid: Server-assigned unique identifier of the signing process.
  - `status` object: Initial lifecycle status of the process.

## Other responses

- `400`: Data invalid<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `401`: No Authorization header found or invalid token<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `403`: ePost Sign widget not subscribed, or caller lacks the <code>DOCUMENT_SIGN_BILLING</code> role on the requested billing company.<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `411`: <code>Content-Length</code> header missing, blank, malformed or negative (chunked transfer encoding is not supported on this endpoint).<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `413`: Request body exceeds the 200 MB upload ceiling.<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `422`: Validation failed on the metadata part.<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `429`: API rate limit exceeded<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.
- `500`: Something went wrong on our side while processing the request. Please kindly contact our support.<br/><br/>Failures detected by a downstream service carry that service's own <code>code</code>, which this reference does not enumerate, so the <code>code</code> field may hold a value not documented here. Treat an unrecognised code as a generic failure of the status it arrives with, and do not branch on a code this reference does not list.

---

[API](https://skmtc.dev/klara/apis/klara-public-api.md) · [All operations](https://skmtc.dev/klara/apis/klara-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/klara/apis/klara-public-api/revisions/490b1a879fc2?raw)
