JuriSign

Guide d'intégration API

Intégrez la signature électronique dans vos applications

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://jurisign.fr/api/v1

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://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...

Flux complet de signature

Voici le processus en 4 étapes pour envoyer un document à la signature via l'API :

1

Upload PDF

POST /documents

2

Créer demande

POST /sign-requests

3

Envoyer

POST /sign-requests/{id}/send

4

Suivi & DL

GET + webhooks

1

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://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"
  }
}

Note : Conservez l'id du document, il sera nécessaire pour créer la demande de signature.

2

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://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_idUUID du document (requis)
subjectObjet de la demande (requis)
messageMessage pour les signataires
signing_order_type0 = simultané, 1 = séquentiel
expiry_hoursDurée de validité (24 à 720h)

Paramètres signataire

prenomPrénom (requis)
nomNom (requis)
emailEmail (requis)
otp_channel"email" ou "sms"
telephoneRequis 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.

3

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://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 :

  1. Le signataire reçoit un email avec un lien sécurisé
  2. Il visualise le document PDF et les zones de signature
  3. Il dessine sa signature (tracée manuscrite ou texte)
  4. Il reçoit un code OTP (par email ou SMS) pour valider
  5. Le document est signé et un dossier de preuve est généré
4

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

Validation OTP / SMS

JuriSign supporte deux canaux de validation OTP pour vérifier l'identité du signataire :

Email

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/tokenObtenir un token d'accès
DELETE/auth/tokenRévoquer le token courant
Documents
GET/documentsLister les documents
POST/documentsTélécharger un document PDF
GET/documents/{uuid}Détails d'un document
DELETE/documents/{uuid}Supprimer un document (brouillon)
GET/documents/{uuid}/downloadTélécharger le fichier PDF
Demandes de signature
GET/sign-requestsLister les demandes
POST/sign-requestsCréer une demande de signature
GET/sign-requests/{uuid}Détails et statut d'une demande
POST/sign-requests/{uuid}/sendEnvoyer aux signataires
POST/sign-requests/{uuid}/cancelAnnuler une demande
GET/sign-requests/{uuid}/downloadPDF signé (après complétion)
GET/sign-requests/{uuid}/proofPreuve d'audit PDF
Webhooks
GET/webhooksLister les webhooks configurés
POST/webhooksCré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 :

CodeSignification
200Succès
201Ressource créée
401Token invalide ou expiré
403Action non autorisée (organisation suspendue, plan insuffisant)
404Ressource non trouvée
422Erreur de validation (champs manquants ou invalides)
429Rate limit dépassé (trop de requetes)
500Erreur 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 UI

Contact technique

Pour toute question sur l'intégration :