Istruzioni operative e mappatura delle funzionalità per il passaggio al protocollo EU-SES entro il 31 dicembre 2026.

Ecco una guida passo-passo per migrare dalla vecchia API Firma Digitale alla nuova API eSignature. Tieni presente che la vecchia API è stata deprecata e il suo supporto terminerà il 31 dicembre 2026.
Il primo passo per la migrazione è aggiornare i domini delle tue chiamate API per puntare ai nuovi server di eSignature:
https://ws.firmadigitale.com a https://esignature.openapi.com.https://test.ws.firmadigitale.com a https://test.esignature.openapi.com.I vecchi endpoint /firma_elettronica sono stati sostituiti e riorganizzati all'interno della nuova API eSignature, introducendo la differenziazione tra l'endpoint di creazione della firma /EU-SES e quello per accedere all’elenco storico delle firme /signatures e i dettagli di un singolo documento firmato /signatures/{id}/{actionType}.
Ecco la mappatura esatta per la migrazione:
POST /firma_elettronica/basePOST /EU-SESNote: Questo nuovo endpoint permette di creare una richiesta SES per uno o più firmatari. Il payload si baserà sul nuovo schema EU-SES_POST.
GET /firma_elettronicaGET /signaturesNote: La nuova versione permette funzionalità di filtraggio avanzate (per stato, tipo di firma e tipo di certificato).
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: La nuova API eSignature ti consente di eliminare esplicitamente un documento firmato, i dettagli e l'audit trail dal sistema in qualsiasi momento.
Nella vecchia API c'erano degli endpoint dedicati alla creazione e gestione di interfacce grafiche personalizzate (/firma_elettronica_ui) per l'iframe di firma. Questi endpoint (POST, GET e DELETE /firma_elettronica_ui) sono stati già contrassegnati come DEPRECATO.
Nella nuova API sono stati superati tutti i limiti della precedente e potranno essere create illimitate interfacce direttamente in fase di richiesta POST /EU-SES passando tutte le informazioni di personalizzazione nei campi previsti nelle opzioni.
Queste sono le opzioni opzionali per personalizzare l'interfaccia utente visibile all'utente finale o la modalità di firma:
Tutti i parametri di colore richiedono una stringa in formato esadecimale (HEX) che segua il pattern: ^#[0-9a-fA-F]{6}$.
| Proprietà | Tipo | Esempio | Descrizione |
|---|---|---|---|
| sidebarBackgroundColor | string | #55a4ed |
Colore dello sfondo della barra laterale. |
| sidebarTitleColor | string | #000000 |
Colore del titolo nella barra laterale. |
| sidebarTextColor | string | #55a4ed |
Colore del testo della barra laterale. |
| sidebarLogo | string($uri) | https://... | Logo in alto a sinistra (usato anche nelle email OTP). |
| Proprietà | Tipo | Esempio | Descrizione |
|---|---|---|---|
| headerBackgroundColor | string | #afcfed |
Colore dello sfondo dell'intestazione. |
| headerTitleColor | string | #000000 |
Colore del titolo dell'intestazione. |
| headerSubtitleColor | string | #55a4ed |
Colore del sottotitolo dell'intestazione. |
| footerBackgroundColor | string | #afcfed |
Colore dello sfondo del piè di pagina. |
| Proprietà | Tipo | Esempio | Descrizione |
|---|---|---|---|
| buttonTextColor | string | #000000 |
Colore del testo del pulsante. |
| buttonTextColorHover | string | #000000 |
Colore del testo al passaggio del mouse. |
| buttonBackgroundColor | string | #ffffff |
Colore dello sfondo del pulsante. |
| buttonBackgroundColorHover | string | #0a5aa6 |
Colore dello sfondo al passaggio del mouse. |
| Proprietà | Tipo | Esempio | Descrizione |
|---|---|---|---|
| signButtonTextColor | string | #55a4ed |
Colore testo del pulsante "Continua/Firma". |
| signButtonTextColorHover | string | #000000 |
Colore testo al passaggio del mouse. |
| signButtonBackgroundColor | string | #0a5aa6 |
Colore sfondo del pulsante "Continua/Firma". |
| signButtonBackgroundColorHover | string | #55a4ed |
Colore sfondo al passaggio del mouse. |
Questi parametri controllano la visualizzazione degli elementi dell'interfaccia. Il valore predefinito è false per tutti i campi booleani.
| Proprietà | Tipo | Default | Descrizione |
|---|---|---|---|
| hideSidebar | boolean | false | Se true, nasconde la barra laterale. |
| hideHeader | boolean | false | Se true, nasconde l'intestazione. |
| hideDownloadValidated | boolean | false | Se true, nasconde il tasto download del documento caricato. |
| hideDownloadSigned | boolean | false | Se true, nasconde il tasto download del documento firmato. |
Parametri utilizzati per gestire l'incorporamento dell'applicazione e il flusso di navigazione post-operazione.
| Proprietà | Tipo | Esempio / Note | Descrizione |
|---|---|---|---|
| iframeAncestors | array | ["https://site.com"] |
Elenco di URL autorizzati a incorporare l'app in un iframe. |
| completeUrl | string($uri) | https://... | URL a cui reindirizzare l'utente a procedura completata. |
| cancelUrl | string($uri) | https://... | URL a cui reindirizzare l'utente in caso di annullamento. |
Un aspetto importante della nuova API di cui tenere conto durante la migrazione è la policy di retention. Nella nuova API eSignature:
Assicurati che i tuoi processi di backend siano aggiornati per scaricare il file finale da /signatures/{id}/signedDocument e archiviarlo sui tuoi sistemi entro la finestra temporale di 90 giorni.
Il payload della richiesta di creazione di una nuova firma (POST /EU-SES) ha subito modifiche significative rispetto al vecchio 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": "Ciao Mario, {OTP} è il codice da inserire...",
"authentication": [
"sms"
],
"signatures": [{
"page": 1,
"x": "100",
"y": "200"
}]
}
],
"options": {
"signatureMode": [
"drawn"
],
"ui": {
"sidebarLogo": "https://www.tua-azienda.com/logo.png",
"buttonBackgroundColor": "#0a5aa6"
}
},
"inputDocuments": {
"sourceType": "base64",
"payload": "JVBERi0xLjQK..."
},
"callback": {
"url": "https://webhook.site/12345678"
}
}
| Vecchio Campo | Nuovo Campo/Struttura | Dettagli di Migrazione / Note |
|---|---|---|
| members | signers | Rinominato. |
| firstname | name | Rinominato. |
| lastname | surname | Rinominato. |
| phone | mobile | Rinominato. |
| signs | signatures | Rinominato. |
| position | x e y (separati) | Il vecchio campo position (es. "100,200,45,35") che definiva posizione e dimensione è stato sostituito dai campi x e y per la sola posizione. |
| content | inputDocuments | Rinominato. |
| (N/A) | message (in signers) | Nuovo campo: permette di personalizzare il testo del messaggio (SMS/Email) contenente l'OTP per il firmatario |
| (N/A) | authentication (in signers) | Nuovo campo: definisce il metodo di autenticazione richiesti per il firmatario (es. "sms", "email"). |
| (N/A) | options | Nuova sezione: raggruppa le impostazioni globali e di UI. |
| (N/A) | options.ui | Nuova sezione: raggruppa tutti i parametri di personalizzazione dell'interfaccia utente (come sidebarLogo, colori, ecc.), eliminando la necessità di endpoint separati per la UI. |
| callback.field | Vedi sotto | Vedi sotto. |
| callback.headers | Oggetto callback | Sostituito con l’oggetto di callback. |
L'oggetto callback (inviato nella richiesta POST /EU-SES) definisce la configurazione del webhook che la piattaforma eSignature utilizzerà per notificare l'applicazione esterna sui cambi di stato della richiesta di firma.
Di seguito sono descritti i campi supportati nella configurazione del callback:
| Proprietà | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| url | string($uri) | Sì | L'endpoint HTTP(S) a cui inviare le notifiche webhook. |
| method | string | No | JSON (predefinito) o FORM. |
| field | string | No | Specifica il nome del campo in cui iniettare il payload di callback. Questo campo è rilevante solo se method è impostato su FORM. |
| retry | integer | No | Numero massimo di tentativi in caso di errore. |
| headers | Oggetto | No | Coppie chiave-valore di header HTTP personalizzati da includere nella chiamata al webhook (es. per autenticazione/sicurezza) |
| custom | Oggetto | No | Un oggetto contenente metadati personalizzati dall'utente (es. ID di pratiche interne). Questi dati verranno rispediti all'interno del body di callback per facilitare la correlazione nel sistema esterno |
{
"callback": {
"url": "https://www.tuosito.com/api/webhook/firma",
"method": "JSON",
"field": "data",
"retry": 3,
"headers": {
"Authorization": "Bearer tuo_token_di_sicurezza",
"X-Custom-Header": "valore_personalizzato"
},
"custom": {
"id_pratica_interna": "PRT-98765",
"dipartimento": "Risorse Umane"
}
}
}
Il body di risposta della chiamata:
POST /EU-SES
è stato arricchito nella nuova API eSignature per fornire immediatamente non solo l'ID univoco della richiesta creata e l'URL di reindirizzamento per l'interfaccia di firma, ma anche lo stato aggiornato dell'intera richiesta, l'ID dell'utente firmatario, e l'URL specifico per l'accesso del firmatario.
Di seguito un esempio del body di risposta esteso previsto:
{
"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": "Ciao Mario, {OTP} è il codice da inserire per confermare la procedura di firma",
"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": {}
}}
| Campo data (Top-Level) | TIpo | Descrizione |
|---|---|---|
| id | string | L'ID univoco della richiesta di firma creata. Questo ID sarà utilizzato in tutti gli endpoint successivi (/signatures/{id}/...). |
| state | string | Lo stato attuale della richiesta di firma (es. WAIT_VALIDATION, WAIT_SIGN, WAIT_SIGNERS, WAIT_OTP, ERROR, CANCELLED, DONE ). |
| certificateType | string | Il tipo di firma elettronica richiesta (EU-SES). |
| signers | array | Un array contenente i dettagli di ciascun firmatario. |
| Campo signers | Tipo | Descrizione |
|---|---|---|
| id | string | L'ID univoco assegnato al firmatario |
| url | string($uri) | L'URL a cui reindirizzare l'utente o da incorporare in un iframe per avviare il processo di firma per questo specifico firmatario |
| state | string | Lo stato del firmatario (NEW, DONE). |
| mobile | string | Il numero di cellulare utilizzato per l'autenticazione (se configurato).. |
| string | L'indirizzo email del firmatario. |
L'esempio fornito è un tipico body di callback inviato dalla nuova API eSignature quando lo stato di una richiesta di firma passa a un punto significativo, in questo caso, DONE.
| Campo | Valore (Esempio) | Descrizione |
|---|---|---|
| id | 69aaada4adb8b5c80203553d | ID univoco della richiesta di firma. |
| state | DONE | Stato finale: la procedura di firma per tutti i firmatari è stata completata. |
| certificateType | EU-SES | Tipo di firma elettronica utilizzata (Firma Elettronica Semplice EU-SES).. |
| updatedAt | 2026-03-06 10:35:14.183+00:00 | Data e ora dell'ultimo aggiornamento dello stato (il completamento). |
signers Array)| Campo | Valore (Esempio) | Descrizione |
|---|---|---|
| id (firmatario) | 69aaada4adb8b5c80203553d | ID univoco della richiesta di firma. |
| state (firmatario) | DONE | Stato del firmatario: ha completato la sua azione di firma. |
| mobile | +393333333333 | Numero utilizzato per l'autenticazione via SMS |
| [email protected] | Indirizzo email del firmatario. | |
| signatures | [{"page":1,"x":10,"y":10, "formId":"Mario Rossi [0][0]"}] | Indica la posizione della firma sul documento (Pagina 1, coordinate x:10, y:10). |
| mobileValidation | (Oggetto) | Contiene i dettagli della convalida OTP (incluso otpAttempts: 1). |
| webValidation | (Oggetto) | Contiene i dettagli di tracciamento dell'interazione web dell'utente durante il processo di firma. |
document)In uno stato DONE, vengono fornite informazioni dettagliate sia sul documento originale validato che sul documento firmato:
| Sotto-campo | Oggetto (Esempio) | Descrizione |
|---|---|---|
| validatedDocument | (Oggetto) | Dettagli sul documento originale convertito e validato prima della firma (es. conteggio pagine, metadati PDF). Contiene id, md5, sha256, size e mimetype. |
| signedDocument | (Oggetto) | Riferimento al file finale firmato. Contiene l'id (69aaadcf31095e0a57033332), md5, sha256, size e mimetype. |
Dato che lo stato è DONE e il campo signedDocument è presente, il passo successivo nel tuo sistema dovrebbe essere quello di utilizzare l'ID principale (69aaada4adb8b5c80203553d) per effettuare una chiamata GET /signatures/{id}/signedDocument e scaricare il file firmato. Ricorda che il documento è conservato solo per 90 giorni.