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/my-kyc
Miembro de la firmaPermiso: kyc:submit
myKyc
Parámetros de myKyc| Nombre | Dónde | Tipo | Obligatorio |
|---|
userId | Consulta | string (uuid) | Sí |
_first | Consulta | integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) | No |
_after | Consulta | stringthe nextCursor a previous page answered; needs _first | No |
curlcurl 'https://www.notificado.co/_x/query/my-kyc?userId=<userId>' \
-b cookies.txt
TypeScriptconst response = await fetch('https://www.notificado.co/_x/query/my-kyc?userId=<userId>', {
headers: { cookie: sessionCookie },
});
const result = await response.json();
Ejemplo de respuesta
200[
null
]
Errores
400 X_INPUT_INVALID or X_CURSOR_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/change-sirna-email
Miembro de la firmaPermiso: kyc:submit
changeSirnaEmail
Parámetros de changeSirnaEmail| Nombre | Dónde | Tipo | Obligatorio |
|---|
sirnaEmail | Cuerpo | string 3–320 | Sí |
curlcurl -X POST 'https://www.notificado.co/api/change-sirna-email' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"sirnaEmail":"<sirnaEmail>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/change-sirna-email', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"sirnaEmail": "<sirnaEmail>"
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"currentSirnaEmail": "<currentSirnaEmail>",
"expiresInMinutes": -9007199254740991,
"requestId": "<requestId>",
"sentTo": "<sentTo>"
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/confirm-sirna-email-change
Miembro de la firmaPermiso: kyc:submit
confirmSirnaEmailChange
Parámetros de confirmSirnaEmailChange| Nombre | Dónde | Tipo | Obligatorio |
|---|
code | Cuerpo | string 6–12 | Sí |
curlcurl -X POST 'https://www.notificado.co/api/confirm-sirna-email-change' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"code":"<code>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/confirm-sirna-email-change', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"code": "<code>"
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"pendingSirnaEmail": "<pendingSirnaEmail>",
"sirnaEmail": "<sirnaEmail>",
"status": "awaiting_staff"
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/v1/confirm-upload
Miembro de la firmaPermiso: or(kyc:submit, affiliate:self, affiliate:self, case:write)/v1 · token BearerIdempotency-KeyHerramienta MCP: confirmUpload
Step 2: checks the stored bytes and answers the document id for attachDocument.
Parámetros de confirmUpload| Nombre | Dónde | Tipo | Obligatorio |
|---|
Idempotency-Key | Encabezado | string ≤ 255Replays the first response for a repeated key. | No |
contentType | Cuerpo | string 1–127 | Sí |
filename | Cuerpo | string 1–255 | Sí |
key | Cuerpo | string 1–512 | Sí |
kind | Cuerpo | "certificado_vigencia" | "cedula" | "tarjeta_profesional" | "provenance_proof" | "otro" | "einvoice_xml" | "einvoice_pdf" | Sí |
curlcurl -X POST 'https://www.notificado.co/v1/confirm-upload' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{
"contentType": "<contentType>",
"filename": "<filename>",
"key": "<key>",
"kind": "certificado_vigencia"
}'
TypeScriptconst response = await fetch('https://www.notificado.co/v1/confirm-upload', {
method: 'POST',
headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID() },
body: JSON.stringify({
"contentType": "<contentType>",
"filename": "<filename>",
"key": "<key>",
"kind": "certificado_vigencia"
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"bytes": -9007199254740991,
"createdAt": "2026-09-25T15:00:00Z",
"filename": "<filename>",
"id": "<id>",
"kind": "certificado_vigencia",
"mime": "<mime>",
"pageCount": -9007199254740991,
"sha256": "<sha256>"
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied409 X_IDEMPOTENCY_CONFLICT422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/prove-sirna-email
Miembro de la firmaPermiso: kyc:submit
proveSirnaEmail
Parámetros de proveSirnaEmail| Nombre | Dónde | Tipo | Obligatorio |
|---|
code | Cuerpo | string 6–12 | Sí |
curlcurl -X POST 'https://www.notificado.co/api/prove-sirna-email' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"code":"<code>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/prove-sirna-email', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"code": "<code>"
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"evaluation": "<evaluation>",
"proven": true,
"reasons": [
"<reasons>"
],
"status": "<status>"
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/v1/request-upload
Miembro de la firmaPermiso: or(kyc:submit, affiliate:self, affiliate:self, case:write)/v1 · token BearerIdempotency-KeyHerramienta MCP: requestUpload
Step 1: a signed PUT grant for one PDF, PNG or JPEG (20 MB). PUT the bytes, then confirmUpload(key).
Parámetros de requestUpload| Nombre | Dónde | Tipo | Obligatorio |
|---|
Idempotency-Key | Encabezado | string ≤ 255Replays the first response for a repeated key. | No |
contentType | Cuerpo | string 1–127 | Sí |
filename | Cuerpo | string 1–255 | Sí |
kind | Cuerpo | "certificado_vigencia" | "cedula" | "tarjeta_profesional" | "provenance_proof" | "otro" | "einvoice_xml" | "einvoice_pdf" | Sí |
size | Cuerpo | integer 0–9007199254740991 | Sí |
curlcurl -X POST 'https://www.notificado.co/v1/request-upload' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{
"contentType": "<contentType>",
"filename": "<filename>",
"kind": "certificado_vigencia",
"size": 0
}'
TypeScriptconst response = await fetch('https://www.notificado.co/v1/request-upload', {
method: 'POST',
headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID() },
body: JSON.stringify({
"contentType": "<contentType>",
"filename": "<filename>",
"kind": "certificado_vigencia",
"size": 0
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"contentType": "<contentType>",
"expiresAt": -9007199254740991,
"key": "<key>",
"maxBytes": -9007199254740991,
"method": "PUT",
"url": "<url>"
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied409 X_IDEMPOTENCY_CONFLICT422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/resend-possession-code
Miembro de la firmaPermiso: kyc:submit
resendPossessionCode
curlcurl -X POST 'https://www.notificado.co/api/resend-possession-code' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/resend-possession-code', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"alreadyProven": true,
"sentTo": "<sentTo>"
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/set-my-name
Miembro de la firmaPermiso: kyc:submit
setMyName
Parámetros de setMyName| Nombre | Dónde | Tipo | Obligatorio |
|---|
fullName | Cuerpo | string 3–200 | Sí |
curlcurl -X POST 'https://www.notificado.co/api/set-my-name' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"fullName":"<fullName>"}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/set-my-name', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"fullName": "<fullName>"
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"ok": true,
"reverify": true
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds
POST/api/submit-kyc
Miembro de la firmaPermiso: kyc:submit
submitKyc
Parámetros de submitKyc| Nombre | Dónde | Tipo | Obligatorio |
|---|
cedula | Cuerpo | string 1–32 | Sí |
documentType | Cuerpo | "CC" | "CE" | "PPT" | No |
fullName | Cuerpo | string 1–200 | Sí |
sirnaEmail | Cuerpo | string (email) ≤ 320 | Sí |
tarjetaProfesional | Cuerpo | string 1–32 | Sí |
vigenciaDocumentId | Cuerpo | string (uuid) | No |
curlcurl -X POST 'https://www.notificado.co/api/submit-kyc' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"cedula": "<cedula>",
"fullName": "<fullName>",
"sirnaEmail": "<sirnaEmail>",
"tarjetaProfesional": "<tarjetaProfesional>"
}'
TypeScriptconst response = await fetch('https://www.notificado.co/api/submit-kyc', {
method: 'POST',
headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
body: JSON.stringify({
"cedula": "<cedula>",
"fullName": "<fullName>",
"sirnaEmail": "<sirnaEmail>",
"tarjetaProfesional": "<tarjetaProfesional>"
}),
});
const result = await response.json();
Ejemplo de respuesta
200{
"identityId": "<identityId>",
"resubmitted": true,
"status": "<status>",
"warnings": [
"<warnings>"
]
}
Errores
400 X_INPUT_INVALID401 X_UNAUTHENTICATED — no credential, or one that did not resolve403 policy denied422 X_BODY_INVALID429 X_RATE_LIMITED — retry after Retry-After seconds