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
| Champ | Type | Requis | Notes |
|---|---|---|---|
template_id | string (uuid) | Oui | Le modèle à envoyer. Obtenez-le via GET /v1/templates. |
recipients | array | Oui | De 1 à 50 destinataires, un par rôle déverrouillé du modèle. |
sender_email | string | Non | Envoyer 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. |
title | string | Non | Titre de l'enveloppe, jusqu'à 250 caractères. Par défaut, le nom du modèle. |
email_subject | string | Non | Remplace l'objet de l'e-mail de signature. Jusqu'à 300 caractères. Par défaut, l'objet du modèle. |
email_message | string | Non | Remplace 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 destinataire | Type | Requis | Notes |
|---|---|---|---|
role | string | Oui | Doit correspondre à un rôle déverrouillé de GET /v1/templates/{id}. Jusqu'à 25 caractères. |
name | string | Oui | Nom complet du destinataire, jusqu'à 120 caractères. |
email | string | Oui | E-mail du destinataire, jusqu'à 150 caractères. |
contact_number | string | Non | Jusqu'à 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
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" }
]
}'POST /v1/envelopes/from-template HTTP/1.1
Host: api2.bunnydoc.com
Authorization: Bearer <access_token>
Content-Type: application/json
{
"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
{
"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"
}| Champ | Type | Description |
|---|---|---|
envelope_id | string | L'id de la nouvelle enveloppe. |
status | string | Toujours sent en cas de succès. |
sender | object | L'e-mail de l'expéditeur résolu. |
recipients | array | Les destinataires que vous avez fournis. |
signing_urls | array | null | Présent uniquement si l'enveloppe partage les liens de signature avec l'expéditeur ; sinon null. Voir ci-dessous. |
created_at | string | Horodatage 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
| Statut | error.code | Quand cela se produit |
|---|---|---|
402 | quota_exceeded | Votre entreprise n'a plus de demandes de signature par API pour cette période. |
404 | template_not_found | Aucun modèle avec cet id n'existe dans votre entreprise. |
422 | unknown_signer_role | Un rôle de destinataire ne correspond pas au modèle, ou un rôle verrouillé a été fourni. |
422 | sender_not_found | sender_email n'est pas un utilisateur actif disposant d'un siège de signature électronique dans votre entreprise. |
422 | validation_failed | Le corps est mal formé (champ manquant, rôle en double, valeur hors limites). |
429 | rate_limited | Plus 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
curl https://api2.bunnydoc.com/v1/envelopes/018f9a0b-1c2d-7e3f-8a4b-5c6d7e8f9a0b/signing-links \
-H "Authorization: Bearer <access_token>"GET /v1/envelopes/018f9a0b-1c2d-7e3f-8a4b-5c6d7e8f9a0b/signing-links HTTP/1.1
Host: api2.bunnydoc.com
Authorization: Bearer <access_token>Réponse
{
"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
| Statut | error.code | Quand cela se produit |
|---|---|---|
403 | signing_links_disabled | Cette enveloppe n'a pas l'option « partager les liens de signature avec l'expéditeur » activée. |
404 | envelope_not_found | Aucune 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.
Contacts
Listez les contacts de votre entreprise et créez-en de nouveaux — les personnes à qui vous envoyez des documents.
Webhooks
Recevez des événements en temps réel — enveloppe envoyée, vue, signée, terminée, et plus — poussés vers un endpoint HTTPS que vous contrôlez, sans jamais interroger l'API.