Pular para o conteúdo

Início rápido

Este guia passo a passo leva um modelo publicado até um PDF assinado e selado. Utiliza uma chave de teste, pelo que nada é faturado e todos os documentos recebem a marca de água TEST.

  1. As chaves de API são criadas no painel, em Definições › Chaves de API. Escolha Teste para este guia: a chave começa por bf_test_. A chave completa só é mostrada uma vez; guarde-a numa variável de ambiente.

    Janela do terminal
    export BONA_FIDE_API_KEY=bf_test_…

    Todos os pedidos a enviam como Authorization: Bearer … (ou x-api-key: …). Consulte Autenticação.

  2. Os modelos são concebidos no painel (carregue um PDF ou um documento do Word e coloque os campos, ou redija-o no modo Documento) e depois publicados. Liste-os para obter o id:

    Janela do terminal
    curl https://api.bonafidesign.com/v1/templates \
    -H "Authorization: Bearer $BONA_FIDE_API_KEY"

    GET /v1/templates/{id}/versions/latest devolve os roles e os fields da versão e o JSON Schema das respetivas variables. A página do modelo no painel tem também um painel Utilizar na API com um pedido pronto para essa versão exata.

  3. POST /v1/envelopes gera o documento a partir do modelo com as suas variáveis, fixa a versão e inicia o encaminhamento. Indique um destinatário por função (as funções CC são opcionais). Envie um Idempotency-Key para que uma repetição não envie o envelope duas vezes.

    Janela do 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"
    }'

    A resposta é 201 Created com o envelope:

    {
    "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 determina como os destinatários são contactados: email (a predefinição) envia a cada destinatário uma ligação de assinatura por e-mail quando chega a sua vez; embedded e none não enviam e-mails, e as sessões de assinatura são abertas por si (passo seguinte).

  4. Crie uma sessão de assinatura para o destinatário a partir do seu backend. As sessões são de curta duração (ttlSeconds, de 60 a 3600, predefinição 600) e de utilização única.

    Janela do 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"]
    }'

    Passe o token devolvido (bfs_…) à sua página e apresente o 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 para React e Vue, eventos e modelo de segurança: Assinatura integrada.

    Com a verificação predefinida email_otp, o signatário confirma um código de seis dígitos enviado para o seu e-mail antes de submeter. No modo de teste, os e-mails só são entregues a membros da sua organização, por isso utilize o seu próprio endereço durante os testes.

  5. Registe um endpoint de webhook em Definições › Webhooks (ou com POST /v1/webhook-endpoints) e guarde o segredo whsec_…. Quando o último destinatário assina, recebe envelope.completed, com todas as variáveis e valores introduzidos em data.values. O PDF selado chega a seguir, com 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);
    });

    Transfira o PDF selado (o documento com o respetivo certificado de conclusão, com carimbo temporal):

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

    Lista completa de eventos, repetições e verificação manual: Webhooks.

Substitua a chave de teste por uma chave bf_live_. Os envelopes de produção não têm marca de água, os e-mails são enviados a qualquer destinatário e os envelopes concluídos contam para o seu plano (Planos e limites). Tudo o que uma chave cria assume o modo dessa chave, as listas só mostram esse modo e os envelopes de teste só notificam endpoints de webhook do modo de teste, por isso registe também um endpoint de produção.