Signature requests
A signature request (an envelope) is one round of sending a document for signing: who must sign, in which order, by when, and the tamper-evident audit trail of everything that happened to it.
POST /documents/{document}/send creates one for you and is the recommended way to send. Use these endpoints to follow a request in detail, to download its audit trail, and to cancel it.
Status. sent → partially_signed (some have signed) → completed (every signer has signed). It ends as declined when a signer declines, expired when expires_at passes (an hourly sweep, and signing is refused the moment it passes), or canceled when it is canceled or replaced by a new send.
Webhooks. signature.requested when it is created, document.viewed when a signer first opens their link, signer.signed for each signature, signature.completed when the last one is in, and signature.canceled. A decline or an expiry sends no webhook — watch status.
How recipients sign. Each signer opens their private link in a browser — no account needed. When the document's signer_otp_required is on (the default for new documents), they first enter a six-digit code emailed to their address. They then sign with a typed or drawn signature (signature_type), accepting the terms, or decline with a reason, which the sender is emailed. Time, IP address, user agent and the SHA-256 of the file are recorded; a file that changed after sending can no longer be signed. When the last signer signs, a completion certificate is issued and every party is emailed links to the signed document and the certificate. BankID signing is not part of this flow.
List signature requests
/signaturesEvery signature request in the organization, newest first, a page at a time, each with its document and signers. The audit trail (events) is only returned by GET /signatures/{signature}.
filter[status] takes one value or several (filter[status][]=sent&filter[status][]=partially_signed).
curl 'https://api.closepact.com/v1/api/signatures' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY"{
"data": [
{
"id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"message": "Hej Erik! Här kommer serviceavtalet för 2027 enligt vårt samtal.",
"status": "partially_signed",
"signing_order": "sequential",
"sent_at": "2026-10-12T08:14:03+00:00",
"completed_at": null,
"expires_at": "2026-11-11T22:59:59+00:00",
"canceled_at": null,
"cancel_reason": null,
"document": {
"id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"mime_type": "application/pdf",
"size_bytes": 284516
},
"signers": [
{
"id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
"email": "erik.johansson@byggbolaget.se",
"name": "Erik Johansson",
"order_index": 0,
"status": "signed",
"opened_at": "2026-10-13T06:48:02+00:00",
"signed_at": "2026-10-13T06:52:44+00:00",
"declined_at": null,
"decline_reason": null,
"signature_type": "drawn"
},
{
"id": "01a15a31-0c2e-71aa-9c3d-6b1e8f2a4d59",
"email": "anna@nordiskfastighet.se",
"name": "Anna Lindqvist",
"order_index": 1,
"status": "pending",
"opened_at": null,
"signed_at": null,
"declined_at": null,
"decline_reason": null,
"signature_type": null
}
],
"deal_room_id": null,
"created_at": "2026-10-12T08:14:03+00:00"
}
],
"links": {
"first": null,
"last": null,
"prev": null,
"next": null
},
"meta": {
"path": "https://api.closepact.com/v1/api/signatures",
"per_page": 25,
"next_cursor": null,
"prev_cursor": null
}
}Query parameters
filter[status]stringOnly requests in this status. Repeat as
filter[status][]for several.One of
draftsentpartially_signedcompleteddeclinedexpiredcanceledfilter[deal_room_id]string(uuid)Only requests linked to this deal room.
limitintegerItems per page. Values outside 1–100 are clamped.
Default
251–100cursorstringOpaque cursor from
meta.next_cursorormeta.prev_cursorof the previous page.
Responses
Headers
X-RateLimit-Limit— Requests this key may make per minute.X-RateLimit-Remaining— Requests left in the current minute.
dataarray of objectsrequiredidstring(uuid)requiredtitlestringrequiredmessagestringnullablerequiredstatusstringrequiredsent→partially_signed→completed; ordeclined,expired,canceled.draftis not used by the API.One of
draftsentpartially_signedcompleteddeclinedexpiredcanceledsigning_orderstringrequiredOne of
parallelsequentialsent_atstring(date-time)nullablerequiredcompleted_atstring(date-time)nullablerequiredWhen the last signer signed.
expires_atstring(date-time)nullablerequiredcanceled_atstring(date-time)nullablerequiredcancel_reasonstringnullablerequireddocumentobjectnullablerequiredThe document being signed; null once it has been deleted.
signersarray of objectsrequiredIn signing order.
eventsarray of objectsThe audit trail, oldest first. Only on
GET /signatures/{signature}and the cancel response;chainbeside it says whether it verifies.chainobjectThe audit chain of one signature request, recomputed by the server.
deal_room_idstring(uuid)nullablerequiredcreated_atstring(date-time)required
linksobjectrequiredmetaobjectrequired
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 429The key has made more requests this minute than its limit allows.Errors
Create a signature request
/signatureswrite Permission signatures.createCreates a signature request for a document directly and emails every signer their link.
Prefer POST /documents/{document}/send. This lower-level call differs in four ways: every person is a signer (there are no cc or viewer roles); it does not replace a request already out for the same document, so both stay open; it does not move the document's lifecycle_status to sent (it still becomes signed when this request completes); and it always returns each signer's link and token in signer_links.
signer_links holds private credentials: anyone with a link or token can sign as that person. Deliver them only to their owner, and do not log them.
document_id must be a document of this organization: an id that does not exist fails validation (422), and another organization's document answers 404. The signature.requested webhook fires; when every signer has signed, the request becomes completed and signature.completed fires.
curl -X POST 'https://api.closepact.com/v1/api/signatures' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document_id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"message": "Hej Erik! Signera gärna avtalet före den 11 november.",
"signing_order": "sequential",
"expires_at": "2026-11-11T22:59:59+00:00",
"signers": [
{
"email": "erik.johansson@byggbolaget.se",
"name": "Erik Johansson"
},
{
"email": "anna@nordiskfastighet.se",
"name": "Anna Lindqvist"
}
]
}'{
"data": {
"id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"message": "Hej Erik! Signera gärna avtalet före den 11 november.",
"status": "sent",
"signing_order": "sequential",
"sent_at": "2026-10-12T08:14:03+00:00",
"completed_at": null,
"expires_at": "2026-11-11T22:59:59+00:00",
"canceled_at": null,
"cancel_reason": null,
"document": {
"id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"mime_type": "application/pdf",
"size_bytes": 284516
},
"signers": [
{
"id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
"email": "erik.johansson@byggbolaget.se",
"name": "Erik Johansson",
"order_index": 0,
"status": "pending",
"opened_at": null,
"signed_at": null,
"declined_at": null,
"decline_reason": null,
"signature_type": null
},
{
"id": "01a15a31-0c2e-71aa-9c3d-6b1e8f2a4d59",
"email": "anna@nordiskfastighet.se",
"name": "Anna Lindqvist",
"order_index": 1,
"status": "pending",
"opened_at": null,
"signed_at": null,
"declined_at": null,
"decline_reason": null,
"signature_type": null
}
],
"deal_room_id": null,
"created_at": "2026-10-12T08:14:03+00:00"
},
"signer_links": [
{
"signer_id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
"email": "erik.johansson@byggbolaget.se",
"name": "Erik Johansson",
"token": "Xk3pQ9vB2mR7tY4wN8cL1zF6hJ0sD5gA2eK9uP3oW7iV4bM1",
"url": "https://app.closepact.com/sign/Xk3pQ9vB2mR7tY4wN8cL1zF6hJ0sD5gA2eK9uP3oW7iV4bM1"
},
{
"signer_id": "01a15a31-0c2e-71aa-9c3d-6b1e8f2a4d59",
"email": "anna@nordiskfastighet.se",
"name": "Anna Lindqvist",
"token": "q7Wm2Lx9Rb4Tn8Vc1Pz6Hd3Kf0Gs5Ja2Ye7Uo9Ii4Ob1Na6M",
"url": "https://app.closepact.com/sign/q7Wm2Lx9Rb4Tn8Vc1Pz6Hd3Kf0Gs5Ja2Ye7Uo9Ii4Ob1Na6M"
}
]
}Request body
application/json · required
document_idstring(uuid)requiredtitlestringrequiredSubject of the request, shown to signers.
2–255 characters
messagestringnullableA personal note in every signer's email.
at most 5,000 characters
signing_orderstringsequential: signers sign in the order listed.One of
parallelsequentialDefault
"parallel"expires_atstring(date-time)nullableSigning deadline; must be in the future.
deal_room_idstring(uuid)nullableLink the request to a deal room of this organization. Any other id, including another organization's room, fails validation (
422).signersarray of objectsrequired1–20 items
Responses
Headers
X-RateLimit-Limit— Requests this key may make per minute.X-RateLimit-Remaining— Requests left in the current minute.
dataobjectrequiredOne round of sending a document for signing.
idstring(uuid)requiredtitlestringrequiredmessagestringnullablerequiredstatusstringrequiredsent→partially_signed→completed; ordeclined,expired,canceled.draftis not used by the API.One of
draftsentpartially_signedcompleteddeclinedexpiredcanceledsigning_orderstringrequiredOne of
parallelsequentialsent_atstring(date-time)nullablerequiredcompleted_atstring(date-time)nullablerequiredWhen the last signer signed.
expires_atstring(date-time)nullablerequiredcanceled_atstring(date-time)nullablerequiredcancel_reasonstringnullablerequireddocumentobjectnullablerequiredThe document being signed; null once it has been deleted.
signersarray of objectsrequiredIn signing order.
eventsarray of objectsThe audit trail, oldest first. Only on
GET /signatures/{signature}and the cancel response;chainbeside it says whether it verifies.chainobjectThe audit chain of one signature request, recomputed by the server.
deal_room_idstring(uuid)nullablerequiredcreated_atstring(date-time)required
signer_linksarray of objectsrequiredOne per signer. Private: each link signs as that person.
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 404No such record in this organization.Errors
- 422The request body or query failed validation.Errors
- 429The key has made more requests this minute than its limit allows.Errors
- 503BankID was asked for — on the document, or for a recipient — and this server has no working BankID relying-party certificate. Nothing was changed or sent.Errors
bankid_unavailableis the onlyerrorhere; it is not something a retry fixes.
Retrieve a signature request
/signatures/{signature}The request with its document, signers and its audit trail.
The audit trail (events) is the evidence of signing, oldest first. Each event's hash_self is the SHA-256 of the event together with the previous event's hash (hash_prev), so the chain shows whether anything was altered or removed. Event types: signature.requested (with payload.document_sha256, the SHA-256 of the file sent), recipient.added, recipient.removed, signer.opened, signer.code_sent and signer.verified (a one-time code emailed to the signer and entered by them, with payload.channel and the masked payload.destination), signer.signed (with payload.type: typed or drawn, payload.document_sha256 and payload.verification), signer.declined (with payload.reason), signature.refused (a signature refused because the document no longer matched, with payload.reason), reminder.sent, signature.completed, signature.sealed (the completion certificate was issued, with payload.certificate_sha256 and the payload.chain_head it certifies), signature.canceled (with payload.reason). ip_address and user_agent are recorded for what recipients did.
Checking the chain. chain is the server's own verification, recomputed on every request: ok, or broken with the first event that does not add up and why. Events written since October 2026 (hash_version 2) are numbered by sequence and hashed over the JSON of {v, request_id, sequence, signer_id, event_type, payload, ip_address, user_agent, occurred_at, prev} (keys of payload sorted, occurred_at in UTC as YYYY-MM-DDTHH:MM:SSZ), so you can recompute it yourself. Earlier events (hash_version 1, sequence null) are reported as legacy: each hash is checked, but their order rests on a one-second timestamp.
The signature.completed webhook carries this request's id — fetch it here when the webhook arrives, then download the file with GET /documents/{document}/download-link.
curl 'https://api.closepact.com/v1/api/signatures/01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY"{
"data": {
"id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"message": null,
"status": "completed",
"signing_order": "parallel",
"sent_at": "2026-10-12T08:14:03+00:00",
"completed_at": "2026-10-13T06:52:44+00:00",
"expires_at": "2026-11-11T22:59:59+00:00",
"canceled_at": null,
"cancel_reason": null,
"document": {
"id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
"title": "Serviceavtal 2027 – Byggbolaget i Mälardalen AB",
"mime_type": "application/pdf",
"size_bytes": 284516
},
"signers": [
{
"id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
"email": "erik.johansson@byggbolaget.se",
"name": "Erik Johansson",
"order_index": 0,
"status": "signed",
"opened_at": "2026-10-13T06:48:02+00:00",
"signed_at": "2026-10-13T06:52:44+00:00",
"declined_at": null,
"decline_reason": null,
"signature_type": "typed"
}
],
"events": [
{
"id": "01a15a31-0c30-7d18-8e2f-4a6c9b1d3e57",
"signer_id": null,
"sequence": 1,
"event_type": "signature.requested",
"payload": {
"document_id": "01a15a2e-4b7c-7d12-9f3a-5c8e2d1b0a47",
"signer_count": 1
},
"hash_prev": null,
"hash_self": "65472c7186549f263d194b44aad9908ccfbeed3ee1e33242957e9efe37096e4c",
"hash_version": 2,
"ip_address": null,
"user_agent": null,
"occurred_at": "2026-10-12T08:14:03+00:00"
},
{
"id": "01a15b07-6e10-7a2b-8c4d-1e3f5a7b9c0d",
"signer_id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
"sequence": 2,
"event_type": "signer.opened",
"payload": [],
"hash_prev": "65472c7186549f263d194b44aad9908ccfbeed3ee1e33242957e9efe37096e4c",
"hash_self": "1d0e7c4b9a2f5e8d3c6b1a0f9e4d7c2b5a8f3e6d1c4b7a0e9f2d5c8b1a4e7f3d",
"hash_version": 2,
"ip_address": "81.230.44.17",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
"occurred_at": "2026-10-13T06:48:02+00:00"
},
{
"id": "01a15b0b-2a41-7f6e-9d3c-5b8a1e4f7c20",
"signer_id": "01a15a31-0c2d-7e45-8b6f-2a9d4c7e1f03",
"sequence": 3,
"event_type": "signer.signed",
"payload": {
"type": "typed",
"has_image": false
},
"hash_prev": "1d0e7c4b9a2f5e8d3c6b1a0f9e4d7c2b5a8f3e6d1c4b7a0e9f2d5c8b1a4e7f3d",
"hash_self": "8a3f6c9e2d5b1a4f7e0c3b6d9a2e5f8c1b4d7a0e3f6c9b2d5a8e1f4c7b0d3a6e",
"hash_version": 2,
"ip_address": "81.230.44.17",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
"occurred_at": "2026-10-13T06:52:44+00:00"
},
{
"id": "01a15b0b-2a43-71c2-8e5f-3d6a9b2c5e81",
"signer_id": null,
"sequence": 4,
"event_type": "signature.completed",
"payload": {
"signed_count": 1
},
"hash_prev": "8a3f6c9e2d5b1a4f7e0c3b6d9a2e5f8c1b4d7a0e3f6c9b2d5a8e1f4c7b0d3a6e",
"hash_self": "f2b5e8a1d4c7b0e3a6d9c2f5b8e1a4d7c0f3b6e9a2d5c8f1b4e7a0d3c6f9b2e5",
"hash_version": 2,
"ip_address": "81.230.44.17",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15",
"occurred_at": "2026-10-13T06:52:44+00:00"
}
],
"chain": {
"signature_request_id": "01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16",
"status": "ok",
"format": "current",
"event_count": 4,
"head": "f2b5e8a1d4c7b0e3a6d9c2f5b8e1a4d7c0f3b6e9a2d5c8f1b4e7a0d3c6f9b2e5",
"broken_at": null
},
"deal_room_id": null,
"created_at": "2026-10-12T08:14:03+00:00"
}
}Path parameters
signaturestring(uuid)requiredThe signature request's id —
active_send.idon a document, oridin thesignature.completedwebhook.Example
01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16
Responses
Headers
X-RateLimit-Limit— Requests this key may make per minute.X-RateLimit-Remaining— Requests left in the current minute.
dataobjectrequiredOne round of sending a document for signing.
idstring(uuid)requiredtitlestringrequiredmessagestringnullablerequiredstatusstringrequiredsent→partially_signed→completed; ordeclined,expired,canceled.draftis not used by the API.One of
draftsentpartially_signedcompleteddeclinedexpiredcanceledsigning_orderstringrequiredOne of
parallelsequentialsent_atstring(date-time)nullablerequiredcompleted_atstring(date-time)nullablerequiredWhen the last signer signed.
expires_atstring(date-time)nullablerequiredcanceled_atstring(date-time)nullablerequiredcancel_reasonstringnullablerequireddocumentobjectnullablerequiredThe document being signed; null once it has been deleted.
signersarray of objectsrequiredIn signing order.
eventsarray of objectsThe audit trail, oldest first. Only on
GET /signatures/{signature}and the cancel response;chainbeside it says whether it verifies.chainobjectThe audit chain of one signature request, recomputed by the server.
deal_room_idstring(uuid)nullablerequiredcreated_atstring(date-time)required
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 404No such record in this organization.Errors
- 429The key has made more requests this minute than its limit allows.Errors
Cancel a signature request
/signatures/{signature}/cancelwrite Permission signatures.cancelWithdraws a request that is out for signing. Its status becomes canceled, the signers' links stop working, signature.canceled (with your reason) is added to the audit trail, the signature.canceled webhook fires and the document's lifecycle_status becomes canceled. Nobody is emailed.
A request that is already completed or canceled is returned unchanged — a finished signature is never voided — so check status in the response. To send the document again, call POST /documents/{document}/send.
curl -X POST 'https://api.closepact.com/v1/api/signatures/01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16/cancel' \
-H "Authorization: Bearer $CLOSEPACT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "Fel pris i bilaga 2 — skickar en ny version."
}'{
"data": {
"id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"title": "Quarterly window cleaning",
"message": "A short description.",
"status": "draft",
"signing_order": "parallel",
"sent_at": "2026-10-18T09:30:00Z",
"completed_at": "2026-10-18T09:30:00Z",
"expires_at": "2026-10-18T09:30:00Z",
"canceled_at": "2026-10-18T09:30:00Z",
"cancel_reason": "string",
"document": {
"id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"title": "Quarterly window cleaning",
"mime_type": "string",
"size_bytes": 1
},
"signers": [
{
"id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"email": "anna@nordiskfastighet.se",
"name": "Anna Lindqvist",
"order_index": 1,
"status": "pending",
"opened_at": "2026-10-18T09:30:00Z",
"signed_at": "2026-10-18T09:30:00Z",
"declined_at": "2026-10-18T09:30:00Z",
"decline_reason": "string",
"signature_type": "typed"
}
],
"events": [
{
"id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"signer_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"sequence": 1,
"event_type": "signature.requested",
"payload": {},
"hash_prev": "string",
"hash_self": "string",
"hash_version": 1,
"ip_address": "Södra Hamngatan 1",
"user_agent": "string",
"occurred_at": "2026-10-18T09:30:00Z"
}
],
"chain": {
"signature_request_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"status": "ok",
"format": "current",
"event_count": 1,
"head": "string",
"broken_at": {
"event_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"position": 1,
"reason": "hash_mismatch"
}
},
"deal_room_id": "01a14f2c-7c1e-7d0b-9a3e-3f5b2c8d1e40",
"created_at": "2026-10-18T09:30:00Z"
}
}Path parameters
signaturestring(uuid)requiredThe signature request's id —
active_send.idon a document, oridin thesignature.completedwebhook.Example
01a15a31-0c1f-7b90-a2e4-3d7c9b5f8e16
Request body
application/json
reasonstringnullableWhy it was canceled; kept in the audit trail and in
cancel_reason.at most 500 characters
Responses
Headers
X-RateLimit-Limit— Requests this key may make per minute.X-RateLimit-Remaining— Requests left in the current minute.
dataobjectrequiredOne round of sending a document for signing.
idstring(uuid)requiredtitlestringrequiredmessagestringnullablerequiredstatusstringrequiredsent→partially_signed→completed; ordeclined,expired,canceled.draftis not used by the API.One of
draftsentpartially_signedcompleteddeclinedexpiredcanceledsigning_orderstringrequiredOne of
parallelsequentialsent_atstring(date-time)nullablerequiredcompleted_atstring(date-time)nullablerequiredWhen the last signer signed.
expires_atstring(date-time)nullablerequiredcanceled_atstring(date-time)nullablerequiredcancel_reasonstringnullablerequireddocumentobjectnullablerequiredThe document being signed; null once it has been deleted.
signersarray of objectsrequiredIn signing order.
eventsarray of objectsThe audit trail, oldest first. Only on
GET /signatures/{signature}and the cancel response;chainbeside it says whether it verifies.chainobjectThe audit chain of one signature request, recomputed by the server.
deal_room_idstring(uuid)nullablerequiredcreated_atstring(date-time)required
- 401No key, or the key is invalid, revoked or expired, or its creator no longer has access.Errors
- 402The organization has not bought the module this endpoint belongs to, or it has lapsed to read-only, or its tier does not include what the operation needs:Errors
featurenames the capability (the operation'sx-feature) andrequired_tierthe cheapest tier that grants it. Every operation answers this with"feature": "core.api"when no module the organization holds is on a tier that includes the API. - 403The key lacks the scope, or the member it acts as lacks the permission or holds no seat in the module (Errors
module_seat_required— an administrator assigns seats under Settings → Users), or the organization is suspended. - 404No such record in this organization.Errors
- 422The request body or query failed validation.Errors
- 429The key has made more requests this minute than its limit allows.Errors