Obtener un documento desde una notificación de webhook

POST
/developers/webhook

Convierte el notification_id de un webhook en el documento mismo. Este es el paso natural después de recibir una notificación: el webhook te dice que pasó algo, esto te dice qué.

action elige qué representación obtienes, y si te la dan en bytes o en JSON:

actionDevuelve
download_original_bytesEl PDF firmado original, en bytes
download_original_documentEl original, como metadatos JSON
download_universal_bytesEl PDF universal (encapsulado), en bytes
download_universal_documentEl universal, como metadatos JSON
download_document_bytesEl documento tal como está guardado, en bytes
download_documentEl documento tal como está guardado, como metadatos JSON

Original y universal son dos representaciones firmadas del mismo documento: el original lleva las firmas tal como se aplicaron, el universal las envuelve en un sobre de validación a largo plazo.

Authorization<token>

Cada petición lleva Authorization: signmage {webId}:{firma}, donde firma es el Base64 de HMAC-SHA256(apiKey, cadenaFirmada).

Qué va dentro de cadenaFirmada depende de la petición:

PeticióncadenaFirmada
GETLa URI completa incluyendo el query string, exactamente como se envía
POST con JSONEl cuerpo JSON, re-serializado compacto (sin espacios ni salto de línea final)
POST multipartEl SHA-256 en Base64 del archivo, que además se manda en el header Content-SHA256

Dos detalles que conviene resolverlos desde el principio:

  1. En GET, la URI se firma tal como se envía, así que el orden y el encoding de los parámetros importan.
  2. En POST, la comparación se hace contra tu JSON re-serializado en forma compacta. Manda JSON compacto y canónico para que las firmas coincidan.

Una firma que no coincide devuelve 401 con el cuerpo vacío. Como la misma respuesta cubre un web ID desconocido, una llave inactiva y una firma que no coincide, revisa las tres cosas al diagnosticar.

En: header

Cuerpo de la petición

application/json

Definiciones de TypeScript

Usa el tipo request body en TypeScript.

Cuerpo de la respuesta

text/plain

curl -X POST "https://example.com/developers/webhook" \  -H "Content-Type: application/json" \  -d '{    "notification_id": 84512,    "action": "download_original_bytes"  }'

{  "name": "contrato.pdf",  "signatures_count": 2,  "data": "JVBERi0xLjcNCiW1tbW1…"}