Instructions opérationnelles et correspondance des fonctionnalités pour la transition vers le protocole EU-SES avant le 31 décembre 2026.

Voici un guide étape par étape pour migrer de l'ancienne API Signature Numérique vers la nouvelle API eSignature. Veuillez noter que l'ancienne API a été dépréciée et que son support prendra fin le 31 décembre 2026.
La première étape de la migration consiste à mettre à jour les domaines de vos appels API afin qu'ils pointent vers les nouveaux serveurs eSignature :
https://ws.firmadigitale.com à https://esignature.openapi.com.https://test.ws.firmadigitale.com à https://test.esignature.openapi.com.Les anciens endpoints /firma_elettronica ont été remplacés et réorganisés au sein de la nouvelle API eSignature, introduisant une distinction entre l’endpoint de création de signature /EU-SES, l’endpoint permettant d’accéder à l’historique des signatures /signatures, et celui permettant d’obtenir les détails d’un document signé spécifique /signatures/{id}/{actionType}.
Voici la correspondance exacte pour la migration :
POST /firma_elettronica/basePOST /EU-SESRemarque : ce nouvel endpoint permet de créer une demande SES pour un ou plusieurs signataires. Le payload sera basé sur le nouveau schéma EU-SES_POST.
GET /firma_elettronicaGET /signaturesRemarque : la nouvelle version prend en charge des fonctionnalités avancées de filtrage (par état, type de signature et type de certificat).
GET /firma_elettronica/{id}GET /signatures/{id}/detailGET /firma_elettronica/{id}/downloadGET /signatures/{id}/signedDocumentGET /firma_elettronica/{id}/auditGET /signatures/{id}/auditDELETE /signatures/{id}Remarque : la nouvelle API eSignature vous permet de supprimer explicitement un document signé, ses détails et la piste d’audit du système à tout moment.
Dans l’ancienne API, il existait des endpoints dédiés à la création et à la gestion d’interfaces graphiques personnalisées (/firma_elettronica_ui) pour l’iframe de signature. Ces endpoints (POST, GET et DELETE /firma_elettronica_ui) ont déjà été marqués comme DÉPRÉCIÉ.
La nouvelle API supprime toutes les limitations de la précédente et permet de créer un nombre illimité d’interfaces directement lors de la requête POST /EU-SES en transmettant toutes les informations de personnalisation dans les champs d’options disponibles.
Voici les paramètres optionnels permettant de personnaliser l’interface utilisateur visible par l’utilisateur final ou le mode de signature :
Tous les paramètres de couleur nécessitent une chaîne hexadécimale (HEX) suivant le modèle : ^#[0-9a-fA-F]{6}$.
| Propriété | Type | Exemple | Description |
|---|---|---|---|
| sidebarBackgroundColor | string | #55a4ed |
Couleur d’arrière-plan de la barre latérale. |
| sidebarTitleColor | string | #000000 |
Couleur du titre dans la barre latérale. |
| sidebarTextColor | string | #55a4ed |
Couleur du texte de la barre latérale. |
| sidebarLogo | string($uri) | https://... | Logo affiché en haut à gauche (également utilisé dans les e-mails OTP). |
| Propriété | Type | Exemple | Description |
|---|---|---|---|
| headerBackgroundColor | string | #afcfed |
Couleur d’arrière-plan de l’en-tête. |
| headerTitleColor | string | #000000 |
Couleur du titre de l’en-tête. |
| headerSubtitleColor | string | #55a4ed |
Couleur du sous-titre de l’en-tête. |
| footerBackgroundColor | string | #afcfed |
Couleur d’arrière-plan du pied de page. |
| Propriété | Type | Exemple | Description |
|---|---|---|---|
| buttonTextColor | string | #000000 |
Couleur du texte du bouton. |
| buttonTextColorHover | string | #000000 |
Couleur du texte au survol. |
| buttonBackgroundColor | string | #ffffff |
Couleur d’arrière-plan du bouton. |
| buttonBackgroundColorHover | string | #0a5aa6 |
Couleur d’arrière-plan au survol. |
| Propriété | Type | Exemple | Description |
|---|---|---|---|
| signButtonTextColor | string | #55a4ed |
Couleur du texte du bouton « Continuer/Signer ». |
| signButtonTextColorHover | string | #000000 |
Couleur du texte au survol. |
| signButtonBackgroundColor | string | #0a5aa6 |
Couleur d’arrière-plan du bouton « Continuer/Signer ». |
| signButtonBackgroundColorHover | string | #55a4ed |
Couleur d’arrière-plan au survol. |
Ces paramètres contrôlent l’affichage des éléments de l’interface. La valeur par défaut est false pour tous les champs booléens.
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
| hideSidebar | boolean | false | Si défini sur true, masque la barre latérale. |
| hideHeader | boolean | false | Si défini sur true, masque l’en-tête. |
| hideDownloadValidated | boolean | false | Si défini sur true, masque le bouton de téléchargement du document importé. |
| hideDownloadSigned | boolean | false | Si défini sur true, masque le bouton de téléchargement du document signé. |
Paramètres utilisés pour gérer l’intégration de l’application et le flux de navigation après l’opération.
| Propriété | Type | Exemple / Remarques | Description |
|---|---|---|---|
| iframeAncestors | array | ["https://site.com"] |
Liste des URL autorisées à intégrer l’application dans une iframe. |
| completeUrl | string($uri) | https://... | URL vers laquelle rediriger l’utilisateur une fois le processus terminé. |
| cancelUrl | string($uri) | https://... | URL vers laquelle rediriger l’utilisateur en cas d’annulation. |
Un aspect important de la nouvelle API à prendre en compte lors de la migration est la politique de conservation des données. Dans la nouvelle API eSignature :
Assurez-vous que vos processus backend sont mis à jour afin de télécharger le fichier final depuis /signatures/{id}/signedDocument et de l’archiver dans vos systèmes pendant la fenêtre de conservation de 90 jours.
Le payload utilisé pour créer une nouvelle demande de signature (POST /EU-SES) a subi des modifications importantes par rapport à l’ancien 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": "Bonjour Mario, {OTP} est le code à saisir...",
"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"
}
}
| Ancien champ | Nouveau champ / structure | Détails de migration / notes |
|---|---|---|
| members | signers | Renommé. |
| firstname | name | Renommé. |
| lastname | surname | Renommé. |
| phone | mobile | Renommé. |
| signs | signatures | Renommé. |
| position | x et y (séparés) | Le champ position (ex. "100,200,45,35"), qui définissait position et dimensions, a été remplacé par les champs x et y pour la seule position. |
| content | inputDocuments | Renommé. |
| (N/A) | message (dans signers) | Nouveau champ : permet de personnaliser le message (SMS/Email) contenant le code OTP pour le signataire. |
| (N/A) | authentication (dans signers) | Nouveau champ : définit les méthodes d’authentification requises pour le signataire (ex. "sms", "email"). |
| (N/A) | options | Nouvelle section regroupant les paramètres globaux et UI. |
| (N/A) | options.ui | Nouvelle section regroupant tous les paramètres de personnalisation de l’interface utilisateur (comme sidebarLogo, couleurs, etc.), supprimant le besoin d’endpoints UI séparés. |
| callback.field | Voir ci-dessous | Voir ci-dessous. |
| callback.headers | Objet callback | Remplacé par l’objet callback. |
L’objet callback (envoyé dans la requête POST /EU-SES) définit la configuration du webhook utilisée par la plateforme eSignature pour notifier l’application externe des changements de statut d’une demande de signature.
Les champs pris en charge sont décrits ci-dessous :
| Propriété | Type | Obligatoire | Description |
|---|---|---|---|
| url | string($uri) | Oui | Endpoint HTTP(S) recevant les notifications webhook. |
| method | string | Non | JSON (par défaut) ou FORM. |
| field | string | Non | Nom du champ dans lequel injecter le payload du callback (uniquement si method = FORM). |
| retry | integer | Non | Nombre maximum de tentatives en cas d’échec. |
| headers | Objet | Non | Paires clé-valeur d’en-têtes HTTP personnalisés (authentification, sécurité). |
| custom | Objet | Non | Métadonnées personnalisées envoyées par l’utilisateur (ex. ID interne). Elles sont renvoyées dans le callback. |
{
"callback": {
"url": "https://www.votresite.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": "Ressources Humaines"
}
}
}
Le corps de réponse de la requête :
POST /EU-SES
a été enrichi dans la nouvelle API eSignature afin de fournir immédiatement non seulement l’ID unique de la demande créée et l’URL de redirection vers l’interface de signature, mais aussi le statut mis à jour de l’ensemble de la demande, l’ID du signataire et l’URL spécifique d’accès au signataire.
Voici un exemple du corps de réponse étendu :
{
"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": "Bonjour Mario, {OTP} est le code à saisir pour confirmer la procédure de signature",
"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": {}
}
}
| Champ data (niveau supérieur) | Type | Description |
|---|---|---|
| id | string | L’ID unique de la demande de signature créée. Cet ID sera utilisé dans tous les endpoints suivants (/signatures/{id}/...). |
| state | string | Statut actuel de la demande de signature (ex. WAIT_VALIDATION, WAIT_SIGN, WAIT_SIGNERS, WAIT_OTP, ERROR, CANCELLED, DONE). |
| certificateType | string | Type de signature électronique demandée (EU-SES). |
| signers | array | Tableau contenant les détails de chaque signataire. |
| Champ signers | Type | Description |
|---|---|---|
| id | string | ID unique attribué au signataire. |
| url | string($uri) | URL vers laquelle rediriger l’utilisateur ou à intégrer dans une iframe pour démarrer le processus de signature pour ce signataire spécifique. |
| state | string | Statut du signataire (NEW, DONE). |
| mobile | string | Numéro de téléphone utilisé pour l’authentification (si configuré). |
| string | Adresse e-mail du signataire. |
L’exemple fourni représente un corps de callback typique envoyé par la nouvelle API eSignature lorsque le statut d’une demande de signature atteint un état significatif, dans ce cas DONE.
| Champ | Valeur (exemple) | Description |
|---|---|---|
| id | 69aaada4adb8b5c80203553d | ID unique de la demande de signature. |
| state | DONE | Statut final : le processus de signature est terminé pour tous les signataires. |
| certificateType | EU-SES | Type de signature électronique utilisée (Signature électronique simple EU-SES). |
| updatedAt | 2026-03-06 10:35:14.183+00:00 | Date et heure de la dernière mise à jour du statut (finalisation). |
signers)| Champ | Valeur (exemple) | Description |
|---|---|---|
| id (signataire) | 69aaada4adb8b5c80203553d | ID unique de la demande de signature. |
| state (signataire) | DONE | Statut du signataire : action de signature terminée. |
| mobile | +393333333333 | Numéro utilisé pour l’authentification par SMS. |
| [email protected] | Adresse e-mail du signataire. | |
| signatures | [{"page":1,"x":10,"y":10, "formId":"Mario Rossi [0][0]"}] | Indique la position de la signature sur le document (page 1, coordonnées x:10, y:10). |
| mobileValidation | (Objet) | Contient les détails de validation OTP (incluant otpAttempts: 1). |
| webValidation | (Objet) | Contient les données de suivi de l’interaction web de l’utilisateur pendant le processus de signature. |
document)Dans un état DONE, des informations détaillées sont fournies à la fois pour le document original validé et pour le document signé :
| Sous-champ | Objet (exemple) | Description |
|---|---|---|
| validatedDocument | (Objet) | Détails du document original converti et validé avant signature (ex. nombre de pages, métadonnées PDF). Inclut id, md5, sha256, size et mimetype. |
| signedDocument | (Objet) | Référence au fichier final signé. Inclut id (69aaadcf31095e0a57033332), md5, sha256, size et mimetype. |
Étant donné que le statut est DONE et que le champ signedDocument est présent, l’étape suivante dans votre système doit être d’utiliser l’ID principal (69aaada4adb8b5c80203553d) pour effectuer un appel GET /signatures/{id}/signedDocument et télécharger le fichier signé. N’oubliez pas que le document est conservé uniquement pendant 90 jours.