Listar los sellos NOM-151 de un documento

GET
/api/document/{frmxId}/stamps

Devuelve todos los sellos de tiempo NOM-151 aplicados al documento, cada uno con la autoridad que lo emitió, cuándo se emitió, y el token mismo.

Usa el hash de un sello con GET /api/document/{frmxId}/stamp/{stampHash}/pdf para bajar la revisión exacta del documento que ese sello ampara.

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

frmxId*string

El id del documento.

Cuerpo de la respuesta

application/json

text/plain

curl -X GET "https://example.com/api/document/string/stamps"
{  "timestamps": [    {      "hash": "ce92da77b45ddbb26ab4210600023de8f0effb062276cd4c2765feed3988cfc4",      "tsa": "L=MIGUEL HIDALGO,ST=CIUDAD DE MEXICO,C=MX,CN=CECOBAN-PSC-NOM151-1-01,O=CECOBAN SA DE CV",      "genTime": "2023-07-10T18:21:28.467Z",      "status": "granted",      "timestamp": "MIISvDADAgEAMIISswYJKoZ…",      "policy": "2.16.484.101.10.316.2.3.1.2.1.1.1"    }  ]}