Quick Start
This guide shows the basic SignumEra API flow from authentication through launching a signing ceremony.
1. Obtain an OAuth Access Token
curl -X POST \
"https://api.signumera.com/oauth/token" \
-H "Accept: application/json" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET"
Save the returned access_token.
2. Upload the PDF
curl -X POST \
"https://api.signumera.com/api/v1/uploads" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/pdf" \
-H "X-Filename: agreement.pdf" \
--data-binary "@agreement.pdf"
The response contains the temporary
upload_id.
{
"upload_id": "upl_EXAMPLE",
"filename": "agreement.pdf",
"sha256": "DOCUMENT_SHA256",
"size_bytes": 245760,
"expires_in_hours": 24
}
3. Create the Signing Request
Supply a unique Idempotency-Key for each new
signing request.
curl -X POST \
"https://api.signumera.com/api/v1/signing-requests" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: contract-2026-001" \
-d '{
"external_reference": "contract-2026-001",
"transaction_type": "agreement",
"document": {
"upload_id": "upl_EXAMPLE"
},
"recipients": [
{
"participant_type": "signer",
"is_internal": false,
"role": "Signer",
"name": "Jane Smith",
"email": "jane@example.com",
"signing_order": 1
}
],
"signing": {
"enforce_order": true,
"owner": {
"must_sign": false
}
},
"ceremony": {
"mode": "YOUR_CEREMONY_MODE",
"meeting_provider": "YOUR_MEETING_PROVIDER"
},
"evidence_level": "YOUR_EVIDENCE_LEVEL",
"locale": "en-CA"
}'
Response
{
"id": "REQUEST_ID",
"external_reference": "contract-2026-001",
"transaction_type": "agreement",
"submission_status": "accepted",
"idempotent_replay": false
}
4. Prepare the Signing Request
curl -X POST \
"https://api.signumera.com/api/v1/signing-requests/REQUEST_ID/prepare" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"
Response
{
"id": "REQUEST_ID",
"status": "prepared",
"document": {
"revision": 1,
"sha256": "DOCUMENT_SHA256"
}
}
5. Create a Widget Session
curl -X POST \
"https://api.signumera.com/api/v1/signing-requests/REQUEST_ID/widget-session" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"
Response
{
"id": "REQUEST_ID",
"widget_url": "https://...",
"expires_in_seconds": 900
}
Open the returned widget_url to launch the
SignumEra signing experience.
6. Monitor Status
curl \
"https://api.signumera.com/api/v1/signing-requests/REQUEST_ID" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"
Continue checking status until the signing request reaches its final state.
{
"id": "REQUEST_ID",
"submission_status": "accepted",
"status": "completed",
"document": {
"status": "finalized"
},
"evidence": {
"ready": true
},
"prepared_at": "2026-10-03T14:30:00Z",
"opened_at": "2026-10-03T14:31:00Z",
"finalized_at": "2026-10-03T14:42:00Z"
}
Required OAuth Scopes
| Operation | Scope |
|---|---|
| Upload PDF | signing.create |
| Create signing request | signing.create |
| Read signing request | signing.read |
| Add participants | ceremony.create |
| Prepare ceremony | ceremony.create |
| Create widget session | ceremony.create |
| Cancel signing request | signing.cancel |