Start a signing session by providing files and participants.
See Sign Engine for integration concepts, invitations, and retrieving signed documents. See Signing webhooks for event types.
Create a signing session by providing files and participants.
Include signers in the participants array here, or add them later while the session is in pending state.
Files can be provided either by URL or uploaded directly:
- JSON request (
application/json): provide files as URL references in thefilesarray. - Multipart request (
multipart/form-data): upload file content directly as binary parts. Thedatapart contains the JSON payload, and thefilesparts contain the binary file content. Each uploaded file corresponds by position to an entry indata.filesthat does not have aurl.
Name of the document shown in the signing UI.
Your own identifier for correlating this session in your system.
Expiration time as an RFC 3339 timestamp, including a timezone. Must be at least one hour and no more than 180 days after creation. Defaults to 180 days.
A custom domain registered for your workspace. This session's UI is served from it.
From address for invitation emails sent for this session. The domain must be an email domain registered for your workspace.
Whether the signing session is started immediately after creation. If true, the created session status is started; if false (or omitted), status is pending. Starting a session locks its files (no files can be added or removed) and allows participants to access the signing flow via their links. Queued invitations are sent when the session starts.
Where signatures are placed in the final PDF.
inline: signatures are placed in the provided participantsignature_location. Participants without a location remain invisible but are still digitally signed.start: a separate signature page is attached to the beginning of the PDF.end: a separate signature page is attached to the end of the PDF.
Optional list of files for the signing session. If multiple files are provided, they are merged into a single PDF. When using application/json, each file must include a url. When using multipart/form-data, url can be omitted — files without a url are matched by position to the uploaded binary parts.
Signers for the signing session, including any added after creation while the session is in a pending state.
- Production (Sign Engine)https://api.embed.docue.com/sign/sessions
curl -i -X POST \
https://api.embed.docue.com/sign/sessions \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YOUR_API Key_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"document_name": "Employment Agreement",
"document_author": "HR Department",
"external_id": "deal-42",
"expires_at": "2026-03-31T10:30:00.000Z",
"start": true,
"files": [
{
"name": "Employment Agreement.pdf",
"url": "https://example.com/files/employment-agreement.pdf"
}
],
"signature_position": "inline",
"participants": [
{
"name": "John Doe",
"external_id": "user-123",
"ui_language": "en-GB",
"signing_order": 0,
"deliveries": [
{
"type": "email",
"target": "john.doe@example.org",
"message": "Please sign by Friday."
},
{
"type": "sms",
"target": "+358401234567",
"message": "Please sign by Friday."
}
],
"signing_methods": [
{
"type": "eid",
"target": "fi_nordea"
},
{
"type": "otp_sms"
}
],
"signature_location": {
"file_index": 0,
"page": 1,
"x": 0.15,
"y": 0.36,
"width": 0.31,
"height": 0.1
}
},
{
"name": "Jane Roe",
"ui_language": "sv",
"signing_order": 1,
"deliveries": [
{
"type": "email",
"target": "jane.roe@example.org"
}
],
"signing_methods": [
{
"type": "otp_email"
}
]
}
],
"webhooks": [
{
"url": "https://example.com/webhooks/signing",
"secret": "your-shared-secret"
},
{
"url": "https://example.com/webhooks/signing-audit"
}
]
}'{ "data": { "id": "0196ae5b-2e9d-729f-aba5-fa4db6f881fd", "status": "started", "document_name": "Employment Agreement", "document_author": "HR Department", "external_id": "deal-42", "expires_at": "2026-03-31T10:30:00.000Z", "ui_domain": null, "email_from": null, "signature_position": "inline", "files": [ … ], "participants": [ … ], "webhooks": [ … ] }, "meta": { "status": { … } } }