Skip to main content

Envoi d’une demande de signature

Ce guide couvre la création d’une demande de signature, l’ajout d’un modèle ou d’un document, et l’invitation des destinataires à signer.

Créer vs. créer et envoyer

POST /signing-requests crée uniquement un brouillon - cela n’envoie jamais d’email, quels que soient les paramètres que vous transmettez. Pour notifier immédiatement les destinataires, utilisez plutôt POST /signing-requests/create-and-send, ou appelez .../send sur le brouillon par la suite. C’est la cause la plus fréquente des signalements « j’ai créé une demande de signature mais rien n’a été envoyé ».
Firma propose deux façons de démarrer une demande de signature, et choisir la mauvaise est l’erreur d’intégration la plus courante : Utilisez create lorsque votre workflow nécessite une étape de relecture ou d’édition avant qu’un destinataire ne soit atteint. Utilisez create-and-send lorsque vous voulez que la demande soit active et les destinataires notifiés en un seul appel.

Le paramètre send_signing_email

Ce paramètre se trouve dans settings.send_signing_email, mais il signifie quelque chose de différent selon le endpoint que vous appelez :
send_signing_email: false sur create-and-send n’est pas un brouillon silencieux - c’est une demande de signature entièrement envoyée et facturée, sans email associé. Utilisez-le lorsque vous prévoyez de transmettre vous-même le lien de signature (en l’intégrant, ou en envoyant votre propre notification). Si vous voulez quelque chose que vous puissiez encore annuler ou modifier avant qu’il ne devienne définitif, utilisez plutôt create (le endpoint de brouillon).

Le paramètre allow_presigning_download

Contrôle si les destinataires peuvent télécharger le document non signé avant d’avoir terminé leur part du processus de signature. Il se comporte de la même manière sur les deux endpoints :
  • Si vous le définissez explicitement dans settings, cette valeur est stockée sur la demande de signature.
  • Si vous l’omettez, il se résout au moment de la consultation/du téléchargement via une chaîne d’héritage : demande de signature → espace de travail → paramètre de l’entreprise, avec comme valeur par défaut non autorisé si aucun de ces niveaux n’est défini.
  • Lors de la création à partir d’un modèle et en l’omettant, la demande hérite de la propre valeur allow_presigning_download du modèle.
Le schéma OpenAPI public de create-and-send ne liste pas actuellement allow_presigning_download dans son objet settings, mais le endpoint l’accepte et l’applique de façon identique à POST /signing-requests.

Étapes

  1. Créez ou sélectionnez un modèle
  2. Créez une demande de signature référençant le modèle
  3. Ajoutez des destinataires avec les informations requises (prénom, nom, email)
  4. Ajoutez éventuellement des champs de formulaire avec un positionnement basé sur des pourcentages
  5. Envoyez la demande par email ou intégrez la vue de signature

Schéma du destinataire (champs requis)

Les destinataires nécessitent first_name et last_name comme champs distincts - il n’existe pas de champ name unique.
Chaque destinataire doit inclure :
  • first_name (requis) - Prénom du destinataire
  • last_name (optionnel) - Nom du destinataire (requis uniquement lors de la création via POST /signing-requests avec un document brut)
  • email (requis) - Adresse email (create avertit en cas de format invalide ; create-and-send et /send le rejettent)
  • designation (requis) - Rôle : "Signer", "CC", ou "Approver". Les approbateurs examinent et approuvent le document (sans signature) via les types de champs approval_* ci-dessous
  • order (optionnel) - Ordre de signature pour les workflows séquentiels
Champs optionnels :
  • phone_number, street_address, city, state_province, postal_code, country, title, company
  • custom_fields - Objet avec des paires clé-valeur personnalisées

Créer une demande de signature à partir d’un modèle (API)

Endpoint : POST /signing-requests
Exemple curl (création d’une demande à partir d’un modèle) :
Une réponse réussie (201) renvoie une ressource Document incluant id (le signing_request_id) et document_url le cas échéant.

Créer une demande de signature (exemple serveur) - Node (fetch)

Créer une demande de signature (exemple serveur) - Python (requests)

Créer une demande de signature à partir d’un document

Au lieu d’utiliser un modèle, vous pouvez créer une demande de signature en téléversant directement un document PDF ou DOCX. Choisissez la méthode en fonction de la taille de votre fichier :
Le base64 en ligne (document) fonctionne pour les petits fichiers, mais l’envoi d’un document volumineux de cette façon peut échouer avec une erreur 502 avant même que votre requête n’atteigne la validation applicative - la charge utile atteint une limite de taille au niveau de la plateforme, et non une erreur que vous pouvez intercepter et retenter proprement. Si un document approche les 5 Mo, utilisez plutôt le flux de téléversement en deux étapes (document_id) décrit ci-dessous plutôt que le base64 en ligne, même si cela demande d’écrire plus de code.
Pour les documents de moins de 5 Mo, incluez le fichier encodé en base64 directement dans le corps de la requête :
Vous devez fournir exactement un seul des paramètres document, document_id, ou template_id. Ils sont mutuellement exclusifs.

Ajout de champs de formulaire (positionnement basé sur des pourcentages)

Important : toutes les coordonnées de position des champs (x, y, width, height) doivent être des pourcentages (0-100) relatifs aux dimensions de la page, et non des pixels. Le champ page_number est requis.
Vous voulez qu’un champ affiche une valeur avant que le signataire ne le touche - une valeur fixe que vous connaissez déjà, ou les propres données de profil du destinataire ? Consultez le guide de préremplissage des champs. variable_name seul ne fait pas cela.
Lors de la création directe d’une demande de signature (POST /signing-requests) ou de sa mise à jour, vous pouvez ajouter des champs de formulaire :

Exemple de positionnement de champ

Types de champs

  • signature - Champ de signature
  • text - Saisie de texte sur une seule ligne
  • date - Sélecteur de date
  • checkbox - Case à cocher
  • dropdown - Sélecteur déroulant (nécessite dropdown_options)
  • initial - Champ d’initiales (accepte également initials comme alias)
  • approval_signature - Tampon APPROVED (Approbateur uniquement)
  • approval_checkmark - Coche d’approbation (Approbateur uniquement)
  • approval_date - Date d’approbation (Approbateur uniquement)
Les types de champs approval_* ne peuvent être attribués qu’à un destinataire dont la designation est "Approver" (en attribuer un à un Signataire renvoie une erreur 400). Leur valeur est établie côté serveur lorsque l’approbateur termine son examen, vous n’avez donc pas à soumettre de valeur pour eux, et le tampon d’approbation est apposé sur le certificat d’achèvement.

Directives de positionnement

Le système de coordonnées utilise des pourcentages pour une mise à l’échelle responsive :
  • x : 0 (bord gauche) à 100 (bord droit)
  • y : 0 (bord supérieur) à 100 (bord inférieur)
  • width : pourcentage de la largeur de la page (par ex., 30 = 30 % de largeur)
  • height : pourcentage de la hauteur de la page (par ex., 8 = 8 % de hauteur)
Pour une page US Letter (8,5” × 11”), utilisez ces conversions approximatives :
  • 1 pouce ≈ 11,76 % de largeur
  • 1 pouce ≈ 9,09 % de hauteur

Mise à jour des demandes de signature

Avant qu’une demande de signature ne soit envoyée, vous pouvez mettre à jour ses détails via l’API. L’API propose deux méthodes :
Impossible de mettre à jour après l’envoi : une fois qu’une demande de signature est envoyée, elle ne peut plus être modifiée. Les mises à jour ne fonctionnent que pour les demandes ayant le statut not_sent.

Mise à jour complète (PUT)

Utilisez comprehensive-update-signing-request pour les mises à jour complexes impliquant plusieurs sections. Quand l’utiliser :
  • Mise à jour de plusieurs destinataires à la fois
  • Suppression de destinataires (avec réattribution/suppression des champs)
  • Mise à jour des champs et des rappels ensemble
  • Effectuer des modifications coordonnées sur plusieurs sections
Structure : toutes les sections sont optionnelles, mais au moins une doit être fournie :
  • signing_request_properties - Mettre à jour le nom, la description, le document, l’expiration, les paramètres
  • recipients - Upsert des destinataires (inclure id pour mettre à jour, omettre pour créer)
  • deleted_recipients - Supprimer des destinataires avec field_action (supprimer ou réattribuer les champs)
  • fields - Upsert des champs (inclure id pour mettre à jour, omettre pour créer)
  • reminders - Upsert des rappels (inclure id pour mettre à jour, omettre pour créer)
Exigences :
  • ✅ Peut mettre à jour plusieurs sections en une seule requête
  • ✅ Prend en charge la suppression de destinataires avec gestion des champs
  • ✅ Ne fonctionne que si la demande n’a pas encore été envoyée
Exemple (Node.js) :

Mise à jour partielle (PATCH)

Utilisez partially-update-signing-request pour mettre à jour des propriétés spécifiques ou un seul destinataire. Quand l’utiliser :
  • Mise à jour du nom, de la description ou des paramètres
  • Ajout ou mise à jour d’un destinataire à la fois
  • Effectuer des modifications ciblées sans affecter les autres données
Important : impossible de mettre à jour à la fois les propriétés ET un destinataire dans la même requête. Choisissez l’un ou l’autre :
  • Mettre à jour uniquement les propriétés (name, description, document, expiration_hours, settings)
  • OU mettre à jour/créer un seul destinataire
Avantages :
  • ✅ N’envoyez que les champs que vous souhaitez modifier
  • ✅ Plus efficace pour les petits changements
  • ✅ Les autres champs restent inchangés
  • ✅ Plus sûr pour les modifications concurrentes
Exemple (Node.js) :
Exemple (Python) :

Choisir entre PUT et PATCH

Important : les deux méthodes de mise à jour ne fonctionnent qu’avant l’envoi de la demande de signature. Une fois envoyée, la demande de signature devient immuable pour empêcher toute altération des workflows de signature actifs.
Bonnes pratiques :
  • Mettez à jour les demandes de signature avant d’appeler /send
  • Validez les données des destinataires avant de mettre à jour
  • Utilisez PATCH pour les modifications incrémentales
  • Implémentez une logique de nouvelle tentative avec un backoff exponentiel

Envoi (invitations par email)

Une fois que vous avez un ID de demande de signature (et avez effectué les mises à jour nécessaires), appelez POST /signing-requests/{signing_request_id}/send pour envoyer des emails à tous les destinataires.

Exemple

L’endpoint /send vérifie que tous les destinataires disposent des informations requises (first_name et email - last_name est optionnel) et que tous les champs préremplis disposent des données correspondantes du destinataire.

Intégration de la vue de signature

Pour intégrer l’expérience de signature dans votre propre application, récupérez l’id du destinataire depuis GET /signing-requests/{id}/users et construisez l’URL de signature :
Affichez cette URL dans un iframe. Pour la configuration complète de l’intégration - y compris les événements postMessage, le dimensionnement de l’iframe et les autorisations caméra/presse-papiers - consultez le guide Signature intégrable.

Cas particuliers et astuces

  • Ordre de signature : assurez-vous que les destinataires ont des valeurs order séquentielles (1, 2, 3…) pour les workflows de signature séquentiels
  • Piste d’audit : téléchargez la piste d’audit via GET /signing-requests/{id}/tracking pour voir toutes les actions des utilisateurs
  • Téléchargement du PDF terminé : utilisez GET /signing-requests/{id}/download après l’achèvement
  • Webhooks : abonnez-vous à des événements comme signing_request.completed plutôt que d’effectuer du polling (voir le guide Webhooks)

Prochaines étapes

  • Pour les workflows de signature séquentiels avec plusieurs signataires, assurez-vous que chaque destinataire a une valeur order séquentielle (1, 2, 3…).
  • Pour l’audit et la conformité, téléchargez le PDF final via GET /signing-requests/signing_request_id/download après l’achèvement.
  • Utilisez les webhooks (voir le Guide Webhooks) pour réagir aux événements de signature plutôt que d’effectuer du polling.