API Documentation
Create and manage electronic signature documents programmatically with the ItaSign REST API
Why Our API?
RESTful API
Simple, predictable REST endpoints with standard HTTP methods
Comprehensive Docs
Interactive API documentation with live code examples
Multiple SDKs
Official SDKs for Python, Node.js, PHP, and .NET
Webhook Support
Real-time notifications for document events
No Rate Limits
Unlimited API calls for all customers
Free for Development
Test with free SES/AdES signatures before going live
Quick Start
Quick Start
Create an API Key
Go to your Organization Settings and create a new API key with 'documents:create' and 'documents:read' permissions
Upload Your PDF
Convert your PDF to base64 or upload it to storage first
Create & Send Document
Use POST /api/v1/documents with your PDF and signers. Set send: true to send immediately, or send: false to save as draft
Monitor Status
Poll the /api/v1/documents/{id}/status endpoint to track signing progress
API Endpoints
Browse all available API endpoints
https://itasign.comAuthentication
All API requests require authentication using an API key. Include your API key in the request headers:
Generate API keys from your organization settings page.
Documents
/api/v1/documentsCreate a document with auto-signature (no predefined signature fields). Signers draw their signature when they open the document.
Parameters
titlestring (required) - Document titlefilestring (required) - Base64 encoded PDF or storage pathfile_typestring (optional) - "base64" (default) or "storage_path"signersarray (required) - Array of signer objects (at least one)signers[].namestring (required) - Signer full namesigners[].emailstring (optional) - Email address for notificationssigners[].signing_ordernumber (optional) - Order of signingsendboolean (optional) - true to send immediately, false for draft (default)messagestring (optional) - Custom message for signerssignature_levelstring (optional) - "ses" (default), "ades", "ades_t"verification_modestring (optional) - "standard", "email_otp", "sms_otp", "in_person"external_referencestring (optional) - Your external reference IDredirect_urlstring (optional) - URL to redirect after signingExample
// Create and send immediately
{
"title": "Service Agreement",
"file": "JVBERi0xLjQK...", // base64 PDF
"signers": [
{
"name": "Mario Rossi",
"email": "[email protected]"
}
],
"send": true,
"message": "Please sign this agreement."
}
// Response:
{
"success": true,
"document": {
"id": "abc-123",
"title": "Service Agreement",
"status": "pending"
},
"signers": [{
"id": "signer-1",
"name": "Mario Rossi",
"email": "[email protected]",
"signing_url": "https://itasign.com/sign/xyz789"
}]
}/api/v1/documents/{id}/sendSend a draft document for signing. Notifies all signers via email.
Parameters
idstring (required) - Document IDExample
Response:
{
"success": true,
"document": {
"id": "abc-123",
"status": "pending"
},
"notified_count": 2
}/api/v1/documents/from-templateCreate a new document from a template with pre-filled data
Parameters
template_slugstring (required) - Template slug identifiertitlestring (optional) - Document titleexternal_referencestring (optional) - Your external reference IDsignersarray (required) - Array of signer objects. Each signer requires at least ONE identifier, but multiple identifiers are RECOMMENDEDsigners[].rolestring (required) - Role name from templatesigners[].namestring (required) - Signer full namesigners[].emailstring (optional) - Email address (recommended for notifications)signers[].phone_numberstring (optional) - Phone number (requires country_code)signers[].country_codestring (optional) - ISO country code (e.g., +39, +1)signers[].unique_identifierstring (optional) - Tax code, DB ID, or other identifiersigners[].identifier_typestring (optional) - Type of unique identifier (e.g., tax_code, db_id)dataobject (optional) - Key-value pairs for field substitutionredirect_urlstring (optional) - URL to redirect after signingExample
{
"template_slug": "privacy-consent",
"title": "Privacy Consent - Mario Rossi",
"external_reference": "patient-123",
"signers": [
{
"role": "patient",
"name": "Mario Rossi",
"email": "[email protected]",
"phone_number": "3401234567",
"country_code": "+39",
"unique_identifier": "RSSMRA80A01H501U",
"identifier_type": "tax_code"
},
{
"role": "witness",
"name": "Luigi Bianchi",
"phone_number": "3331234567",
"country_code": "+39"
},
{
"role": "guardian",
"name": "Anna Verdi",
"email": "[email protected]",
"unique_identifier": "VRDNNA85M45F205K",
"identifier_type": "tax_code"
}
],
"data": {
"firstName": "Mario",
"lastName": "Rossi",
"address": "Via Roma 1, Milano"
},
"redirect_url": "https://yourapp.com/success"
}/api/v1/documents/{id}/statusGet document status and signer progress
Parameters
idstring (required) - Document IDExample
Response:
{
"success": true,
"documentId": "abc-123",
"status": "partially_signed",
"signerStatuses": [
{
"id": "signer-1",
"name": "Mario Rossi",
"email": "[email protected]",
"phone_number": "3401234567",
"country_code": "+39",
"unique_identifier": "RSSMRA80A01H501U",
"identifier_type": "tax_code",
"status": "signed",
"signingOrder": 1,
"signedTime": "2025-12-26T10:00:00Z"
},
{
"id": "signer-2",
"name": "Luigi Bianchi",
"phone_number": "3331234567",
"country_code": "+39",
"status": "viewed",
"signingOrder": 2
},
{
"id": "signer-3",
"name": "Anna Verdi",
"email": "[email protected]",
"unique_identifier": "VRDNNA85M45F205K",
"identifier_type": "tax_code",
"status": "pending",
"signingOrder": 3
}
],
"createdAt": "2025-12-26T09:00:00Z",
"expiresAt": "2025-12-27T09:00:00Z"
}/api/v1/documents/{id}/voidVoid/cancel a document to prevent further signing
Parameters
idstring (required) - Document IDreasonstring (optional) - Reason for voidingExample
Request:
{
"reason": "Document no longer needed"
}
Response:
{
"success": true,
"document": {
"id": "abc-123",
"status": "voided",
"voided_at": "2025-12-26T12:00:00Z"
}
}/api/v1/documents/{id}/downloadDownload signed document in PAdES (PDF) or CAdES (P7M) format. Only available for completed documents.
Parameters
idstring (required) - Document IDformatstring (optional) - "pades" (default) returns PDF, "cades" returns P7MExample
# Download as PAdES (PDF)
curl -H "X-API-Key: itasign_xxx" \
"https://itasign.com/api/v1/documents/abc-123/download" \
-o document.pdf
# Download as CAdES (P7M)
curl -H "X-API-Key: itasign_xxx" \
"https://itasign.com/api/v1/documents/abc-123/download?format=cades" \
-o document.pdf.p7m
# Response Headers (PAdES):
Content-Type: application/pdf
Content-Disposition: attachment; filename="Document Title.pdf"
# Response Headers (CAdES):
Content-Type: application/x-pkcs7-mime
Content-Disposition: attachment; filename="Document Title.pdf.p7m"Templates
/api/v1/templatesList all active templates in your organization
Example
Response:
{
"success": true,
"templates": [
{
"id": "template-1",
"name": "Privacy Consent",
"slug": "privacy-consent",
"description": "Patient privacy consent form",
"is_active": true,
"created_at": "2025-12-01T10:00:00Z"
}
]
}/api/v1/templates/{slug}Get template details by slug
Parameters
slugstring (required) - Template slug identifierExample
Response:
{
"success": true,
"template": {
"id": "template-1",
"name": "Privacy Consent",
"slug": "privacy-consent",
"description": "Patient privacy consent form",
"signers": [
{
"role_name": "patient",
"signing_order": 1
},
{
"role_name": "organization",
"signing_order": 2
}
],
"fields": [
{
"field_type": "text",
"label": "First Name",
"default_value": "{{firstName}}",
"is_required": true
}
]
}
}Reference
Common values and enumerations
Document Status Values
draftDocument created but not sent for signingpendingSent and waiting for first signaturepartially_signedAt least one signer has signedcompletedAll signers have signeddeclinedA signer declined to signexpiredDocument expired before completionvoidedDocument cancelled by creatorSigner Status Values
pendingCreated but not yet notifiednotifiedEmail sent to signerviewedSigner opened the signing linksignedSigner completed signingdeclinedSigner refused to signField Types
signatureSignature capture fieldinitialInitial/paraph capture fieldtextText input fielddateDate input fieldSigner Identifiers
Each signer must have at least one identifier, but providing multiple identifiers is strongly recommended:
emailEmail address for notification and identificationphone_number + country_codePhone number with ISO country code (e.g., +39, +1)unique_identifierTax code, DB ID, national ID, or other unique identifierBest Practice:
Provide all available identifiers (email + phone + unique_identifier) for each signer. This enables multiple contact methods, better tracking, and fallback options if one method fails.
Note: If providing phone_number, country_code is required. If providing country_code, phone_number is required.
Template Placeholders
Use placeholders in template field default values to substitute with data from your API request:
# Template field default_value:
"{{firstName}} {{lastName}}"
# API request data:
{"firstName": "Mario", "lastName": "Rossi"}
# Result:
"Mario Rossi"Signature Types
Choose the right signature level for your integration
Simple Electronic Signature
Free unlimited signatures
Advanced Electronic Signature
Free with cryptographic certificates
AdES with Timestamp
€0.25/doc - Long-term validity
Qualified Electronic Signature
€0.35/doc - Maximum legal value
Need Help?
Check out our documentation or contact our support team.