API REST e-Signature.eu — signatures électroniques (SES, AES, QES)

1. Présentation

L’API REST d’e-Signature.eu permet à votre application d’envoyer des documents en signature électronique (simple SES, avancée AES ou qualifiée QES selon eIDAS) sans passer par notre site. Vous envoyez le PDF et les signataires ; nous gérons la vérification d’identité, la signature et le suivi ; vous récupérez le document signé via l’API ou un callback.

URL de base https://api.e-signature.eu/v3/signature/

Cette documentation décrit l’API v3. Vous utilisez déjà l’API v2 (https://api.e-signature.eu/v2/signature/) ? Consultez le Changelog.

2. Authentification

Vos identifiants sont disponibles dans Mon compte > Signatures API une fois connecté sur e-signature.eu :

  • User ID : envoyé dans l’URL, paramètre userid de chaque appel ;
  • API token : envoyé dans l’en-tête HTTP x-api-key de chaque appel.
curl -X GET "https://api.e-signature.eu/v3/signature/requestBalance?userid=123" \
  -H "x-api-key: YOUR_API_TOKEN"

Gardez votre token secret : il donne un accès complet à votre compte via l’API. Les appels doivent partir de votre serveur, jamais d’un navigateur ou d’une application mobile.

3. Conventions

Requêtes et réponses

  • HTTPS uniquement. Les corps de requête sont en JSON (Content-Type: application/json).
  • Chaque réponse est en JSON, sous l’une de ces deux formes :
{ "success": true,  "result": { ... } }
{ "success": false, "error": "Readable error message" }

Limites

Limite Valeur
Requêtes 10 par minute par compte et adresse IP (HTTP 403 au-delà, réessayer après une minute)
Document Un PDF par demande, 30 Mo maximum, non chiffré / sans mot de passe
Téléchargement des documents signés 30 jours après la finalisation (voir Conservation)

4. Crédits

Les demandes sont payées avec vos crédits prépayés e-signature.eu. Le prix d’une méthode s’obtient avec getMethods (vos prix spécifiques sont pris en compte). Votre solde est renvoyé par requestBalance et dans chaque objet demande (credits_balance).

Recharge automatique des crédits

Pour ne jamais manquer de crédits, votre compte peut se recharger automatiquement. Cela se configure une fois dans Mon compte > Signatures API, et non via l’API :

  1. Choisissez un seuil (en crédits) et le pack de crédits à commander.
  2. Enregistrez un moyen de paiement chez notre prestataire de paiement Mollie (carte, ou domiciliation SEPA via Bancontact, iDEAL…). Un paiement de vérification de 0,01 € est demandé une seule fois.
  3. Chaque fois que des crédits sont débités et que votre solde passe sous le seuil, une commande du pack choisi est créée et payée automatiquement avec le moyen de paiement enregistré. La facture vous est envoyée par email.
Recharge automatique
Déclenchement Un débit de crédits (par ex. une nouvelle demande) qui fait passer le solde sous le seuil
Ajout des crédits Dès la confirmation du paiement : immédiatement par carte, après quelques jours ouvrables par domiciliation SEPA
Recharges en cours Une seule à la fois
Limite de sécurité Un nombre maximal de recharges automatiques sur 30 jours
Échec du paiement La commande est marquée comme échouée, la recharge automatique est désactivée et vous êtes prévenu par email
La recharge est déclenchée par un débit. Une demande qui coûte plus que votre solde actuel est refusée (HTTP 403, You do not have enough credits) et ne déclenche pas de recharge : choisissez un seuil supérieur au coût de vos plus grosses demandes, et gardez une marge si vous payez par domiciliation SEPA. Votre solde reste disponible à tout moment via requestBalance et credits_balance.

5. Fonctionnement d’une demande de signature

  1. Vous créez la demande avec le PDF, les signataires et les méthodes de signature acceptées. Les crédits sont débités.
  2. Chaque signataire reçoit un email avec un lien de signature personnel (ou vous envoyez vous-même le signature_link lorsque send_email vaut false).
  3. Le signataire vérifie son identité avec l’une des méthodes acceptées (itsme®, Evrotrust, Veriff, OTP…) et signe.
  4. Quand tout le monde a signé, la demande est finished : le PDF signé (PAdES) est disponible via getRequest et envoyé dans le callback.

Ordre de signature

Par défaut, tous les signataires signent en parallèle. Pour définir un ordre, indiquez sign_first: true pour les signataires du premier groupe : ils sont invités immédiatement, éventuellement à plusieurs en parallèle. Les autres signataires ne sont invités que lorsque tout le premier groupe a signé. Deux groupes au maximum.

Deux modes d’intégration

Mode Fonctionnement
Mode email (send_email: true, par défaut) Nous envoyons en votre nom aux signataires les invitations, les rappels et les emails de finalisation.
Mode intégré (send_email: false) Aucun email n’est envoyé à la création : le signature_link de chaque signataire est renvoyé dans la réponse, et vous y redirigez vos utilisateurs depuis votre propre interface.
Même avec send_email: false, un rappel ou une annulation lancé depuis le tableau de bord en ligne envoie un email aux signataires en attente.

N’interrogez pas l’API en boucle

N’appelez pas getRequest à répétition pour suivre l’état d’une demande : utilisez les callbacks, envoyés automatiquement à chaque changement. Des appels excessifs déclenchent une limitation automatique qui suspend temporairement le traitement de vos requêtes.

6. Créer une demande de signature

POST/v3/signature/request?userid={userid}
{
  "title": "Sales agreement 2026-114",
  "lang": "en",
  "methods": [
    "itsme-qes-signature",
    "evrotrust-signature"
  ],
  "signature_place": "position_auto",
  "reminder": 3,
  "send_email": true,
  "email_notification": false,
  "note_html": "Please sign the agreement before Friday.",
  "signature_redirect": "https://www.example.com/thank-you",
  "external_reference": "QUOTE-2026-114",
  "metadata": {
    "crm_deal_id": 8812
  },
  "callback_url": "https://erp.example.com/hooks/esignature",
  "signers": [
    {
      "firstname": "Ann",
      "lastname": "Peeters",
      "email": "[email protected]",
      "phone": "+32475111222",
      "sign_first": true
    },
    {
      "firstname": "Marc",
      "lastname": "Dubois",
      "email": "[email protected]",
      "sign_first": false
    }
  ],
  "pdf_file_base64": "JVBERi0xLjcKJeLjz9MK..."
}

Méthodes de signature

Méthode Niveau Couverture Prix
itsme-qes-signature — itsme® QES (qualifiée) 32 pays européens 1 crédit / signataire
evrotrust-signature — Evrotrust QES (qualifiée) 69 pays 1 crédit / signataire
veriff-advanced-signature — Veriff AES (avancée) 198 pays 0,7 crédit / signataire
otp-email-non-qualified — OTP par email ou SMS SES (simple) Monde entier 0,4 crédit / signataire

Ce sont les prix standards : getMethods renvoie les méthodes disponibles et les prix de votre compte. Seule une signature électronique qualifiée (QES) équivaut légalement à une signature manuscrite selon le règlement eIDAS. otp-email-non-qualified couvre l’email et le SMS : le code est envoyé par SMS si le signataire a un phone, sinon par email, au même prix.

Champs du corps de la requête

Champ Obligatoire Type Description
title oui string Nom du document. Les lettres, chiffres et tirets sont conservés ; un suffixe -1, -2… est ajouté si le nom existe déjà dans votre compte.
lang oui string Langue des emails et des pages de signature : fr, nl, en, de, es.
methods oui array Méthodes de signature acceptées, voir Méthodes de signature. Si plusieurs sont acceptées, chaque signataire choisit.
signers oui array Signataires, voir ci-dessous.
pdf_file_base64 oui string Le PDF, encodé en base64. Un seul fichier, 30 Mo maximum, non chiffré.
signature_place non string position_auto (par défaut) ou position_manual, voir Positionnement des signatures.
reminder non number Rappel automatique tous les N jours, de 0 à 14. Par défaut 0 (aucun rappel).
send_email non boolean Par défaut true (mode email). Avec false (mode intégré), aucun email d’invitation ni de finalisation n’est envoyé : transmettez vous-même le signature_link. Incompatible avec sign_first: true.
email_notification non boolean Par défaut false. Avec true, vous recevez un email à chaque signature.
note_html non string Message ajouté aux emails envoyés aux signataires (mode email). Les balises HTML sont acceptées, par ex. Note with <strong>HTML</strong>.
signature_redirect non string (URL) Page affichée au signataire après la signature. URL valide obligatoire (chaîne vide refusée). Par défaut : page de confirmation sur e-signature.eu.
external_reference non string Votre propre identifiant (devis, contrat…), 255 caractères maximum. Renvoyé dans chaque réponse et callback.
metadata non object Objet JSON libre, 4 Ko maximum, renvoyé tel quel.
callback_url non string (URL) URL de callback pour cette demande uniquement (HTTPS public). Par défaut : l’URL de votre compte.

Champs d’un signataire

Champ Obligatoire Type Description
lastname oui string
email oui string Adresse email valide
firstname non string
phone non string Format international commençant par + et l’indicatif du pays (+32…) ; les espaces sont supprimés. Un numéro invalide est ignoré. Avec la méthode OTP, le code est envoyé par SMS si un numéro est indiqué, sinon par email.
sign_first non boolean Par défaut false. Voir Ordre de signature.
sign_page, sign_left, sign_bottom avec position_manual number Voir Positionnement des signatures.

Coût

Prix de la méthode la plus chère de methods × nombre de signataires. Les crédits sont débités à la création de la demande. Ceux des signataires qui n’ont pas signé sont remboursés si la demande est annulée ou arrêtée.

Réponse 201 Created

{
  "success": true,
  "result": {
    "id_sign": 4521,
    "lang": "en",
    "doc_name": "Sales-agreement-2026-114",
    "send_email": true,
    "from_api": true,
    "signature_redirect": "https://www.example.com/thank-you",
    "status_id": "pending",
    "date_status": "2026-10-20 10:15:02",
    "last_reminder": null,
    "timezone": "Europe/Brussels",
    "credits": 2,
    "credits_balance": 38.4,
    "signers": {
      "1": {
        "firstname": "Ann",
        "lastname": "Peeters",
        "email": "[email protected]",
        "phone": "+32475111222",
        "sign_first": true,
        "status": "pending",
        "signature_link": "https://www.e-signature.eu/en/sign/?key=…"
      },
      "2": {
        "firstname": "Marc",
        "lastname": "Dubois",
        "email": "[email protected]",
        "sign_first": false,
        "status": "pending",
        "signature_link": "https://www.e-signature.eu/en/sign/?key=…"
      }
    },
    "external_reference": "QUOTE-2026-114",
    "metadata": {
      "crm_deal_id": 8812
    }
  }
}

7. Positionnement des signatures

position_auto (par défaut)

Placez les marqueurs #SIG01, #SIG02… (également accepté : #SIG01#) sous forme de texte dans votre document, là où chaque signataire doit signer (#SIG01 = premier signataire du tableau signers). La signature est placée en haut à gauche du marqueur. Si un même marqueur apparaît plusieurs fois, sa première occurrence est utilisée. Un marqueur est ignoré si sa zone de signature recouvrirait une signature déjà placée (ou une signature existante) : le signataire prend alors le marqueur libre suivant. Un marqueur si proche du bord de la page que la signature doit être décalée n’est utilisé qu’en dernier recours.

Conseil : écrivez les marqueurs en texte blanc (sur fond blanc) pour qu’ils soient invisibles dans le PDF signé. Ils doivent rester du vrai texte, et non une image, pour être détectés.

Document non encore signé

Si le document ne contient aucun marqueur, ou si le marqueur d’un signataire est absent, une page de signatures contenant les marqueurs est ajoutée à la fin du document et toutes les signatures sont placées sur cette page (6 signataires sur la première page ajoutée, puis 10 par page supplémentaire).

Document déjà signé

Aucune page ne peut être ajoutée à un PDF déjà signé électroniquement : cela invaliderait les signatures existantes. Avec position_auto, les signatures sont placées sur les marqueurs libres, c’est-à-dire les marqueurs dont la zone de signature ne recouvre aucune signature existante. Les marqueurs libres sont attribués aux signataires dans l’ordre (#SIG01, #SIG02…).

Si le document signé ne contient pas assez de marqueurs libres pour tous les signataires, la demande est refusée (HTTP 400) : utilisez position_manual.

position_manual

Indiquez la position de la signature, en centimètres, pour chaque signataire :

Champ Valeur
sign_page Numéro de page, à partir de 1 (entier)
sign_left Distance entre le bord gauche de la page et la gauche de la signature, en cm (décimales autorisées)
sign_bottom Distance entre le bas de la page et le haut de la signature, en cm (décimales autorisées)
{ "lastname": "Peeters", "email": "[email protected]", "sign_page": 3, "sign_left": 2.5, "sign_bottom": 6 }

sign_left et sign_bottom indiquent le coin supérieur gauche de la signature. La signature est placée en dessous et à droite de ce point.

Les limites dépendent de la taille réelle de la page et de la taille du cachet visuel : toute la signature doit rester à au moins 2 cm de chaque bord de la page. Si plusieurs méthodes de signature sont acceptées, le plus grand cachet est pris en compte. Si une valeur est hors limites, le message d’erreur indique la plage autorisée pour cette page.

Une signature ne peut pas recouvrir une autre signature de la demande, ni une signature existante si le document est déjà signé.

8. L’objet demande de signature

Renvoyé par request, getRequest, cancel, skip, remind, delete et envoyé dans les callbacks.

Champ Description
id_sign Identifiant de la demande
doc_name Nom du document
status_id pending en cours · finished signé par tous · skipped arrêté, partiellement signé · cancelled · deleted
signers Objet des signataires, par clé ("1", "2"…) — voir ci-dessous
lang, send_email, signature_redirect, timezone Tels que définis à la création
from_api true si la demande a été créée via l’API
date_status Date du dernier changement de statut (fuseau horaire de la demande)
last_reminder Date du dernier rappel, ou null
credits Crédits de la demande (réservés tant qu’elle est en cours, utilisés une fois terminée)
credits_balance Solde actuel de votre compte
pdf_file_base64 PDF signé, lorsque la demande n’est plus en cours
external_reference, metadata Tels qu’envoyés à la création

Signataire

Champ Description
firstname, lastname, email, phone, sign_first Tels qu’envoyés à la création
status pending · signed · skipped
signature_link Lien de signature personnel, tant que le signataire n’a pas signé
signing_time, signing_method Après signature : date et méthode utilisée
verified_firstname, verified_lastname Après signature : identité vérifiée par la méthode de signature
{
  "1": {
    "firstname": "Ann",
    "lastname": "Peeters",
    "email": "[email protected]",
    "status": "signed",
    "signing_time": "2026-10-20 11:02:47",
    "signing_method": "itsme-qes-signature",
    "verified_firstname": "Ann",
    "verified_lastname": "Peeters"
  }
}

9. Autres endpoints

Tous les endpoints reçoivent userid dans l’URL et x-api-key dans les en-têtes. id_sign est passé dans l’URL.

Lister les demandes

GET/v3/signature/list?userid={userid}&status_id=pending

status_id (facultatif) : pending, finished ou skipped. external_reference (facultatif) : uniquement les demandes ayant cette référence.

{
  "success": true,
  "result": [
    {
      "id_sign": 4521,
      "status_id": "pending",
      "external_reference": "QUOTE-2026-114"
    },
    {
      "id_sign": 4498,
      "status_id": "finished"
    }
  ]
}

Obtenir une demande

GET/v3/signature/getRequest?userid={userid}&id_sign=4521

Renvoie l’objet demande de signature, avec le PDF signé une fois la demande terminée. Pour suivre l’état d’une demande, utilisez les callbacks plutôt que des appels répétés.

Envoyer un rappel

PATCH/v3/signature/remind?userid={userid}&id_sign=4521

Envoie un email de rappel aux signataires status: pending du groupe actuellement invité (le groupe sign_first d’abord). Demande pending uniquement. Fonctionne aussi pour les demandes créées avec send_email: false.

Arrêter une demande (en gardant les signatures déjà faites)

PATCH/v3/signature/skip?userid={userid}&id_sign=4521

Possible lorsqu’au moins un signataire a signé et qu’au moins un autre ne l’a pas fait. La demande devient skipped, le PDF partiellement signé est disponible et les crédits des signataires qui n’ont pas signé sont remboursés.

Annuler une demande

DELETE/v3/signature/cancel?userid={userid}&id_sign=4521

Possible tant que personne n’a signé ; pour terminer une demande partiellement signée, utilisez skip. La réponse contient la demande avec status_id: cancelled ; la demande et son document sont ensuite retirés de votre tableau de bord, les liens de signature ne fonctionnent plus et les crédits sont remboursés.

Supprimer une demande

DELETE/v3/signature/delete?userid={userid}&id_sign=4521

Demandes finished ou skipped uniquement. Supprime les documents et la demande. La réponse contient la demande une dernière fois, avec status_id: deleted : téléchargez le PDF signé avant de supprimer.

Télécharger l’audit trail

GET/v3/signature/requestAuditTrail?userid={userid}&id_sign=4521

Indisponible tant que la demande est en cours (HTTP 412). Renvoie l’objet demande avec audit_trail_base64 : un PDF retraçant l’historique de la demande (dates, méthodes, identités vérifiées).

Obtenir le solde de crédits

GET/v3/signature/requestBalance?userid={userid}
{ "success": true, "result": { "credits_balance": 38.4 } }

Lister les méthodes de signature

GET/v3/signature/getMethods?userid={userid}&lang=en

Méthodes acceptées dans methods, avec le prix en crédits par signataire pour votre compte. lang (facultatif) traduit les libellés.

{
  "success": true,
  "result": [
    {
      "id": "itsme-qes-signature",
      "label": "itsme® | QES",
      "credits": 1
    },
    {
      "id": "evrotrust-signature",
      "label": "Evrotrust | QES",
      "credits": 1
    },
    {
      "id": "veriff-advanced-signature",
      "label": "Veriff | AES",
      "credits": 0.7
    },
    {
      "id": "otp-email-non-qualified",
      "label": "OTP by Email/SMS | SES",
      "credits": 0.4
    }
  ]
}

10. Callbacks (webhooks)

Définissez votre URL de callback dans Mon compte > Signatures API (HTTPS, accessible publiquement). Vous pouvez aussi définir une callback_url par demande. Le callback est un POST dont le corps JSON contient l’état complet actuel de la demande (même format que getRequest), envoyé pour les demandes créées via l’API.

Champs de l’événement

Champ Description
event Type d’événement (voir ci-dessous)
event_id Identifiant unique de l’événement (evt_…). Identique à chaque nouvel essai du même événement : utilisez-le pour ignorer les doublons.
event_at Date de l’événement (UTC, ISO 8601)
changes Changements de statut des signataires, par ex. [{"signer_key": 1, "from": "pending", "to": "signed"}] (uniquement si un signataire a changé)
external_reference, metadata Tels qu’envoyés à la création de la demande

Types d’événements

Événement Quand
signer.signed Un signataire a signé, la demande est toujours en cours
signer.declined, signer.skipped, signer.expired Un signataire a refusé, a été ignoré ou a expiré
request.completed Tous les signataires ont signé : le PDF signé est inclus (pdf_file_base64)
request.stopped La demande a été arrêtée : le PDF partiellement signé est inclus
request.cancelled La demande a été annulée
request.deleted La demande a été supprimée
request.expired La demande a expiré
request.declined Recommandé refusé par le destinataire
request.updated Tout autre changement : rappel envoyé, signataire modifié, nouveaux liens de signature…

Le corps contient toujours l’état complet actuel : votre intégration peut se baser sur status_id et sur le statut de chaque signataire plutôt que sur le seul type d’événement.

En-têtes

En-tête Exemple
X-Esig-Api-Version 3
X-Esig-Event signer.signed
X-Esig-Event-Id evt_4f0c2b9e1d7a3c55e8b1a2f0
X-Esig-Delivery-Attempt 1, 2, …
X-Esig-Signature t=1792407600,v1=5d41402abc4b2a76b9719d911017c592…

Vérifier la signature

Votre secret de signature est affiché dans Mon compte > Signatures API, où vous pouvez aussi le régénérer. v1 est le HMAC-SHA256 de "<t>.<raw request body>" avec votre secret, encodé en hexadécimal. Utilisez le corps brut, avant toute lecture JSON, et refusez les callbacks de plus de 5 minutes.

PHP

$body   = file_get_contents( 'php://input' );
$header = $_SERVER['HTTP_X_ESIG_SIGNATURE'] ?? '';
preg_match( '/t=(\d+),v1=([a-f0-9]{64})/', $header, $m );
$valid = $m
    && abs( time() - (int) $m[1] ) <= 300
    && hash_equals( hash_hmac( 'sha256', $m[1] . '.' . $body, $secret ), $m[2] );

Node.js

const crypto = require('crypto');
function verify(rawBody, header, secret) {
  const m = /t=(\d+),v1=([a-f0-9]{64})/.exec(header || '');
  if (!m || Math.abs(Date.now() / 1000 - Number(m[1])) > 300) return false;
  const expected = crypto.createHmac('sha256', secret).update(`${m[1]}.${rawBody}`).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(m[2]));
}

C# (.NET)

using System.Security.Cryptography; using System.Text; using System.Text.RegularExpressions;
static bool Verify(string rawBody, string header, string secret) {
    var m = Regex.Match(header ?? "", @"t=(\d+),v1=([a-f0-9]{64})");
    if (!m.Success || Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - long.Parse(m.Groups[1].Value)) > 300) return false;
    using var h = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var expected = Convert.ToHexString(h.ComputeHash(Encoding.UTF8.GetBytes(m.Groups[1].Value + "." + rawBody))).ToLowerInvariant();
    return CryptographicOperations.FixedTimeEquals(Encoding.ASCII.GetBytes(expected), Encoding.ASCII.GetBytes(m.Groups[2].Value));
}

Réponses et nouveaux essais

  • Répondez HTTP 2xx dès réception du callback, et traitez-le de manière asynchrone si nécessaire.
  • En cas d’erreur réseau, de délai dépassé (30 s), de HTTP 429 ou 5xx, le callback est renvoyé toutes les heures avec le même event_id, jusqu’à 24 tentatives. Les autres réponses 4xx sont considérées comme définitives. Si la demande change à nouveau avant une livraison réussie, le callback suivant porte un nouvel événement et l’état complet actuel. L’état actuel reste disponible à tout moment via getRequest.
  • Les redirections sont suivies (la méthode POST est conservée). localhost et les adresses privées ne peuvent pas être utilisés.

11. Erreurs

Les erreurs sont renvoyées avec "success": false et un message error lisible. Basez votre logique sur le code HTTP : les messages peuvent évoluer.

Code HTTP Signification
200 / 201 OK / demande créée
400 Champ manquant ou invalide (le message indique le champ)
400 id_sign manquant, ou filtre status_id invalide
401 userid ou x-api-key invalide
403 Crédits insuffisants, ou limite de requêtes atteinte (10 par minute)
404 id_sign inconnu pour ce compte
412 Action impossible dans l’état actuel (par ex. annuler après une signature, supprimer une demande en cours)

Erreurs par endpoint

Endpoint Code HTTP Message Cause
Tous les endpoints 401 Please provide a valid x-api-key in headers & userid in url parameters. userid ou x-api-key invalide
Tous les endpoints 403 Rate limit exceeded: 10 requests per minute is allowed. Please try again after a minute. Plus de 10 requêtes par minute
request 400 Voir Messages de validation Champ, PDF ou position manquant ou invalide
request 403 You do not have enough credits Solde inférieur au coût de la demande
list 400 Incorrect value for status_id. Filtre status_id inconnu
getRequest, remind, skip, cancel, delete, requestAuditTrail 400 please provide id_sign parameter. id_sign manquant
getRequest, remind, skip, cancel, delete, requestAuditTrail 404 invalid id_sign value. id_sign inconnu pour ce compte
remind 412 request can not be remind to user(s): wrong status La demande n’est pas en cours
skip 412 request can not be skipped: wrong status Personne n’a encore signé, tout le monde a signé, ou la demande n’est plus en cours
cancel 412 request can not be cancelled: someone already signed the PDF Au moins un signataire a signé
delete 412 request can not be deleted: wrong status_id La demande est encore en cours
requestAuditTrail 412 Can not download Audit Trail while the signature request is pending La demande est encore en cours

Messages de validation à la création (request, HTTP 400)

Le message indique le champ ou le problème ; … représente une valeur de votre requête. Basez votre code sur le code HTTP, et affichez le message pour aider à corriger la requête.

Afficher tous les messages de validation

Corps de la requête

  • Request body can not be empty

title, lang

  • Field 'title' must be of type string and can not be empty
  • Field 'lang' is an invalid language code

signers

  • field 'signers' is omitted or is empty
  • Firstname, Lastname & email address must be of type string and can not be empty
  • … is not an email address
  • field 'sign_first' is not a boolean value
  • field 'sign_first' can not be 'true' when field 'send_email' is 'false'

methods

  • You must set at least one signing method
  • … is not a valid method

Options

  • Field 'reminder' should be of type numeric between 0 & 14 (days)
  • Field 'send_email' should be of type boolean
  • Field 'email_notification' should be of type boolean
  • Field 'note_html' should be of type string
  • Field 'signature_redirect' is not a valid url

external_reference, metadata, callback_url

  • Field 'external_reference' must be a string
  • Field 'external_reference' can not exceed 255 characters
  • Field 'metadata' must be a JSON object
  • Field 'metadata' can not exceed 4096 bytes
  • Field 'callback_url' must be a publicly reachable HTTPS URL

PDF

  • Field 'pdf_file_base64' should be of type string and not empty
  • Field 'pdf_file_base64' doesn't contains a base64 encoded string
  • Field 'pdf_file_base64' doesn't contains a base64 encoded PDF file
  • Your file is too big > 30 MB
  • Couldn't load your PDF document
  • PDF file is encrypted and password protected. Please unprotected your PDF file.
  • Couldn't get pages from PDF document

Positionnement des signatures

  • field 'signature_place' is incorrect
  • field 'sign_page' is empty or is not an integer
  • field 'sign_left' is empty or is not a number (cm)
  • field 'sign_bottom' is empty or is not a number (cm)
  • Field 'sign_left' for signer … must be between … and … cm (page … is … x … cm, signature … x … cm, margin … cm)
  • Field 'sign_bottom' for signer … must be between … and … cm (…)
  • Field 'sign_page' for signer … is too big: the document has … page(s)
  • Page … is too small for the signature of … (…)
  • The signature of … on page … overlaps an existing signature of the document (…)
  • The signatures of … and … overlap on page … (…)
  • The existing signatures of the document could not be read: the position of the signature of … can not be checked

Document déjà signé (position_auto)

  • Your PDF file is already signed: pages can not be added without invalidating the existing signatures. It contains … free marker(s) for … signer(s): place the signatures manually (signature_place: position_manual).
  • Your PDF file is already signed: pages can not be added without invalidating the existing signatures. The free markers could not be determined: place the signatures manually (signature_place: position_manual).

Traitement

  • Couldn't extract markers from PDF document: …
  • Unknown error: Request could not be saved into the Database
  • Message d’erreur renvoyé par le prestataire de signature (eID Easy)

12. Conservation

Les documents signés sont téléchargeables pendant 30 jours après la finalisation, via getRequest ou le callback request.completed. L’audit trail est conservé pendant la durée définie dans notre DPA. Archivez le document signé et l’audit trail de votre côté dans les 30 jours.

13. Changelog

API v3 — différences avec l’API v2

L’API v2 (https://api.e-signature.eu/v2/signature/) reste disponible et inchangée. Les endpoints, paramètres et l’authentification sont identiques dans les deux versions : pour passer à l’API v3, remplacez l’URL de base par https://api.e-signature.eu/v3/signature/. Vous pouvez migrer endpoint par endpoint.

Les anciennes URL (https://www.e-signature.eu/wp-json/signature/ pour l’API v2 et https://www.e-signature.eu/wp-json/esig/v3/signature/ pour l’API v3) restent valables. Nous recommandons d’utiliser les URL api.e-signature.eu.

Sujet API v2 API v3
URL de base /v2/signature/ /v3/signature/
Vos propres références — Nouveaux champs external_reference et metadata, renvoyés dans chaque réponse et callback ; filtre list par external_reference
URL de callback Une URL par compte Aussi par demande (callback_url)
Contenu du callback État complet de la demande État complet de la demande + event, event_id, event_at, changes
Sécurité du callback — Signature HMAC-SHA256 dans l’en-tête X-Esig-Signature
Nouveaux essais du callback Toutes les heures en cas d’erreur réseau, jusqu’à réception Toutes les heures en cas d’erreur réseau, de délai dépassé, de HTTP 429 ou 5xx, jusqu’à 24 tentatives, même event_id
id_sign manquant, filtre status_id invalide HTTP 401 HTTP 400
id_sign inconnu HTTP 401 HTTP 404
Audit trail d’une demande en cours HTTP 401 HTTP 412
Placement manuel : sign_left / sign_bottom Limites fixes pour une page A4 portrait (0 à 15 cm / 4 à 28,7 cm), hauteur de signature 2,5 cm Limites calculées selon la taille réelle de la page et du cachet des méthodes acceptées, marge de 2 cm ; décimales acceptées ; le message d’erreur indique la plage autorisée
Placement manuel : recouvrements Non vérifiés Refusé si une signature recouvre une autre signature de la demande ou une signature existante du document
Placement manuel : sign_page Un numéro de page supérieur d’une unité à la dernière page n’était pas refusé Toute page inexistante est refusée

Les callbacks suivent la version utilisée pour créer la demande : une demande créée avec l’API v2 continue de recevoir les callbacks de l’API v2.

Panier d’achat

0
image/svg+xml

No products in the cart.

Continuer vos achats
This site is registered on wpml.org as a development site. Switch to a production site key to remove this banner.