BunnyDoc
APIAPI de signature électronique

Envoyer depuis un modèle

Créez une enveloppe à partir d'un de vos modèles et envoyez-la en un seul appel, puis récupérez les liens de signature.

C'est l'endpoint autour duquel la plupart des intégrations sont construites : prenez un de vos modèles, affectez de vraies personnes à ses rôles et envoyez-le pour signature — le tout en un seul appel. Il n'y a pas d'étape de brouillon sur l'API.

Créer une enveloppe à partir d'un modèle et l'envoyer

Requiert le scope envelopes:send. La création et l'envoi ont lieu ensemble : si l'envoi échoue pour une raison quelconque, l'enveloppe est supprimée et une erreur est renvoyée, de sorte que vous ne laissez jamais de brouillon à moitié créé. Chaque envoi réussi consomme une des demandes de signature par API de votre plan.

Endpoint

POST   https://api2.bunnydoc.com/v1/envelopes/from-template

Corps

ChampTypeRequisNotes
template_idstring (uuid)OuiLe modèle à envoyer. Obtenez-le via GET /v1/templates.
recipientsarrayOuiDe 1 à 50 destinataires, un par rôle déverrouillé du modèle.
sender_emailstringNonEnvoyer en tant que cet utilisateur. Doit être un utilisateur actif de votre entreprise disposant d'un siège de signature électronique. Par défaut, le propriétaire de la clé d'API.
titlestringNonTitre de l'enveloppe, jusqu'à 250 caractères. Par défaut, le nom du modèle.
email_subjectstringNonRemplace l'objet de l'e-mail de signature. Jusqu'à 300 caractères. Par défaut, l'objet du modèle.
email_messagestringNonRemplace le message présenté aux destinataires dans l'e-mail de signature. Jusqu'à 5000 caractères. Par défaut, le message du modèle (ou celui par défaut de votre marque active).

Chaque destinataire associe une personne réelle à un rôle du modèle :

Champ du destinataireTypeRequisNotes
rolestringOuiDoit correspondre à un rôle déverrouillé de GET /v1/templates/{id}. Jusqu'à 25 caractères.
namestringOuiNom complet du destinataire, jusqu'à 120 caractères.
emailstringOuiE-mail du destinataire, jusqu'à 150 caractères.
contact_numberstringNonJusqu'à 20 caractères.

Faites correspondre les rôles exactement, et ignorez les verrouillés

Chaque role doit être le nom d'un rôle déverrouillé du modèle, et chaque rôle peut apparaître une fois. Un rôle qui n'existe pas, ou un rôle verrouillé, est rejeté avec unknown_signer_role. Appelez toujours d'abord GET /v1/templates/{id} pour lire les rôles valides.

Exemple de requête

Envoyer depuis un modèle
curl -X POST https://api2.bunnydoc.com/v1/envelopes/from-template \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": "018f2c3d-4e5f-7a8b-9c0d-1e2f3a4b5c6d",
    "title": "Mutual NDA — Acme Corp",
    "sender_email": "sales@yourco.com",
    "email_subject": "Please sign: Mutual NDA",
    "email_message": "Hi Jane — please review and sign our mutual NDA. Thanks!",
    "recipients": [
      { "role": "Client", "name": "Jane Doe", "email": "jane@acme.com" }
    ]
  }'

Réponse

201 Created
{
  "envelope_id": "018f9a0b-1c2d-7e3f-8a4b-5c6d7e8f9a0b",
  "status": "sent",
  "title": "Mutual NDA — Acme Corp",
  "sender": { "email": "sales@yourco.com" },
  "recipients": [
    { "role": "Client", "name": "Jane Doe", "email": "jane@acme.com" }
  ],
  "signing_urls": [
    {
      "recipient_id": "018f9a0b-2c3d-7e4f-8a5b-6c7d8e9f0a1b",
      "name": "Jane Doe",
      "email": "jane@acme.com",
      "recipient_type": "need-to-sign",
      "signing_url": "https://sign.bunnydoc.com/s/eyJhbGciOi…"
    }
  ],
  "created_at": "2026-07-28T10:20:00.000Z"
}
ChampTypeDescription
envelope_idstringL'id de la nouvelle enveloppe.
statusstringToujours sent en cas de succès.
senderobjectL'e-mail de l'expéditeur résolu.
recipientsarrayLes destinataires que vous avez fournis.
signing_urlsarray | nullPrésent uniquement si l'enveloppe partage les liens de signature avec l'expéditeur ; sinon null. Voir ci-dessous.
created_atstringHorodatage ISO 8601.

D'où viennent l'expiration, les rappels et les champs ?

L'expiration, les rappels, l'ordre de signature et la disposition des champs sont hérités du modèle. L'API définit les destinataires, le titre, l'expéditeur et — lorsque vous les fournissez — l'objet et le message de l'e-mail ; le modèle (et le paramètre par défaut de votre marque active) fournissent le reste.

Erreurs

Statuterror.codeQuand cela se produit
402quota_exceededVotre entreprise n'a plus de demandes de signature par API pour cette période.
404template_not_foundAucun modèle avec cet id n'existe dans votre entreprise.
422unknown_signer_roleUn rôle de destinataire ne correspond pas au modèle, ou un rôle verrouillé a été fourni.
422sender_not_foundsender_email n'est pas un utilisateur actif disposant d'un siège de signature électronique dans votre entreprise.
422validation_failedLe corps est mal formé (champ manquant, rôle en double, valeur hors limites).
429rate_limitedPlus de 100 envois en 15 minutes pour cette clé.

Obtenir les liens de signature d'une enveloppe envoyée

Les liens de signature permettent au système de l'expéditeur de remettre à chaque destinataire un lien direct au lieu d'attendre l'e-mail. Ils sont disponibles à tout moment après l'envoi et sont aussi renvoyés directement par l'appel d'envoi ci-dessus.

Endpoint

GET   https://api2.bunnydoc.com/v1/envelopes/{id}/signing-links

Exemple de requête

Obtenir les liens de signature
curl https://api2.bunnydoc.com/v1/envelopes/018f9a0b-1c2d-7e3f-8a4b-5c6d7e8f9a0b/signing-links \
  -H "Authorization: Bearer <access_token>"

Réponse

200 OK
{
  "signing_urls": [
    {
      "recipient_id": "018f9a0b-2c3d-7e4f-8a5b-6c7d8e9f0a1b",
      "name": "Jane Doe",
      "email": "jane@acme.com",
      "recipient_type": "need-to-sign",
      "signing_url": "https://sign.bunnydoc.com/s/eyJhbGciOi…"
    }
  ]
}

signing_url vaut null pour les destinataires qui ne signent pas (par exemple, un destinataire qui « reçoit une copie »).

Un lien de signature est une donnée d'authentification

Quiconque détient un lien de signature peut signer en tant que ce destinataire. Transmettez-les par des canaux sécurisés et traitez-les comme des secrets : ne les journalisez pas et ne les mettez pas dans des URL que vous partagez.

Erreurs

Statuterror.codeQuand cela se produit
403signing_links_disabledCette enveloppe n'a pas l'option « partager les liens de signature avec l'expéditeur » activée.
404envelope_not_foundAucune enveloppe avec cet id n'existe dans votre entreprise.

Vous voulez les mises à jour de statut sans interroger l'API ?

L'API est en écriture seule pour les enveloppes : il n'y a pas d'endpoint de statut, par conception. Pour savoir quand un document est vu, signé ou terminé, abonnez-vous aux webhooks.

Sur cette page