48 endpoints REST, un bac à sable gratuit, des webhooks signés. De la signature simple à l'envoi groupé, aux formulaires publics et à l'encaissement au moment de signer.
47
endpoints REST
0 €
bac à sable, sans carte
8
relances de webhook
La clé ouvre une console d'essai en ligne : 36 appels prêts à jouer, rangés par thème, sans rien installer.
Trois appels suffisent : un jeton, un document, une demande. Testez d'abord en bac à sable — aucun SMS ni e-mail réel n'est envoyé, aucun crédit n'est décompté.
curl -X POST https://www.jurisign.fr/api/v1/auth/sandbox-token \
-H "Content-Type: application/json" \
-d '{"email":"vous@exemple.fr","password":"…"}'
# → { "token": "sandbox_12|abc…", "sandbox": true }
curl -X POST https://www.jurisign.fr/api/v1/documents \
-H "Authorization: Bearer $TOKEN" \
-F "file=@contrat.pdf" \
-F "title=Contrat de prestation"
# → { "data": { "id": "9f1c…", "page_count": 3 } }
# Contrat + annexes ? files[] les fusionne en un seul PDF, dans l'ordre d'envoi.
curl -X POST https://www.jurisign.fr/api/v1/documents -H "Authorization: Bearer $TOKEN" -F "files[]=@contrat.pdf" -F "files[]=@annexe.pdf"
# → { "data": { "id": "3b7a…", "page_count": 11, "merged_from": 2 } }
curl -X POST https://www.jurisign.fr/api/v1/sign-requests \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"document_id": "9f1c…",
"subject": "Merci de signer votre contrat",
"signing_order_type": 0,
"expiry_hours": 72,
"auto_send": true,
"redirect_url": "https://app.votre-site.fr/merci",
"signers": [
{ "prenom": "Jean", "nom": "Dupont",
"email": "jean@exemple.fr", "otp_channel": "email" }
]
}'
# → le signataire reçoit son e-mail, vous recevez le webhook sign_request.sent
auto_send évite le second appel.
redirect_url ramène le signataire chez vous à la fin
(domaine à faire enregistrer au préalable, pour protéger vos signataires contre les redirections frauduleuses :
pourquoi).
Chaque capacité est accessible dès le premier jeton — nous ne bridons jamais un client API par son forfait.
Essayez avant de créer un compte
Une clé bac à sable, gratuite et sans carte bancaire : aucune signature réelle n'est envoyée, aucun crédit n'est décompté, toutes les fonctions sont ouvertes.
Vous recevez aussi l'accès à une console d'essai où 36 appels se jouent d'un clic — multi-signataires, champs à remplir, modèles, envoi groupé, formulaires publics, paiement à la signature, webhooks, jetons à portée limitée, et le document signé avec son dossier de preuve. Rien à installer pour voir l'API répondre.
Voir l'API tourner dans un vrai produit
LocAdmin (gestion locative) fait signer ses documents par l'API JuriSign. Sa démonstration appelle notre bac à sable : vous suivez le parcours complet, de l'envoi à la preuve, sans rien installer.
Un contrat et ses annexes en un seul appel : envoyez files[] au lieu de file, jusqu'à 10 fichiers (PDF, images, Word). JuriSign les fusionne en un document unique, dans l'ordre d'envoi, et renvoie merged_from pour que vous confirmiez que tout est arrivé. Le champ file au singulier ne change pas.
curl -X POST https://www.jurisign.fr/api/v1/documents -H "Authorization: Bearer $TOKEN" -F "files[]=@contrat.pdf" -F "files[]=@annexe1.pdf" -F "files[]=@annexe2.pdf"
# → { "data": { "id": "3b7a…", "page_count": 11, "merged_from": 3 } }
Ordre parallèle ou séquentiel, expiration, relances automatiques, annulation.
POST /sign-requests
Signature, texte, date, case à cocher — positionnés au pixel près sur n'importe quelle page.
"zones": [ { "type": "text", … } ]
Enregistrez signataires et zones une fois, créez ensuite une demande en un appel.
POST /templates/{id}/sign-requests
Vos destinataires en JSON, un document personnalisé chacun. Pas de fichier Excel à générer.
POST /bulk-campaigns
Un lien partageable : chaque répondant signe sa propre demande, sans compte.
POST /public-forms
Un devis signé et payé en une étape. L'argent va directement sur votre compte Stripe.
"payment": { "amount_cents": 147000 }
Signés HMAC-SHA256, 8 relances sur ~42 h. Une panne chez vous ne perd pas l'événement.
X-JuriSign-Signature: sha256=…
OTP e-mail inclus, OTP SMS, ou contrôle par photo pour renforcer le dossier de preuve.
"otp_channel": "sms"
Un jeton en lecture seule pour votre tableau de bord, un autre en écriture pour vos automatisations.
"scopes": ["documents:read", …]
Déposez votre logo une fois dans vos paramètres : il accompagne ensuite l'e-mail d'invitation, le code de vérification, la page de signature et l'e-mail de confirmation — y compris pour les demandes créées par l'API. Aucun appel supplémentaire, aucune ligne de code.
Ce qu'on aimerait savoir le premier jour : comment essayer sans rien casser, ce qui arrive quand on dépasse une limite, et ce que l'API répond quand elle refuse.
Demandez un jeton de test : il porte le préfixe
sandbox_,
et c'est ce préfixe seul qui neutralise les envois réels.
Le même jeton sans son préfixe est refusé — exprès.
POST /api/v1/auth/sandbox-token
{ "email": "vous@societe.fr", "password": "…" }
→ { "token": "sandbox_12|xxxxx", "sandbox": true }
| E-mails et SMS aux signataires | jamais envoyés |
| Code OTP du signataire de test | toujours 123456, affiché sur la page de signature |
| Crédits de signature | non décomptés |
| Factures | aucune |
| Webhooks | envoyés pour de vrai |
| Réponses de l'API | identiques |
Les webhooks partent réellement : un webhook qu'on ne reçoit pas ne
prouve rien. Chaque réponse porte "_sandbox": true.
Chaque livraison est signée en HMAC-SHA256 avec le secret de votre endpoint. Vérifiez-la avant de traiter l'événement : sans cela, n'importe qui connaissant votre URL peut vous envoyer un faux « document signé ».
| X-JuriSign-Signature | sha256= + HMAC hexadécimal |
| X-JuriSign-Event | type d'événement |
| X-JuriSign-Timestamp | epoch, hors signature |
| X-JuriSign-Delivery | identifiant de livraison |
$corps = file_get_contents('php://input'); // le corps BRUT
$attendu = 'sha256=' . hash_hmac('sha256', $corps, $secret);
if (! hash_equals($attendu, $_SERVER['HTTP_X_JURISIGN_SIGNATURE'] ?? '')) {
http_response_code(401);
exit;
}
Deux pièges. Signez le corps brut, jamais un JSON décodé
puis ré-encodé : les espaces et l'ordre des clés changent, la signature
aussi. Et comparez en temps constant
(hash_equals), pas avec
==.
Le même événement peut vous être livré deux fois après une reprise :
X-JuriSign-Delivery vous permet de l'ignorer.
Comptées par minute. Un dépassement renvoie
429
avec l'en-tête Retry-After :
attendez-le plutôt que de réessayer aussitôt.
| Appels courants | 60 / min |
| Téléversement de documents | 20 / min |
| Envoi, annulation, relance | 30 / min |
| Gestion des webhooks | 30 / min |
| Authentification | 10 / min |
L'authentification est comptée par compte visé, pas par adresse IP : vos serveurs derrière une même sortie réseau ne se gênent pas entre eux.
Toujours du JSON, toujours un message
lisible. Les erreurs de validation détaillent chaque champ.
| 401 | Jeton absent, invalide ou révoqué |
| 403 | Portée insuffisante, ou ressource d'une autre organisation |
| 404 | Ressource introuvable |
| 422 | Validation : le détail est dans errors |
| 429 | Limite de débit atteinte |
{
"message": "The given data was invalid.",
"errors": { "signers.0.email": ["Adresse e-mail invalide."] }
}
Toutes les listes sont paginées : 20 éléments par défaut,
réglable par per_page.
GET /api/v1/sign-requests?per_page=50&page=2
→ { "data": [ … ],
"meta": { "current_page": 2, "last_page": 7,
"per_page": 50, "total": 312 } }
Pas de SDK à installer, et c'est voulu : l'API est du REST et du JSON, votre client HTTP habituel suffit — Guzzle, axios, requests, ou l'équivalent dans votre langage. Rien de propriétaire à maintenir chez vous.
Cochez ce dont vous avez besoin, ajustez votre volume : le prix se met à jour. Tarifs HT, sans engagement.
Les forfaits sont ceux de nos abonnements habituels — identiques à ceux de la page Tarifs, votre abonnement sert aussi bien au site qu'à l'API. Les tarifs d'options ci-dessous s'appliquent à l'usage par API ; à l'unité depuis l'application, certaines options gardent un tarif différent car elles n'exigent aucun abonnement.
Au-delà de l'inclus, facturé le mois suivant : 1,10 € HT pour les 100 premières, 0,95 € HT de la 101e à la 500e, puis 0,80 € HT. L'API ne bloque jamais un envoi. Au-dessus de 2 000/mois, nous établissons un devis.
Bac à sable illimité, sans carte bancaire
Besoin d'une signature unique sans compte ? JuriSign Flash règle le cas à l'acte, pour 3,50 € TTC.