Every example assumes a signed-in session; how to get one is in Authentication
GET /_x/query/case-detail
Firm member Permission: case:read MCP tool: caseDetail
One case of the caller's firm by caseId (from caseList): 23-digit radicado, juzgado and its email, ciudad, especialidad, clase de proceso, cliente, its parties (role demandante | demandado | apoderado | otro, name, idNumber) and `locked` — true once a notification of it left draft, after which the case can no longer be edited. Returns no row for an id this firm does not have. Read-only.
Parameters of caseDetail Name In Type Required caseIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/case-detail?caseId=<caseId>&orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/case-detail?caseId=<caseId>&orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
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/case-list
Firm member Permission: case:read MCP tool: caseList
The caller's firm's cases (procesos), newest first: id, 23-digit radicado, juzgado, ciudad, especialidad, clase de proceso and cliente. For the next page pass cursor = "<createdAt>_<id>" of the last row you got. Use the id with caseDetail, or to start a notification on that case.
Parameters of caseList Name In Type Required cursorQuery string 1–64No limitQuery integer 1–200No orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/case-list?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/case-list?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
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/import-detail
Firm member Permission: case:read
importDetail
Parameters of importDetail Name In Type Required importIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/import-detail?importId=<importId>&orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/import-detail?importId=<importId>&orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
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/import-error-csv
Firm member Permission: case:read
importErrorCsv
Parameters of importErrorCsv Name In Type Required importIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/import-error-csv?importId=<importId>&orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/import-error-csv?importId=<importId>&orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
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/list-imports
Firm member Permission: case:read
listImports
Parameters of listImports Name In Type Required cursorQuery string 1–64No importIdQuery string (uuid)No limitQuery integer 1–100No orgIdQuery string (uuid)Yes _firstQuery integer 1–10000page size; present, the response is the page envelope rather than the bare rows (1 to 10000) No _afterQuery stringthe endCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/list-imports?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/list-imports?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 403 policy denied POST /api/address/check
Firm member Permission: case:write MCP tool: checkAddress
Check an email address BEFORE adding it as a recipient: syntax, disposable (throwaway) domain, role account (info@, notificaciones@), a likely typo of a common provider (gmial.com → gmail.com, returned as `suggestion`), and whether the domain has a mail server (MX lookup, 3 s). Returns verdict ok | warn | block with `reasons`. A `block` address cannot be added or sent to; on `warn`, show the reasons to the lawyer. Each call is recorded as diligence evidence. Read-only for the address itself — it sends nothing.
Parameters of checkAddress Name In Type Required emailBody string 1–320Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/address/check' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"email":"<email>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/address/check' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"email" : "<email>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"checkedAt": "2026-09-25T15:00:00Z",
"disposable": true,
"email": "<email>",
"id": "<id>",
"mx": "<mx>",
"reasons": [
"<reasons>"
],
"roleAccount": true,
"suggestion": "<suggestion>",
"syntaxOk": true,
"verdict": "ok"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/attachments/detach
Firm member Permission: case:write
detachAttachment
Parameters of detachAttachment Name In Type Required attachmentIdBody string (uuid)Yes notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/attachments/detach' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"attachmentId": "<attachmentId>",
"notificationId": "<notificationId>",
"orgId": "<orgId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/attachments/detach' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"attachmentId" : "<attachmentId>" ,
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": -9007199254740991,
"filename": "<filename>",
"id": "<id>",
"kind": "auto_admisorio",
"mime": "<mime>",
"position": -9007199254740991,
"sha256": "<sha256>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/cases/create
Firm member Permission: case:write MCP tool: createCase
Create a case (proceso) in the caller's firm. `radicado` is the 23-digit Código Único de Radicación exactly as printed on the auto (dashes/spaces allowed) and is validated for structure; `juzgado` and `juzgadoEmail` are the court's name and buzón as listed in the CSJ directory; `cliente` is the firm's client. Refuses X_CASE_RADICADO_TAKEN when the firm already has that radicado — use the returned case id instead.
Parameters of createCase Name In Type Required ciudadBody string 1–120Yes claseProcesoBody string 1–200Yes clienteBody string 1–300Yes especialidadBody string 1–120Yes juzgadoBody string 1–300Yes juzgadoEmailBody string (email) ≤ 320Yes radicadoBody string 23–40Yes
curl Copy curl -X POST 'https://www.notificado.co/api/cases/create' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"especialidad": "<especialidad>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/cases/create' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"ciudad" : "<ciudad>" ,
"claseProceso" : "<claseProceso>" ,
"cliente" : "<cliente>" ,
"especialidad" : "<especialidad>" ,
"juzgado" : "<juzgado>" ,
"juzgadoEmail" : "<juzgadoEmail>" ,
"radicado" : "<radicado>"
}),
});
const result = await response.json();Example response 200 Copy {
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/cases/update
Firm member Permission: case:write MCP tool: updateCase
Correct a case of the caller's firm: pass caseId and only the fields to change (radicado — 23 digits, dashes/spaces allowed —, juzgado, juzgadoEmail, ciudad, especialidad, claseProceso, cliente). Refused X_CASE_LOCKED once a notification of the case left draft: what was sent is evidence. Do not use it to register a different proceso — use createCase.
Parameters of updateCase Name In Type Required caseIdBody string (uuid)Yes ciudadBody string 1–120No claseProcesoBody string 1–200No clienteBody string 1–300No especialidadBody string 1–120No juzgadoBody string 1–300No juzgadoEmailBody string (email) ≤ 320No radicadoBody string 23–40No
curl Copy curl -X POST 'https://www.notificado.co/api/cases/update' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"caseId":"<caseId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/cases/update' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"caseId" : "<caseId>"
}),
});
const result = await response.json();Example response 200 Copy {
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/documents/attach
Firm member Permission: case:write MCP tool: attachDocument
Attach an already-uploaded document (documentId) to a DRAFT notification, as kind auto_admisorio | demanda | anexo | subsanacion | providencia | otro. The file is copied to immutable evidence storage and its SHA-256 recorded; total attachments must stay under 20 MB. Nothing is sent.
Parameters of attachDocument Name In Type Required documentIdBody string (uuid)Yes kindBody "auto_admisorio" | "demanda" | "anexo" | "subsanacion" | "providencia" | "otro"Yes notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/documents/attach' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"documentId": "<documentId>",
"kind": "auto_admisorio",
"notificationId": "<notificationId>",
"orgId": "<orgId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/documents/attach' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"documentId" : "<documentId>" ,
"kind" : "auto_admisorio" ,
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": -9007199254740991,
"filename": "<filename>",
"id": "<id>",
"kind": "auto_admisorio",
"mime": "<mime>",
"position": -9007199254740991,
"sha256": "<sha256>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/drafts/update
Firm member Permission: case:write MCP tool: updateDraft
Rewrite a DRAFT art. 8 (Ley 2213) notification: pass orgId, notificationId, template "art8-personal", the providencia name and its date (YYYY-MM-DD), and optionally terminoDias and mensaje — omitting them removes them. The subject and body are recomposed from the template; the deemed-done and term-start sentences always stay. Refused once the notification was sent.
Parameters of updateDraft Name In Type Required mensajeBody string 1–5000No notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes providenciaBody string 1–200Yes providenciaFechaBody stringYes templateBody "art8-personal"Yes terminoDiasBody integer 1–365No
curl Copy curl -X POST 'https://www.notificado.co/api/drafts/update' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"providencia": "<providencia>",
"providenciaFecha": "<providenciaFecha>",
"template": "art8-personal"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/drafts/update' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>" ,
"providencia" : "<providencia>" ,
"providenciaFecha" : "<providenciaFecha>" ,
"template" : "art8-personal"
}),
});
const result = await response.json();Example response 200 Copy {
"caseId": "<caseId>",
"createdAt": "2026-09-25T15:00:00Z",
"emlSha256": "<emlSha256>",
"frozenAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/import-uploads/confirm
Firm member Permission: case:write
confirmImportUpload
Parameters of confirmImportUpload Name In Type Required filenameBody string 1–255Yes keyBody string 1–512Yes
curl Copy curl -X POST 'https://www.notificado.co/api/import-uploads/confirm' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"filename":"<filename>","key":"<key>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/import-uploads/confirm' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"filename" : "<filename>" ,
"key" : "<key>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": -9007199254740991,
"createdAt": "2026-09-25T15:00:00Z",
"draftedRows": -9007199254740991,
"errorRows": -9007199254740991,
"failureCode": "<failureCode>",
"failureDetail": "<failureDetail>",
"fileSha256": "<fileSha256>",
"filename": "<filename>",
"finishedAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"status": "queued",
"totalRows": -9007199254740991
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/import-uploads/request
Firm member Permission: case:write
requestImportUpload
Parameters of requestImportUpload Name In Type Required filenameBody string 1–255Yes sizeBody integer 0–9007199254740991No
curl Copy curl -X POST 'https://www.notificado.co/api/import-uploads/request' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"filename":"<filename>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/import-uploads/request' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"filename" : "<filename>"
}),
});
const result = await response.json();Example response 200 Copy {
"contentType": "<contentType>",
"expiresAt": -9007199254740991,
"key": "<key>",
"maxBytes": -9007199254740991,
"method": "PUT",
"url": "<url>"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/notifications/create
Firm member Permission: case:write MCP tool: createNotification
Create a DRAFT art. 8 (Ley 2213) personal notification on a case: pass orgId, caseId, template "art8-personal", the providencia name and its date (YYYY-MM-DD). The body already states when the notification is deemed done and when terms start. Nothing is sent and no credit is used; add recipients (a lawyer swears each address in the panel) and attach documents next.
Parameters of createNotification Name In Type Required caseIdBody string (uuid)Yes mensajeBody string 1–5000No orgIdBody string (uuid)Yes providenciaBody string 1–200Yes providenciaFechaBody stringYes templateBody "art8-personal"Yes terminoDiasBody integer 1–365No
curl Copy curl -X POST 'https://www.notificado.co/api/notifications/create' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"caseId": "<caseId>",
"orgId": "<orgId>",
"providencia": "<providencia>",
"providenciaFecha": "<providenciaFecha>",
"template": "art8-personal"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/notifications/create' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"caseId" : "<caseId>" ,
"orgId" : "<orgId>" ,
"providencia" : "<providencia>" ,
"providenciaFecha" : "<providenciaFecha>" ,
"template" : "art8-personal"
}),
});
const result = await response.json();Example response 200 Copy {
"caseId": "<caseId>",
"createdAt": "2026-09-25T15:00:00Z",
"emlSha256": "<emlSha256>",
"frozenAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/parties/add
Firm member Permission: case:write MCP tool: addParty
Add a party to a case of the caller's firm: caseId, role demandante | demandado | apoderado | otro, the name as written in the demanda, and idNumber (cédula or NIT with its check digit) when known. A party is NOT a recipient: who gets notified, at which address, is sworn by the lawyer in the panel. Refused X_CASE_LOCKED once a notification of the case left draft.
Parameters of addParty Name In Type Required caseIdBody string (uuid)Yes idNumberBody string 1–40No nameBody string 1–300Yes roleBody "demandante" | "demandado" | "apoderado" | "otro"Yes
curl Copy curl -X POST 'https://www.notificado.co/api/parties/add' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"caseId":"<caseId>","name":"<name>","role":"demandante"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/parties/add' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"caseId" : "<caseId>" ,
"name" : "<name>" ,
"role" : "demandante"
}),
});
const result = await response.json();Example response 200 Copy {
"caseId": "<caseId>",
"id": "<id>",
"idNumber": "<idNumber>",
"name": "<name>",
"role": "demandante"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID POST /api/recipients/remove
Firm member Permission: case:write
removeRecipient
Parameters of removeRecipient Name In Type Required notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes recipientIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/recipients/remove' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"recipientId": "<recipientId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/recipients/remove' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>" ,
"recipientId" : "<recipientId>"
}),
});
const result = await response.json();Example response 200 Copy {
"email": "<email>",
"id": "<id>",
"name": "<name>",
"notificationId": "<notificationId>",
"status": "queued"
}Errors
400 X_INPUT_INVALID 403 policy denied 422 X_BODY_INVALID