Create Session
Create a signing session from scratch - no template or PDF required. Documents are written in the block document format; AirSign handles layout and signature field placement. By default the session is created as a draft and the response includes a draftUrl that opens the session in the AirSign editor for review before sending. Set sendImmediately: true to skip review and email the signing invitations straight away. Previously uploaded PDFs (see Upload File) can be attached as additional reference documents.
Endpoint
POST https://api.airsign.com.au/api/v1/Session
Headers
| Name | Value | Required | Description |
|---|
| Content-Type | application/json | Yes | Specifies the format of the request body |
| Authorization | Bearer {access_token} | Yes | Bearer token with the write:sessions scope |
Request Body
| Parameter | Type | Required | Description |
|---|
| name | string | Yes | Session name (1-50 characters) |
| files | array | Yes | 1-10 file entries. Each is either { "type": "blocks", "document": {...} } (a block document) or { "type": "uploadedPdf", "fileId": "...", "fileName": "..." } (a previously uploaded PDF). At least one block document is required - signature fields always live on block documents; uploaded PDFs are reference material |
| recipients | array | Yes | 1-20 recipients, each with key, name, email and optional signingOrder. Keys are referenced by signatureBlock blocks in the documents |
| sendImmediately | boolean | No | Whether to email signing invitations now or leave the session in draft for review. Defaults to false |
| expiryDays | number | No | Days before the session expires (1-730). Requires the Session Expiry plan feature |
| reminderEnabled | boolean | No | Whether to send automatic reminders. Requires the Session Expiry plan feature |
| reminderFrequency | string | No | daily, weekly, monthly, or quarterly. Requires the Session Expiry plan feature |
Example Request
curl --location 'https://api.airsign.com.au/api/v1/Session' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {access_token}' \
--data-raw '{
"name": "NDA - Acme Pty Ltd",
"sendImmediately": false,
"files": [{
"type": "blocks",
"document": {
"format": "blocks",
"title": "Mutual NDA",
"blocks": [
{ "type": "heading", "text": "1. Purpose" },
{ "type": "paragraph", "text": "The parties wish to exchange confidential information." },
{ "type": "spacer", "height": 24 },
{ "type": "signatureBlock", "recipient": "partyA", "label": "Party A" },
{ "type": "signatureBlock", "recipient": "partyB", "label": "Party B" }
]
}
}],
"recipients": [
{ "key": "partyA", "name": "Ada Lovelace", "email": "{valid_email}" },
{ "key": "partyB", "name": "Charles Babbage", "email": "{valid_email_2}" }
]
}'
Response
Status: 200 OK. For drafts, draftUrl opens the session in the AirSign editor so the document can be verified (and tweaked) before sending - send it later with Send Session.
{
"name": "NDA - Acme Pty Ltd",
"sessionId": "{uuid}",
"status": "draft",
"selfSignOnly": false,
"createdAt": "2026-06-12 10:15:00",
"updatedAt": "2026-06-12 10:15:00",
"files": [
{
"fileId": null,
"fileName": "Mutual NDA.pdf",
"zones": [ ... ],
"sessionId": "{uuid}"
}
],
"recipients": [
{ "recipientId": "{uuid}", "status": "draft", "name": "Ada Lovelace", "email": "{valid_email}", "signingOrder": 1 },
{ "recipientId": "{uuid}", "status": "draft", "name": "Charles Babbage", "email": "{valid_email_2}", "signingOrder": 2 }
],
"draftUrl": "https://app.airsign.com.au/authenticated/main/sessions/session/{uuid}",
"sent": false
}
Error Responses
| Status | Description |
|---|
400 | Invalid request body, or the document failed layout validation (DOCUMENT_VALIDATION_FAILED with a structured issues list - see the format reference) |
401 | Missing or invalid authentication token |
403 | Session limit reached for your plan (SESSION_LIMIT_REACHED), or a setting requires a plan feature (PLAN_FEATURE_REQUIRED) |
404 | A referenced uploaded file was not found (FILE_NOT_FOUND) |