Cada ejemplo supone una sesión iniciada; cómo obtenerla está en Autenticación
GET /_x/query/my-kyc
Miembro de la firma Permiso: kyc:submit
myKyc
Parámetros de myKyc Nombre Dónde Tipo Obligatorio orgIdConsulta string (uuid)Sí userIdConsulta string (uuid)Sí _firstConsulta integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterConsulta stringthe endCursor a previous page answered; needs _first No
curl Copiar curl 'https://www.notificado.co/_x/query/my-kyc?orgId=<orgId>&userId=<userId>' \
-b cookies.txtTypeScript Copiar const response = await fetch('https://www.notificado.co/_x/query/my-kyc?orgId=<orgId>&userId=<userId>' , {
headers : { cookie : sessionCookie },
});
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/kycs/submit
Miembro de la firma Permiso: kyc:submit
submitKyc
Parámetros de submitKyc Nombre Dónde Tipo Obligatorio cedulaCuerpo string 5–12Sí fullNameCuerpo string 1–200Sí sirnaEmailCuerpo string (email) ≤ 320Sí tarjetaProfesionalCuerpo string 1–12Sí vigenciaDocumentIdCuerpo string (uuid)Sí
curl Copiar curl -X POST 'https://www.notificado.co/api/kycs/submit' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"cedula": "<cedula>",
"fullName": "<fullName>",
"sirnaEmail": "<sirnaEmail>",
"tarjetaProfesional": "<tarjetaProfesional>",
"vigenciaDocumentId": "<vigenciaDocumentId>"
}' TypeScript Copiar const response = await fetch('https://www.notificado.co/api/kycs/submit' , {
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>" ,
"vigenciaDocumentId" : "<vigenciaDocumentId>"
}),
});
const result = await response.json();Ejemplo de respuesta 200 Copiar {
"profileId": "<profileId>",
"resubmitted": true,
"status": "<status>",
"warnings": [
"<warnings>"
]
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/uploads/confirm
Miembro de la firma Permiso: or(kyc:submit, case:write) Herramienta MCP: confirmUpload
Step 2 of 2 of an upload, after the PUT to requestUpload's url succeeded: pass the same key, kind, filename and contentType. The server reads back the STORED bytes, checks their real type (PDF, PNG or JPEG) and size, computes the SHA-256 and returns the document (id, sha256, bytes). Use the id with attachDocument. Refused when the PUT never landed or the bytes are not what was granted — re-run requestUpload rather than retrying.
Parámetros de confirmUpload Nombre Dónde Tipo Obligatorio contentTypeCuerpo string 1–127Sí filenameCuerpo string 1–255Sí keyCuerpo string 1–512Sí kindCuerpo "certificado_vigencia" | "cedula" | "tarjeta_profesional" | "provenance_proof" | "otro"Sí
curl Copiar curl -X POST 'https://www.notificado.co/api/uploads/confirm' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"contentType": "<contentType>",
"filename": "<filename>",
"key": "<key>",
"kind": "certificado_vigencia"
}' TypeScript Copiar const response = await fetch('https://www.notificado.co/api/uploads/confirm' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"contentType" : "<contentType>" ,
"filename" : "<filename>" ,
"key" : "<key>" ,
"kind" : "certificado_vigencia"
}),
});
const result = await response.json();Ejemplo de respuesta 200 Copiar {
"bytes": -9007199254740991,
"createdAt": "2026-09-25T15:00:00Z",
"filename": "<filename>",
"id": "<id>",
"kind": "certificado_vigencia",
"mime": "<mime>",
"sha256": "<sha256>"
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/uploads/request
Miembro de la firma Permiso: or(kyc:submit, case:write) Herramienta MCP: requestUpload
Step 1 of 2 of an upload: get a signed, single-use PUT grant for ONE file. Pass kind (use "otro" for a notification attachment; certificado_vigencia | cedula | tarjeta_profesional are KYC files; provenance_proof proves where a recipient address came from), filename, contentType (application/pdf | image/png | image/jpeg) and size in bytes (at most 20 MB). Then HTTP PUT the raw bytes to `url` (prefix a path with the server origin) with header Content-Type exactly `contentType`, before `expiresAt` (epoch ms), and call confirmUpload with the returned `key`. Never send file bytes through this tool.
Parámetros de requestUpload Nombre Dónde Tipo Obligatorio contentTypeCuerpo string 1–127Sí filenameCuerpo string 1–255Sí kindCuerpo "certificado_vigencia" | "cedula" | "tarjeta_profesional" | "provenance_proof" | "otro"Sí sizeCuerpo integer 0–9007199254740991No
curl Copiar curl -X POST 'https://www.notificado.co/api/uploads/request' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"contentType": "<contentType>",
"filename": "<filename>",
"kind": "certificado_vigencia"
}' TypeScript Copiar const response = await fetch('https://www.notificado.co/api/uploads/request' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"contentType" : "<contentType>" ,
"filename" : "<filename>" ,
"kind" : "certificado_vigencia"
}),
});
const result = await response.json();Ejemplo de respuesta 200 Copiar {
"contentType": "<contentType>",
"expiresAt": -9007199254740991,
"key": "<key>",
"maxBytes": -9007199254740991,
"method": "PUT",
"url": "<url>"
}Errores
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID