Développeurs · API v1
La signature,en douze lignes.
Une API REST documentée, un accès OAuth 2.0 aux droits limités, des webhooks en temps réel et un serveur MCP pour vos assistants IA. Envoyez vos modèles en signature depuis votre logiciel et suivez chaque étape.
# Envoyer un modèle en signature API=https://validature.app/api/v1 curl $API/zapier/signature-requests/from-template \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "templateId": "3f8a2c1d-…", "recipients": [{ "roleKey": "client", "firstName": "Marie", "lastName": "Rey", "email": "marie@acme.fr" }] }' → 201 Created { "id": "5a7c…", "status": "sent" }
Trois étapes, un premier contrat signé.
Demandez un client OAuth
Écrivez-nous avec le nom de votre application et ses adresses de redirection : vous recevez un identifiant et un secret client. L'API est incluse dans l'offre Business Pro.
Connectez un compte
L'utilisateur approuve les droits demandés sur /oauth/authorize, sans jamais vous confier son mot de passe. Vous recevez un jeton d'accès et un jeton de rafraîchissement.
Envoyez et écoutez
Un appel envoie un modèle à ses destinataires. Abonnez une URL aux événements : vous êtes prévenu à chaque ouverture, signature, refus et fin de demande.
Le même appel, trois fois.
Créer une demande à partir d'un modèle, avec deux signataires dans l'ordre et un code reçu par SMS avant de signer.
- Idempotence : en-tête Idempotency-Key pour la création, l'envoi et la relance
- Brouillons : "send": false prépare la demande sans l'envoyer
- Votre référence : externalId relie chaque demande à votre CRM et permet de la retrouver
API=https://validature.app/api/v1 curl $API/zapier/signature-requests/from-template \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: 5b1c…" \ -d '{ "templateId": "3f8a2c1d-…", "signingOrder": "sequential", "securityCodeType": "sms", "recipients": [ { "roleKey": "client", "firstName": "Paul", "lastName": "Laurent", "email": "paul@nordis.fr", "phone": "+33612345678" }, { "roleKey": "signataire", "firstName": "Marie", "lastName": "Rey", "email": "marie@acme.fr", "phone": "+33698765432" } ] }'
const API = "https://validature.app/api/v1"; const url = `${API}/zapier/signature-requests/from-template`; const res = await fetch(url, { method: "POST", headers: { Authorization: `Bearer ${process.env.ACCESS_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": crypto.randomUUID(), }, body: JSON.stringify({ templateId: "3f8a2c1d-…", signingOrder: "sequential", securityCodeType: "sms", recipients: [ { roleKey: "client", firstName: "Paul", lastName: "Laurent", email: "paul@nordis.fr", phone: "+33612345678" }, { roleKey: "signataire", firstName: "Marie", lastName: "Rey", email: "marie@acme.fr", phone: "+33698765432" }, ], }), }); const req = await res.json(); console.log(req.id, req.status); // 5a7c… sent
import os, uuid, requests API = "https://validature.app/api/v1" res = requests.post( f"{API}/zapier/signature-requests/from-template", headers={ "Authorization": f"Bearer {os.environ['ACCESS_TOKEN']}", "Idempotency-Key": str(uuid.uuid4()), }, json={ "templateId": "3f8a2c1d-…", "signingOrder": "sequential", "securityCodeType": "sms", "recipients": [ {"roleKey": "client", "firstName": "Paul", "lastName": "Laurent", "email": "paul@nordis.fr", "phone": "+33612345678"}, {"roleKey": "signataire", "firstName": "Marie", "lastName": "Rey", "email": "marie@acme.fr", "phone": "+33698765432"}, ], }, ) req = res.json() print(req["id"], req["status"]) # 5a7c… sent
Les points d'entrée essentiels.
Base : https://validature.app/api/v1 · jeton OAuth 2.0 (Bearer) · réponses JSON.
| Méthode | Chemin | Rôle |
|---|---|---|
| GET | /zapier/templates | Lister vos modèles |
| GET | /zapier/templates/{templateId} | Lire les rôles des destinataires d'un modèle |
| POST | /zapier/signature-requests/from-template | Créer et envoyer une demande |
| GET | /zapier/signature-requests | Rechercher par statut, destinataire, titre ou référence |
| GET | /zapier/signature-requests/{requestId} | Statut, destinataires et documents |
| POST | /zapier/signature-requests/{requestId}/send | Envoyer un brouillon |
| POST | /zapier/signature-requests/{requestId}/remind | Relancer les destinataires en attente |
| POST | /zapier/signature-requests/{requestId}/cancel | Annuler une demande en cours |
| GET | /requests/{requestId}/download-bundle | Télécharger les documents signés |
| GET | /requests/{requestId}/certificate | Télécharger le certificat de signature |
| GET | /contacts | Rechercher dans le carnet d'adresses |
| POST | /contacts | Créer ou mettre à jour un contact |
| POST | /zapier/hooks/{hook}/subscribe | Abonner une URL à un événement |
Chaque événement, au moment où il arrive.
Abonnez une URL HTTPS publique à un événement : Validature y envoie un POST JSON avec les en-têtes X-Validature-Event et X-Validature-Delivery-Id. En cas d'échec, l'envoi est retenté jusqu'à six fois avec un délai croissant à partir de 30 secondes ; une réponse 404 ou 410 met fin à l'abonnement. Les derniers événements restent consultables par l'API.
| Événement | Quand |
|---|---|
| request.sent | Les invitations sont parties |
| participant.viewed | Un destinataire ouvre la demande |
| participant.signed | Un destinataire a signé |
| participant.declined | Un destinataire refuse de signer |
| request.completed | Tout le monde a signé · documents prêts |
| request.expired | La date limite est dépassée |
| request.canceled | La demande a été annulée |
| request.status_changed | Chaque changement de statut |
| contact.created | Un contact rejoint le carnet d'adresses |
Pensée pour la production.
Droits limités
L'utilisateur voit et approuve chaque droit : lecture, envoi, contacts, webhooks. Un jeton agit avec son rôle et se révoque à tout moment.
Webhooks fiables
Neuf événements livrés dans les secondes qui suivent, retentés en cas d'échec, avec un identifiant pour écarter les doublons.
Fichiers signés
Documents signés, certificat de signature ou paquet complet : téléchargeables dès la fin de la demande.
Contacts synchronisés
Recherchez, créez ou mettez à jour les contacts de votre carnet d'adresses depuis votre CRM.
Serveur MCP
Claude, ChatGPT et les assistants compatibles se connectent en OAuth à validature.app/api/v1/mcp : modèles, envoi, suivi et relances, avec votre confirmation avant chaque envoi.
OpenAPI 3.1
Une description lisible par machine pour générer un client ou importer l'API dans vos outils. Télécharger
Avant d'intégrer.
L'API est incluse dans l'offre Business Pro : sur les autres offres, les appels renvoient une erreur 409. Le serveur MCP est disponible dès l'offre Standard. Pour obtenir un client OAuth, écrivez-nous à contact@validature.com.
Pas d'environnement séparé : créez vos demandes avec "send": false pour obtenir des brouillons, vérifiez-les dans l'application, puis envoyez-les à vos propres adresses pour tester le parcours complet.
Les appels ne sont pas signés : utilisez une URL HTTPS longue et imprévisible, propre à chaque abonnement, et traitez chaque appel comme une notification. Avant une décision importante, relisez la demande par l'API. L'identifiant de l'événement permet d'ignorer une livraison répétée.
Exactement comme dans l'application : hébergement en France chez OVHcloud, chiffrement au repos et en transit, documents conservés dans l'Union européenne. Les demandes chiffrées (Vault) restent lisibles par leurs seuls destinataires : l'API n'en voit ni le titre ni les documents, ne peut pas en créer, et leurs signatures ne déclenchent aucun webhook.





