Use this guide to send a document for signing from start to finish — uploading or linking a file, configuring signers, and retrieving the signed result.Documentation Index
Fetch the complete documentation index at: https://developers.luminpdf.com/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- A valid API key. Pass it as
Authorization: API-key <your-key>on every request. - A PDF document accessible via a public URL, or a file you can upload directly.
You can supply the document in one of four ways. Use whichever fits your integration — only one field is allowed per request.
file_urlfile_urlsfilefilesEach signer object requires
email_address and name. When using ordered signing (signing_type: ORDER), also set group to control the signing sequence.{
"signers": [
{
"email_address": "[email protected]",
"name": "Alice"
}
]
}
{
"signers": [
{ "email_address": "[email protected]", "name": "Alice", "group": 1 },
{ "email_address": "[email protected]", "name": "Bob", "group": 2 }
]
}
SAME_TIMEORDERgroup number. Group 2 is only notified after all signers in group 1 have signed.curl -X POST https://api.luminpdf.com/v1/signature_request/send \
-H "Authorization: API-key <your-key>" \
-H "Content-Type: application/json" \
-d '{
"title": "Financial Year-End Report Authorization",
"file_url": "https://example.com/report.pdf",
"signing_type": "ORDER",
"expires_at": 1927510980694,
"signers": [
{ "email_address": "[email protected]", "name": "Alice", "group": 1 },
{ "email_address": "[email protected]", "name": "Bob", "group": 2 }
],
"custom_email": {
"subject_name": "Please sign: Year-End Report",
"title": "Your signature is required"
}
}'
{
"signature_request": {
"signature_request_id": "696d007913f3b8...",
"created_at": "1768751225657",
"status": "WAITING_FOR_PROCESSING"
}
}
WAITING_FOR_PROCESSING is the initial status. Processing is asynchronous —
the request transitions to NEED_TO_SIGN or WAITING_FOR_OTHERS shortly
after creation.curl https://api.luminpdf.com/v1/signature_request/696d007913f3b8... \
-H "Authorization: API-key <your-key>"
{
"signature_request": {
"signature_request_id": "696d007913f3b8...",
"title": "Financial Year-End Report Authorization",
"status": "WAITING_FOR_OTHERS",
"signing_type": "ORDER",
"created_at": "1768751225657",
"expires_at": "1927510980694",
"details_url": "https://sign.luminpdf.com/auth?mode=view-contract&token=...",
"signers": [
{
"email_address": "[email protected]",
"name": "Alice",
"group": 1,
"status": "APPROVED",
"is_approved": true
},
{
"email_address": "[email protected]",
"name": "Bob",
"group": 2,
"status": "NEED_TO_SIGN",
"is_approved": false
}
]
}
}
WAITING_FOR_PROCESSINGNEED_TO_SIGNWAITING_FOR_OTHERSAPPROVEDREJECTEDFAILEDreasonCANCELLEDcurl "https://api.luminpdf.com/v1/signature_request/696d007913f3b8.../file?type=agreement" \
-H "Authorization: API-key <your-key>"
{
"signed_url": "https://files.luminpdf.com/download/report-signed.pdf?expires=...",
"expires_at": 1766726700
}
The
signed_url is a pre-signed HTTPS download link that expires in 30 minutes. You can also request:Full request body reference
Webhooks
Instead of polling, listen for thesignature_request_approved webhook event to be notified the moment all signers complete the request. See the Webhooks guide to configure an endpoint.