Skip to content

Cases and documents

39 operations, each with its parameters, curl and TypeScript examples ready to copy, and its errors.

Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication

addressBook

GET/_x/query/address-book

Firm memberPermission: case:readMCP 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
NameInTypeRequired
caseIdQuerystring (uuid)No
cursorQuerystring 1–64No
limitQueryinteger 1–201No
orgIdQuerystring (uuid)Yes
qQuerystring 1–120No
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/address-book?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

caseEspecialidades

GET/v1/case-especialidades

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: caseEspecialidades

The exact especialidad values caseList's filter takes.

Parameters of caseEspecialidades
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/case-especialidades?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

caseList

GET/v1/case-list

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: caseList

Cases, newest first; q matches radicado, cliente, juzgado or a party; archived: true lists archived ones.

Parameters of caseList
NameInTypeRequired
archivedQuerybooleanNo
cursorQuerystring 1–64No
especialidadQuerystring 1–120No
limitQueryinteger 1–200No
orgIdQuerystring (uuid)Yes
qQuerystring 1–120No
_firstQueryinteger 1–200page size; present, the response is the page envelope rather than the bare rows (1 to 200)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/case-list?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

getCase

GET/v1/get-case

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: getCase

One case with its parties; locked = a notification left draft (correct it with createCase correctionOf).

Parameters of getCase
NameInTypeRequired
caseIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
curl
curl 'https://www.notificado.co/v1/get-case?caseId=<caseId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
{
  "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

getImport

GET/v1/get-import

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: getImport

One CSV import: status, counts, and each row as a case + DRAFT or its errors.

Parameters of getImport
NameInTypeRequired
importIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
curl
curl 'https://www.notificado.co/v1/get-import?importId=<importId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
{
  "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

importErrorCsv

GET/v1/import-error-csv

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: importErrorCsv

The failed rows as a CSV to fix and upload again.

Parameters of importErrorCsv
NameInTypeRequired
importIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/import-error-csv?importId=<importId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

importSendables

GET/v1/import-sendables

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: importSendables

An import's drafts as the batch send sees them: address, warnings, blocker.

Parameters of importSendables
NameInTypeRequired
importIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–5000page size; present, the response is the page envelope rather than the bare rows (1 to 5000)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/import-sendables?importId=<importId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  {
    "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

importSends

GET/v1/import-sends

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: importSends

An import's batch sends: status, counts, failures with their code.

Parameters of importSends
NameInTypeRequired
importIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/import-sends?importId=<importId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

linkedFileList

GET/v1/linked-file-list

Firm memberPermission: case:write/v1 · bearer tokenMCP 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
NameInTypeRequired
cursorQuerystring 1–64No
limitQueryinteger 1–100No
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/linked-file-list?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

linkedFileStatus

GET/v1/linked-file-status

Firm memberPermission: case:write/v1 · bearer tokenMCP 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
NameInTypeRequired
idQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/linked-file-status?id=<id>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

linkedFilesAccess

GET/v1/linked-files-access

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: linkedFilesAccess

Whether this firm may upload linked files (too large to attach) now, and the reasons when it may not.

Parameters of linkedFilesAccess
NameInTypeRequired
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/linked-files-access?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

listImports

GET/v1/list-imports

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: listImports

CSV imports, newest first, with status and counts; importId for one.

Parameters of listImports
NameInTypeRequired
cursorQuerystring 1–64No
importIdQuerystring (uuid)No
limitQueryinteger 1–100No
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–100page size; present, the response is the page envelope rather than the bare rows (1 to 100)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/list-imports?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  {
    "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

partyAddresses

GET/v1/party-addresses

Firm memberPermission: case:read/v1 · bearer tokenMCP tool: partyAddresses

A case's saved party addresses with provenance. Not sworn.

Parameters of partyAddresses
NameInTypeRequired
caseIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/v1/party-addresses?caseId=<caseId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  {
    "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

wizardAddressBook

GET/_x/query/wizard-address-book

Firm memberPermission: case:read

wizardAddressBook

Parameters of wizardAddressBook
NameInTypeRequired
caseIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/wizard-address-book?caseId=<caseId>&orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

addParty

POST/v1/add-party

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: addParty

Add a party (demandante, demandado...). A party is not a recipient: the lawyer swears addresses.

Parameters of addParty
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
caseIdBodystring (uuid)Yes
idNumberBodystring 1–40No
nameBodystring 1–300Yes
roleBody"demandante" | "demandado" | "apoderado" | "otro"Yes
curl
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
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
{
  "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

archiveCase

POST/v1/archive-case

Firm memberPermission: case:write/v1 · bearer tokenMCP 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
NameInTypeRequired
caseIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/v1/archive-case' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"caseId":"<caseId>"}'
TypeScript
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
{
  "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

attachDocument

POST/v1/attach-document

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: attachDocument

Attach an uploaded document to a DRAFT: copied to evidence storage and hashed. Total under 6 MB.

Parameters of attachDocument
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
documentIdBodystring (uuid)Yes
kindBody"auto_admisorio" | "demanda" | "anexo" | "subsanacion" | "providencia" | "otro"Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

attachLinkedFile

POST/v1/attach-linked-file

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
kindBody"auto_admisorio" | "demanda" | "anexo" | "subsanacion" | "providencia" | "otro"Yes
linkedFileIdBodystring (uuid)Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

checkAddress

POST/v1/check-address

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: checkAddress

Check an address before it is sworn: ok, warn or block, with reasons. Recorded; sends nothing.

Parameters of checkAddress
NameInTypeRequired
emailBodystring 1–320Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

confirmImportUpload

POST/v1/confirm-import-upload

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: confirmImportUpload

Step 2: queue the import. It makes cases and DRAFTS only, never a recipient or a send.

Parameters of confirmImportUpload
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
filenameBodystring 1–255Yes
keyBodystring 1–512Yes
curl
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
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
{
  "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

confirmLinkedUpload

POST/v1/confirm-linked-upload

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
idBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

createCase

POST/v1/create-case

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: createCase

Register a case: 23-digit radicado, juzgado and its email. X_CASE_RADICADO_TAKEN: use that open case.

Parameters of createCase
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
ciudadBodystring 1–120Yes
claseProcesoBodystring 1–200Yes
clienteBodystring 1–300Yes
correctionOfBodystring (uuid)No
especialidadBodystring 1–120Yes
juzgadoBodystring 1–300Yes
juzgadoEmailBodystring (email) ≤ 320Yes
radicadoBodystring 23–40Yes
curl
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
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
{
  "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

createCorreo

POST/v1/create-correo

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
bodyBodystring 1–20000Yes
messageTemplateIdBodystring (uuid) | nullNo
orgIdBodystring (uuid)Yes
subjectBodystring 1–200Yes
curl
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
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
{
  "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

createNotification

POST/v1/create-notification

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: createNotification

Create a DRAFT art. 8 notification on a case (providencia and its date). Nothing is sent, no credit used.

Parameters of createNotification
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
caseIdBodystring (uuid)Yes
mensajeBodystring 1–5000No
messageTemplateIdBodystring (uuid) | nullNo
orgIdBodystring (uuid)Yes
providenciaBodystring 1–200Yes
providenciaFechaBodystringYes
templateBody"art8-personal"Yes
terminoDiasBodyinteger 1–365No
curl
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
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
{
  "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

detachAttachment

POST/api/detach-attachment

Firm memberPermission: case:write

detachAttachment

Parameters of detachAttachment
NameInTypeRequired
attachmentIdBodystring (uuid)Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

discardDraft

POST/v1/discard-draft

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: discardDraft

Discard a DRAFT with no evidence and no pending send request. Drafts cost nothing, so nothing is refunded.

Parameters of discardDraft
NameInTypeRequired
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

discardLinkedFile

POST/v1/discard-linked-file

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
idBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

removeParty

POST/v1/remove-party

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: removeParty

Remove a party. Refused X_CASE_LOCKED once a notification left draft.

Parameters of removeParty
NameInTypeRequired
caseIdBodystring (uuid)No
partyIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/v1/remove-party' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"partyId":"<partyId>"}'
TypeScript
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
{
  "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

removePartyAddress

POST/v1/remove-party-address

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: removePartyAddress

Remove a saved address; past sends are untouched.

Parameters of removePartyAddress
NameInTypeRequired
addressIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
returnToBodystring 1–2048No
curl
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
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
{
  "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

removeRecipient

POST/api/remove-recipient

Firm memberPermission: case:write

removeRecipient

Parameters of removeRecipient
NameInTypeRequired
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
recipientIdBodystring (uuid)Yes
curl
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
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
{
  "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

requestImportUpload

POST/v1/request-import-upload

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: requestImportUpload

Step 1: a signed PUT grant for one CSV (2 MB); then confirmImportUpload(key).

Parameters of requestImportUpload
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
filenameBodystring 1–255Yes
sizeBodyinteger 1–9007199254740991Yes
curl
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
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
{
  "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

requestLinkedUpload

POST/v1/request-linked-upload

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
bytesBodyinteger 1–9007199254740991Yes
contentTypeBodystring 1–127No
filenameBodystring 1–255Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

savePartyAddress

POST/v1/save-party-address

Firm memberPermission: case:write/v1 · bearer tokenIdempotency-KeyMCP tool: savePartyAddress

Save a party address with its source and proof or overrideReason. Not sworn.

Parameters of savePartyAddress
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
emailBodystring (email)Yes
evidenceDocumentIdsBodyarray of string (uuid)Yes
obtainedOnBodystring | nullNo
orgIdBodystring (uuid)Yes
overrideReasonBodystring 1–2000 | nullNo
partyIdBodystring (uuid)Yes
sourceBody"comunicaciones_previas" | "camara_de_comercio" | "rut" | "contrato" | "web_oficial" | "otro"Yes
sourceTextBodystring 1–2000Yes
curl
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
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
{
  "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

unarchiveCase

POST/v1/unarchive-case

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: unarchiveCase

Reopen an archived case so it takes notifications again.

Parameters of unarchiveCase
NameInTypeRequired
caseIdBodystring (uuid)Yes
curl
curl -X POST 'https://www.notificado.co/v1/unarchive-case' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"caseId":"<caseId>"}'
TypeScript
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
{
  "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

updateCase

POST/v1/update-case

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: updateCase

Edit a case's fields. Refused X_CASE_LOCKED once a notification of it left draft.

Parameters of updateCase
NameInTypeRequired
caseIdBodystring (uuid)Yes
ciudadBodystring 1–120No
claseProcesoBodystring 1–200No
clienteBodystring 1–300No
especialidadBodystring 1–120No
juzgadoBodystring 1–300No
juzgadoEmailBodystring (email) ≤ 320No
radicadoBodystring 23–40No
curl
curl -X POST 'https://www.notificado.co/v1/update-case' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"caseId":"<caseId>"}'
TypeScript
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
{
  "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

updateCorreo

POST/v1/update-correo

Firm memberPermission: case:write/v1 · bearer tokenMCP 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
NameInTypeRequired
bodyBodystring 1–20000Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
subjectBodystring 1–200Yes
curl
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
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
{
  "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

updateDraft

POST/v1/update-draft

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: updateDraft

Rewrite a DRAFT: omitted optional fields are removed, the art. 8 sentences stay. Refused once sent.

Parameters of updateDraft
NameInTypeRequired
mensajeBodystring 1–5000No
messageTemplateIdBodystring (uuid) | nullNo
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
providenciaBodystring 1–200Yes
providenciaFechaBodystringYes
templateBody"art8-personal"Yes
terminoDiasBodyinteger 1–365No
curl
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
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
{
  "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

updateParty

POST/v1/update-party

Firm memberPermission: case:write/v1 · bearer tokenMCP tool: updateParty

Replace a party's role, name and idNumber. Refused X_CASE_LOCKED once a notification left draft.

Parameters of updateParty
NameInTypeRequired
caseIdBodystring (uuid)No
idNumberBodystring 1–40No
nameBodystring 1–300Yes
partyIdBodystring (uuid)Yes
roleBody"demandante" | "demandado" | "apoderado" | "otro"Yes
curl
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
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
{
  "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

updatePartyAddress

POST/api/update-party-address

Firm memberPermission: case:writeMCP 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
NameInTypeRequired
addressIdBodystring (uuid)Yes
emailBodystring (email)Yes
evidenceDocumentIdsBodyarray of string 1–64 | string 1–4000No
obtainedOnBody"" | string | string | nullNo
orgIdBodystring (uuid)Yes
overrideReasonBody"" | string 1–2000 | nullNo
returnToBodystring 1–2048No
sourceBody"comunicaciones_previas" | "camara_de_comercio" | "rut" | "contrato" | "web_oficial" | "otro"Yes
sourceTextBodystring 1–2000Yes
curl
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
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
{
  "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