API REST eIDAS SES Hébergement UE

API de signature électronique : faites signer vos documents depuis votre application

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.

JuriSign — API de signature électronique conforme eIDAS
0,30 €
la signature, à partir de
Gratuit
bac à sable illimité
~42 h
de reprise sur webhook
🇫🇷
éditeur et données en UE

Démarrer en 5 minutes

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é.

1

Obtenir un jeton de test

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 }
2

Déposer un PDF

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 } }
3

Créer la demande et l'envoyer

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).

Tout ce que l'API sait faire

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.

Obtenir ma clé de test

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.

Ouvrir la démonstration

L'accès est sur invitation. Laissez votre adresse : le code part immédiatement, sans validation à attendre.

Nouveau

Import multiple

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 } }
Nouveau

Ce qui s'est ajouté ces dernières semaines

  • Relances à votre main : "reminders": false coupe les relances automatiques d'une demande, et POST /sign-requests/{id}/remind relance quand vous le décidez (une fois par 24 h et par signataire ; au-delà, 429 avec Retry-After).
  • Le nom de votre client : "sender_name": "Agence Dupont" et le signataire lit « Agence Dupont, via votre organisation », dans l'e-mail comme sur la page de signature. Le nom est consigné au dossier de preuve.
  • Documents demandés au signataire : signers[].attachments_requested, jusqu'à 5 par signataire (RIB, pièce d'identité…), obligatoires ou non. Récupérez-les par GET /sign-requests/{id}/attachments/{attachment_id}.
  • Modèles pré-remplis : une demande créée depuis un modèle porte ses propres signers, et fields pré-remplit les champs, au besoin en lecture seule.
  • Un conseil quand ça coince : si vos appels échouent de façon répétée (jeton refusé, champ invalide, redirection non déclarée…), vous recevez un e-mail avec la cause probable et la correction.
  • Un script pour démarrer : jurisign_premiers_pas.py enchaîne jeton, dépôt, demande et envoi, et affiche le lien de signature.

Signature multi-signataires

Ordre parallèle ou séquentiel, expiration, relances automatiques, annulation.

POST /sign-requests

Champs à remplir

Signature, texte, date, case à cocher — positionnés au pixel près sur n'importe quelle page.

"zones": [ { "type": "text", … } ]

Modèles réutilisables

Enregistrez signataires et zones une fois, créez ensuite une demande en un appel.

POST /templates/{id}/sign-requests

Envoi groupé

Vos destinataires en JSON, un document personnalisé chacun. Pas de fichier Excel à générer.

POST /bulk-campaigns

Formulaires publics

Un lien partageable : chaque répondant signe sa propre demande, sans compte.

POST /public-forms

Paiement à la signature

Un devis signé et payé en une étape. L'argent va directement sur votre compte Stripe.

"payment": { "amount_cents": 147000 }

Webhooks fiables

Signés HMAC-SHA256, 8 relances sur ~42 h. Une panne chez vous ne perd pas l'événement.

X-JuriSign-Signature: sha256=…

Vérification avant signature

OTP e-mail inclus, OTP SMS, ou contrôle par photo pour renforcer le dossier de preuve.

"otp_channel": "sms"

Jetons à portée limitée

Un jeton en lecture seule pour votre tableau de bord, un autre en écriture pour vos automatisations.

"scopes": ["documents:read", …]
Marque blanche

Vos signataires voient votre marque, pas la nôtre

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.

  • ✓ Votre logo devant, JuriSign en retrait — la valeur juridique reste attachée à notre nom
  • ✓ Se règle depuis Paramètres → Votre logo, sans passer par le support
La page de signature aux couleurs du client

Avant d'intégrer

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.

Essayer sans conséquence

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 signatairesjamais envoyés
Code OTP du signataire de testtoujours 123456, affiché sur la page de signature
Crédits de signaturenon décomptés
Facturesaucune
Webhooksenvoyés pour de vrai
Réponses de l'APIidentiques

Les webhooks partent réellement : un webhook qu'on ne reçoit pas ne prouve rien. Chaque réponse porte "_sandbox": true.

Vérifier la signature d'un webhook

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-Signaturesha256= + HMAC hexadécimal
X-JuriSign-Eventtype d'événement
X-JuriSign-Timestampepoch, hors signature
X-JuriSign-Deliveryidentifiant 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.

Limites de débit

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 courants60 / min
Téléversement de documents20 / min
Envoi, annulation, relance30 / min
Gestion des webhooks30 / min
Authentification10 / 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.

Quand l'API refuse

Toujours du JSON, toujours un message lisible. Les erreurs de validation détaillent chaque champ.

401Jeton absent, invalide ou révoqué
403Portée insuffisante, ou ressource d'une autre organisation
404Ressource introuvable
422Validation : le détail est dans errors
429Limite de débit atteinte
{
  "message": "The given data was invalid.",
  "errors": { "signers.0.email": ["Adresse e-mail invalide."] }
}

Listes et outillage

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.

Estimez votre coût

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.

1 · Votre formule
2 · Signatures par mois
120

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.

3 · Options
Votre estimation
—
€ HT / mois
Soit — par signature
Créer un compte gratuit

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.

Pour aller plus loin