Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET /_x/query/closure-impact
Firm member Permission: deadline:write
closureImpact
Parameters of closureImpact Name In Type Required courtIdQuery stringNo endsOnQuery stringYes startsOnQuery 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/closure-impact?endsOn=<endsOn>&startsOn=<startsOn>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/closure-impact?endsOn=<endsOn>&startsOn=<startsOn>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/list-closure-courts
Firm member Permission: deadline:read
listClosureCourts
Parameters of listClosureCourts Name In Type Required limitQuery integer 1–500No orgIdQuery string (uuid)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/list-closure-courts?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/list-closure-courts?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/list-court-closures
Firm member Permission: deadline:read /v1 · bearer token MCP tool: listCourtClosures
The firm's recorded court closures that terms skip. Recording one is a person's act in the panel.
Parameters of listCourtClosures Name In Type Required limitQuery integer 1–500No orgIdQuery string (uuid)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/v1/list-court-closures?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/list-court-closures?orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/list-deadlines
Firm member Permission: deadline:read /v1 · bearer token MCP tool: listDeadlines
Computed terms per recipient (Bogotá dates). An ESTIMATE: the judge decides. blocked_bounce = not notified.
Parameters of listDeadlines Name In Type Required afterQuery string (uuid)No caseIdQuery string (uuid)No cursorQuery string (uuid)No fromQuery stringNo limitQuery integer 1–500No notificationIdQuery string (uuid)No orgIdQuery string (uuid)Yes statusQuery "computed" | "blocked_bounce"No toQuery 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/list-deadlines?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/list-deadlines?orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"calendarVersion": "<calendarVersion>",
"caseId": "<caseId>",
"computedAt": "<computedAt>",
"conservative": {
"sendWindowVersion": "<sendWindowVersion>",
"surtidaAt": "<surtidaAt>",
"surtidaOn": "<surtidaOn>",
"termEndsAt": "<termEndsAt>",
"termEndsOn": "<termEndsOn>",
"termStartsAt": "<termStartsAt>",
"termStartsOn": "<termStartsOn>"
},
"disclaimerKey": "<disclaimerKey>",
"id": "<id>",
"inputsSha256": "<inputsSha256>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"radicado": "<radicado>",
"recipientId": "<recipientId>",
"recipientName": "<recipientName>",
"sentAt": "<sentAt>",
"status": "computed",
"surtidaAt": "<surtidaAt>",
"surtidaOn": "<surtidaOn>",
"termDays": 1,
"termDaysAssumed": true,
"termEndsAt": "<termEndsAt>",
"termEndsOn": "<termEndsOn>",
"termStartsAt": "<termStartsAt>",
"termStartsOn": "<termStartsOn>",
"vacanciaCountsForSurtida": true
}
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /_x/query/upcoming-deadlines
Firm member Permission: deadline:read MCP tool: upcomingDeadlines
The caller's firm's next vencimientos (Ley 2213 art. 8), from today in America/Bogota on, soonest first — ONE row per case and recipient address (the soonest; laterTerms counts the other upcoming terms of the same pair). Each row carries notificationId, caseId, radicado, recipientName and surtidaOn / termStartsOn / termEndsOn (YYYY-MM-DD, Bogotá). For every term use listDeadlines. The dates are an ESTIMATE — always tell the user the judge decides. Read-only.
Parameters of upcomingDeadlines Name In Type Required limitQuery integer 1–100No orgIdQuery string (uuid)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/upcoming-deadlines?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/upcoming-deadlines?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/list-global-closures
Firm member Permission: deadline:write
listGlobalClosures
Parameters of listGlobalClosures Name In Type Required limitBody integer 1–500No yearBody integer 2000–2100No
curl Copy curl -X POST 'https://www.notificado.co/api/list-global-closures' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/list-global-closures' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({}),
});
const result = await response.json();Example response 200 Copy {
"rows": [
{
"courtId": "<courtId>",
"createdAt": "2026-09-25T15:00:00Z",
"createdBy": "<createdBy>",
"createdByEmail": "<createdByEmail>",
"endsOn": "<endsOn>",
"id": "<id>",
"kind": "<kind>",
"reason": "<reason>",
"seeded": true,
"sourceUrl": "<sourceUrl>",
"startsOn": "<startsOn>",
"withdrawReason": "<withdrawReason>",
"withdrawnAt": "2026-09-25T15:00:00Z",
"withdrawnBy": "<withdrawnBy>",
"withdrawnByEmail": "<withdrawnByEmail>"
}
]
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/set-court-closure
Firm member Permission: deadline:write
setCourtClosure
Parameters of setCourtClosure Name In Type Required codeBody string 1–64No courtIdBody stringNo endsOnBody stringYes globalBody booleanNo kindBody "cierre_extraordinario" | "vacancia_colectiva" | "semana_santa"No reasonBody string 0–500No sourceUrlBody string 0–2048No startsOnBody stringYes
curl Copy curl -X POST 'https://www.notificado.co/api/set-court-closure' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"endsOn":"<endsOn>","startsOn":"<startsOn>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/set-court-closure' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"endsOn" : "<endsOn>" ,
"startsOn" : "<startsOn>"
}),
});
const result = await response.json();Example response 200 Copy {
"courtId": "<courtId>",
"endsOn": "<endsOn>",
"global": true,
"id": "<id>",
"kind": "<kind>",
"recomputing": -9007199254740991,
"startsOn": "<startsOn>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/withdraw-global-closure
Firm member Permission: deadline:write
withdrawGlobalClosure
Parameters of withdrawGlobalClosure Name In Type Required closureIdBody string (uuid)Yes codeBody string 1–64No reasonBody string 0–500Yes
curl Copy curl -X POST 'https://www.notificado.co/api/withdraw-global-closure' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"closureId":"<closureId>","reason":"<reason>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/withdraw-global-closure' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"closureId" : "<closureId>" ,
"reason" : "<reason>"
}),
});
const result = await response.json();Example response 200 Copy {
"courtId": "<courtId>",
"endsOn": "<endsOn>",
"id": "<id>",
"kind": "<kind>",
"recomputing": -9007199254740991,
"startsOn": "<startsOn>",
"withdrawnAt": "2026-09-25T15:00:00Z"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds