Las operaciones marcadas /v1 se autentican con un token de agente; las demás, con una sesión del panel. Cómo funcionan ambas está en Autenticación
GET /_x/query/linked-download-info
Sin sesión Permiso: public
linkedDownloadInfo
Parámetros de linkedDownloadInfo Nombre Dónde Tipo Obligatorio linkTokenConsulta stringSí recipientTokenConsulta stringSí _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/linked-download-info?linkToken=<linkToken>&recipientToken=<recipientToken>' TypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/linked-download-info?linkToken=<linkToken>&recipientToken=<recipientToken>' );
const result = await response.json();Ejemplo de respuesta 200 Copiar [
null
]Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/public-status
Sin sesión Permiso: public Herramienta MCP: 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.
Parámetros de publicStatus Nombre Dónde Tipo Obligatorio _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/public-status' TypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/public-status' );
const result = await response.json();Ejemplo de respuesta 200 Copiar [
null
]Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/published-blog-post
Sin sesión Permiso: public
publishedBlogPost
Parámetros de publishedBlogPost Nombre Dónde Tipo Obligatorio localeConsulta "es-co" | "en"Sí slugConsulta string 1–70Sí _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/published-blog-post?locale=es-co&slug=<slug>' TypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/published-blog-post?locale=es-co&slug=<slug>' );
const result = await response.json();Ejemplo de respuesta 200 Copiar [
null
]Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/published-blog-posts
Sin sesión Permiso: public
publishedBlogPosts
Parámetros de publishedBlogPosts Nombre Dónde Tipo Obligatorio beforeConsulta string 1–64No limitConsulta integer 1–101No localeConsulta "es-co" | "en"Sí _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/published-blog-posts?locale=es-co' TypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/published-blog-posts?locale=es-co' );
const result = await response.json();Ejemplo de respuesta 200 Copiar [
null
]Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /_x/query/recipient-page
Sin sesión Permiso: public
recipientPage
Parámetros de recipientPage Nombre Dónde Tipo Obligatorio recipientTokenConsulta string 1–64Sí _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/recipient-page?recipientToken=<recipientToken>' TypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/recipient-page?recipientToken=<recipientToken>' );
const result = await response.json();Ejemplo de respuesta 200 Copiar [
null
]Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied GET /v1/verify-constancia
Sin sesión Permiso: public /v1 · token Bearer Herramienta MCP: verifyConstancia
Check a constancia by code or PDF SHA-256: authentic, issuedAt, version, superseded.
Parámetros de verifyConstancia Nombre Dónde Tipo Obligatorio captchaTokenConsulta string 0–4096No cf-turnstile-responseConsulta string 0–4096No codeConsulta string 1–32No h-captcha-responseConsulta string 0–4096No pdfSha256Consulta stringNo _firstConsulta integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterConsulta stringthe nextCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/v1/verify-constancia' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copiar const response = await fetch('https://www.notificado.co/v1/verify-constancia' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Ejemplo de respuesta 200 Copiar [
null
]Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied POST /api/acknowledge-receipt
Sin sesión Permiso: public
acknowledgeReceipt
Parámetros de acknowledgeReceipt Nombre Dónde Tipo Obligatorio recipientTokenCuerpo string 1–64Sí
curl Copiar curl -X POST 'https://www.notificado.co/api/acknowledge-receipt' \
-H 'content-type: application/json' \
-d '{"recipientToken":"<recipientToken>"}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"acknowledgedAt": "<acknowledgedAt>",
"created": true,
"eventId": "<eventId>",
"ok": true
}Errores
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
Sin sesión Permiso: public
confirmDataSubjectRequest
Parámetros de confirmDataSubjectRequest Nombre Dónde Tipo Obligatorio referenceCuerpo string 12–12Sí tokenCuerpo string 16–128Sí
curl Copiar curl -X POST 'https://www.notificado.co/api/confirm-data-subject-request' \
-H 'content-type: application/json' \
-d '{"reference":"<reference>","token":"<token>"}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"reference": "<reference>",
"verified": true
}Errores
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
Sin sesión Permiso: public
fileDataSubjectRequest
Parámetros de fileDataSubjectRequest Nombre Dónde Tipo Obligatorio captchaTokenCuerpo string 0–4096No cf-turnstile-responseCuerpo string 0–4096No documentNumberCuerpo string 3–40Sí documentTypeCuerpo "cc" | "ce" | "pasaporte" | "nit" | "otro"Sí emailCuerpo string (email)Sí fullNameCuerpo string 2–200Sí h-captcha-responseCuerpo string 0–4096No kindCuerpo "consulta" | "reclamo" | "actualizacion" | "supresion"Sí localeCuerpo string 0–16No messageCuerpo string 10–5000Sí phoneCuerpo string 0–40No relatedToCuerpo string 0–300No subjectCuerpo "recipient" | "account"Sí websiteCuerpo string 0–500No
curl Copiar 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 Copiar 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();Ejemplo de respuesta 200 Copiar {
"dueAt": "2026-09-25T15:00:00Z",
"mailDelayed": true,
"reference": "<reference>"
}Errores
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
Sin sesión Permiso: public
epaycoPayoutsWebhook
Parámetros de epaycoPayoutsWebhook Nombre Dónde Tipo Obligatorio dataCuerpo objectSí
curl Copiar curl -X POST 'https://www.notificado.co/api/payouts-webhooks/epayco' \
-H 'content-type: application/json' \
-d '{"data":{}}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"eventKey": "<eventKey>",
"outcome": "queued"
}Errores
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
Sin sesión Permiso: public
ingestPostmarkEvent
Parámetros de ingestPostmarkEvent Nombre Dónde Tipo Obligatorio MessageIDCuerpo string 1–200No RecordTypeCuerpo string 1–60No
curl Copiar curl -X POST 'https://www.notificado.co/api/postmark-events/ingest' \
-H 'content-type: application/json' \
-d '{}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"key": "<key>",
"outcome": "queued",
"rawKey": "<rawKey>",
"receiptKey": "<receiptKey>"
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/record-download
Sin sesión Permiso: public
recordDownload
Parámetros de recordDownload Nombre Dónde Tipo Obligatorio linkTokenCuerpo stringSí recipientTokenCuerpo stringSí
curl Copiar curl -X POST 'https://www.notificado.co/api/record-download' \
-H 'content-type: application/json' \
-d '{"linkToken":"<linkToken>","recipientToken":"<recipientToken>"}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"bytes": 0,
"contentBase64": "<contentBase64>",
"contentType": "<contentType>",
"eventId": "<eventId>",
"filename": "<filename>",
"sha256": "<sha256>"
}Errores
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
Miembro de la firma Permiso: mailtrack:public-link
recordMailClick
Parámetros de recordMailClick Nombre Dónde Tipo Obligatorio idCuerpo string 1–64Sí nCuerpo integer 1–1000Sí
curl Copiar 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 Copiar 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();Ejemplo de respuesta 200 Copiar {
"location": "<location>",
"recorded": true
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/report-abuse
Sin sesión Permiso: public
reportAbuse
Parámetros de reportAbuse Nombre Dónde Tipo Obligatorio detailsCuerpo string 0–2000No reasonCuerpo "phishing" | "not_expected" | "wrong_recipient" | "harassment" | "other"Sí recipientTokenCuerpo string 1–64Sí
curl Copiar curl -X POST 'https://www.notificado.co/api/report-abuse' \
-H 'content-type: application/json' \
-d '{"reason":"phishing","recipientToken":"<recipientToken>"}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"created": true,
"ok": true
}Errores
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
Sin sesión Permiso: 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.
Parámetros de trackReferralClick Nombre Dónde Tipo Obligatorio codeCuerpo string 1–40Sí landingPathCuerpo string 1–300Sí
curl Copiar curl -X POST 'https://www.notificado.co/api/track-referral-click' \
-H 'content-type: application/json' \
-d '{"code":"<code>","landingPath":"<landingPath>"}' TypeScript Copiar 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();Ejemplo de respuesta 200 Copiar {
"outcome": "recorded"
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/webhooks/epayco
Sin sesión Permiso: public
epaycoWebhook
Parámetros de epaycoWebhook Nombre Dónde Tipo Obligatorio x_ref_paycoCuerpo string 1–40 | numberSí x_signatureCuerpo string 1–128Sí
curl Copiar 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 Copiar 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();Ejemplo de respuesta 200 Copiar {
"eventKey": "<eventKey>",
"outcome": "queued"
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds