Create a signing request

POST a document and signer list to start a signing ceremony.

POST /v1/signing-requests

Creates a new signing request, validates field coordinates at ingestion, and returns a signing_url for the first signer.

Request headers

HeaderValue
AuthorizationBearer sk_live_... (API key)
Content-Typeapplication/json

Request body

The field names below are illustrative. Verify the exact schema against your NoSign instance’s API.

{
"document": "<base64-encoded PDF>",
"callback_url": "https://your-app.com/webhooks/nosign",
"signers": [
{
"name": "Ada Lovelace",
"email": "ada@example.com",
"fields": [
{
"page": 1,
"x": 72,
"y": 640,
"w": 180,
"h": 48,
"type": "signature",
"required": true
}
]
}
]
}

Top-level fields

FieldTypeRequiredDescription
documentstringYes*Base64-encoded PDF content (*not needed when creating from a template_id)
callback_urlstringYesHTTPS URL to receive the webhook after all signers complete
signersarrayYesOrdered list of signers; signing is sequential in this order
template_idstringNoCreate from a reusable template instead of inlining field coordinates
expires_inintegerNoDays until the request expires if unsigned (default 30) — see lifecycle

Signer object

FieldTypeRequiredDescription
namestringYesFull name of the signer (appears in the UI and audit trail)
emailstringYesEmail address for identity verification and ceremony link delivery
fieldsarrayYesOne or more signature field definitions

Field object

FieldTypeRequiredDescription
pageintegerYes1-based page number within the document
xnumberYesLeft edge in PDF points from page left
ynumberYesTop edge in PDF points from page top
wnumberYesWidth in PDF points
hnumberYesHeight in PDF points
typestringYesOne of signature, initials, date, checkbox, text — see field types
requiredbooleanYesWhether the signer must complete this field to submit
labelstringNoLabel for a text field
max_lengthintegerNoMaximum length for a text field

Response

201 Created

{
"id": "sr_...",
"status": "pending",
"signing_url": "https://your-nosign-host/sign/...",
"expires_at": "2026-06-14T13:00:00Z"
}
FieldDescription
idSigning request identifier for status polls and the subsequent DELETE call
statusCurrent status (pending, in_progress, completed, declined, expired) — see lifecycle
signing_urlOne-time link for signer #1 — deliver this through your platform
expires_atISO 8601 timestamp after which the request expires if not completed

Poll a request’s current state and per-signer status at any time with GET /v1/signing-requests/{id} — see lifecycle.

Error responses

StatusCause
401Missing or invalid API key
422Invalid payload — field coordinates out of bounds, missing required fields, or malformed JSON