Signing Sessions API
Create, manage, and track electronic signing sessions for contract questions.
The Signing Sessions API lets you programmatically create and manage signing sessions for contract questions. You can create sessions, track signing progress, resend requests, void sessions, and download signed documents.
All request and response bodies use snake_case field names.
/api/v1/forms/:id/signing-sessionsGET/api/v1/forms/:id/signing-sessionsGET/api/v1/signing-sessions/:sessionIdPOST/api/v1/signing-sessions/:sessionId/voidPOST/api/v1/signing-sessions/:sessionId/resend/:slotNumberGET/api/v1/signing-sessions/:sessionId/documentsGET/api/v1/signing-sessions/:sessionId/documents/:docIdGET/api/v1/signing-sessions/:sessionId/auditGET/api/v1/s/:shortCodePOST/api/v1/s/:shortCode/verify-passwordCreate Session
/api/v1/forms/:id/signing-sessionsCreates a new signing session for a form that contains one or more contract questions. Returns the session with unique signing links for each signer slot.
Path Parameters
idstringThe form ID
Request Body
signersarrayArray of signer configurations, one per slot. Each object may include slot_number (integer), first_name (string), last_name (string), and email (string). All fields except slot_number are optional.
signing_orderstring"sequential" or "any". Defaults to the question's default signing order.
expiry_daysintegerNumber of days before the session expires. Default: 30.
passwordstringPassword to protect the signing links.
hide_other_signersbooleanHide other signers' filled fields. Default: false.
require_email_verificationbooleanRequire email verification before signing. Default: false.
copy_modestring"ask", "always", or "disabled". Default: "ask".
notify_emailsarrayArray of email addresses to receive status notifications.
notify_eventsarrayArray of event types: "each_signature", "all_complete", "decline", "expiry".
send_signing_emailsbooleanSend signing request emails to signers who have email addresses. Default: false.
custom_email_bodystringCustom email template. Supports variables: {slot_firstName}, {slot_lastName}, {slot_link}, {expiryDate}.
Response
{
"id": "ses_abc123def456",
"form_id": "665a1b2c3d4e5f6a7b8c9d0e",
"status": "active",
"signing_order": "sequential",
"total_slots": 2,
"total_signed": 0,
"expires_at": "2026-04-25T00:00:00.000Z",
"hide_other_signers": false,
"copy_mode": "ask",
"signer_links": [
{
"slot_number": 1,
"slot_label": "Buyer",
"short_code": "xK9f2",
"signing_url": "https://nue.fm/s/xK9f2",
"first_name": "John",
"last_name": "Smith",
"email": "john@example.com",
"status": "pending"
},
{
"slot_number": 2,
"slot_label": "Seller",
"short_code": "mP3a7",
"signing_url": "https://nue.fm/s/mP3a7",
"first_name": null,
"last_name": null,
"email": null,
"status": "pending"
}
],
"created_at": "2026-03-26T10:00:00.000Z"
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/forms/FORM_ID/signing-sessions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signers": [
{"slot_number": 1, "first_name": "John", "last_name": "Smith", "email": "john@example.com"},
{"slot_number": 2, "first_name": "Jane", "last_name": "Doe"}
],
"signing_order": "sequential",
"expiry_days": 30,
"send_signing_emails": true
}'
List Sessions
/api/v1/forms/:id/signing-sessionsReturns all signing sessions for a form.
Query Parameters
statusstringFilter by status: "active", "fully_signed", "declined", "voided", "expired".
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 20)
Response
{
"sessions": [
{
"id": "ses_abc123def456",
"status": "active",
"total_slots": 2,
"total_signed": 1,
"signing_order": "sequential",
"expires_at": "2026-04-25T00:00:00.000Z",
"created_at": "2026-03-26T10:00:00.000Z"
}
],
"total": 5,
"page": 1,
"per_page": 20
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/forms/FORM_ID/signing-sessions?status=active" \
-H "Authorization: Bearer YOUR_API_KEY"
Get Session
/api/v1/signing-sessions/:sessionIdReturns a single signing session with full details including signer links and their statuses.
Response
Returns the same session object as the create endpoint, with updated statuses and timestamps for each signer link.
Code Examples
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456" \
-H "Authorization: Bearer YOUR_API_KEY"
Void Session
/api/v1/signing-sessions/:sessionId/voidVoids an active signing session. All pending signing links are invalidated. Signed parties are notified and PDFs are watermarked "VOIDED".
Request Body
reasonstringReason for voiding the session.
Response
{
"id": "ses_abc123def456",
"status": "voided",
"voided_at": "2026-03-27T15:30:00.000Z",
"void_reason": "Terms changed, new agreement required"
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/void" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason": "Terms changed, new agreement required"}'
Resend Signing Request
/api/v1/signing-sessions/:sessionId/resend/:slotNumberResends the signing request email to a specific signer. The signer must have an email address configured.
Response
{
"success": true,
"sent_to": "john@example.com",
"slot_number": 1
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/resend/1" \
-H "Authorization: Bearer YOUR_API_KEY"
List Signed Documents
/api/v1/signing-sessions/:sessionId/documentsReturns a list of signed documents for a completed session. Each document corresponds to one contract question in the form.
Response
{
"documents": [
{
"id": "doc_xyz789",
"question_id": "q_abc123",
"question_title": "Service Agreement",
"document_url": "https://storage.nueform.io/signed/doc_xyz789.pdf",
"document_hash": "sha256:a1b2c3d4e5f6...",
"generated_at": "2026-03-28T12:00:00.000Z"
}
]
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/documents" \
-H "Authorization: Bearer YOUR_API_KEY"
Get Signed Document
/api/v1/signing-sessions/:sessionId/documents/:docIdDownloads a specific signed document as a PDF file.
Response
Returns the PDF file with Content-Type: application/pdf.
Code Examples
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123/documents/doc_xyz789" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o signed-document.pdf
Get Audit Trail
/api/v1/signing-sessions/:sessionId/auditReturns the complete audit trail for a signing session, including view events, signatures, declines, and system events.
Response
{
"entries": [
{
"id": "aud_001",
"action": "session_created",
"timestamp": "2026-03-26T10:00:00.000Z",
"actor_email": "owner@company.com",
"ip_address": "192.168.1.1",
"user_agent": "Chrome 120 / macOS"
},
{
"id": "aud_002",
"action": "document_viewed",
"slot_number": 1,
"actor_email": "john@example.com",
"timestamp": "2026-03-26T15:44:00.000Z",
"ip_address": "10.0.0.1",
"user_agent": "Chrome 120 / macOS"
},
{
"id": "aud_003",
"action": "signed",
"slot_number": 1,
"actor_name": "John Smith",
"actor_email": "john@example.com",
"timestamp": "2026-03-26T15:45:00.000Z",
"ip_address": "10.0.0.1",
"user_agent": "Chrome 120 / macOS"
}
]
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/audit" \
-H "Authorization: Bearer YOUR_API_KEY"
Resolve Short Code
/api/v1/s/:shortCodePublic endpoint (no authentication required). Resolves a signing short code to the form and session context needed to render the signing experience.
Response
{
"form_id": "665a1b2c3d4e5f6a7b8c9d0e",
"session_id": "ses_abc123def456",
"slot_number": 1,
"slot_label": "Buyer",
"status": "pending",
"requires_password": true,
"requires_email_verification": false,
"signing_order": "sequential",
"is_turn": true
}
Code Examples
curl -X GET "https://api.nueform.io/api/v1/s/xK9f2"
Verify Password
/api/v1/s/:shortCode/verify-passwordPublic endpoint. Verifies the password for a password-protected signing session. Returns a temporary access token on success.
Request Body
passwordstringThe session password.
Response
{
"success": true,
"access_token": "tmp_abc123..."
}
Error Response (401)
{
"error": "Invalid password"
}
Code Examples
curl -X POST "https://api.nueform.io/api/v1/s/xK9f2/verify-password" \
-H "Content-Type: application/json" \
-d '{"password": "mySecretPass123"}'