HomeBlogGuide de migration de Signature_Électronique vers EU-SES
Guides

Guide de migration de Signature_Électronique vers EU-SES

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.

1. Modification des domaines de base (Base URL)

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 :

  • Production : passez de https://ws.firmadigitale.com à https://esignature.openapi.com.
  • Sandbox : passez de https://test.ws.firmadigitale.com à https://test.esignature.openapi.com.

2. Correspondance des endpoints

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 :

Création d'une demande de Signature Électronique Simple (SES)

  • Ancien endpoint : POST /firma_elettronica/base
  • Nouvel endpoint : POST /EU-SES

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

Récupération de la liste des signatures / demandes

  • Ancien endpoint : GET /firma_elettronica
  • Nouvel endpoint : GET /signatures

Remarque : la nouvelle version prend en charge des fonctionnalités avancées de filtrage (par état, type de signature et type de certificat).

Récupération des informations / détails d'une demande spécifique

  • Ancien endpoint : GET /firma_elettronica/{id}
  • Nouvel endpoint : GET /signatures/{id}/detail

Téléchargement du document signé

  • Ancien endpoint : GET /firma_elettronica/{id}/download
  • Nouvel endpoint : GET /signatures/{id}/signedDocument

Récupération de la piste d’audit (Audit Trail)

  • Ancien endpoint : GET /firma_elettronica/{id}/audit
  • Nouvel endpoint : GET /signatures/{id}/audit

Suppression de documents (Nouvelle fonctionnalité)

  • Nouvel endpoint : DELETE /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.

3. Modification du mode de personnalisation de l’interface utilisateur

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 :

1. Couleurs et style (Thématisation)

Tous les paramètres de couleur nécessitent une chaîne hexadécimale (HEX) suivant le modèle : ^#[0-9a-fA-F]{6}$.

Zone Barre latérale (Sidebar)

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

Zone En-tête et Pied de page (Header & Footer)

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.

Boutons standards

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.

Boutons de signature / procédure (Sign Button)

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.

2. Visibilité et comportement

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

3. Intégration et redirection

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.

4. Conservation des documents dans la nouvelle API

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 :

  • Les documents signés, validés et importés resteront disponibles au téléchargement dans le système pendant un maximum de 90 jours, après quoi ils seront automatiquement supprimés.
  • Les données structurées de signature et la piste d’audit seront conservées pendant un maximum de 10 ans.

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.

5. Différences du corps de requête (POST)

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.

Ancien corps de requête (Exemple)

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

Corps de requête (nouvelle version - exemple)

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

Mappage du payload et points clés de migration

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.

Détails du nouvel 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.

Exemple de configuration complète :

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

6. Corps de réponse de la nouvelle signature

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é).
email string Adresse e-mail du signataire.

Détails du corps de callback (exemple état DONE)

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.

Analyse des éléments clés

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

Détails du signataire (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 [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.

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

Action recommandée :

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

Guide de migration de Signature_Électronique vers EU-SES
Partager sur