Operational instructions and feature mapping for the transition to the EU-SES protocol by December 31, 2026.

Here is a step-by-step guide to migrate from the old Digital Signature API to the new eSignature API. Please note that the old API has been deprecated and support for it will end on December 31, 2026.
The first step in the migration process is updating your API call domains to point to the new eSignature servers:
https://ws.firmadigitale.com to https://esignature.openapi.com.https://test.ws.firmadigitale.com to https://test.esignature.openapi.com.The old /firma_elettronica endpoints have been replaced and reorganized within the new eSignature API, introducing a distinction between the signature creation endpoint /EU-SES, the endpoint used to access the historical list of signatures /signatures, and the endpoint for retrieving details of a single signed document /signatures/{id}/{actionType}.
Below is the exact mapping for the migration:
POST /firma_elettronica/basePOST /EU-SESNote: This new endpoint allows creating an SES request for one or more signers. The payload will be based on the new EU-SES_POST schema.
GET /firma_elettronicaGET /signaturesNote: The new version supports advanced filtering features (by status, signature type, and certificate type).
GET /firma_elettronica/{id}GET /signatures/{id}/detailGET /firma_elettronica/{id}/downloadGET /signatures/{id}/signedDocumentGET /firma_elettronica/{id}/auditGET /signatures/{id}/auditDELETE /signatures/{id}Note: The new eSignature API allows you to explicitly delete a signed document, its details, and the audit trail from the system at any time.
In the previous API there were dedicated endpoints for creating and managing custom graphical interfaces (/firma_elettronica_ui) for the signature iframe. These endpoints (POST, GET and DELETE /firma_elettronica_ui) have already been marked as DEPRECATED.
The new API overcomes all the limitations of the previous version and allows unlimited interfaces to be created directly during the POST /EU-SES request by passing all customization information through the available option fields.
These are the optional settings used to customize the user interface displayed to the end user or the signing mode:
All color parameters require a hexadecimal string (HEX) following the pattern: ^#[0-9a-fA-F]{6}$.
| Property | Type | Example | Description |
|---|---|---|---|
| sidebarBackgroundColor | string | #55a4ed |
Sidebar background color. |
| sidebarTitleColor | string | #000000 |
Sidebar title color. |
| sidebarTextColor | string | #55a4ed |
Sidebar text color. |
| sidebarLogo | string($uri) | https://... | Logo displayed at the top left (also used in OTP emails). |
| Property | Type | Example | Description |
|---|---|---|---|
| headerBackgroundColor | string | #afcfed |
Header background color. |
| headerTitleColor | string | #000000 |
Header title color. |
| headerSubtitleColor | string | #55a4ed |
Header subtitle color. |
| footerBackgroundColor | string | #afcfed |
Footer background color. |
| Property | Type | Example | Description |
|---|---|---|---|
| buttonTextColor | string | #000000 |
Button text color. |
| buttonTextColorHover | string | #000000 |
Text color on hover. |
| buttonBackgroundColor | string | #ffffff |
Button background color. |
| buttonBackgroundColorHover | string | #0a5aa6 |
Background color on hover. |
| Property | Type | Example | Description |
|---|---|---|---|
| signButtonTextColor | string | #55a4ed |
"Continue/Sign" button text color. |
| signButtonTextColorHover | string | #000000 |
Text color on hover. |
| signButtonBackgroundColor | string | #0a5aa6 |
"Continue/Sign" button background color. |
| signButtonBackgroundColorHover | string | #55a4ed |
Background color on hover. |
These parameters control the display of interface elements. The default value is false for all boolean fields.
| Property | Type | Default | Description |
|---|---|---|---|
| hideSidebar | boolean | false | If true, hides the sidebar. |
| hideHeader | boolean | false | If true, hides the header. |
| hideDownloadValidated | boolean | false | If true, hides the download button for the uploaded document. |
| hideDownloadSigned | boolean | false | If true, hides the download button for the signed document. |
Parameters used to manage application embedding and the post-operation navigation flow.
| Property | Type | Example / Notes | Description |
|---|---|---|---|
| iframeAncestors | array | ["https://site.com"] |
List of URLs authorized to embed the application within an iframe. |
| completeUrl | string($uri) | https://... | URL to redirect the user to when the process is completed. |
| cancelUrl | string($uri) | https://... | URL to redirect the user to if the process is cancelled. |
An important aspect of the new API to consider during migration is the retention policy. In the new eSignature API:
Make sure your backend processes are updated to download the final file from /signatures/{id}/signedDocument and archive it within your own systems during the 90-day retention window.
The payload for creating a new signature request (POST /EU-SES) has undergone significant changes compared to the previous endpoint POST /firma_elettronica/base.
{
"members": [
{
"firstname": "Mario",
"lastname": "Rossi",
"email": "[email protected]",
"phone": "+393333333333",
"signs": [
{
"page": 1,
"position": "100,200,45,35"
}
]
}
],
"callback": {
"headers": {
"custom": "test"
},
"field": "data",
"url": "https://webhook.site/12345678"
},
"content": "JVBERi0xLjQNCiWio4+TD..."
}
{
"signers": [
{
"name": "Mario",
"surname": "Rossi",
"email": "[email protected]",
"mobile": "+393333333333",
"message": "Hello Mario, {OTP} is the code to enter...",
"authentication": [
"sms"
],
"signatures": [{
"page": 1,
"x": "100",
"y": "200"
}]
}
],
"options": {
"signatureMode": [
"drawn"
],
"ui": {
"sidebarLogo": "https://www.your-company.com/logo.png",
"buttonBackgroundColor": "#0a5aa6"
}
},
"inputDocuments": {
"sourceType": "base64",
"payload": "JVBERi0xLjQK..."
},
"callback": {
"url": "https://webhook.site/12345678"
}
}
| Old Field | New Field/Structure | Migration Details / Notes |
|---|---|---|
| members | signers | Renamed. |
| firstname | name | Renamed. |
| lastname | surname | Renamed. |
| phone | mobile | Renamed. |
| signs | signatures | Renamed. |
| position | x and y (separate) | The previous position field (e.g. "100,200,45,35"), which defined both position and dimensions, has been replaced by the x and y fields for position only. |
| content | inputDocuments | Renamed. |
| (N/A) | message (inside signers) | New field: allows customization of the message text (SMS/Email) containing the OTP for the signer. |
| (N/A) | authentication (inside signers) | New field: defines the authentication methods required for the signer (e.g. "sms", "email"). |
| (N/A) | options | New section: groups global settings and UI configurations. |
| (N/A) | options.ui | New section: groups all user interface customization parameters (such as sidebarLogo, colors, etc.), removing the need for separate UI endpoints. |
| callback.field | See below | See below. |
| callback.headers | callback object | Replaced by the callback object. |
The callback object (sent within the POST /EU-SES request) defines the webhook configuration that the eSignature platform will use to notify the external application about signature request status changes.
The supported callback configuration fields are described below:
| Property | Type | Required | Description |
|---|---|---|---|
| url | string($uri) | Yes | The HTTP(S) endpoint where webhook notifications will be sent. |
| method | string | No | JSON (default) or FORM. |
| field | string | No | Specifies the field name where the callback payload should be injected. This field is only relevant when method is set to FORM. |
| retry | integer | No | Maximum number of retry attempts in case of failure. |
| headers | Object | No | Custom HTTP header key-value pairs to include in webhook calls (for authentication/security purposes). |
| custom | Object | No | An object containing user-defined metadata (e.g. internal case IDs). These values will be sent back within the callback body to simplify correlation within external systems. |
{
"callback": {
"url": "https://www.yoursite.com/api/webhook/signature",
"method": "JSON",
"field": "data",
"retry": 3,
"headers": {
"Authorization": "Bearer your_security_token",
"X-Custom-Header": "custom_value"
},
"custom": {
"internal_case_id": "PRT-98765",
"department": "Human Resources"
}
}
}
The response body returned by the request:
POST /EU-SES
has been enhanced in the new eSignature API to immediately provide not only the unique ID of the created request and the redirect URL for the signing interface, but also the updated status of the entire request, the signer user ID, and the specific URL for signer access.
Below is an example of the extended response body:
{
"data": {
"id": "69aaa647adb8b5c802035539",
"errorNumber": null,
"errorMessage": null,
"updatedAt": "2026-03-06 10:02:47.980+00:00",
"createdAt": "2026-03-06 10:02:47.979+00:00",
"certificateType": "EU-SES",
"state": "WAIT_VALIDATION",
"signatureType": "pades",
"signers": [
{
"authentication": [
"sms"
],
"name": "Mario",
"state": "NEW",
"surname": "Rossi",
"mobile": "+393333333333",
"mobileEditable": false,
"email": "[email protected]",
"emailEditable": false,
"id": "b99f85d9-8482-4970-b57d-ff6703a98818",
"url":"https://esign.openapi.com/b99f85d9-8482-4970-b57d-ff6703a98818",
"language": "browser",
"message": "Hello Mario, {OTP} is the code to enter to confirm the signing process",
"mobileValidation": {
"isPossible": true,
"isValid": true,
"regionCode": "IT",
"countryCode": "39",
"isValidNumberForRegion": true,
"numberType": "MOBILE",
"otpAttempts": 0
}
}
],
"options": {
"asyncDocumentsValidation": true,
"asyncSignature": false,
"signatureMode": [
"typed"
],
"withTimestamp": false,
"timezone": "UTC"
},
"document": {}
}}
| Top-Level data Field | Type | Description |
|---|---|---|
| id | string | The unique ID of the created signature request. This ID will be used across all subsequent endpoints (/signatures/{id}/...). |
| state | string | The current status of the signature request (e.g. WAIT_VALIDATION, WAIT_SIGN, WAIT_SIGNERS, WAIT_OTP, ERROR, CANCELLED, DONE). |
| certificateType | string | The requested electronic signature type (EU-SES). |
| signers | array | An array containing details for each signer. |
| signers Field | Type | Description |
|---|---|---|
| id | string | The unique ID assigned to the signer. |
| url | string($uri) | The URL to redirect the user to, or embed within an iframe, in order to start the signing process for this specific signer. |
| state | string | The signer status (NEW, DONE). |
| mobile | string | The mobile number used for authentication (if configured). |
| string | The signer's email address. |
The provided example represents a typical callback body sent by the new eSignature API when the status of a signature request reaches a significant state, in this case DONE.
| Field | Value (Example) | Description |
|---|---|---|
| id | 69aaada4adb8b5c80203553d | Unique signature request ID. |
| state | DONE | Final status: the signing process has been completed for all signers. |
| certificateType | EU-SES | Electronic signature type used (EU-SES Simple Electronic Signature). |
| updatedAt | 2026-03-06 10:35:14.183+00:00 | Date and time of the latest status update (completion). |
signers Array)| Field | Value (Example) | Description |
|---|---|---|
| id (signer) | 69aaada4adb8b5c80203553d | Unique signer ID. |
| state (signer) | DONE | Signer status: the signing action has been completed. |
| mobile | +393333333333 | Phone number used for SMS authentication. |
| [email protected] | Signer email address. | |
| signatures | [{"page":1,"x":10,"y":10, "formId":"Mario Rossi [0][0]"}] | Indicates the signature position on the document (Page 1, coordinates x:10, y:10). |
| mobileValidation | (Object) | Contains OTP validation details (including otpAttempts: 1). |
| webValidation | (Object) | Contains tracking details of the user's web interaction during the signing process. |
document Section)In a DONE state, detailed information is provided both for the validated original document and for the signed document:
| Sub-field | Object (Example) | Description |
|---|---|---|
| validatedDocument | (Object) | Details about the original document converted and validated before signing (e.g. page count, PDF metadata). Includes id, md5, sha256, size, and mimetype. |
| signedDocument | (Object) | Reference to the final signed file. Includes id (69aaadcf31095e0a57033332), md5, sha256, size, and mimetype. |
Since the status is DONE and the signedDocument field is available, the next step in your system should be to use the primary ID (69aaada4adb8b5c80203553d) to execute a GET /signatures/{id}/signedDocument request and download the signed file. Remember that the document is retained for only 90 days.