Introduction
L'API REST JuriSign vous permet d'intégrer la signature électronique conforme eIDAS (SES) directement dans votre back-office ou votre application. Vous pouvez :
- Télécharger des documents PDF
- Créer des demandes de signature avec un ou plusieurs signataires
- Valider l'identité par code OTP email ou SMS
- Suivre l'avancement en temps réel via webhooks
- Télécharger les documents signés et les preuves d'audit
REST
API JSON standard
eIDAS SES
Signature conforme
OTP Email / SMS
Vérification d'identité
URL de base : https://www.jurisign.fr/api/v1
Centre d'essai : https://test-api.jurisign.fr/api/v1 — voir ci-dessous
Format : JSON (Content-Type: application/json)
Auth : Bearer Token (Sanctum)
Authentification
L'API utilise l'authentification par Bearer Token (Laravel Sanctum). Obtenez un token avec vos identifiants :
POST /api/v1/auth/token
// Requête
curl -X POST https://www.jurisign.fr/api/v1/auth/token \
-H "Content-Type: application/json" \
-d '{
"email": "votre@email.com",
"password": "votre_mot_de_passe",
"device_name": "mon-backoffice"
}'
// Réponse
{
"token": "1|abc123def456...",
"token_type": "Bearer",
"user": {
"id": "uuid-...",
"name": "Christophe Duval",
"email": "christophe.duval@trimaran.com",
"organization": {
"id": "uuid-...",
"name": "Trimaran"
}
}
}
Important
Conservez ce token en sécurité. Utilisez-le dans l'en-tete Authorization de toutes vos requêtes :
Authorization: Bearer 1|abc123def456...
Centre d'essai ou production : deux environnements séparés
Centre d'essai
https://test-api.jurisign.fr/api/v1
- Votre jeton : bouton « Générer un jeton pour mon code » de la console, ou POST /auth/sandbox-token avec l'e-mail et le mot de passe de votre compte d'essai (pas ceux de jurisign.fr).
- Il commence par sandbox_ : envoyez-le tel quel, préfixe compris.
- Rien n'est facturé, et rien de ce que vous y créez n'apparaît sur jurisign.fr : le centre a sa propre base.
Production
https://www.jurisign.fr/api/v1
- Votre jeton : POST /auth/token avec les identifiants de votre compte jurisign.fr.
- Les documents et demandes créés par l'API apparaissent dans votre espace jurisign.fr.
- Une signature effective consomme un crédit.
Pour démarrer en deux minutes : un script Python prêt à lancer enchaîne les quatre appels (jeton, dépôt du PDF, demande, envoi) et affiche le lien de signature.
Flux complet de signature
Voici le processus en 4 étapes pour envoyer un document à la signature via l'API :
Upload PDF
POST /documents
Créer demande
POST /sign-requests
Envoyer
POST /sign-requests/{id}/send
Suivi & DL
GET + webhooks
Pas encore de clé ?
Obtenez un accès bac à sable gratuit — aucune signature réelle, aucun crédit décompté.
Télécharger un document PDF
POST /api/v1/documents
Envoyez le PDF en multipart/form-data. Taille max : 20 Mo.
curl -X POST https://www.jurisign.fr/api/v1/documents \
-H "Authorization: Bearer VOTRE_TOKEN" \
-F "file=@contrat.pdf" \
-F "title=Contrat de bail 2026"
// Réponse 201
{
"data": {
"id": "doc-uuid-...",
"title": "Contrat de bail 2026",
"original_filename": "contrat.pdf",
"status": "draft",
"page_count": 5,
"file_size": 245760,
"created_at": "2026-03-31T10:00:00+02:00"
}
}
Plusieurs fichiers en un seul appel
Un contrat et ses annexes ? Envoyez-les dans files[] plutôt que dans file : JuriSign les fusionne en un seul PDF, dans l'ordre d'envoi, et vous renvoie un document unique. Jusqu'à 10 fichiers par appel (PDF, images, Word).
curl -X POST https://www.jurisign.fr/api/v1/documents -H "Authorization: Bearer VOTRE_TOKEN" -F "files[]=@contrat.pdf" -F "files[]=@annexe1.pdf" -F "files[]=@annexe2.pdf" -F "title=Contrat + annexes"
// Réponse 201 — un seul document, la somme des pages
{
"data": {
"id": "doc-uuid-...",
"title": "Contrat + annexes",
"page_count": 11,
"merged_from": 3
}
}
merged_from vous confirme le nombre de fichiers effectivement fusionnés. Le champ file au singulier continue de fonctionner à l'identique : rien à changer dans une intégration existante.
Note : Conservez l'id du document, il sera nécessaire pour créer la demande de signature.
Créer une demande de signature
POST /api/v1/sign-requests
Définissez les signataires, le canal OTP (email ou SMS), les zones de signature et la durée de validité.
curl -X POST https://www.jurisign.fr/api/v1/sign-requests \
-H "Authorization: Bearer VOTRE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"document_id": "doc-uuid-...",
"subject": "Signature du contrat de bail",
"message": "Merci de bien vouloir signer ce document.",
"signing_order_type": 0,
"expiry_hours": 168,
"signers": [
{
"prenom": "Jean",
"nom": "Dupont",
"email": "jean.dupont@email.com",
"otp_channel": "sms",
"telephone": "+33612345678"
},
{
"prenom": "Marie",
"nom": "Martin",
"email": "marie.martin@email.com",
"otp_channel": "email"
}
],
"zones": [
{
"signer_index": 0,
"page": 5,
"x": 10,
"y": 75,
"width": 35,
"height": 10
},
{
"signer_index": 1,
"page": 5,
"x": 55,
"y": 75,
"width": 35,
"height": 10
}
]
}'
Paramètres de la demande
| document_id | UUID du document (requis) |
| subject | Objet de la demande (requis) |
| message | Message pour les signataires |
| signing_order_type | 0 = simultané, 1 = séquentiel |
| expiry_hours | Durée de validité (1 à 720 h) |
| reminders | Relances automatiques par e-mail (J+1, J+3, J+5, veille de l’expiration) : false pour les désactiver. Par défaut true. |
| sender_name | Facultatif, 100 caractères au plus : le nom présenté aux signataires pour cette demande, par exemple votre propre client. Affiché « sender_name, via votre organisation » dans l’e-mail d’invitation et sur la page de signature, et consigné au dossier de preuve. Ni adresse web ni balise HTML. |
Paramètres signataire
| prenom | Prénom (requis) |
| nom | Nom (requis) |
| Email (requis) | |
| otp_channel | "email" ou "sms" |
| telephone | Requis si otp_channel = "sms" |
Zones de signature (coordonnées)
Les coordonnées x, y, width, height sont en pourcentage de la page (0 à 100). Le point (0,0) est en haut à gauche. signer_index correspond à l'index du signataire (0, 1, 2...).
Erreur courante : aucun email/SMS recu apres la creation
La creation d'une demande de signature (etape 2) ne declenche pas l'envoi des notifications. La demande est creee en statut draft.
Vous devez appeler l'etape 3 (POST /sign-requests/{uuid}/send) pour envoyer les emails d'invitation aux signataires.
Ce fonctionnement en 2 temps permet de verifier la demande avant envoi, ou de l'annuler si necessaire.
Envoyer aux signataires
POST /api/v1/sign-requests/{uuid}/send
Déclenche l'envoi des invitations par email à chaque signataire. Le signataire reçoit un lien sécurisé unique pour signer.
curl -X POST https://www.jurisign.fr/api/v1/sign-requests/sr-uuid-.../send \
-H "Authorization: Bearer VOTRE_TOKEN"
// Réponse 200
{
"message": "Demande envoyée aux signataires.",
"data": {
"id": "sr-uuid-...",
"status": "pending",
"sent_at": "2026-03-31T10:05:00+02:00"
}
}
Processus côté signataire :
- Le signataire reçoit un email avec un lien sécurisé
- Il visualise le document PDF et les zones de signature
- Il trace sa signature, à la souris ou au doigt, ou fait écrire son nom en écriture manuscrite et l'adopte comme signature
- Il reçoit un code OTP (par email ou SMS) pour valider
- Le document est signé et un dossier de preuve est généré
Suivi et téléchargement
Consulter le statut
GET /api/v1/sign-requests/{uuid}
// Réponse - statuts possibles : draft, pending, partially_signed, completed, expired, cancelled
{
"data": {
"id": "sr-uuid-...",
"status": "completed",
"subject": "Contrat de bail",
"progress": 100,
"signers": [
{
"id": "signer-uuid-...",
"name": "Jean Dupont",
"email": "jean.dupont@email.com",
"status": "signed",
"otp_channel": "sms",
"signed_at": "2026-03-31T14:30:00+02:00"
}
]
}
}
Télécharger le PDF signé
GET /api/v1/sign-requests/{uuid}/download
Retourne le fichier PDF signé (Content-Type: application/pdf). Disponible uniquement quand le statut est completed.
Télécharger la preuve d'audit
GET /api/v1/sign-requests/{uuid}/proof
Retourne le dossier de preuve PDF (horodatage, IP, empreintes, captures de signature).
Webhooks
Recevez des notifications en temps réel sur votre serveur lorsqu'un événement se produit :
sign_request.sent
Demande envoyée aux signataires
sign_request.completed
Tous les signataires ont signé
sign_request.cancelled
Demande annulée
signer.signed
Un signataire a signé
signer.declined
Un signataire a refusé
Enregistrer un webhook
POST /api/v1/webhooks
curl -X POST https://www.jurisign.fr/api/v1/webhooks \
-H "Authorization: Bearer VOTRE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"url": "https://votre-serveur.com/webhooks/jurisign",
"events": ["sign_request.completed", "signer.signed"]
}'
// Réponse 201 - conservez le secret !
{
"data": {
"id": 1,
"url": "https://votre-serveur.com/webhooks/jurisign",
"events": ["sign_request.completed", "signer.signed"],
"secret": "wh_sec_abc123..."
}
}
Vérification de signature
Chaque webhook est signé avec le secret fourni. Vérifiez l'en-tête X-Signature pour vous assurer de l'authenticité. En cas d'échec de livraison, 3 tentatives automatiques sont effectuées (1min, 5min, 30min).
Redirection après signature et domaine déclaré
Le champ redirect_url affiche au signataire, une fois sa signature faite, un bouton « Revenir sur votre-site.fr ». Il est facultatif : sans lui, l'API fonctionne entièrement et le signataire voit la page de confirmation JuriSign.
Pour l'utiliser, votre nom de domaine doit être déclaré au préalable auprès du support. Tant qu'aucun domaine n'est déclaré, toute redirect_url est refusée (HTTP 422), et la demande n'est pas créée.
Pourquoi un vrai domaine, déclaré à l'avance ?
- Protéger vos signataires contre l'hameçonnage. Le signataire fait confiance au lien jurisign.fr qu'il vient de recevoir. Si n'importe quelle adresse était acceptée, quiconque ouvre un compte pourrait renvoyer ce signataire vers une copie de votre site, avec la caution de jurisign.fr : c'est une « redirection ouverte », une faille classique.
- Un domaine qui vous appartient. Vos sous-domaines sont acceptés automatiquement. Déclarer une adresse IP, localhost ou le domaine partagé d'un hébergeur (dont d'autres clients utilisent des sous-domaines) autoriserait des sites qui ne sont pas les vôtres.
- https obligatoire, pour que le retour vers votre site ne puisse pas être intercepté.
- Un contrôle humain : c'est ce qui permet de s'assurer que le domaine est bien le vôtre avant de l'accepter.
Pour déclarer votre domaine : écrivez au support en indiquant le nom de votre organisation et le domaine (par exemple votre-site.fr). Pendant vos essais, ou en développement local, envoyez simplement vos demandes sans redirect_url.
Validation OTP / SMS
JuriSign supporte deux canaux de validation OTP pour vérifier l'identité du signataire :
Inclus dans tous les plans
Le code OTP à 6 chiffres est envoyé par email au signataire. Valable 5 minutes, 3 tentatives max.
"otp_channel": "email"
SMS
Plan Professionnel et supérieur
Le code OTP est envoyé par SMS au numéro du signataire. Plus sécurisé, recommandé pour les documents sensibles.
"otp_channel": "sms"
"telephone": "+33612345678"
Format téléphone : Format international avec indicatif pays (ex: +33612345678 pour la France).
Tous les endpoints
| Méthode | Endpoint | Description |
|---|---|---|
| Authentification | ||
| POST | /auth/token | Obtenir un token d'accès |
| DELETE | /auth/token | Révoquer le token courant |
| Documents | ||
| GET | /documents | Lister les documents |
| POST | /documents | Télécharger un document PDF |
| GET | /documents/{uuid} | Détails d'un document |
| DELETE | /documents/{uuid} | Supprimer un document (brouillon) |
| GET | /documents/{uuid}/download | Télécharger le fichier PDF |
| Demandes de signature | ||
| GET | /sign-requests | Lister les demandes |
| POST | /sign-requests | Créer une demande de signature |
| GET | /sign-requests/{uuid} | Détails et statut d'une demande |
| POST | /sign-requests/{uuid}/send | Envoyer aux signataires |
| POST | /sign-requests/{uuid}/cancel | Annuler une demande |
| POST | /sign-requests/{uuid}/remind | Relancer par e-mail les signataires dont c’est le tour, ou un seul (signer_id). Une relance par signataire et par 24 h (1 minute en bac à sable). |
| GET | /sign-requests/{uuid}/download | PDF signé (après complétion) |
| GET | /sign-requests/{uuid}/proof | Preuve d'audit PDF |
| Webhooks | ||
| GET | /webhooks | Lister les webhooks configurés |
| POST | /webhooks | Créer un endpoint webhook |
| PUT | /webhooks/{id} | Modifier un webhook |
| DELETE | /webhooks/{id} | Supprimer un webhook |
Gestion des erreurs
L'API retourne des codes HTTP standards avec un corps JSON décrivant l'erreur :
| Code | Signification |
|---|---|
| 200 | Succès |
| 201 | Ressource créée |
| 401 | Token invalide ou expiré |
| 403 | Action non autorisée (organisation suspendue, plan insuffisant) |
| 404 | Ressource non trouvée |
| 422 | Erreur de validation (champs manquants ou invalides) |
| 429 | Rate limit dépassé (trop de requetes) |
| 500 | Erreur serveur interne |
// Exemple d'erreur 422
{
"message": "Les données fournies ne sont pas valides.",
"errors": {
"document_id": ["Le champ document id est requis."],
"signers.0.email": ["L'adresse email est invalide."]
}
}
Support
Documentation interactive
Explorez et testez tous les endpoints en direct avec notre interface Swagger :
Ouvrir Swagger UIContact technique
Pour toute question sur l'intégration :
- Email : support@jurisign.fr
- Site : www.jurisign.fr