Aller au contenu

Démarrage rapide

Ce tutoriel mène d’un modèle publié à un PDF signé et scellé. Il utilise une clé de test : rien n’est facturé et chaque document porte le filigrane TEST.

  1. Les clés API se créent dans le tableau de bord, sous Paramètres › Clés API. Choisissez Test pour ce tutoriel : la clé commence par bf_test_. La clé complète n’est affichée qu’une seule fois ; enregistrez-la dans une variable d’environnement.

    Fenêtre de terminal
    export BONA_FIDE_API_KEY=bf_test_…

    Chaque requête l’envoie sous la forme Authorization: Bearer … (ou x-api-key: …). Consultez Authentification.

  2. Les modèles se conçoivent dans le tableau de bord (importez un PDF ou un document Word et placez-y des champs, ou rédigez le contrat en mode Document), puis se publient. Listez-les pour obtenir leur identifiant :

    Fenêtre de terminal
    curl https://api.bonafidesign.com/v1/templates \
    -H "Authorization: Bearer $BONA_FIDE_API_KEY"

    GET /v1/templates/{id}/versions/latest renvoie les roles et les fields de la version, ainsi que le JSON Schema de ses variables. La page du modèle dans le tableau de bord comporte aussi un panneau Utiliser dans l’API avec une requête prête à l’emploi pour cette version précise.

  3. POST /v1/envelopes génère le document à partir du modèle et de vos variables, fige la version et lance l’acheminement. Indiquez un destinataire par rôle (les rôles en copie sont facultatifs). Envoyez un Idempotency-Key pour qu’une nouvelle tentative ne déclenche pas un second envoi.

    Fenêtre de terminal
    curl https://api.bonafidesign.com/v1/envelopes \
    -H "Authorization: Bearer $BONA_FIDE_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: onboarding-8841" \
    -d '{
    "template": "tpl_…",
    "version": "latest",
    "variables": {
    "client": { "name": "Acme Robotics, Inc." },
    "effective_date": "2026-10-13"
    },
    "recipients": [
    { "role": "client", "name": "Jane Doe", "email": "jane@acme.dev" }
    ],
    "delivery": "embedded",
    "externalId": "user_8841",
    "dedupeOn": "external_id"
    }'

    La réponse est un 201 Created contenant l’enveloppe :

    {
    "id": "env_8Gm2kQ4rT1",
    "organization": "org_…",
    "template": "tpl_…",
    "templateVersion": 3,
    "status": "sent",
    "seal": "not_started",
    "testMode": true,
    "recipients": [
    {
    "id": "rcp_5Jw0pLs9Xe",
    "role": "client",
    "name": "Jane Doe",
    "email": "jane@acme.dev",
    "order": 1,
    "status": "sent",
    "verification": "email_otp",
    "completedAt": null
    }
    ],
    "documentHash": "9f2c…",
    "sealedDocumentHash": null,
    "externalId": "user_8841",
    "metadata": {},
    "createdAt": "2026-10-13T13:58:04.512Z",
    "completedAt": null
    }

    delivery détermine la manière de joindre les destinataires : avec email (valeur par défaut), chaque destinataire reçoit un lien de signature par e-mail quand vient son tour ; embedded et none n’envoient aucun e-mail, et c’est vous qui ouvrez les sessions de signature (étape suivante).

  4. Créez une session de signature pour le destinataire depuis votre backend. Les sessions sont éphémères (ttlSeconds, de 60 à 3600, 600 par défaut) et à usage unique.

    Fenêtre de terminal
    curl https://api.bonafidesign.com/v1/envelopes/env_8Gm2kQ4rT1/sessions \
    -H "Authorization: Bearer $BONA_FIDE_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "recipient": "rcp_5Jw0pLs9Xe",
    "mode": "embedded",
    "allowedOrigins": ["https://app.example.com"]
    }'

    Transmettez le token renvoyé (bfs_…) à votre page et affichez le web component :

    <script type="module" src="https://js.bonafidesign.com/v1"></script>
    <bf-signing session="bfs_…"></bf-signing>
    <script>
    document.querySelector('bf-signing')
    .addEventListener('completed', (e) => console.log('signed', e.detail.envelope));
    </script>

    Wrappers React et Vue, événements et modèle de sécurité : Signature intégrée.

    Avec la vérification par défaut email_otp, le signataire confirme, avant de valider, un code à six chiffres envoyé à son adresse e-mail. En mode test, les e-mails ne sont remis qu’aux membres de votre organisation : utilisez donc votre propre adresse pendant vos tests.

  5. Enregistrez un endpoint de webhook dans Paramètres › Webhooks (ou avec POST /v1/webhook-endpoints) et conservez le secret whsec_…. Quand le dernier destinataire a signé, vous recevez envelope.completed, avec toutes les variables et valeurs saisies dans data.values. Le PDF scellé suit avec envelope.sealed.

    import express from 'express';
    import { Webhook } from 'standardwebhooks';
    const wh = new Webhook(process.env.BONA_FIDE_WEBHOOK_SECRET!);
    const app = express();
    app.post('/hooks/bona-fide', express.raw({ type: 'application/json' }), async (req, res) => {
    const event = wh.verify(req.body, req.headers as Record<string, string>) as { type: string; data: any };
    if (event.type === 'envelope.completed') await saveValues(event.data.envelope.id, event.data.values);
    if (event.type === 'envelope.sealed') await fetchSealedPdf(event.data.envelope.id);
    res.sendStatus(204);
    });

    Téléchargez le PDF scellé (le document avec son certificat de finalisation, horodaté) :

    Fenêtre de terminal
    curl -o signed.pdf "https://api.bonafidesign.com/v1/envelopes/env_8Gm2kQ4rT1/document?version=sealed" \
    -H "Authorization: Bearer $BONA_FIDE_API_KEY"

    Liste complète des événements, nouvelles tentatives et vérification manuelle : Webhooks.

Remplacez la clé de test par une clé bf_live_. Les enveloppes en production ne portent pas de filigrane, les e-mails sont envoyés à tous les destinataires et les enveloppes finalisées sont décomptées de votre forfait (Forfaits et limites). Tout ce qu’une clé crée prend son mode, ses listes n’affichent que ce mode, et les enveloppes de test ne notifient que les endpoints de webhook en mode test : enregistrez donc aussi un endpoint de production.