Saltar al contenido
Desarrolladores

De la credencial al documento firmado

Esta guía recorre el flujo completo de una integración: subir un PDF, crear el sobre, agregar un segundo firmante, enviarlo, recibir por webhook la confirmación de que todos firmaron y descargar el PDF sellado. Continúa donde termina el inicio rápido. Cada paso muestra la misma llamada en curl, JavaScript y Java; la pestaña elegida se mantiene en toda la página.

Requisitos: las cuatro variables de entorno del inicio rápido (BBSIGN_BASE_URL, BBSIGN_TOKEN_URL, BBSIGN_CLIENT_ID, BBSIGN_CLIENT_SECRET), un PDF llamado contract.pdf y, para las pestañas de JavaScript y Java, un client construido como en el inicio rápido.

Ambos SDKs obtienen y renuevan los tokens automáticamente. El token explícito se necesita para curl y para la subida del paso 2, que se hace con HTTP directo. Un token es válido durante 300 s.

Ventana de terminal
TOKEN=$(curl -s -X POST "$BBSIGN_TOKEN_URL" \
-d grant_type=client_credentials \
-d client_id="$BBSIGN_CLIENT_ID" \
-d client_secret="$BBSIGN_CLIENT_SECRET" | jq -r .access_token)

POST /api/v1/documents recibe multipart con una sola parte, file. Acepta application/pdf de hasta 50 MB. La respuesta es un UploadedDocumentResponse; conserve su id. Un documento que no se adjunta a un sobre en 24 horas se elimina.

Ventana de terminal
DOCUMENT_ID=$(curl -s -X POST "$BBSIGN_BASE_URL/api/v1/documents" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@contract.pdf;type=application/pdf" | jq -r .id)

Los métodos generados del SDK envían JSON, por lo que las subidas multipart de las pestañas de JavaScript y Java usan el cliente HTTP de la plataforma (okhttp ya es una dependencia del SDK de Java). También puede adjuntar un archivo a un borrador existente con POST /api/v1/envelopes/{id}/documents, con el mismo nombre de parte.

Envíe el id del documento en documentIds. title es el único campo obligatorio; para enviar el sobre se requieren al menos un firmante y un documento.

Ventana de terminal
ENVELOPE_ID=$(curl -s -X POST "$BBSIGN_BASE_URL/api/v1/envelopes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"title\": \"Service agreement\",
\"documentIds\": [\"$DOCUMENT_ID\"],
\"otpRequired\": true,
\"signers\": [{\"email\": \"ana@example.com\", \"name\": \"Ana Perez\", \"signOrder\": 1}]
}" | jq -r .id)

Puede agregar firmantes mientras el sobre está en DRAFT. signOrder aplica cuando sequentialSigning es true; en caso contrario, todos los firmantes reciben su enlace al mismo tiempo.

Ventana de terminal
curl -s -X POST "$BBSIGN_BASE_URL/api/v1/envelopes/$ENVELOPE_ID/signers" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"email": "luis@example.com", "name": "Luis Gomez", "signOrder": 2}'

Al enviar, los documentos y los firmantes quedan fijos, cada firmante recibe por correo un enlace válido durante 72 horas de forma predeterminada y se emite envelope.sent. La respuesta es un SendResponse con los tokens de firma de cada firmante.

Ventana de terminal
curl -s -X POST "$BBSIGN_BASE_URL/api/v1/envelopes/$ENVELOPE_ID/send" \
-H "Authorization: Bearer $TOKEN"

Registre un webhook en Configuración, pestaña Webhooks, suscrito a envelope.completed. Cuando firma el último firmante, bb-sign envía un evento firmado a su URL. Verifique la firma sobre el cuerpo original, responda 2xx y luego procese el evento. El payload contiene el id y el estado del sobre; el documento se obtiene en el paso 7. Webhooks describe la entrega y los reintentos.

POST /webhooks/bb-sign HTTP/1.1
Content-Type: application/json
X-BBSign-Event-Id: 3f8c1e2a-7d44-4b1a-9c0e-5a6b7c8d9e0f
X-BBSign-Event-Type: envelope.completed
X-BBSign-Signature: t=1760000000,v1=5f1a...
{"id":"3f8c1e2a-7d44-4b1a-9c0e-5a6b7c8d9e0f","type":"envelope.completed","apiVersion":"2026-08-09",
"createdAt":"2026-10-10T14:22:31Z","data":{"envelope":{"id":"...","title":"Service agreement",
"status":"COMPLETED","createdAt":"...","expiresAt":null}}}

7. Listar los documentos y descargar el PDF firmado

Sección titulada «7. Listar los documentos y descargar el PDF firmado»

GET /api/v1/envelopes/{id}/documents devuelve cada documento con un downloadUrl (el original) y, cuando el sobre está COMPLETED, un signedUrl (la copia sellada). Ambos son enlaces prefirmados válidos durante 3.600 s, y son null si la credencial no tiene document:download en el espacio de trabajo del sobre. Trátelos como secretos: dan acceso al archivo sin token.

Ventana de terminal
SIGNED_URL=$(curl -s "$BBSIGN_BASE_URL/api/v1/envelopes/$ENVELOPE_ID/documents" \
-H "Authorization: Bearer $TOKEN" | jq -r '.[0].signedUrl')
curl -s -o contract-signed.pdf "$SIGNED_URL"

Archive los documentos que descarga: bb-sign conserva los documentos firmados durante un plazo fijo, y su conservación posterior es responsabilidad de la organización. Consulte Alcance y conservación.

429 y 503 se reintentan también en POST, porque indican que el servidor no procesó la solicitud.

El sobre de este recorrido se archivó en General porque no se envió workspaceId. Una credencial accede a los espacios de trabajo que un administrador le asignó; GET /api/v1/workspaces los lista, y cada EnvelopeResponse incluye workspaceId y workspaceName. Los sobres de espacios que la credencial no puede leer responden 404 y no aparecen en las listas.