Skip to content

Signing Requests

A signing request invites a specific person (by email) to review and sign a document version. The signer receives an email with a unique, time-limited link — no account required.

StatusDescription
PENDINGInvitation sent, signer has not yet opened it
ACCEPTED_FULLSigner accepted all clauses
ACCEPTED_PARTIALSigner accepted some optional clauses and rejected others
REJECTEDSigner rejected one or more mandatory clauses
VOIDEDManually voided before completion
EXPIREDToken expired before the signer completed
MethodPathDescription
GET/api/v1/signing-requestsList with filters and pagination
POST/api/v1/signing-requestsCreate a signing request
GET/api/v1/signing-requests/:idGet a signing request

GET /api/v1/signing-requests

Query parameters:

ParameterTypeDefaultDescription
statusenumFilter by status (see table above)
versionIdUUIDFilter to a specific document version
searchstringSearch by signer name or email (max 200 chars)
dateRangeenum7d, 30d, or 90d
sortByenumcreated_atcreated_at, signer_name, or status
sortDirenumdescasc or desc
limitnumber25Results per page (1–100)
offsetnumber0Pagination offset

Response 200:

{
"data": [
{
"id": "018e1234-abcd-7000-8000-000000000030",
"version_id": "018e1234-abcd-7000-8000-000000000020",
"signer_name": "Jane Doe",
"signer_email": "jane@example.com",
"status": "ACCEPTED_FULL",
"token": "abc123...",
"created_at": "2026-02-01T09:00:00.000Z",
"expires_at": "2026-03-01T09:00:00.000Z",
"completed_at": "2026-02-10T14:30:00.000Z"
}
],
"pagination": {
"total": 42,
"limit": 25,
"offset": 0
}
}

POST /api/v1/signing-requests

Sends a signing invitation email to the specified address. The version must be ACTIVE.

Request body:

FieldTypeRequiredConstraints
versionIdUUIDYesMust be an ACTIVE document version
signerNamestringYesMin 1 character
signerEmailstringYesValid email address
{
"versionId": "018e1234-abcd-7000-8000-000000000020",
"signerName": "Jane Doe",
"signerEmail": "jane@example.com"
}

Response 201:

{
"data": {
"id": "018e1234-abcd-7000-8000-000000000030",
"version_id": "018e1234-abcd-7000-8000-000000000020",
"signer_name": "Jane Doe",
"signer_email": "jane@example.com",
"status": "PENDING",
"token": "abc123def456...",
"created_at": "2026-02-21T10:00:00.000Z",
"expires_at": "2026-03-21T10:00:00.000Z",
"completed_at": null
}
}

Error cases:

StatusCodeCause
400BAD_REQUESTInvalid email, missing fields
401UNAUTHORIZEDMissing or invalid API key
404NOT_FOUNDversionId not found or not ACTIVE
409CONFLICTA pending request already exists for this email + version

GET /api/v1/signing-requests/:id

Returns full details including clause-level responses if the signing is complete.

Response 200:

{
"data": {
"id": "018e1234-abcd-7000-8000-000000000030",
"version_id": "018e1234-abcd-7000-8000-000000000020",
"signer_name": "Jane Doe",
"signer_email": "jane@example.com",
"status": "ACCEPTED_PARTIAL",
"token": "abc123...",
"assent_map": {
"018e0001-aaaa-7000-8000-000000000001": true,
"018e0002-bbbb-7000-8000-000000000002": false
},
"rejection_note": null,
"expires_at": "2026-03-01T09:00:00.000Z",
"completed_at": "2026-02-10T14:30:00.000Z",
"is_superseded": false,
"created_by": "018e0000-user-7000-8000-000000000001",
"created_at": "2026-02-01T09:00:00.000Z",
"updated_at": "2026-02-10T14:30:00.000Z",
"version": {
"version_number": 1,
"document": {
"id": "018e1234-abcd-7000-8000-000000000010",
"name": "Privacy Policy"
}
}
}
}

Error cases:

StatusCodeCause
401UNAUTHORIZEDMissing or invalid API key
404NOT_FOUNDSigning request not found in this organisation