Descargar un documento firmado

GET
/api/document/{type}/{ticket}

Descarga el PDF firmado, codificado en Base64 dentro de un sobre JSON, junto con su hash.

type elige qué representación firmada quieres. La llave de la respuesta coincide con el type que pediste — si pides universal, el PDF regresa bajo universal, no bajo un document genérico.

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

Parámetros de ruta

type*string
  • original — el documento con las firmas tal como se aplicaron.
  • universal — esas mismas firmas envueltas en un sobre de validación a largo plazo, que es el que conviene archivar.

Valores posibles

  • "original"
  • "universal"
ticket*string

El id del documento.

Cuerpo de la respuesta

application/json

application/json

curl -X GET "https://example.com/api/document/universal/string"

{  "universal": "JVBERi0xLjcNCiW1tbW1…",  "hash": "JyK0EkYQ4IJHNi/x2D77z+Ja8JH/jx6YilFJHuto9kU="}