Send document for signing
Send a document to signers for signing.
Request Body:
customMessage(optional) - Custom message to include in the signing invitation emails/SMS. Supports newline characters (\n) for line breaks. Available template variables (use{{variableName}}syntax):{{firstName}},{{lastName}},{{fullName}},{{recipientFirstName}},{{recipientLastName}},{{recipientFullName}},{{recipientEmail}},{{recipientPhone}},{{recipientCompanyName}},{{recipientCompanyRole}},{{recipientCompanyOrgNumber}},{{recipientRole}},{{senderFirstName}},{{senderLastName}},{{senderFullName}},{{senderEmail}},{{senderCompanyName}},{{documentName}},{{documentId}},{{documentValue}},{{documentCreatedDate}},{{expirationDate}},{{signUrl}}. Custom fields are available as{{custom.<field-slug>}}using the slugified field name (e.g. “Avtalsdatum (demo)” becomes{{custom.avtalsdatum-demo}}); secured fields are excluded.
Prerequisites:
- Document must have at least one signer added via
POST /documents/{id}/partiesor when creating the document - Each signer’s delivery method (
EMAIL,SMS, orNONE) and signature type (DRAWING,SE_BANKID,CLICK_TO_SIGN) are configured per-signer when adding them
Responses:
- 200 - The document is sent. Returns the document in the same shape as
GET /api/v1/documents/{id}, withoutfields. - 409 with
code: "APPROVAL_REQUIRED"- You lack theSEND_WITHOUT_APPROVALpermission, so the document needs an approval first. Request one withPOST /api/v1/approval-requests; the document is sent when it’s approved. - 409 with
code: "INVALID_STATE"- The document isn’t a draft, or its approval request is still pending.
Approved documents: A document whose approval request is APPROVED but that wasn’t sent automatically (autoSend false) stays PENDING_APPROVAL. The user who requested the approval sends it with this endpoint, and the invitation uses the message stored on the approval request.
What happens when you send:
- Document status changes from
DRAFTtoPENDING - sajn sends each party an invitation through the channels in its
delivery - A party with
delivery: []gets no invitation, so share its signing URL yourself
Authorizations
Personal API key, e.g. Authorization: Bearer sajn_sk_.... Not scope-limited — acts as the issuing user.
Headers
API version for this request. Without it, the request uses the organization's default version; an organization without a default is pinned to the latest version by its first request.
2026-09, 2026-10 ID of the workspace this request acts in, from GET /api/v1/workspaces. Without it, an API key acts in its default workspace. The token's user must be a member of the workspace; an OAuth token only accepts the workspace it was granted for. A workspace that doesn't exist or can't be reached returns 403 WORKSPACE_ACCESS_DENIED.
Makes retries safe. A retry with the same key and the same request replays the stored response for 24 hours (header Idempotent-Replayed: true); the same key with a different request returns 400.
255Path Parameters
The document ID.
Body
Body
Send the document for signing.
Optional custom message to include in the signing invitation. Supports newline characters (\n) for line breaks. Available template variables (use {{variableName}} syntax): {{firstName}}, {{lastName}}, {{fullName}}, {{recipientFirstName}}, {{recipientLastName}}, {{recipientFullName}}, {{recipientEmail}}, {{recipientPhone}}, {{recipientCompanyName}}, {{recipientCompanyRole}}, {{recipientCompanyOrgNumber}}, {{recipientRole}}, {{senderFirstName}}, {{senderLastName}}, {{senderFullName}}, {{senderEmail}}, {{senderCompanyName}}, {{documentName}}, {{documentId}}, {{documentValue}}, {{documentCreatedDate}}, {{expirationDate}}, {{signUrl}}. Custom fields are available as {{custom.}} using the slugified field name (e.g. "Avtalsdatum (demo)" becomes {{custom.avtalsdatum-demo}}); secured fields are excluded.
Response
200
Unique document identifier
Your external reference ID for this document
Date and time when the document expires
Document name/title
Document status
DRAFT, PENDING_APPROVAL, PENDING, COMPLETED, EXPIRED, CANCELLED, REJECTED, IMPORTED Document metadata including subject, message, signing order, etc.
Date and time when the document was created
Date and time when the document was last updated
Date and time when all signers completed signing
Date and time when the document moved to the trash, or null when it isn't in the trash
ID of the template the document was created from, or null
ID of the folder that holds the document, or null at the top level
ID of the workspace member responsible for the document
Array of document parties (signers and other participants).
Content blocks in position order when you pass expand=content, and null otherwise. See the content endpoints for the per-type shapes.
Every product table on the document, resolved: each row carries the recipient's final selected state and quantity, and the totals count the selected rows only. Empty when the document has no product table.
ID of the document's approval request, or null when it has none. To read it, call GET /api/v1/approval-requests/{id}.
ID of the bundle the document was sent in, or null. Every document in a bundle also fires its own events, so this is the key that groups them. To read the bundle, call GET /api/v1/bundles/{id}.

