Authentication
All API endpoints require bearer token authentication:Base URL
Session Management
List Signing Sessions
Retrieve all signing sessions with optional filtering.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status |
page | number | No | Page number (default: 1) |
limit | number | No | Results per page (default: 20, max: 100) |
email | string | No | Search by signer email |
pending, in_progress, completed, expired, cancelled, declined
Get Session Details
Returns comprehensive session information including signer statuses, document hashes, e-sign fields with positions, and completion timestamps.
declinedAt and declineReason for any signer who declined. When the session status is declined, the response additionally includes top-level declinedAt, declinedBy (email, name, signerIndex), and declineReason so you can read refusal details without inspecting the signers array.
Response:
webhookParams echoes the custom parameters from the original document creation request, plus the identifier of the triggering record, folded in automatically per data source: recId (Airtable, SmartSuite, Notion — pageId and Notion Button payloads are normalized to recId), taskId (ClickUp), or rowNumber (Google Sheets — positional at trigger time, so treat it as “which row triggered this”, not a durable key). Your own webhookParams keys are never overwritten by the folded identifier. Use it to correlate signing sessions with records in your data source — for example, when polling sessions periodically to reconcile signing status against your own records. It is null when no identifier or parameters were passed.
When status is declined, the response also includes:
Get Signing Links
Retrieves signing links for all signers when using manual delivery mode.
Get Audit Trail
Returns chronological event log for the signing session.
| Event | Description |
|---|---|
session_created | Signing session initiated |
invite_sent | Email invitation dispatched |
invite_resent | Invitation re-sent to signer |
link_opened | Signer accessed signing link |
document_viewed | Signer viewed PDF |
consent_given | E-consent provided |
field_signed | Field value entered |
field_cleared | Field value cleared |
signer_completed | All fields finished |
signer_declined | Signer declined to sign |
session_completed | All signers done, PDF generated |
session_cancelled | Session cancelled |
session_expired | Session expired |
session_voided | Session voided by admin |
reminder_sent | Reminder email sent |
reconstructed: true indicates that some events were inferred from the session document because the original audit events were missing (e.g., pruned from an older session).Cancel Session
Cancel an active signing session.
Resend Invitation
Resends invitation email to a specific signer (indexed 1, 2, 3, etc.).
Webhook Events
| Event | When it fires |
|---|---|
(no event field) | All signers completed — signed PDF ready |
esign.session_created | Session created with deliveryMethod: "manual" |
esign.signer_signed | An individual signer completed all their fields |
esign.session_declined | A signer declined to sign |
esign.session_expired | Session expired before all signers completed |
Session Created (Manual Delivery)
Triggered when signing session created withdeliveryMethod: "manual". Use to retrieve and distribute signing links manually.
Signing Completed
Triggered when all signers complete signing and final PDF is generated. Payload:The
googleDriveFileId, googleDriveUrl, and googleDriveFolderId fields are only present when “Save to Google Drive” is enabled in the Signed PDF Delivery settings.Signer Signed
Fires once per signer as they complete, including the final signer. Use to track progress for multi-party documents.For the final signer,
progress.allSigned is true but the session status is still in_progress. The separate Signing Completed webhook fires afterwards, once the signed PDF is ready.Session Expired
Fires when a signing session expires before all signers complete. An expiration email is also sent to workspace notification recipients.If a session is already declined, cancelled, or completed before its expiration time, this webhook does not fire.
Passing Additional Parameters
IncludewebhookParams in document creation requests to receive custom data in webhook notifications:
webhookParams, together with the automatically included trigger record identifier (recId, taskId, or rowNumber depending on the data source). An identical additionalParams key is also present — it exists only for legacy reasons, so use webhookParams in new integrations.
Status Reference
Session Statuses
| Status | Description |
|---|---|
pending | Awaiting signer action |
in_progress | At least one signer started |
completed | All signers finished |
expired | Expired before completion |
cancelled | Cancelled by admin |
declined | Signer declined |
Signer Statuses
| Status | Description |
|---|---|
pending | Invitation not sent |
invited | Email sent |
opened | Link opened |
signed | All fields completed |
declined | Declined to sign |
Error Responses
| Code | Description |
|---|---|
| 400 | Bad request — invalid parameters |
| 401 | Unauthorized — invalid/missing API key |
| 404 | Not found — session doesn’t exist |
| 429 | Rate limited |
| 500 | Server error |
Rate Limits
Rate limits apply to the public signing page routes (not the authenticated admin API endpoints):| Route | Limit |
|---|---|
| Signing page access | 100 requests per 15 minutes per IP |
| Field submissions | 30 requests per minute per IP |