API documentation
Send any PDF for signing with a single POST. The letssign.now API reference, errors, recipes, support.
The whole signing flow — anchors, signers, dispatch, signed PDF, audit
trail, webhooks — sits behind one Bearer-API-key authed endpoint at
https://api.letssign.now/v1/*. No templates required, no portal
redirect for the recipient, no SDK to install. Three real-life calls
ship 90% of integrations.
Three steps to ship
Mint an API key
Go to Developers → API keys in your workspace and
click Create API key. Copy the lsk_live_… token — we only
display the plaintext once.
Send your first signing request
Replace YOUR_KEY and run this in a terminal:
curl -X POST https://api.letssign.now/v1/signing-requests \
-H "Authorization: Bearer YOUR_KEY" \
-F "file=@contract.pdf" \
-F 'signers=[{"email":"signer@example.com","role":"signer"}]'Drop [[ls:signature:signer]] anywhere in your PDF and we place a
signature field there. No marker? We auto-append a signature page.
(Optional) Receive real-time events
Register an outbound webhook at
Developers → Webhooks (or pass callback_url
per-request). We POST signing_request.signed as each signer
completes, and document.completed with the signed-PDF URL when
everyone's done.
What's in this site
Authentication
Bearer keys, scoping, rotation, error shape.
Create a signing request
The big endpoint. Multipart upload, signers, four placement modes.
Placement modes
Anchors, auto-append, explicit coordinates, manual placement URL.
Read + manage
GET docs + signers, remind/withdraw, signed-PDF download, audit-trail PDF.
Webhooks
Events we emit, signature verification, retry semantics.
Idempotency
Safely retry network blips without double-sending.
Rate limits
60 requests/minute/key. Retry-After on 429.
Errors
Stable error codes mapped to HTTP statuses.
