Ir al contenido

Inicio rápido

Este recorrido lleva una plantilla publicada hasta un PDF firmado y sellado. Usa una clave de prueba, así que no se factura nada y cada documento lleva la marca de agua TEST.

  1. Las claves de API se crean en el panel, en Configuración › Claves de API. Elija Prueba para este recorrido: la clave comienza con bf_test_. La clave completa se muestra una sola vez; guárdela como variable de entorno.

    Terminal window
    export BONA_FIDE_API_KEY=bf_test_…

    Cada solicitud la envía como Authorization: Bearer … (o x-api-key: …). Consulte Autenticación.

  2. Las plantillas se diseñan en el panel (suba un PDF o un documento de Word y coloque campos, o redáctela en el modo Documento) y luego se publican. Enumérelas para obtener el ID:

    Terminal window
    curl https://api.bonafidesign.com/v1/templates \
    -H "Authorization: Bearer $BONA_FIDE_API_KEY"

    GET /v1/templates/{id}/versions/latest devuelve los roles y los fields de la versión, y el JSON Schema de sus variables. La página de la plantilla en el panel también tiene un panel Usar en la API con una solicitud lista para usar con esa versión exacta.

  3. POST /v1/envelopes genera la plantilla con sus variables, fija la versión y comienza el enrutamiento. Indique un destinatario por rol (los roles CC son opcionales). Envíe una Idempotency-Key para que un reintento no pueda enviar el sobre dos veces.

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

    La respuesta es 201 Created con el sobre:

    {
    "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 cómo se contacta a los destinatarios: email (el valor predeterminado) envía a cada destinatario un enlace de firma por correo electrónico cuando es su turno; embedded y none no envían ningún correo, y usted mismo abre las sesiones de firma (siguiente paso).

  4. Genere una sesión de firma para el destinatario desde su backend. Las sesiones son de corta duración (ttlSeconds, de 60 a 3600, 600 de forma predeterminada) y de un solo uso.

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

    Pase el token devuelto (bfs_…) a su página y renderice el componente web:

    <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 y Vue, eventos y modelo de seguridad: Firma integrada.

    Con la verificación predeterminada email_otp, el firmante confirma un código de seis dígitos enviado a su correo electrónico antes de enviar. En modo de prueba, los correos electrónicos solo se entregan a los miembros de su organización, así que use su propia dirección mientras hace pruebas.

  5. Registre un endpoint de webhook en Configuración › Webhooks (o con POST /v1/webhook-endpoints) y guarde el secreto whsec_…. Cuando firma el último destinatario, usted recibe envelope.completed, con cada variable y cada valor ingresado en data.values. El PDF sellado llega después con 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);
    });

    Descargue el PDF sellado (el documento con su certificado de finalización y con sello de tiempo):

    Terminal window
    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, reintentos y verificación manual: Webhooks.

Reemplace la clave de prueba por una clave bf_live_. Los sobres de producción no llevan marca de agua, los correos electrónicos llegan a cualquier destinatario y los sobres completados cuentan para su plan (Planes y límites). Todo lo que crea una clave adopta su modo, sus listas solo muestran ese modo y los sobres de prueba solo notifican a los endpoints de webhook en modo de prueba, así que registre también un endpoint de producción.