Signing Requests
Signing requests represent transactions submitted to the SignumEra signing service.
A signing request identifies the source document, recipients, signing sequence, ceremony configuration and required evidence level.
signing.create OAuth scope and a unique
Idempotency-Key header.
Create a Signing Request
/api/v1/signing-requests
Required Scope
signing.create
Headers
| Header | Required | Description |
|---|---|---|
Authorization |
Yes | OAuth Bearer access token. |
Idempotency-Key |
Yes | Unique identifier for this request. Maximum 255 characters. |
Accept |
Recommended | application/json |
Content-Type |
Yes | application/json |
Request Fields
| Field | Required | Description |
|---|---|---|
external_reference |
Yes | Your application's reference for the transaction. Maximum 191 characters. |
transaction_type |
Yes | Transaction classification. Maximum 100 characters. |
document.upload_id |
Yes | Identifier returned by the SignumEra upload API. |
recipients |
Yes | Array containing between 1 and 100 recipients. |
recipients[].participant_type |
No |
signer or observer.
|
recipients[].is_internal |
No | Boolean indicating an internal participant. |
recipients[].role |
Yes | Participant role. Maximum 100 characters. |
recipients[].name |
Yes | Participant name. |
recipients[].email |
Yes | Valid participant email address. |
recipients[].signing_order |
No | Integer starting at 1. |
signing.enforce_order |
No | Boolean controlling whether signing order is enforced. |
signing.owner.must_sign |
No | Boolean indicating whether the owner participates as a signer. |
signing.owner.signing_order |
No | Owner signing order. Minimum value 1. |
ceremony.mode |
Yes | Ceremony mode. Maximum 64 characters. |
ceremony.meeting_provider |
Yes | Meeting provider identifier. Maximum 64 characters. |
evidence_level |
Yes | Evidence level identifier. Maximum 64 characters. |
locale |
No | Locale identifier. Maximum 35 characters. |
Example Request
curl -X POST \
"https://api.signumera.com/api/v1/signing-requests" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Idempotency-Key: YOUR_UNIQUE_REQUEST_KEY" \
-d '{
"external_reference": "contract-2026-001",
"transaction_type": "agreement",
"document": {
"upload_id": "YOUR_UPLOAD_ID"
},
"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"
}'
Idempotency
The Idempotency-Key prevents accidental duplicate
creation when an application retries a request.
Repeating the same request with the same key may return the
existing signing request. Reusing the key with a different
payload returns HTTP 409 Conflict.
{
"error": {
"code": "idempotency_key_reused",
"message": "This Idempotency-Key was already used with a different request payload."
}
}
Get Signing Request Status
/api/v1/signing-requests/{id}
Required Scope
signing.read
Example
curl \
"https://api.signumera.com/api/v1/signing-requests/REQUEST_ID" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Response
{
"id": "REQUEST_ID",
"external_reference": "contract-2026-001",
"transaction_type": "agreement",
"submission_status": "accepted",
"status": "unknown",
"document": {
"status": null
},
"evidence": {
"ready": false
},
"created_at": "2026-10-03T14:00:00Z",
"updated_at": "2026-10-03T14:00:00Z",
"prepared_at": null,
"opened_at": null,
"finalized_at": null
}
Status data is retrieved from the SignumEra signing service.
If the signing service cannot be reached, the API returns
HTTP 503.
Add a Participant
/api/v1/signing-requests/{id}/participants
Required Scope
ceremony.create
Additional participants may be added after the signing request has been accepted and while the current ceremony state permits modification.
Request Fields
| Field | Required | Description |
|---|---|---|
participant_type |
Yes | signer or observer. |
is_internal |
No | Defaults to false. |
role |
Yes | Participant role. |
name |
Yes | Participant name. |
email |
Yes | Valid email address. |
signing_order |
No | Integer starting at 1. |
Example
curl -X POST \
"https://api.signumera.com/api/v1/signing-requests/REQUEST_ID/participants" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d '{
"participant_type": "signer",
"is_internal": false,
"role": "Signer",
"name": "John Smith",
"email": "john@example.com",
"signing_order": 2
}'
Prepare the Signing Request
/api/v1/signing-requests/{id}/prepare
Required Scope
ceremony.create
Prepares the signing request and document for the signing ceremony.
Create a Widget Session
/api/v1/signing-requests/{id}/widget-session
Required Scope
ceremony.create
Creates a session used to launch the SignumEra signing experience for an accepted signing request.
Cancel a Signing Request
/api/v1/signing-requests/{id}/cancel
Required Scope
signing.cancel
Cancels a signing request when its current signing state still permits cancellation.
Common Errors
| HTTP | Code | Description |
|---|---|---|
| 422 | invalid_idempotency_key |
Missing or invalid Idempotency-Key. |
| 409 | idempotency_key_reused |
The key was already used with a different payload. |
| 404 | signing_request_not_found |
The requested signing request was not found. |
| 409 | signing_request_not_ready |
The signing request is not in the required state. |
| 403 | participant_forbidden |
The client cannot modify the signing request. |
| 409 | participant_conflict |
Ceremony state or signing sequence prevents the participant from being added. |
| 503 | upstream_unavailable |
The SignumEra signing service is temporarily unavailable. |