Skip to content

Documents

Documents are the core resource in inSigner. A document represents a PDF that requires signatures from one or more signers.

GET /api/v1/documents

Returns a paginated list of documents in your organization.

Query parameters

ParameterTypeDefaultDescription
cursorstringPagination cursor
limitinteger25Items per page (1–100)
statusstringFilter by status: draft, pending, completed, cancelled, expired, declined
searchstringSearch by document name (case-insensitive)

Required scope: documents.read

Terminal window
curl -X GET "https://app.insigner.co/api/v1/documents?limit=10&status=completed" \
-H "Authorization: Bearer isk_YOUR_API_KEY"

Response

{
"data": [
{
"id": "cm5x9abc123",
"name": "Sales Agreement Q3",
"status": "completed",
"signingType": "sequential",
"fileSize": 245000,
"expiresAt": "2026-11-28T12:00:00.000Z",
"completedAt": "2026-05-29T14:30:00.000Z",
"createdAt": "2026-05-28T12:00:00.000Z",
"updatedAt": "2026-05-29T14:30:00.000Z",
"templateId": null,
"campaignId": null,
"bulkSendId": null,
"folderId": null,
"_count": { "signers": 2, "fields": 5, "attachments": 1 }
}
],
"meta": {
"count": 1,
"hasMore": false,
"nextCursor": null
}
}

POST /api/v1/documents

Creates a new document in draft status. Upload the PDF file separately via the upload endpoint.

Required scope: documents.create

Request body

FieldTypeRequiredDescription
namestringDocument name (1–200 chars)
signingTypestring"sequential" (default) or "parallel"
messagestringMessage for signers (max 5000 chars)
expiresAtstringISO 8601 expiration date (must be in the future)
folderIdstringFolder ID to organize the document
Terminal window
curl -X POST https://app.insigner.co/api/v1/documents \
-H "Authorization: Bearer isk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "NDA - Acme Corp",
"signingType": "parallel",
"message": "Please review and sign this NDA.",
"expiresAt": "2026-12-31T23:59:59.000Z"
}'

Response 201 Created

{
"data": {
"id": "cm5x9def456",
"name": "NDA - Acme Corp",
"status": "draft",
"signingType": "parallel",
"message": "Please review and sign this NDA.",
"expiresAt": "2026-12-31T23:59:59.000Z",
"folderId": null,
"createdAt": "2026-05-28T12:00:00.000Z",
"updatedAt": "2026-05-28T12:00:00.000Z"
}
}

GET /api/v1/documents/{id}

Returns full document details including signers, fields, and attachments.

Required scope: documents.read

Terminal window
curl -X GET https://app.insigner.co/api/v1/documents/cm5x9abc123 \
-H "Authorization: Bearer isk_YOUR_API_KEY"

Response

{
"data": {
"id": "cm5x9abc123",
"name": "Sales Agreement Q3",
"status": "completed",
"signingType": "sequential",
"fileSize": 245000,
"documentHash": "a1b2c3d4...",
"signedFileHash": "e5f6g7h8...",
"message": "Please review and sign.",
"emailSubject": null,
"emailMessage": null,
"expiresAt": "2026-11-28T12:00:00.000Z",
"completedAt": "2026-05-29T14:30:00.000Z",
"reminderFrequency": null,
"otpMethod": null,
"requireKyc": false,
"createdAt": "2026-05-28T12:00:00.000Z",
"updatedAt": "2026-05-29T14:30:00.000Z",
"templateId": null,
"campaignId": null,
"bulkSendId": null,
"folderId": null,
"signers": [
{
"id": "sr_abc123",
"email": "[email protected]",
"name": "Jane Smith",
"role": "signer",
"status": "completed",
"order": 0,
"signedAt": "2026-05-29T14:30:00.000Z",
"createdAt": "2026-05-28T12:00:00.000Z"
}
],
"fields": [
{
"id": "fld_abc123",
"type": "signature",
"label": "Client Signature",
"page": 1,
"x": 100,
"y": 650,
"width": 200,
"height": 60,
"required": true,
"readOnly": false,
"assignedTo": 0,
"placeholder": null,
"defaultValue": null,
"options": null
}
],
"attachments": [],
"_count": { "signers": 1, "fields": 1, "attachments": 0 }
}
}

DELETE /api/v1/documents/{id}

Soft-deletes a document. Cannot delete documents in pending or action_required status — cancel them first.

Required scope: documents.delete

Terminal window
curl -X DELETE https://app.insigner.co/api/v1/documents/cm5x9abc123 \
-H "Authorization: Bearer isk_YOUR_API_KEY"

Response: 204 No Content


POST /api/v1/documents/{id}/upload

Generates a presigned upload URL for the document PDF. The document must be in draft status.

Required scope: documents.write

Request body

FieldTypeRequiredDescription
filenamestringOriginal filename (default: "document.pdf")
contentTypestringMIME type: application/pdf, image/png, image/jpeg, image/webp
fileSizenumberFile size in bytes (max 50 MB)
Terminal window
# Step 1: Get presigned URL
curl -X POST https://app.insigner.co/api/v1/documents/cm5x9abc123/upload \
-H "Authorization: Bearer isk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "contract.pdf", "contentType": "application/pdf", "fileSize": 125000}'
# Step 2: Upload file to the presigned URL
curl -X PUT "PRESIGNED_URL_FROM_RESPONSE" \
-H "Content-Type: application/pdf" \
--data-binary @contract.pdf

Response

{
"data": {
"uploadUrl": "https://storage.example.com/presigned?...",
"fileKey": "documents/usr_abc/cm5x9abc123/contract.pdf",
"expiresIn": 600,
"method": "PUT",
"headers": {
"Content-Type": "application/pdf"
}
}
}

POST /api/v1/documents/{id}/send

Sends the document for signing. Transitions status from draftpending and emails all signers.

Required scope: documents.send

Prerequisites:

  • Document must be in draft status
  • At least one signer must be added
  • At least one field must be added
Terminal window
curl -X POST https://app.insigner.co/api/v1/documents/cm5x9abc123/send \
-H "Authorization: Bearer isk_YOUR_API_KEY"

Response

{
"data": {
"id": "cm5x9abc123",
"status": "pending",
"signerCount": 2,
"sentAt": "2026-05-28T12:00:00.000Z"
}
}

GET /api/v1/documents/{id}/download

Downloads the document PDF. Returns the signed PDF if the document is completed, otherwise the original.

Required scope: documents.read

Terminal window
curl -X GET https://app.insigner.co/api/v1/documents/cm5x9abc123/download \
-H "Authorization: Bearer isk_YOUR_API_KEY" \
-o "document.pdf"

Response: Binary PDF with headers:

  • Content-Type: application/pdf
  • Content-Disposition: attachment; filename="Document Name - Signed.pdf"

POST /api/v1/documents/{id}/cancel

Cancels a pending document and notifies all pending signers. Only documents in pending or action_required status can be cancelled.

Required scope: documents.write

Terminal window
curl -X POST https://app.insigner.co/api/v1/documents/cm5x9abc123/cancel \
-H "Authorization: Bearer isk_YOUR_API_KEY"

Response

{
"data": {
"id": "cm5x9abc123",
"status": "cancelled",
"cancelledSigners": 2
}
}

GET /api/v1/documents/{id}/audit

Returns the audit log for a document — every action taken, with timestamps, IP addresses, and geo-location.

Required scope: documents.read

Query parameters

ParameterTypeDefaultDescription
cursorstringPagination cursor
limitinteger25Items per page (1–100)
Terminal window
curl -X GET "https://app.insigner.co/api/v1/documents/cm5x9abc123/audit?limit=50" \
-H "Authorization: Bearer isk_YOUR_API_KEY"

Response

{
"data": [
{
"id": "log_abc123",
"action": "document.created",
"details": "API: Created document \"Sales Agreement Q3\"",
"ipAddress": "203.0.113.42",
"userAgent": "curl/8.4.0",
"geoCity": "Bogotá",
"geoCountry": "CO",
"createdAt": "2026-05-28T12:00:00.000Z"
},
{
"id": "log_def456",
"action": "document.sent",
"details": "API: Sent to Jane Smith, John Doe",
"ipAddress": "203.0.113.42",
"userAgent": "curl/8.4.0",
"geoCity": "Bogotá",
"geoCountry": "CO",
"createdAt": "2026-05-28T12:05:00.000Z"
}
],
"meta": {
"count": 2,
"hasMore": false,
"nextCursor": null
}
}