Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET /_x/query/linked-download-info
No session Permission: public
linkedDownloadInfo
Parameters of linkedDownloadInfo Name In Type Required linkTokenQuery stringYes recipientTokenQuery stringYes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/linked-download-info?linkToken=<linkToken>&recipientToken=<recipientToken>' TypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/linked-download-info?linkToken=<linkToken>&recipientToken=<recipientToken>' );
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/public-status
No session Permission: public MCP tool: publicStatus
Public status of notificado.co: status (operational | maintenance | degraded | partial_outage | major_outage), the incidents still open, one entry per America/Bogota day for the last 90 days with the worst impact that day, and every incident in that window with its public updates (Spanish, optional English). Instants are UTC.
Parameters of publicStatus Name In Type Required _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/public-status' TypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/public-status' );
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/published-blog-post
No session Permission: public
publishedBlogPost
Parameters of publishedBlogPost Name In Type Required localeQuery "es-co" | "en"Yes slugQuery string 1–70Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/published-blog-post?locale=es-co&slug=<slug>' TypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/published-blog-post?locale=es-co&slug=<slug>' );
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/published-blog-posts
No session Permission: public
publishedBlogPosts
Parameters of publishedBlogPosts Name In Type Required beforeQuery string 1–64No limitQuery integer 1–101No localeQuery "es-co" | "en"Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/published-blog-posts?locale=es-co' TypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/published-blog-posts?locale=es-co' );
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/recipient-page
No session Permission: public
recipientPage
Parameters of recipientPage Name In Type Required recipientTokenQuery string 1–64Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/recipient-page?recipientToken=<recipientToken>' TypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/recipient-page?recipientToken=<recipientToken>' );
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /v1/verify-constancia
No session Permission: public /v1 · bearer token MCP tool: verifyConstancia
Check a constancia by code or PDF SHA-256: authentic, issuedAt, version, superseded.
Parameters of verifyConstancia Name In Type Required captchaTokenQuery string 0–4096No cf-turnstile-responseQuery string 0–4096No codeQuery string 1–32No h-captcha-responseQuery string 0–4096No pdfSha256Query stringNo _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/verify-constancia' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/verify-constancia' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied POST /api/acknowledge-receipt
No session Permission: public
acknowledgeReceipt
Parameters of acknowledgeReceipt Name In Type Required recipientTokenBody string 1–64Yes
curl Copy curl -X POST 'https://www.notificado.co/api/acknowledge-receipt' \
-H 'content-type: application/json' \
-d '{"recipientToken":"<recipientToken>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/acknowledge-receipt' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"recipientToken" : "<recipientToken>"
}),
});
const result = await response.json();Example response 200 Copy {
"acknowledgedAt": "<acknowledgedAt>",
"created": true,
"eventId": "<eventId>",
"ok": true
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/confirm-data-subject-request
No session Permission: public
confirmDataSubjectRequest
Parameters of confirmDataSubjectRequest Name In Type Required referenceBody string 12–12Yes tokenBody string 16–128Yes
curl Copy curl -X POST 'https://www.notificado.co/api/confirm-data-subject-request' \
-H 'content-type: application/json' \
-d '{"reference":"<reference>","token":"<token>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/confirm-data-subject-request' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"reference" : "<reference>" ,
"token" : "<token>"
}),
});
const result = await response.json();Example response 200 Copy {
"reference": "<reference>",
"verified": true
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/file-data-subject-request
No session Permission: public
fileDataSubjectRequest
Parameters of fileDataSubjectRequest Name In Type Required captchaTokenBody string 0–4096No cf-turnstile-responseBody string 0–4096No documentNumberBody string 3–40Yes documentTypeBody "cc" | "ce" | "pasaporte" | "nit" | "otro"Yes emailBody string (email)Yes fullNameBody string 2–200Yes h-captcha-responseBody string 0–4096No kindBody "consulta" | "reclamo" | "actualizacion" | "supresion"Yes localeBody string 0–16No messageBody string 10–5000Yes phoneBody string 0–40No relatedToBody string 0–300No subjectBody "recipient" | "account"Yes websiteBody string 0–500No
curl Copy curl -X POST 'https://www.notificado.co/api/file-data-subject-request' \
-H 'content-type: application/json' \
-d '{
"documentNumber": "<documentNumber>",
"documentType": "cc",
"email": "<email>",
"fullName": "<fullName>",
"kind": "consulta",
"message": "<message>",
"subject": "recipient"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/file-data-subject-request' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"documentNumber" : "<documentNumber>" ,
"documentType" : "cc" ,
"email" : "<email>" ,
"fullName" : "<fullName>" ,
"kind" : "consulta" ,
"message" : "<message>" ,
"subject" : "recipient"
}),
});
const result = await response.json();Example response 200 Copy {
"dueAt": "2026-09-25T15:00:00Z",
"mailDelayed": true,
"reference": "<reference>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/payouts-webhooks/epayco
No session Permission: public
epaycoPayoutsWebhook
Parameters of epaycoPayoutsWebhook Name In Type Required dataBody objectYes
curl Copy curl -X POST 'https://www.notificado.co/api/payouts-webhooks/epayco' \
-H 'content-type: application/json' \
-d '{"data":{}}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/payouts-webhooks/epayco' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"data" : {}
}),
});
const result = await response.json();Example response 200 Copy {
"eventKey": "<eventKey>",
"outcome": "queued"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/postmark-events/ingest
No session Permission: public
ingestPostmarkEvent
Parameters of ingestPostmarkEvent Name In Type Required MessageIDBody string 1–200No RecordTypeBody string 1–60No
curl Copy curl -X POST 'https://www.notificado.co/api/postmark-events/ingest' \
-H 'content-type: application/json' \
-d '{}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/postmark-events/ingest' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({}),
});
const result = await response.json();Example response 200 Copy {
"key": "<key>",
"outcome": "queued",
"rawKey": "<rawKey>",
"receiptKey": "<receiptKey>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/record-download
No session Permission: public
recordDownload
Parameters of recordDownload Name In Type Required linkTokenBody stringYes recipientTokenBody stringYes
curl Copy curl -X POST 'https://www.notificado.co/api/record-download' \
-H 'content-type: application/json' \
-d '{"linkToken":"<linkToken>","recipientToken":"<recipientToken>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/record-download' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"linkToken" : "<linkToken>" ,
"recipientToken" : "<recipientToken>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": 0,
"contentBase64": "<contentBase64>",
"contentType": "<contentType>",
"eventId": "<eventId>",
"filename": "<filename>",
"sha256": "<sha256>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/record-mail-click
Firm member Permission: mailtrack:public-link
recordMailClick
Parameters of recordMailClick Name In Type Required idBody string 1–64Yes nBody integer 1–1000Yes
curl Copy curl -X POST 'https://www.notificado.co/api/record-mail-click' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"id":"<id>","n":1}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/record-mail-click' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"id" : "<id>" ,
"n" : 1
}),
});
const result = await response.json();Example response 200 Copy {
"location": "<location>",
"recorded": true
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/report-abuse
No session Permission: public
reportAbuse
Parameters of reportAbuse Name In Type Required detailsBody string 0–2000No reasonBody "phishing" | "not_expected" | "wrong_recipient" | "harassment" | "other"Yes recipientTokenBody string 1–64Yes
curl Copy curl -X POST 'https://www.notificado.co/api/report-abuse' \
-H 'content-type: application/json' \
-d '{"reason":"phishing","recipientToken":"<recipientToken>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/report-abuse' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"reason" : "phishing" ,
"recipientToken" : "<recipientToken>"
}),
});
const result = await response.json();Example response 200 Copy {
"created": true,
"ok": true
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/track-referral-click
No session Permission: affiliate:track-click
Record a click on a referral link (the /registro?ref= landing). Anyone may call it; rate-limited, and only hashes are stored.
Parameters of trackReferralClick Name In Type Required codeBody string 1–40Yes landingPathBody string 1–300Yes
curl Copy curl -X POST 'https://www.notificado.co/api/track-referral-click' \
-H 'content-type: application/json' \
-d '{"code":"<code>","landingPath":"<landingPath>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/track-referral-click' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"code" : "<code>" ,
"landingPath" : "<landingPath>"
}),
});
const result = await response.json();Example response 200 Copy {
"outcome": "recorded"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/webhooks/epayco
No session Permission: public
epaycoWebhook
Parameters of epaycoWebhook Name In Type Required x_ref_paycoBody string 1–40 | numberYes x_signatureBody string 1–128Yes
curl Copy curl -X POST 'https://www.notificado.co/api/webhooks/epayco' \
-H 'content-type: application/json' \
-d '{"x_ref_payco":"<x_ref_payco>","x_signature":"<x_signature>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/webhooks/epayco' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' },
body : JSON.stringify({
"x_ref_payco" : "<x_ref_payco>" ,
"x_signature" : "<x_signature>"
}),
});
const result = await response.json();Example response 200 Copy {
"eventKey": "<eventKey>",
"outcome": "queued"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds