Hurtigstart
Denne gjennomgangen tar en publisert mal helt frem til en signert, forseglet PDF. Den bruker en testnøkkel, så
ingenting faktureres, og alle dokumenter får vannmerket TEST.
-
Opprett en API-nøkkel
Section titled “Opprett en API-nøkkel”API-nøkler opprettes i dashbordet, under Innstillinger › API-nøkler. Velg Test for denne gjennomgangen: nøkkelen begynner med
bf_test_. Hele nøkkelen vises bare én gang; lagre den som en miljøvariabel.Terminal window export BONA_FIDE_API_KEY=bf_test_…Hver forespørsel sender den som
Authorization: Bearer …(ellerx-api-key: …). Se Autentisering. -
Finn malen din
Section titled “Finn malen din”Maler utformes i dashbordet (last opp en PDF eller et Word-dokument og plasser felt, eller skriv den i dokumentmodus) og publiseres deretter. List dem opp for å få ID-en:
Terminal window curl https://api.bonafidesign.com/v1/templates \-H "Authorization: Bearer $BONA_FIDE_API_KEY"const res = await fetch('https://api.bonafidesign.com/v1/templates', {headers: { Authorization: `Bearer ${process.env.BONA_FIDE_API_KEY}` },});const { data } = await res.json(); // [{ id: 'tpl_…', name: 'Mutual NDA', latestVersion: 3, … }]import os, requestsAPI = "https://api.bonafidesign.com"headers = {"Authorization": f"Bearer {os.environ['BONA_FIDE_API_KEY']}"}templates = requests.get(f"{API}/v1/templates", headers=headers).json()["data"]GET /v1/templates/{id}/versions/latestreturnerer versjonensroles,fieldsog JSON Schema-et forvariables. Malsiden i dashbordet har også et Bruk i API-panel med en ferdig forespørsel for akkurat den versjonen. -
Opprett en konvolutt
Section titled “Opprett en konvolutt”POST /v1/envelopesrendrer malen med variablene dine, låser versjonen og starter rutingen. Oppgi én mottaker per rolle (CC-roller er valgfrie). Send enIdempotency-Key, så kan ikke et nytt forsøk sende to ganger.Terminal window 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"}'const res = await fetch('https://api.bonafidesign.com/v1/envelopes', {method: 'POST',headers: {Authorization: `Bearer ${process.env.BONA_FIDE_API_KEY}`,'Content-Type': 'application/json','Idempotency-Key': 'onboarding-8841',},body: JSON.stringify({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',}),});if (res.status === 422) {// RFC 9457 problem: one entry per error, each with a JSON Pointer such as /variables/client/nameconsole.error((await res.json()).errors);}const envelope = await res.json(); // { id: 'env_…', status: 'sent', recipients: [{ id: 'rcp_…', … }] }res = requests.post(f"{API}/v1/envelopes",headers={**headers, "Idempotency-Key": "onboarding-8841"},json={"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",},)if res.status_code == 422:print(res.json()["errors"]) # [{"pointer": "/variables/client/name", "message": "…"}]envelope = res.json()Svaret er
201 Createdmed konvolutten:{"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}deliveryavgjør hvordan mottakerne nås:email(standard) sender hver mottaker en signeringslenke på e-post når det er deres tur;embeddedognonesender ingen e-post, og du åpner signeringsøktene selv (neste steg). -
La mottakeren signere
Section titled “La mottakeren signere”Opprett en signeringsøkt for mottakeren fra backenden din. Økter er kortlivede (
ttlSeconds, 60 til 3600, standard 600) og kan bare brukes én gang.Terminal window 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"]}'Send den returnerte
token(bfs_…) til siden din og render webkomponenten:<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>Innpakninger for React og Vue, hendelser og sikkerhetsmodellen: Innebygd signering.
Terminal window 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": "hosted", "returnUrl": "https://app.example.com/done" }'Send signataren videre til den returnerte
url(https://sign.bonafidesign.com/s/bfs_…). Den hostede siden er laget for mobil først og krever ingen konto.Med standardverifiseringen
email_otpbekrefter signataren en sekssifret kode som sendes til e-postadressen deres, før de sender inn. I testmodus leveres e-post bare til medlemmer av organisasjonen din, så bruk din egen adresse mens du tester. -
Bli varslet ved fullføring
Section titled “Bli varslet ved fullføring”Registrer et webhook-endepunkt under Innstillinger › Webhooks (eller med
POST /v1/webhook-endpoints), og ta vare påwhsec_…-hemmeligheten. Når den siste mottakeren signerer, mottar duenvelope.completed, med alle variabler og utfylte verdier idata.values. Den forseglede PDF-en følger medenvelope.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);});Last ned den forseglede PDF-en (dokumentet med fullføringssertifikatet, tidsstemplet):
Terminal window curl -o signed.pdf "https://api.bonafidesign.com/v1/envelopes/env_8Gm2kQ4rT1/document?version=sealed" \-H "Authorization: Bearer $BONA_FIDE_API_KEY"Fullstendig liste over hendelser, nye forsøk og manuell verifisering: Webhooks.
Gå i produksjon
Section titled “Gå i produksjon”Bytt ut testnøkkelen med en bf_live_-nøkkel. Konvolutter i produksjon får ikke vannmerke, e-post går til alle
mottakere, og fullførte konvolutter teller mot planen din (Planer og grenser). Alt en nøkkel
oppretter, får nøkkelens modus, listene viser bare den modusen, og testkonvolutter varsler bare webhook-endepunkter
i testmodus, så registrer også et endepunkt for produksjon.