Migrating from Sign API v2 to v3
Preview — Subject to Change
Sign API v3 is a preview release. The API surface may change before general availability. Do not use it in production without accepting that breaking changes may occur.
The v3 Draft Workflow
The core difference in v3 is a document-first, explicit-initiation model. A signature request always starts in DRAFT and nothing is sent to signers until you explicitly initiate it. This gives you full control to assemble and configure everything before committing.
The four steps are: upload documents → create SR → assign signers → initiate.
Step 1 — Upload documents
Every document must be uploaded before it can be referenced in a signature request. Upload each PDF separately and save the returned id.
POST /v3/documents
Response
You can upload up to 50 documents to include in a single signature request.
Step 2 — Create the signature request
Reference the uploaded document IDs in the documents array. The SR is created in DRAFT — no emails are sent yet.
POST /v3/signature-requests
Response (status_overall: DRAFT)
Step 3 — Add signers and assign documents
Each signer is added via a separate call. The document_signatures array controls which documents the signer must sign, in what order, and where their signature appears on the page.
Not every signer signs every document
Each signer only signs the documents listed in their document_signatures. A signer with no entry for a given document will not be asked to sign it.
Signing sequence
The sequence field on each signer controls the signing order across the whole request:
| Value | Behaviour |
|---|---|
1 | Signs first. Request moves to sequence 2 only after all sequence-1 signers are done. |
2, 3, … | Signs after the previous sequence group completes. |
-1 (default) | No specific order — can sign at any time. |
Visual signature placement
Within document_signatures, the optional visual_signature field places the signer's visible signature stamp on the page. You can position it by coordinates or by PDF form field name.
By coordinates:
| Field | Description |
|---|---|
page | Page number, 0-indexed, as a string ("0" = first page) |
x | Pixels from the left edge |
y | Pixels from the top edge |
width | Width of the signature box in pixels |
height | Height of the signature box in pixels |
rotation | Rotation in degrees (0–360, optional) |
By form field:
Code
Example: two signers, two documents, each signs only one
Alice signs only doc-aaa-111 (first), Bob signs only doc-bbb-222 (after Alice).
POST /v3/signature-requests/sr-xyz-999/signatures — Alice
POST /v3/signature-requests/sr-xyz-999/signatures — Bob
Example: one signer signs both documents
POST /v3/signature-requests/sr-xyz-999/signatures — Carol
Signers without a Skribble account
Use signer_identity_data instead of account_email:
Code
Step 4 — Initiate
Once all signers are configured, initiate the request. This transitions it from DRAFT to OPEN and sends invitation emails — starting with sequence 1 signers.
Code
No request body is needed. Signers in later sequence groups receive their invitations automatically once earlier groups complete.
