Centre de Documentation
Guides d'intégration et référence API complète pour les développeurs.
Sommaire
Intégrez la signature électronique ESIGNGO directement dans vos applications métiers, CRM ou sites web.
Introduction
L'API ESIGNGO est une API RESTful qui utilise le format JSON pour les requêtes et les réponses. Elle permet de créer des demandes de signature, de gérer des documents et de récupérer des preuves légales.
https://esigngo.com/api/v1
Les endpoints de gestion (contacts, workflows, équipe) utilisent la base https://esigngo.com/api.
Authentification
Toutes les requêtes API doivent être authentifiées à l'aide d'une clé API transmise dans l'en-tête Authorization.
Authorization: Bearer YOUR_API_KEY
Vous pouvez générer et gérer vos clés API depuis l'espace Développeurs.
Mode Sandbox (Test)
L'API supporte un mode test complet qui vous permet d'intégrer sans consommer de crédits et sans envoyer de vrais emails.
Pour activer le mode sandbox, ajoutez l'en-tête suivant à vos requêtes :
X-Test-Mode: true
"is_test": true dans les réponses, et aucun crédit n'est débité.
Format des Erreurs
Toutes les erreurs retournent un JSON structuré avec un code HTTP approprié (400, 401, 403, 500) :
{
"success": false,
"message": "Description de l'erreur en clair"
}
| Code HTTP | Signification |
|---|---|
400 | Données manquantes ou invalides |
401 | Clé API manquante ou invalide |
403 | Permission refusée (plan insuffisant, rôle) |
500 | Erreur serveur interne |
Endpoints
Documents
Crée une nouvelle demande de signature. Le document est reçu en Base64 et stocké de façon sécurisée.
Paramètres de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
filename | string | ✅ | Nom du fichier PDF (ex: contrat.pdf) |
file_content | string | ✅ | Contenu du PDF encodé en Base64 |
signers | array | ✅ | Liste des signataires (voir structure ci-dessous) |
auto_send | boolean | — | Si true, envoie les emails immédiatement et passe le statut en sent. Si false (défaut), le document reste en draft. |
kyc_required | boolean | — | Force la vérification d'identité de chaque signataire avant signature. |
kyc_manual_verify | boolean | — | Si true, le KYC est validé manuellement par un superviseur (non automatique). |
tags | array | — | Tags pour déclencher des workflows. Ex: ["contrat", "hr"] |
webhook_url | string | — | URL de callback spécifique à ce document (surcharge le webhook global). |
reminders | object | — | Configuration des relances automatiques (voir ci-dessous) |
Objet reminders (relances automatiques)
{
"reminders": {
"enabled": true,
"frequency": 3, // Tous les N jours
"max_retries": 3, // Nombre max de relances
"channels": "email", // "email" ou "sms" ou "email,sms"
"time": "09:00" // Heure d'envoi (HH:MM)
}
}
Structure d'un Signataire
{
"name": "Jean Dupont", // OU utiliser first_name + last_name
"first_name": "Jean",
"last_name": "Dupont",
"email": "jean@example.com",
"phone": "+33612345678", // Requis si auth_mode = "otp"
"auth_mode": "otp", // "otp" (SMS) ou "email" (lien simple)
"signing_order": 1, // Ordre de passage (1, 2, 3...)
"color": "#dbeafe", // Couleur d'annotation (Hex)
"fields": [ ... ] // Voir section Champs ci-dessous
}
Définition des Champs (Fields)
Chaque champ est positionné en pourcentage (0-100) par rapport à la page.
{
"type": "signature", // Voir types supportés
"page": 1, // Numéro de page (commence à 1)
"x": 50, "y": 80, // Position % depuis le coin supérieur gauche
"width": 20, // Largeur %
"height": 5, // Hauteur %
"config": { ... } // Config spécifique au type
}
Types de Champs Supportés
| Type | Description | Configuration (JSON) |
|---|---|---|
signature | Zone de signature manuscrite | {"required": true} |
initials | Paraphe | {"required": true} |
date | Date automatique au moment de la signature | {"format": "DD/MM/YYYY"} |
text | Champ texte libre à remplir par le signataire | {"text_content": "Label", "required": true} |
checkbox | Case à cocher | {"required": true} |
label | Texte fixe (lecture seule, non éditable) | {"text_content": "Texte affiché", "font_size": 12, "color": "#000"} |
attachment | Upload de pièce jointe par le signataire | {"text_content": "Intitulé", "required": true} |
Logique Conditionnelle (Champs)
Vous pouvez masquer/afficher des champs selon la valeur d'un autre champ "Maître".
// 1. Champ Maître (celui qui contrôle)
{
"type": "checkbox",
"config": { "uuid": "master_1" } // UUID unique requis
}
// 2. Champ Conditionnel (masqué par défaut)
{
"type": "text",
"config": {
"condition": {
"enabled": true,
"master_field_uuid": "master_1", // Référence le maître
"operator": "checked", // "equals", "not_equals", "contains", "checked"
"value": "true" // Valeur déclencheur
}
}
}
Options Avancées & Sécurité
- KYC (Vérification d'identité) : Ajoutez
"kyc_required": truepour forcer la vérification d'identité. Ajoutez"kyc_manual_verify": truepour qu'un superviseur valide manuellement. - Tags (Workflows) : Ajoutez
"tags": ["contrat", "hr"]pour déclencher automatiquement les workflows associés à ces tags. - Webhook par document : Ajoutez
"webhook_url": "https://..."pour recevoir les événements de ce document spécifique, indépendamment du webhook global. - Relances automatiques : Utilisez l'objet
reminderspour configurer des relances périodiques sans intervention manuelle.
Exemple Complet
curl -X POST https://esigngo.com/api/v1/create_request \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "contrat.pdf",
"file_content": "JVBERi0x...",
"auto_send": true,
"kyc_required": true,
"kyc_manual_verify": false,
"tags": ["urgent"],
"reminders": { "enabled": true, "frequency": 3, "max_retries": 2 },
"signers": [
{
"name": "Client",
"email": "client@email.com",
"phone": "+33612345678",
"auth_mode": "otp",
"signing_order": 1,
"fields": [
{ "type": "signature", "page": 1, "x": 10, "y": 80, "width": 20, "height": 5 },
{ "type": "date", "page": 1, "x": 10, "y": 90, "width": 15, "height": 4 }
]
}
]
}'
Réponse (succès)
{
"success": true,
"message": "Document créé avec succès",
"data": {
"document_id": 123,
"status": "sent", // "draft" si auto_send=false
"is_test": false,
"prepare_url": "https://esigngo.com/prepare?id=123",
"signers": [
{ "email": "client@email.com", "signing_order": 1 }
]
}
}
Annule ou archive un document. Le comportement dépend du statut des signatures.
action: "cancel") : Possible uniquement si aucun signataire n'a encore signé. Les crédits consommés sont automatiquement remboursés.Archivage (
action: "archive") : Requis si au moins un signataire a déjà signé. Les signatures existantes sont conservées.
{
"document_id": 123,
"action": "cancel" // "cancel" ou "archive"
}
Réponse
{
"success": true,
"message": "Document annulé. (0.40€ re-crédités)",
"refund": 0.40
}
Relance tous les signataires en attente d'un document en une seule requête, par email et/ou SMS.
{
"document_id": 123,
// Optionnel : cibler des signataires spécifiques par canal
"signers": {
"89": ["email"], // signataire ID 89 → email uniquement
"90": ["email", "sms"] // signataire ID 90 → email + SMS
}
// Si "signers" est omis, tous les signataires reçoivent un email
}
Réponse
{
"success": true,
"count": 2,
"details": { "email": 2, "sms": 0, "sms_failed": 0 },
"message": "Relances envoyées : 2 Email(s), 0 SMS"
}
Contacts
Gérez votre carnet d'adresses de signataires.
Ajoute un nouveau contact.
{
"first_name": "Jean",
"last_name": "Dupont",
"email": "jean@example.com",
"phone": "+33612345678"
}
Met à jour un contact existant.
{
"id": 12,
"first_name": "Jean",
"last_name": "Dupont-Nouveau",
"email": "jean@example.com"
}
Supprime un contact. Envoyer en form-data (pas JSON).
id=12
Content-Type : application/x-www-form-urlencoded
Notifications & Preuves
Téléchargez vos preuves légales et relancez vos signataires.
Télécharge le dossier de preuve (PDF) d'un document signé. Retourne le fichier PDF en binaire.
Renvoie une relance à un signataire spécifique, par email ou SMS.
{
"signer_id": 89,
"method": "email" // "email" (défaut) ou "sms" — SMS consomme des crédits
}
Équipe
Gérez les membres de votre équipe.
Récupère la liste des membres de votre équipe avec leurs rôles.
Invite ou crée un membre dans l'équipe. Deux modes disponibles selon si l'utilisateur a déjà un compte.
{
"email": "collegue@entreprise.com",
"role": "member", // "member", "admin" ou "observer"
"mode": "invite", // "invite" (email d'invitation) ou "create" (compte créé immédiatement)
"name": "Prénom Nom" // Requis si mode = "create"
}
Si l'email correspond à un compte existant, le membre est ajouté directement sans email.
Retire un membre de l'équipe. Réservé à l'administrateur. Ajuste automatiquement la facturation Stripe si des sièges supplémentaires avaient été achetés.
{
"user_id": 150,
"team_id": 3 // Optionnel — utilise l'équipe active de la session si omis
}
free. Un crédit au prorata est appliqué si des sièges payants sont libérés.
Workflows (Automatisations)
Gérez vos workflows pour automatiser les actions après signature (archivage, email, webhook).
Crée un nouveau workflow d'automatisation. Nécessite le plan Complète. Le workflow se déclenche automatiquement sur l'événement document.signed.
{
"name": "Archivage Drive",
"condition_tag": "archive_drive", // Optionnel : se déclenche si le doc a ce tag
"condition_attachments": 1, // Optionnel : déclencher uniquement si le doc a des pièces jointes
"condition_kyc": 0, // Optionnel : déclencher uniquement si le doc a un KYC
"actions": [
{
"type": "send_email",
"config": { "recipient": "archive@entreprise.com", "subject": "Nouveau contrat signé" }
}
// Autres types : "archive_s3", "webhook", "ftp_upload"
]
}
condition_tag se déclenche sur tous les documents signés.
Récupère la liste de tous vos workflows configurés.
Récupère le détail d'un workflow (configuration et actions).
Réponse
{
"success": true,
"workflow": { "id": 15, "name": "Archivage Drive", "is_active": true, ... },
"actions": [
{ "type": "send_email", "config": { "recipient": "..." }, "sort_order": 1 }
]
}
Récupère les 50 dernières exécutions d'un workflow (avec le nom du document associé).
Met à jour un workflow existant. Toutes les actions existantes sont remplacées par celles fournies.
{
"id": 15,
"name": "Archivage Drive V2",
"condition_tag": "archive_drive_v2",
"condition_attachments": 0,
"condition_kyc": 0,
"actions": [ ... ]
}
Active ou désactive un workflow.
{ "id": 10, "is_active": true }
Supprime un workflow.
{ "id": 10 }
Modèles
Crée un nouveau document à partir d'un modèle existant. Les champs sont pré-positionnés. Les signataires sont assignés par index selon l'ordre des rôles du modèle.
{
"templateId": 5, // ID du modèle (requis)
"docName": "Contrat Client - Juin", // Nom du document (optionnel)
"auto_send": true, // Envoyer les emails immédiatement (optionnel)
"signers": [ // Optionnel : assigner les signataires par index
{
"first_name": "Jean",
"last_name": "Dupont",
"email": "jean@example.com",
"phone": "+33612345678",
"auth_mode": "otp"
}
]
}
signers est omis, les emplacements de signataires sont créés en mode "placeholder" (à remplir depuis l'interface).
Réponse
{
"success": true,
"docId": 456,
"status": "sent" // "draft" si auto_send=false ou omis
}
Supprime un modèle existant.
{ "id": 5 }
Active ou désactive le lien public pour un modèle (formulaire en ligne partageable). Un token unique est généré automatiquement à la première activation.
{
"template_id": 5,
"enabled": true
}
Réponse
{
"success": true,
"enabled": true,
"token": "a3f8c2...",
"link": "https://esigngo.com/inputs?token=a3f8c2..."
}
Le champ link est null si le modèle n'a jamais été activé.
Webhooks
Les webhooks vous permettent d'être notifié automatiquement lorsque des événements surviennent sur vos documents. Configurez votre URL de webhook dans l'espace Développeurs.
Événements supportés
| Événement | Déclenché quand |
|---|---|
document.sent | Le document est envoyé aux signataires (via auto_send: true) |
signer.signed | Un signataire a complété sa signature |
document.completed | Tous les signataires ont signé — le document est finalisé |
document.cancelled | Le document a été annulé ou archivé |
Format du Payload (POST)
{
"event": "document.completed",
"timestamp": 1634567890,
"is_test": false,
"data": {
"document_id": 123,
"status": "completed",
"download_url": "https://esigngo.com/download?id=123&type=final"
}
}
Sécurité
Chaque requête webhook inclut un header X-Esigngo-Signature qui est un HMAC SHA256 du payload JSON signé avec votre clé secrète de webhook. Vérifiez toujours cette signature côté serveur pour authentifier les requêtes entrantes.
// Exemple de vérification (PHP)
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_ESIGNGO_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload, YOUR_WEBHOOK_SECRET);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}