HomeBlogEU-SES Signature Migration Guide
Guides

EU-SES Signature Migration Guide

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.

1. Base Domain Changes (Base URL)

The first step in the migration process is updating your API call domains to point to the new eSignature servers:

  • Production: change from https://ws.firmadigitale.com to https://esignature.openapi.com.
  • Sandbox: change from https://test.ws.firmadigitale.com to https://test.esignature.openapi.com.

2. Endpoint Mapping

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:

Simple Electronic Signature (SES) Request Creation

  • Old Endpoint: POST /firma_elettronica/base
  • New Endpoint: POST /EU-SES

Note: 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.

Retrieving the Signature / Request List

  • Old Endpoint: GET /firma_elettronica
  • New Endpoint: GET /signatures

Note: The new version supports advanced filtering features (by status, signature type, and certificate type).

Retrieving Information / Details for a Specific Request

  • Old Endpoint: GET /firma_elettronica/{id}
  • New Endpoint: GET /signatures/{id}/detail

Downloading the Signed Document

  • Old Endpoint: GET /firma_elettronica/{id}/download
  • New Endpoint: GET /signatures/{id}/signedDocument

Retrieving the Audit Trail

  • Old Endpoint: GET /firma_elettronica/{id}/audit
  • New Endpoint: GET /signatures/{id}/audit

Document Deletion (New Feature)

  • New Endpoint: DELETE /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.

3. Changes to UI Customization Mode

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:

1. Colors and Style (Theming)

All color parameters require a hexadecimal string (HEX) following the pattern: ^#[0-9a-fA-F]{6}$.

Sidebar Area

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).

Header & Footer Area

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.

Standard Buttons

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.

Signature / Workflow Buttons (Sign Button)

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.

2. Visibility and Behavior

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.

3. Integration and Redirection

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.

4. Document Retention in the New API

An important aspect of the new API to consider during migration is the retention policy. In the new eSignature API:

  • Signed, validated, and uploaded documents will remain available for download in the system for up to 90 days, after which they will be automatically deleted.
  • Structured signature data and the audit trail will be retained for up to 10 years.

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.

5. Request Body Differences (POST)

The payload for creating a new signature request (POST /EU-SES) has undergone significant changes compared to the previous endpoint POST /firma_elettronica/base.

Old Request Body (Example)

{
  "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..."
}

New Request Body (Example)

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

Payload Migration Mapping and Key Points

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.

Details of the New 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.

Complete Configuration Example:

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

6. New Signature Response Body

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).
email string The signer's email address.

Callback Response Body Details (DONE Status Example)

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.

Key Details Analysis

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).

Signer Details (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 [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.

Documents (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.

Recommended Action:

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.

EU-SES Signature Migration Guide
Share on