NueForm

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.

Create Session

POST/api/v1/forms/:id/signing-sessions

Creates 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

idstring

The form ID

Request Body

signersarray

Array 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_daysinteger

Number of days before the session expires. Default: 30.

passwordstring

Password to protect the signing links.

hide_other_signersboolean

Hide other signers' filled fields. Default: false.

require_email_verificationboolean

Require email verification before signing. Default: false.

copy_modestring

"ask", "always", or "disabled". Default: "ask".

notify_emailsarray

Array of email addresses to receive status notifications.

notify_eventsarray

Array of event types: "each_signature", "all_complete", "decline", "expiry".

send_signing_emailsboolean

Send signing request emails to signers who have email addresses. Default: false.

custom_email_bodystring

Custom email template. Supports variables: {slot_firstName}, {slot_lastName}, {slot_link}, {expiryDate}.

Response

json
{
  "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

bash
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

GET/api/v1/forms/:id/signing-sessions

Returns all signing sessions for a form.

Query Parameters

statusstring

Filter by status: "active", "fully_signed", "declined", "voided", "expired".

pageinteger

Page number (default: 1)

per_pageinteger

Results per page (default: 20)

Response

json
{
  "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

bash
curl -X GET "https://api.nueform.io/api/v1/forms/FORM_ID/signing-sessions?status=active" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Session

GET/api/v1/signing-sessions/:sessionId

Returns 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

bash
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456" \
  -H "Authorization: Bearer YOUR_API_KEY"

Void Session

POST/api/v1/signing-sessions/:sessionId/void

Voids an active signing session. All pending signing links are invalidated. Signed parties are notified and PDFs are watermarked "VOIDED".

Request Body

reasonstring

Reason for voiding the session.

Response

json
{
  "id": "ses_abc123def456",
  "status": "voided",
  "voided_at": "2026-03-27T15:30:00.000Z",
  "void_reason": "Terms changed, new agreement required"
}

Code Examples

bash
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

POST/api/v1/signing-sessions/:sessionId/resend/:slotNumber

Resends the signing request email to a specific signer. The signer must have an email address configured.

Response

json
{
  "success": true,
  "sent_to": "john@example.com",
  "slot_number": 1
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/resend/1" \
  -H "Authorization: Bearer YOUR_API_KEY"

List Signed Documents

GET/api/v1/signing-sessions/:sessionId/documents

Returns a list of signed documents for a completed session. Each document corresponds to one contract question in the form.

Response

json
{
  "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

bash
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/documents" \
  -H "Authorization: Bearer YOUR_API_KEY"

Get Signed Document

GET/api/v1/signing-sessions/:sessionId/documents/:docId

Downloads a specific signed document as a PDF file.

Response

Returns the PDF file with Content-Type: application/pdf.

Code Examples

bash
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

GET/api/v1/signing-sessions/:sessionId/audit

Returns the complete audit trail for a signing session, including view events, signatures, declines, and system events.

Response

json
{
  "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

bash
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/audit" \
  -H "Authorization: Bearer YOUR_API_KEY"

Resolve Short Code

GET/api/v1/s/:shortCode

Public endpoint (no authentication required). Resolves a signing short code to the form and session context needed to render the signing experience.

Response

json
{
  "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

bash
curl -X GET "https://api.nueform.io/api/v1/s/xK9f2"

Verify Password

POST/api/v1/s/:shortCode/verify-password

Public endpoint. Verifies the password for a password-protected signing session. Returns a temporary access token on success.

Request Body

passwordstring

The session password.

Response

json
{
  "success": true,
  "access_token": "tmp_abc123..."
}

Error Response (401)

json
{
  "error": "Invalid password"
}

Code Examples

bash
curl -X POST "https://api.nueform.io/api/v1/s/xK9f2/verify-password" \
  -H "Content-Type: application/json" \
  -d '{"password": "mySecretPass123"}'
Dernière mise à jour : 6 avril 2026