How do I sign a document?
Take the X-Document-Id from
generating a document — or do
the whole step in one call, see
How To: compose and send for signature in
one call — and put it out for signature. This is the smallest request
that works: one signer, one mark, no options:
curl -X POST https://your-host/api/v1/sign/envelopes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signers": {
"A": {
"email": "signer@example.com",
"fullName": "Anna Rossi",
"fields": [
{ "kind": "signature", "page": 1,
"x": 0.1, "y": 0.78, "width": 0.32, "height": 0.09 }
]
}
},
"settings": {
"documentId": "PASTE_THE_X-DOCUMENT-ID_HERE",
"subject": "Please sign"
}
}'
Where the signature goes. The usual way is a tag in the
template, {{ signature.A }}, written like any other field:
signer A then needs no fields and signs where the tag
is. The alternative is fields, as here: x and
y are fractions of the page from the top-left corner (0.1 = a tenth
of the way across). How to read them off a PDF, and everything else about
placing a signature: Where the signature goes on
the page.
That call only drafts the envelope — nothing is sent yet,
and nothing is charged. The answer is the same envelope every endpoint here
answers with; the id you need is
output.sign.envelopeId:
{
"output": {
"status": "pending",
"sign": { "envelopeId": "7a04...", "status": "draft", "...": "..." },
"compose": null, "flow": null,
"warnings": [], "error": null
}
}
Send it:
curl -X POST https://your-host/api/v1/sign/envelopes/ENVELOPE_ID/send \
-H "Authorization: Bearer YOUR_API_KEY"
That second call is the billable moment, and the point
where a real email goes out. Every field you did not set took its default:
the signer proves it is them with a slide-to-confirm gesture and no code
(validationMode: "sign"), the link is good for a year, and
nobody is copied. All of that is adjustable — see
Signing on its own for the full
field list, or jump straight to a task in the How To section.
Signing needs real outbound email to be worth anything.
Every signing link is sent by email — there is no other way to reach a
signer; only the one-time code can go by SMS instead
(validationMode: "sms").
If you send an envelope and nothing arrives, the deployment's own outbox is where the answer is. A message there reads sent once a relay has accepted it and delivered once the recipient's server has, and those are different claims: a wrong address shows up as bounced within seconds rather than as an envelope that simply never completes. On a deployment where no sender is configured at all, messages stay queued and an operator can read the link straight out of one for a live walkthrough.