DoConure

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.