Skip to content

API reference

Evidence

4 operations, each with its parameters, curl and TypeScript examples ready to copy, and its errors.

Every example assumes a signed-in session; how to get one is in Authentication

verifyChain

GET/_x/query/verify-chain

Firm memberPermission: evidence:verifyMCP tool: verifyChain

Verify the hash-chained evidence log between two sequence numbers (at most 100000 events) and name the first broken event. Staff only.

Parameters of verifyChain
NameInTypeRequired
deepQuerybooleanNo
fromSeqQueryinteger 1–9007199254740991Yes
toSeqQueryinteger 1–9007199254740991No
_firstQueryinteger 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000)No
_afterQuerystringthe endCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/verify-chain?fromSeq=1' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/verify-chain?fromSeq=1', {
  headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 403 policy denied

runChainVerification

POST/api/chain-verifications/run

Firm memberPermission: evidence:verifyMCP tool: runChainVerification

Staff only. Verify the hash-chained evidence log between two sequence numbers. Up to 50000 events are verified in the call and answer { ok, checked, firstBroken? }; a longer range (up to 10000000) is queued and answers { enqueued: true, jobId }. deep also re-hashes the raw provider objects. Read-only; every call is audited.

Parameters of runChainVerification
NameInTypeRequired
confirmTokenBodystring 1–200No
deepBodybooleanNo
fromSeqBodyinteger 1–9007199254740991Yes
toSeqBodyinteger 1–9007199254740991Yes
curl
curl -X POST 'https://www.notificado.co/api/chain-verifications/run' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"fromSeq":1,"toSeq":1}'
TypeScript
const response = await fetch('https://www.notificado.co/api/chain-verifications/run', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "fromSeq": 1,
    "toSeq": 1
  }),
});
const result = await response.json();
Example response
200
{
  "checked": -9007199254740991,
  "deep": true,
  "firstBroken": {
    "id": "<id>",
    "reason": "<reason>",
    "seq": -9007199254740991
  },
  "fromSeq": -9007199254740991,
  "ok": true,
  "toSeq": -9007199254740991
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID

reissueConstancia

POST/api/constancias/reissue

Firm memberPermission: evidence:read

reissueConstancia

Parameters of reissueConstancia
NameInTypeRequired
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/api/constancias/reissue' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"notificationId":"<notificationId>","orgId":"<orgId>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/constancias/reissue', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "notificationId": "<notificationId>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Example response
200
{
  "queued": true,
  "version": 2
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID

downloadEvidence

POST/api/evidences/download

Firm memberPermission: evidence:readMCP tool: downloadEvidence

Returns the bytes (base64, with filename, content type and SHA-256) of the signed constancia PDF (kind "constancia") or the offline-verifiable evidence zip (kind "zip") of one notification in your organization; newest version unless "version" is given. Every call is recorded in the audit log and as an evidence.viewed event. Fails X_CONSTANCIA_NOT_FOUND before the first constancia is issued and X_EVIDENCE_ZIP_NOT_READY while the zip is still being built.

Parameters of downloadEvidence
NameInTypeRequired
kindBody"constancia" | "zip"Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
versionBodyinteger 1–9007199254740991No
curl
curl -X POST 'https://www.notificado.co/api/evidences/download' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{
  "kind": "constancia",
  "notificationId": "<notificationId>",
  "orgId": "<orgId>"
}'
TypeScript
const response = await fetch('https://www.notificado.co/api/evidences/download', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "kind": "constancia",
    "notificationId": "<notificationId>",
    "orgId": "<orgId>"
  }),
});
const result = await response.json();
Example response
200
{
  "bytes": 0,
  "constanciaId": "<constanciaId>",
  "contentBase64": "<contentBase64>",
  "contentType": "<contentType>",
  "filename": "<filename>",
  "kind": "constancia",
  "sha256": "<sha256>",
  "version": 1
}

Errors

  • 400 X_INPUT_INVALID
  • 403 policy denied
  • 422 X_BODY_INVALID