Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET /_x/query/address-book
Firm member Permission: case:read MCP tool: addressBook
The firm’s address book across all cases, newest first: each saved notification address (id, email, source, sourceText, evidenceDocumentIds or overrideReason, obtainedOn) with its party (partyId, partyName, partyRole) and case (caseId, radicado, cliente, caseArchived). Narrow with q (address, party name, cliente or radicado digits; accents and case ignored) or caseId. For the next page pass cursor = "<createdAt>_<id>" of the last row, with the same filters. These are NOT sworn statements: a lawyer swears each address on every send. Edit with updatePartyAddress, remove with removePartyAddress. Read-only.
Parameters of addressBook Name In Type Required caseIdQuery string (uuid)No cursorQuery string 1–64No limitQuery integer 1–201No orgIdQuery string (uuid)Yes qQuery string 1–120No _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/address-book?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/address-book?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/case-especialidades
Firm member Permission: case:read /v1 · bearer token MCP tool: caseEspecialidades
The exact especialidad values caseList's filter takes.
Parameters of caseEspecialidades Name In Type Required 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/case-especialidades?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/case-especialidades?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/case-list
Firm member Permission: case:read /v1 · bearer token MCP tool: caseList
Cases, newest first; q matches radicado, cliente, juzgado or a party; archived: true lists archived ones.
Parameters of caseList Name In Type Required archivedQuery booleanNo cursorQuery string 1–64No especialidadQuery string 1–120No limitQuery integer 1–200No orgIdQuery string (uuid)Yes qQuery string 1–120No _firstQuery integer 1–200page size; present, the response is the page envelope rather than the bare rows (1 to 200) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/case-list?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/case-list?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/get-case
Firm member Permission: case:read /v1 · bearer token MCP tool: getCase
One case with its parties; locked = a notification left draft (correct it with createCase correctionOf).
Parameters of getCase Name In Type Required caseIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/get-case?caseId=<caseId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/get-case?caseId=<caseId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "<archivedAt>",
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"correctedBy": [
{
"createdAt": "<createdAt>",
"id": "<id>",
"radicado": "<radicado>"
}
],
"correctionOf": "<correctionOf>",
"corrects": {
"createdAt": "<createdAt>",
"id": "<id>",
"radicado": "<radicado>"
},
"createdAt": "<createdAt>",
"createdBy": "<createdBy>",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"locked": true,
"orgId": "<orgId>",
"parties": [
{
"caseId": "<caseId>",
"createdAt": "<createdAt>",
"id": "<id>",
"idNumber": "<idNumber>",
"name": "<name>",
"orgId": "<orgId>",
"role": "demandante"
}
],
"radicado": "<radicado>",
"updatedAt": "<updatedAt>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 404 X_NOT_FOUND — the read matched no row for this input 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/get-import
Firm member Permission: case:read /v1 · bearer token MCP tool: getImport
One CSV import: status, counts, and each row as a case + DRAFT or its errors.
Parameters of getImport Name In Type Required importIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/get-import?importId=<importId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/get-import?importId=<importId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"bytes": 1,
"createdAt": "<createdAt>",
"createdBy": "<createdBy>",
"draftedRows": 1,
"errorRows": 1,
"failureCode": "<failureCode>",
"failureDetail": "<failureDetail>",
"fileSha256": "<fileSha256>",
"filename": "<filename>",
"finishedAt": "<finishedAt>",
"id": "<id>",
"orgId": "<orgId>",
"rows": [
{
"caseId": "<caseId>",
"demandado": "<demandado>",
"email": "<email>",
"errors": [
{
"code": null,
"field": null
}
],
"id": "<id>",
"importId": "<importId>",
"lineNo": 1,
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"radicado": "<radicado>",
"status": "pending",
"warnings": [
{
"code": null,
"field": null
}
]
}
],
"status": "queued",
"totalRows": 1
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 404 X_NOT_FOUND — the read matched no row for this input 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/import-error-csv
Firm member Permission: case:read /v1 · bearer token MCP tool: importErrorCsv
The failed rows as a CSV to fix and upload again.
Parameters of importErrorCsv Name In Type Required importIdQuery string (uuid)Yes 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/import-error-csv?importId=<importId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/import-error-csv?importId=<importId>&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/import-sendables
Firm member Permission: case:read /v1 · bearer token MCP tool: importSendables
An import's drafts as the batch send sees them: address, warnings, blocker.
Parameters of importSendables Name In Type Required importIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes _firstQuery integer 1–5000page size; present, the response is the page envelope rather than the bare rows (1 to 5000) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/import-sendables?importId=<importId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/import-sendables?importId=<importId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"alreadySworn": true,
"attachments": 1,
"blocker": "case_archived",
"caseId": "<caseId>",
"email": "<email>",
"id": "<id>",
"importId": "<importId>",
"lastSentTo": "<lastSentTo>",
"lineNo": 1,
"name": "<name>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"overrideReason": "<overrideReason>",
"proofs": 1,
"radicado": "<radicado>",
"source": "<source>",
"swornBy": "<swornBy>",
"warnings": [
{
"code": "<code>",
"field": "<field>"
}
]
}
]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/import-sends
Firm member Permission: case:read /v1 · bearer token MCP tool: importSends
An import's batch sends: status, counts, failures with their code.
Parameters of importSends Name In Type Required importIdQuery string (uuid)Yes 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/import-sends?importId=<importId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/import-sends?importId=<importId>&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/linked-file-list
Firm member Permission: case:write /v1 · bearer token MCP tool: linkedFileList
The firm's unsent linked files, newest first, each with its scan status and reason; page with the last row's cursor.
Parameters of linkedFileList Name In Type Required cursorQuery string 1–64No limitQuery integer 1–100No orgIdQuery string (uuid)Yes _firstQuery integer 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/linked-file-list?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/linked-file-list?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/linked-file-status
Firm member Permission: case:write /v1 · bearer token MCP tool: linkedFileStatus
One linked file: status (granted, scanning, clean, infected, refused), the reason it was not accepted, its SHA-256 and credits per recipient.
Parameters of linkedFileStatus Name In Type Required idQuery string (uuid)Yes 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/linked-file-status?id=<id>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/linked-file-status?id=<id>&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/linked-files-access
Firm member Permission: case:write /v1 · bearer token MCP tool: linkedFilesAccess
Whether this firm may upload linked files (too large to attach) now, and the reasons when it may not.
Parameters of linkedFilesAccess Name In Type Required 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/linked-files-access?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/linked-files-access?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-imports
Firm member Permission: case:read /v1 · bearer token MCP tool: listImports
CSV imports, newest first, with status and counts; importId for one.
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–100page size; present, the response is the page envelope rather than the bare rows (1 to 100) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/list-imports?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/list-imports?orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"bytes": 1,
"createdAt": "<createdAt>",
"createdBy": "<createdBy>",
"draftedRows": 1,
"errorRows": 1,
"failureCode": "<failureCode>",
"failureDetail": "<failureDetail>",
"fileSha256": "<fileSha256>",
"filename": "<filename>",
"finishedAt": "<finishedAt>",
"id": "<id>",
"keysetAt": "<keysetAt>",
"orgId": "<orgId>",
"status": "queued",
"storageKey": "<storageKey>",
"totalRows": 1
}
]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/party-addresses
Firm member Permission: case:read /v1 · bearer token MCP tool: partyAddresses
A case's saved party addresses with provenance. Not sworn.
Parameters of partyAddresses Name In Type Required caseIdQuery string (uuid)Yes 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/party-addresses?caseId=<caseId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/party-addresses?caseId=<caseId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"createdAt": "<createdAt>",
"createdBy": "<createdBy>",
"email": "<email>",
"evidenceDocumentIds": [
"<evidenceDocumentIds>"
],
"id": "<id>",
"keysetAt": "<keysetAt>",
"obtainedOn": "<obtainedOn>",
"orgId": "<orgId>",
"overrideReason": "<overrideReason>",
"partyId": "<partyId>",
"removedAt": "<removedAt>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}
]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/wizard-address-book
Firm member Permission: case:read
wizardAddressBook
Parameters of wizardAddressBook Name In Type Required caseIdQuery string (uuid)Yes 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/wizard-address-book?caseId=<caseId>&orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/wizard-address-book?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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/add-party
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: addParty
Add a party (demandante, demandado...). A party is not a recipient: the lawyer swears addresses.
Parameters of addParty Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No 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/v1/add-party' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"caseId":"<caseId>","name":"<name>","role":"demandante"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/add-party' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/archive-case
Firm member Permission: case:write /v1 · bearer token MCP tool: archiveCase
Archive a case; nothing is deleted. Refused X_CASE_IN_FLIGHT while a draft, a scheduled send or a send is open.
Parameters of archiveCase Name In Type Required caseIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/archive-case' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"caseId":"<caseId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/archive-case' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"caseId" : "<caseId>"
}),
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "2026-09-25T15:00:00Z",
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"correctionOf": "<correctionOf>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}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 /v1/attach-document
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: attachDocument
Attach an uploaded document to a DRAFT: copied to evidence storage and hashed. Total under 6 MB.
Parameters of attachDocument Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No 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/v1/attach-document' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-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/v1/attach-document' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
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>",
"pageCount": -9007199254740991,
"position": -9007199254740991,
"sha256": "<sha256>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/attach-linked-file
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: attachLinkedFile
Attach a scanned linked file (status clean) to a DRAFT, delivered by download link. Costs one credit per 10 MB per recipient at send.
Parameters of attachLinkedFile Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No kindBody "auto_admisorio" | "demanda" | "anexo" | "subsanacion" | "providencia" | "otro"Yes linkedFileIdBody string (uuid)Yes notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/attach-linked-file' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{
"kind": "auto_admisorio",
"linkedFileId": "<linkedFileId>",
"notificationId": "<notificationId>",
"orgId": "<orgId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/attach-linked-file' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"kind" : "auto_admisorio" ,
"linkedFileId" : "<linkedFileId>" ,
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": -9007199254740991,
"filename": "<filename>",
"id": "<id>",
"kind": "auto_admisorio",
"mime": "<mime>",
"pageCount": -9007199254740991,
"position": -9007199254740991,
"sha256": "<sha256>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/check-address
Firm member Permission: case:write /v1 · bearer token MCP tool: checkAddress
Check an address before it is sworn: ok, warn or block, with reasons. Recorded; 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/v1/check-address' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"email":"<email>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/check-address' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
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 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 /v1/confirm-import-upload
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: confirmImportUpload
Step 2: queue the import. It makes cases and DRAFTS only, never a recipient or a send.
Parameters of confirmImportUpload Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No filenameBody string 1–255Yes keyBody string 1–512Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/confirm-import-upload' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"filename":"<filename>","key":"<key>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/confirm-import-upload' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/confirm-linked-upload
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: confirmLinkedUpload
Step 2 of a linked file: after the PUT succeeded, starts the malware scan. Read linkedFileStatus until status is clean (or refused, with a reason).
Parameters of confirmLinkedUpload Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No idBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/confirm-linked-upload' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"id":"<id>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/confirm-linked-upload' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"id" : "<id>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"attachedNotificationId": "<attachedNotificationId>",
"bytes": -9007199254740991,
"createdAt": "2026-09-25T15:00:00Z",
"creditsPerRecipient": -9007199254740991,
"filename": "<filename>",
"id": "<id>",
"mime": "<mime>",
"orgId": "<orgId>",
"purgeAt": "2026-09-25T15:00:00Z",
"reason": "infected",
"reasonDetail": "<reasonDetail>",
"sha256": "<sha256>",
"status": "granted"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/create-case
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: createCase
Register a case: 23-digit radicado, juzgado and its email. X_CASE_RADICADO_TAKEN: use that open case.
Parameters of createCase Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No ciudadBody string 1–120Yes claseProcesoBody string 1–200Yes clienteBody string 1–300Yes correctionOfBody string (uuid)No 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/v1/create-case' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-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/v1/create-case' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
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 {
"archivedAt": "2026-09-25T15:00:00Z",
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"correctionOf": "<correctionOf>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/create-correo
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: createCorreo
Create a DRAFT correo con constancia de entrega: your own subject and body, with no proceso, no art. 8 statements and no término. Nothing is sent and no credit is used; a lawyer adds the sworn recipients and sends it from the panel.
Parameters of createCorreo Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No bodyBody string 1–20000Yes messageTemplateIdBody string (uuid) | nullNo orgIdBody string (uuid)Yes subjectBody string 1–200Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/create-correo' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"body":"<body>","orgId":"<orgId>","subject":"<subject>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/create-correo' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"body" : "<body>" ,
"orgId" : "<orgId>" ,
"subject" : "<subject>"
}),
});
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>",
"scheduledFor": "2026-09-25T15:00:00Z",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/create-notification
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: createNotification
Create a DRAFT art. 8 notification on a case (providencia and its date). Nothing is sent, no credit used.
Parameters of createNotification Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No caseIdBody string (uuid)Yes mensajeBody string 1–5000No messageTemplateIdBody string (uuid) | nullNo 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/v1/create-notification' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-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/v1/create-notification' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
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>",
"scheduledFor": "2026-09-25T15:00:00Z",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/detach-attachment
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/detach-attachment' \
-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/detach-attachment' , {
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>",
"pageCount": -9007199254740991,
"position": -9007199254740991,
"sha256": "<sha256>"
}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 /v1/discard-draft
Firm member Permission: case:write /v1 · bearer token MCP tool: discardDraft
Discard a DRAFT with no evidence and no pending send request. Drafts cost nothing, so nothing is refunded.
Parameters of discardDraft Name In Type Required notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/discard-draft' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"notificationId":"<notificationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/discard-draft' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>"
}),
});
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>",
"scheduledFor": "2026-09-25T15:00:00Z",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}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 /v1/discard-linked-file
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: discardLinkedFile
Remove an unsent linked file: its bytes are deleted. Refused while it is being scanned and once it was sent.
Parameters of discardLinkedFile Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No idBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/discard-linked-file' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"id":"<id>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/discard-linked-file' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"id" : "<id>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"id": "<id>",
"status": "granted"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/remove-party
Firm member Permission: case:write /v1 · bearer token MCP tool: removeParty
Remove a party. Refused X_CASE_LOCKED once a notification left draft.
Parameters of removeParty Name In Type Required caseIdBody string (uuid)No partyIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/remove-party' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"partyId":"<partyId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/remove-party' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"partyId" : "<partyId>"
}),
});
const result = await response.json();Example response 200 Copy {
"caseId": "<caseId>",
"id": "<id>",
"idNumber": "<idNumber>",
"name": "<name>",
"role": "demandante"
}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 /v1/remove-party-address
Firm member Permission: case:write /v1 · bearer token MCP tool: removePartyAddress
Remove a saved address; past sends are untouched.
Parameters of removePartyAddress Name In Type Required addressIdBody string (uuid)Yes orgIdBody string (uuid)Yes returnToBody string 1–2048No
curl Copy curl -X POST 'https://www.notificado.co/v1/remove-party-address' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"addressId":"<addressId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/remove-party-address' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"addressId" : "<addressId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"email": "<email>",
"evidenceDocumentIds": [
"<evidenceDocumentIds>"
],
"id": "<id>",
"obtainedOn": "<obtainedOn>",
"overrideReason": "<overrideReason>",
"partyId": "<partyId>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}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/remove-recipient
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/remove-recipient' \
-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/remove-recipient' , {
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 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 /v1/request-import-upload
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: requestImportUpload
Step 1: a signed PUT grant for one CSV (2 MB); then confirmImportUpload(key).
Parameters of requestImportUpload Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No filenameBody string 1–255Yes sizeBody integer 1–9007199254740991Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/request-import-upload' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"filename":"<filename>","size":1}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/request-import-upload' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"filename" : "<filename>" ,
"size" : 1
}),
});
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 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/request-linked-upload
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: requestLinkedUpload
Step 1 of a linked file (too large to attach): a signed PUT grant. PUT the bytes with the returned contentType, then confirmLinkedUpload(id).
Parameters of requestLinkedUpload Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No bytesBody integer 1–9007199254740991Yes contentTypeBody string 1–127No filenameBody string 1–255Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/request-linked-upload' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"bytes":1,"filename":"<filename>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/request-linked-upload' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"bytes" : 1 ,
"filename" : "<filename>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"contentType": "<contentType>",
"creditsPerRecipient": -9007199254740991,
"expiresAt": -9007199254740991,
"id": "<id>",
"maxBytes": -9007199254740991,
"maxFileBytes": -9007199254740991,
"method": "PUT",
"purgeAt": "2026-09-25T15:00:00Z",
"url": "<url>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/save-party-address
Firm member Permission: case:write /v1 · bearer token Idempotency-Key MCP tool: savePartyAddress
Save a party address with its source and proof or overrideReason. Not sworn.
Parameters of savePartyAddress Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No emailBody string (email)Yes evidenceDocumentIdsBody array of string (uuid)Yes obtainedOnBody string | nullNo orgIdBody string (uuid)Yes overrideReasonBody string 1–2000 | nullNo partyIdBody string (uuid)Yes sourceBody "comunicaciones_previas" | "camara_de_comercio" | "rut" | "contrato" | "web_oficial" | "otro"Yes sourceTextBody string 1–2000Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/save-party-address' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{
"email": "<email>",
"evidenceDocumentIds": [],
"orgId": "<orgId>",
"partyId": "<partyId>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/save-party-address' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"email" : "<email>" ,
"evidenceDocumentIds" : [],
"orgId" : "<orgId>" ,
"partyId" : "<partyId>" ,
"source" : "comunicaciones_previas" ,
"sourceText" : "<sourceText>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"email": "<email>",
"evidenceDocumentIds": [
"<evidenceDocumentIds>"
],
"id": "<id>",
"obtainedOn": "<obtainedOn>",
"overrideReason": "<overrideReason>",
"partyId": "<partyId>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /v1/unarchive-case
Firm member Permission: case:write /v1 · bearer token MCP tool: unarchiveCase
Reopen an archived case so it takes notifications again.
Parameters of unarchiveCase Name In Type Required caseIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/unarchive-case' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"caseId":"<caseId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/unarchive-case' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"caseId" : "<caseId>"
}),
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "2026-09-25T15:00:00Z",
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"correctionOf": "<correctionOf>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}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 /v1/update-case
Firm member Permission: case:write /v1 · bearer token MCP tool: updateCase
Edit a case's fields. Refused X_CASE_LOCKED once a notification of it left draft.
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/v1/update-case' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"caseId":"<caseId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/update-case' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"caseId" : "<caseId>"
}),
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "2026-09-25T15:00:00Z",
"ciudad": "<ciudad>",
"claseProceso": "<claseProceso>",
"cliente": "<cliente>",
"correctionOf": "<correctionOf>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"juzgado": "<juzgado>",
"juzgadoEmail": "<juzgadoEmail>",
"radicado": "<radicado>"
}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 /v1/update-correo
Firm member Permission: case:write /v1 · bearer token MCP tool: updateCorreo
Rewrite the subject and body of a DRAFT correo con constancia de entrega (one made by createCorreo). Refused for a notification of a proceso and once sent.
Parameters of updateCorreo Name In Type Required bodyBody string 1–20000Yes notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes subjectBody string 1–200Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/update-correo' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{
"body": "<body>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"subject": "<subject>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/update-correo' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"body" : "<body>" ,
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>" ,
"subject" : "<subject>"
}),
});
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>",
"scheduledFor": "2026-09-25T15:00:00Z",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}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 /v1/update-draft
Firm member Permission: case:write /v1 · bearer token MCP tool: updateDraft
Rewrite a DRAFT: omitted optional fields are removed, the art. 8 sentences stay. Refused once sent.
Parameters of updateDraft Name In Type Required mensajeBody string 1–5000No messageTemplateIdBody string (uuid) | nullNo 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/v1/update-draft' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-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/v1/update-draft' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
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>",
"scheduledFor": "2026-09-25T15:00:00Z",
"sentAt": "2026-09-25T15:00:00Z",
"status": "draft",
"subject": "<subject>",
"tier": "standard"
}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 /v1/update-party
Firm member Permission: case:write /v1 · bearer token MCP tool: updateParty
Replace a party's role, name and idNumber. Refused X_CASE_LOCKED once a notification left draft.
Parameters of updateParty Name In Type Required caseIdBody string (uuid)No idNumberBody string 1–40No nameBody string 1–300Yes partyIdBody string (uuid)Yes roleBody "demandante" | "demandado" | "apoderado" | "otro"Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/update-party' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"name":"<name>","partyId":"<partyId>","role":"demandante"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/update-party' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"name" : "<name>" ,
"partyId" : "<partyId>" ,
"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 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/update-party-address
Firm member Permission: case:write MCP tool: updatePartyAddress
Edit a saved address (addressId from addressBook or partyAddresses) in the firm’s address book: email, source, sourceText, and exactly one of evidenceDocumentIds (provenance_proof uploads) or overrideReason; obtainedOn optional. The entry is replaced (the old one is kept as removed) and the new entry, with a new id, is returned. NOT a sworn statement — the lawyer still swears the address in the panel on every send.
Parameters of updatePartyAddress Name In Type Required addressIdBody string (uuid)Yes emailBody string (email)Yes evidenceDocumentIdsBody array of string 1–64 | string 1–4000No obtainedOnBody "" | string | string | nullNo orgIdBody string (uuid)Yes overrideReasonBody "" | string 1–2000 | nullNo returnToBody string 1–2048No sourceBody "comunicaciones_previas" | "camara_de_comercio" | "rut" | "contrato" | "web_oficial" | "otro"Yes sourceTextBody string 1–2000Yes
curl Copy curl -X POST 'https://www.notificado.co/api/update-party-address' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"addressId": "<addressId>",
"email": "<email>",
"orgId": "<orgId>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/update-party-address' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"addressId" : "<addressId>" ,
"email" : "<email>" ,
"orgId" : "<orgId>" ,
"source" : "comunicaciones_previas" ,
"sourceText" : "<sourceText>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"email": "<email>",
"evidenceDocumentIds": [
"<evidenceDocumentIds>"
],
"id": "<id>",
"obtainedOn": "<obtainedOn>",
"overrideReason": "<overrideReason>",
"partyId": "<partyId>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}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