Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication
GET /_x/query/approval-settings
Firm member Permission: notification:read MCP tool: approvalSettings
Always required: sendNotification by anyone who cannot send (a paralegal, an unverified lawyer) files a request (awaiting_approval) a verified lawyer decides. noDecider: nobody but you could decide yours. Read-only.
Parameters of approvalSettings 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/_x/query/approval-settings?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/approval-settings?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/bounce-alerts
Firm member Permission: notification:read /v1 · bearer token MCP tool: bounceAlerts
Recipients bounced, failed or complained and not re-issued yet; the lawyer re-issues in the panel.
Parameters of bounceAlerts Name In Type Required notificationIdQuery string (uuid)No orgIdQuery string (uuid)Yes _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/bounce-alerts?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/bounce-alerts?orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"at": "<at>",
"caseId": "<caseId>",
"email": "<email>",
"id": "<id>",
"name": "<name>",
"notificationId": "<notificationId>",
"radicado": "<radicado>",
"recipientId": "<recipientId>",
"status": "bounced",
"switched": true
}
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/case-court-outcomes
Firm member Permission: notification:read /v1 · bearer token MCP tool: caseCourtOutcomes
The current court outcome per notification of a case.
Parameters of caseCourtOutcomes 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/case-court-outcomes?caseId=<caseId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/case-court-outcomes?caseId=<caseId>&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-memorials
Firm member Permission: memorial:read /v1 · bearer token MCP tool: caseMemorials
A case's memoriales with their hashes.
Parameters of caseMemorials Name In Type Required caseIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes _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-memorials?caseId=<caseId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/case-memorials?caseId=<caseId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"caseId": "<caseId>",
"createdAt": "<createdAt>",
"docxBytes": 1,
"docxSha256": "<docxSha256>",
"id": "<id>",
"keysetAt": "<keysetAt>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"pdfBytes": 1,
"pdfSha256": "<pdfSha256>"
}
]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-notifications
Firm member Permission: notification:read /v1 · bearer token MCP tool: caseNotifications
One case's notifications, newest first (up to 200), with their status and where the evidence stands.
Parameters of caseNotifications Name In Type Required caseIdQuery string (uuid)Yes limitQuery integer 1–200No 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-notifications?caseId=<caseId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/case-notifications?caseId=<caseId>&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-recipients
Firm member Permission: notification:read /v1 · bearer token MCP tool: caseRecipients
Recipients of a case's notifications with delivery, acuse and surtida (UTC).
Parameters of caseRecipients Name In Type Required caseIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes _firstQuery integer 1–1000page size; present, the response is the page envelope rather than the bare rows (1 to 1000) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/case-recipients?caseId=<caseId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/case-recipients?caseId=<caseId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy [
{
"acknowledgedAt": "<acknowledgedAt>",
"caseId": "<caseId>",
"conservativeSurtidaAt": "<conservativeSurtidaAt>",
"createdAt": "<createdAt>",
"email": "<email>",
"id": "<id>",
"name": "<name>",
"notificationCreatedAt": "<notificationCreatedAt>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"position": 1,
"status": "<status>",
"surtidaAt": "<surtidaAt>"
}
]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/credits-summary
Firm member Permission: notification:read MCP tool: creditsSummary
How many sends the caller's firm has left: `balance` is how many recipients can still be notified (one credit per recipient, consumed on send); `mode` is 'free' while Notificado sells nothing (never tell the lawyer to buy) or 'paid'; `trial` is { granted, remaining, expiresAt (UTC) } of the free sends, or null. For lawyers and paralegals; the credit statement is ledgerList (billing role). Read-only.
Parameters of creditsSummary 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/_x/query/credits-summary?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/credits-summary?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/get-notification
Firm member Permission: notification:read /v1 · bearer token MCP tool: getNotification
One notification: recipients, attachments with SHA-256 and the evidence timeline (UTC). Opens are indicio.
Parameters of getNotification Name In Type Required notificationIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/get-notification?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/get-notification?notificationId=<notificationId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"attachments": [
{
"bytes": 1,
"delivery": "attached",
"filename": "<filename>",
"id": "<id>",
"kind": "auto_admisorio",
"mime": "<mime>",
"pageCount": 1,
"position": 1,
"retainUntil": "<retainUntil>",
"sha256": "<sha256>"
}
],
"bodyText": "<bodyText>",
"caseId": "<caseId>",
"createdAt": "<createdAt>",
"emlSha256": "<emlSha256>",
"frozenAt": "<frozenAt>",
"id": "<id>",
"mensaje": "<mensaje>",
"orgId": "<orgId>",
"providencia": "<providencia>",
"providenciaFecha": "<providenciaFecha>",
"recipients": [
{
"delivered": true,
"email": "<email>",
"failure": {
"at": "<at>",
"code": "<code>",
"detail": "<detail>",
"kind": "rejected",
"refunded": true
},
"id": "<id>",
"messageId": "<messageId>",
"name": "<name>",
"provenance": {
"evidenceDocumentIds": [
null
],
"juramentoVersion": "<juramentoVersion>",
"overrideReason": "<overrideReason>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>",
"swornAt": "<swornAt>",
"swornBy": "<swornBy>"
},
"sendUnconfirmed": true,
"status": "queued"
}
],
"scheduledFor": "<scheduledFor>",
"sentAt": "<sentAt>",
"sentBy": "<sentBy>",
"signerId": "<signerId>",
"status": "draft",
"subject": "<subject>",
"template": "<template>",
"terminoDias": 1,
"tier": "standard",
"timeline": [
{
"hash": "<hash>",
"id": "<id>",
"indicio": true,
"linkedFile": "start",
"occurredAt": "<occurredAt>",
"openSignal": "likely_person",
"payload": {},
"recipientId": "<recipientId>",
"recordedAt": "<recordedAt>",
"seq": "<seq>",
"type": "<type>"
}
],
"timestampProviderIds": [
"<timestampProviderIds>"
],
"transportId": "<transportId>"
}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-send-confirmation
Firm member Permission: notification:read /v1 · bearer token MCP tool: getSendConfirmation
One send request: pending, confirmed or expired (after 24 h).
Parameters of getSendConfirmation Name In Type Required confirmationIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/get-send-confirmation?confirmationId=<confirmationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/get-send-confirmation?confirmationId=<confirmationId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"attachments": [
{
"bytes": 1,
"filename": "<filename>",
"sha256": "<sha256>"
}
],
"confirmedAt": "<confirmedAt>",
"confirmedBy": "<confirmedBy>",
"cost": {
"attachedBytes": 1,
"canPay": true,
"creditsPerRecipient": 1,
"linkedBytes": 1,
"linkedCreditsPerRecipient": 1,
"reason": "ok",
"recipients": 1,
"shortBy": 1,
"total": 1
},
"createdAt": "<createdAt>",
"currentSha256": "<currentSha256>",
"draftSha256": "<draftSha256>",
"expiresAt": "<expiresAt>",
"id": "<id>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"recipients": [
{
"email": "<email>",
"name": "<name>"
}
],
"requestedBy": "<requestedBy>",
"requestedWhen": "now",
"status": "pending",
"subject": "<subject>",
"tokenId": "<tokenId>",
"tokenName": "<tokenName>",
"tokenPrefix": "<tokenPrefix>",
"unchanged": true
}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/list-message-templates
Firm member Permission: notification:read /v1 · bearer token MCP tool: listMessageTemplates
The firm's message templates and merge fields; pass an id as messageTemplateId.
Parameters of listMessageTemplates Name In Type Required archivedQuery booleanNo orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/v1/list-message-templates?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/list-message-templates?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 /_x/query/list-pending-approvals
Firm member Permission: notification:read
listPendingApprovals
Parameters of listPendingApprovals 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/_x/query/list-pending-approvals?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/list-pending-approvals?orgId=<orgId>' , {
headers : { cookie : sessionCookie },
});
const result = await response.json();Example response 200 Copy [
null
]Errors
400 X_INPUT_INVALID or X_CURSOR_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 429 X_RATE_LIMITED — retry after Retry-After seconds GET /v1/list-pending-sends
Firm member Permission: notification:read /v1 · bearer token MCP tool: listPendingSends
Send requests still waiting for a lawyer to confirm, newest first.
Parameters of listPendingSends 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/list-pending-sends?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/list-pending-sends?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/memorial-readiness
Firm member Permission: memorial:read /v1 · bearer token MCP tool: memorialReadiness
Whether createMemorial can run now for a notification, and why not.
Parameters of memorialReadiness Name In Type Required notificationIdQuery 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/memorial-readiness?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/memorial-readiness?notificationId=<notificationId>&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 /_x/query/notification-approvals
Firm member Permission: notification:read
notificationApprovals
Parameters of notificationApprovals Name In Type Required notificationIdQuery 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/notification-approvals?notificationId=<notificationId>&orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/notification-approvals?notificationId=<notificationId>&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/notification-court-outcomes
Firm member Permission: notification:read /v1 · bearer token MCP tool: notificationCourtOutcomes
What the juzgado decided on one notification, newest first; the first row is current. Not evidence.
Parameters of notificationCourtOutcomes Name In Type Required notificationIdQuery 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/notification-court-outcomes?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/notification-court-outcomes?notificationId=<notificationId>&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/notification-list
Firm member Permission: notification:read /v1 · bearer token MCP tool: notificationList
Notifications, newest first; filter by q, status and from/to (Bogotá days); page with the last row's cursor.
Parameters of notificationList Name In Type Required cursorQuery string 1–64No fromQuery string 1–10No limitQuery integer 1–200No orgIdQuery string (uuid)Yes qQuery string 1–200No statusQuery "draft" | "awaiting_approval" | "scheduled" | "sent" | "delivered" | "acknowledged" | "bounced" | "failed"No toQuery string 1–10No _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/notification-list?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/notification-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/notification-memorials
Firm member Permission: memorial:read /v1 · bearer token MCP tool: notificationMemorials
A notification's memoriales with their hashes; poll it after createMemorial.
Parameters of notificationMemorials Name In Type Required limitQuery integer 1–200No notificationIdQuery 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/notification-memorials?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/notification-memorials?notificationId=<notificationId>&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/notification-trace
Firm member Permission: notification:read /v1 · bearer token MCP tool: notificationTrace
One notification’s evidence events in chain order (UTC). Opens are indicio.
Parameters of notificationTrace Name In Type Required notificationIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/notification-trace?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/notification-trace?notificationId=<notificationId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"events": [
{
"hash": "<hash>",
"ipAddress": "<ipAddress>",
"isIndicio": true,
"linkedFile": "start",
"occurredAt": "<occurredAt>",
"recipient": "<recipient>",
"remoteMtaIp": "<remoteMtaIp>",
"seq": "<seq>",
"smtpResponse": "<smtpResponse>",
"type": "<type>",
"userAgent": "<userAgent>"
}
],
"id": "<id>",
"orgId": "<orgId>"
}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 /_x/query/notifications-per-week
Firm member Permission: notification:read MCP tool: notificationsPerWeek
The caller's firm's notifications per week for the last `weeks` weeks (default 12), oldest first, weeks starting Monday 00:00 America/Bogota (weekStart, YYYY-MM-DD; the last one is the current week, still filling): sent, delivered (every recipient reached the receiving server and none bounced), constancia (a constancia was issued) and bounced (a recipient bounced or was refused; a complaint counts as delivered). Counts only. Read-only.
Parameters of notificationsPerWeek Name In Type Required orgIdQuery string (uuid)Yes weeksQuery integer 1–52No _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/notifications-per-week?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/notifications-per-week?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 /_x/query/open-batch-requests
Firm member Permission: notification:read
openBatchRequests
Parameters of openBatchRequests 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/_x/query/open-batch-requests?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/open-batch-requests?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 /_x/query/recent-approval-decisions
Firm member Permission: notification:read
recentApprovalDecisions
Parameters of recentApprovalDecisions Name In Type Required limitQuery integer 1–100No orgIdQuery string (uuid)Yes _firstQuery integer 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500) No _afterQuery stringthe nextCursor a previous page answered; needs _first No
curl Copy curl 'https://www.notificado.co/_x/query/recent-approval-decisions?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/recent-approval-decisions?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/recent-notifications
Firm member Permission: notification:read /v1 · bearer token MCP tool: recentNotifications
The 10 newest notifications and where their evidence stands.
Parameters of recentNotifications Name In Type Required limitQuery integer 1–10No 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/recent-notifications?orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/recent-notifications?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/recent-sends-to
Firm member Permission: notification:read /v1 · bearer token MCP tool: recentSendsTo
Earlier sends to these addresses in this case, or, without caseId, in the firm’s correos con constancia (default 30 days). A warning for the lawyer, never a block.
Parameters of recentSendsTo Name In Type Required caseIdQuery string (uuid) | nullNo daysQuery integer 1–365No emailsQuery array of string (email)Yes excludeQuery string (uuid)No 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/recent-sends-to?emails=&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/recent-sends-to?emails=&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 /_x/query/requestable-drafts
Firm member Permission: notification:read
requestableDrafts
Parameters of requestableDrafts 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/_x/query/requestable-drafts?orgId=<orgId>' \
-b cookies.txtTypeScript Copy const response = await fetch('https://www.notificado.co/_x/query/requestable-drafts?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/send-cost
Firm member Permission: notification:read /v1 · bearer token MCP tool: sendCost
What a send costs (per recipient: 1 credit + one per 10 MB linked; the total) and whether the firm can pay it now: canPay, shortBy, reason.
Parameters of sendCost Name In Type Required notificationIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/send-cost?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/send-cost?notificationId=<notificationId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"attachedBytes": 1,
"canPay": true,
"creditsPerRecipient": 1,
"id": "<id>",
"linkedBytes": 1,
"linkedCreditsPerRecipient": 1,
"orgId": "<orgId>",
"paidAvailable": 1,
"reason": "ok",
"recipients": 1,
"shortBy": 1,
"total": 1,
"trialAvailable": 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/send-timing
Firm member Permission: notification:read /v1 · bearer token MCP tool: sendTiming
What sending a draft NOW would read as: the instant, the next opening of a business day (nextOpen), whether two readings of the send date differ (divergent) and each date, the hold policy, whether scheduling is on. Dates are estimates; the judge decides.
Parameters of sendTiming Name In Type Required notificationIdQuery string (uuid)Yes orgIdQuery string (uuid)Yes
curl Copy curl 'https://www.notificado.co/v1/send-timing?notificationId=<notificationId>&orgId=<orgId>' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" TypeScript Copy const response = await fetch('https://www.notificado.co/v1/send-timing?notificationId=<notificationId>&orgId=<orgId>' , {
headers : { authorization : `Bearer ${token}` },
});
const result = await response.json();Example response 200 Copy {
"calendarVersion": "<calendarVersion>",
"conservative": {
"deemedSentOn": "<deemedSentOn>",
"surtidaOn": "<surtidaOn>"
},
"divergent": true,
"holdMs": 1,
"id": "<id>",
"maxAutoHoldMs": 1,
"nextOpen": "<nextOpen>",
"now": "<now>",
"orgId": "<orgId>",
"policy": "opt_in",
"reason": "in_hours",
"scheduling": "off",
"sendWindowVersion": "<sendWindowVersion>",
"standard": {
"surtidaOn": "<surtidaOn>"
}
}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 POST /api/add-recipient
Firm member Permission: or(and(notification:send, notification:send), and(and(approval:request, not(notification:send)), approval:request))
addRecipient
Parameters of addRecipient Name In Type Required emailBody string (email)Yes evidenceDocumentIdsBody array of string (uuid)Yes juramentoBody booleanYes juramentoTextBody string 1–4000No nameBody string 1–300Yes notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes overrideReasonBody string 1–2000 | nullNo saveToPartyIdBody string (uuid) | nullNo 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/add-recipient' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"email": "<email>",
"evidenceDocumentIds": [],
"juramento": true,
"name": "<name>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"source": "comunicaciones_previas",
"sourceText": "<sourceText>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/add-recipient' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"email" : "<email>" ,
"evidenceDocumentIds" : [],
"juramento" : true ,
"name" : "<name>" ,
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>" ,
"source" : "comunicaciones_previas" ,
"sourceText" : "<sourceText>"
}),
});
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 /api/approve-send
Firm member Permission: and(notification:send, notification:send)
approveSend
Parameters of approveSend Name In Type Required approvalIdBody string (uuid)Yes orgIdBody string (uuid)Yes swornRecipientIdsBody string (uuid) | array of string (uuid)No whenBody "now" | "next_business_open"No
curl Copy curl -X POST 'https://www.notificado.co/api/approve-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"approvalId":"<approvalId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/approve-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"approvalId" : "<approvalId>" ,
"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 /api/archive-message-template
Firm member Permission: notification:send
archiveMessageTemplate
Parameters of archiveMessageTemplate Name In Type Required archivedBody boolean | "true" | "false"Yes orgIdBody string (uuid)Yes templateIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/archive-message-template' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"archived":true,"orgId":"<orgId>","templateId":"<templateId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/archive-message-template' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"archived" : true ,
"orgId" : "<orgId>" ,
"templateId" : "<templateId>"
}),
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "2026-09-25T15:00:00Z",
"body": "<body>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"name": "<name>",
"seedKey": "<seedKey>",
"subject": "<subject>",
"updatedAt": "2026-09-25T15:00:00Z"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/cancel-scheduled-send
Firm member Permission: and(notification:send, notification:send)
cancelScheduledSend
Parameters of cancelScheduledSend Name In Type Required notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/cancel-scheduled-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"notificationId":"<notificationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/cancel-scheduled-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
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 /api/confirm-batch-send
Firm member Permission: and(notification:send, notification:send)
confirmBatchSend
Parameters of confirmBatchSend Name In Type Required idempotencyKeyBody string 8–80Yes importIdBody string (uuid)Yes orgIdBody string (uuid)Yes rowIdsBody string (uuid) | array of string (uuid)Yes swornRowIdsBody string (uuid) | array of string (uuid)No
curl Copy curl -X POST 'https://www.notificado.co/api/confirm-batch-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"idempotencyKey": "<idempotencyKey>",
"importId": "<importId>",
"orgId": "<orgId>",
"rowIds": "<rowIds>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/confirm-batch-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"idempotencyKey" : "<idempotencyKey>" ,
"importId" : "<importId>" ,
"orgId" : "<orgId>" ,
"rowIds" : "<rowIds>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"failedCount": -9007199254740991,
"finishedAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"importId": "<importId>",
"juramentoVersion": "<juramentoVersion>",
"note": "<note>",
"requestedBy": "<requestedBy>",
"scheduledCount": -9007199254740991,
"sentCount": -9007199254740991,
"status": "requested",
"swornAt": "2026-09-25T15:00:00Z",
"swornBy": "<swornBy>",
"total": -9007199254740991
}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/confirm-send
Firm member Permission: and(notification:send, notification:send)
confirmSend
Parameters of confirmSend Name In Type Required confirmationIdBody string (uuid)Yes draftSha256Body string 64–64No orgIdBody string (uuid)Yes returnToBody string 1–2048No swornRecipientIdsBody string (uuid) | array of string (uuid)No whenBody "now" | "next_business_open"No
curl Copy curl -X POST 'https://www.notificado.co/api/confirm-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"confirmationId":"<confirmationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/confirm-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"confirmationId" : "<confirmationId>" ,
"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/create-memorial
Firm member Permission: memorial:write /v1 · bearer token Idempotency-Key MCP tool: createMemorial
Generate the memorial DRAFT (DOCX and PDF) for the juzgado; the lawyer signs and files it.
Parameters of createMemorial Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/create-memorial' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"notificationId":"<notificationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/create-memorial' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"charge": "free",
"jobId": "<jobId>",
"memorialId": "<memorialId>",
"templateId": "<templateId>"
}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-message-template
Firm member Permission: notification:send /v1 · bearer token Idempotency-Key MCP tool: createMessageTemplate
Create a template with merge fields. Never write the art. 8 statements: they are appended.
Parameters of createMessageTemplate Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No bodyBody string 1–20000Yes especialidadBody string 1–60 | nullNo nameBody string 1–120Yes orgIdBody string (uuid)Yes subjectBody string 1–998Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/create-message-template' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{
"body": "<body>",
"name": "<name>",
"orgId": "<orgId>",
"subject": "<subject>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/create-message-template' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"body" : "<body>" ,
"name" : "<name>" ,
"orgId" : "<orgId>" ,
"subject" : "<subject>"
}),
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "2026-09-25T15:00:00Z",
"body": "<body>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"name": "<name>",
"seedKey": "<seedKey>",
"subject": "<subject>",
"updatedAt": "2026-09-25T15:00:00Z"
}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/download-memorial
Firm member Permission: memorial:read /v1 · bearer token MCP tool: downloadMemorial
A memorial as docx or pdf bytes (base64), re-hashed first. Recorded.
Parameters of downloadMemorial Name In Type Required formatBody "docx" | "pdf"Yes memorialIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/download-memorial' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"format":"docx","memorialId":"<memorialId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/download-memorial' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"format" : "docx" ,
"memorialId" : "<memorialId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"bytes": 0,
"contentBase64": "<contentBase64>",
"contentType": "<contentType>",
"filename": "<filename>",
"format": "docx",
"memorialId": "<memorialId>",
"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/export-events
Firm member Permission: notification:read /v1 · bearer token MCP tool: exportEvents
Excel workbook (base64) of evidence events, a line each, exportNotifications' filters and cursor.
Parameters of exportEvents Name In Type Required cursorBody string 1–1024No fromBody string 1–10No orgIdBody string (uuid)Yes qBody string 1–200No statusBody "draft" | "awaiting_approval" | "scheduled" | "sent" | "delivered" | "acknowledged" | "bounced" | "failed"No toBody string 1–10No
curl Copy curl -X POST 'https://www.notificado.co/v1/export-events' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/export-events' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"filename": "<filename>",
"nextCursor": "<nextCursor>",
"rows": -9007199254740991,
"truncated": true,
"xlsx": "<xlsx>"
}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/export-notifications
Firm member Permission: notification:read /v1 · bearer token MCP tool: exportNotifications
Excel workbook (base64) of notifications, a line per recipient, notificationList's filters; 5,000 a call, then cursor.
Parameters of exportNotifications Name In Type Required cursorBody string 1–1024No fromBody string 1–10No orgIdBody string (uuid)Yes qBody string 1–200No statusBody "draft" | "awaiting_approval" | "scheduled" | "sent" | "delivered" | "acknowledged" | "bounced" | "failed"No toBody string 1–10No
curl Copy curl -X POST 'https://www.notificado.co/v1/export-notifications' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{"orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/export-notifications' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"filename": "<filename>",
"nextCursor": "<nextCursor>",
"rows": -9007199254740991,
"truncated": true,
"xlsx": "<xlsx>"
}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/reject-send
Firm member Permission: and(notification:send, notification:send)
rejectSend
Parameters of rejectSend Name In Type Required approvalIdBody string (uuid)Yes orgIdBody string (uuid)Yes reasonBody string 1–1000Yes
curl Copy curl -X POST 'https://www.notificado.co/api/reject-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"approvalId":"<approvalId>","orgId":"<orgId>","reason":"<reason>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/reject-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"approvalId" : "<approvalId>" ,
"orgId" : "<orgId>" ,
"reason" : "<reason>"
}),
});
const result = await response.json();Example response 200 Copy {
"approvedBy": "<approvedBy>",
"createdAt": "2026-09-25T15:00:00Z",
"decidedAt": "2026-09-25T15:00:00Z",
"draftedBy": "<draftedBy>",
"id": "<id>",
"note": "<note>",
"notificationId": "<notificationId>",
"rejectReason": "<rejectReason>",
"rejectedBy": "<rejectedBy>",
"requestedVia": "panel",
"requestedWhen": "now",
"status": "pending",
"withdrawnBy": "<withdrawnBy>"
}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/report-court-outcome
Firm member Permission: notification:send /v1 · bearer token Idempotency-Key MCP tool: reportCourtOutcome
Report what the juzgado decided on a SENT notification; a later report corrects it. Not evidence.
Parameters of reportCourtOutcome Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No attachmentUploadIdBody "" | string (uuid)No courtBody string 1–300No decidedOnBody string 8–10Yes notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes outcomeBody "accepted" | "rejected" | "nulidad_requested"Yes reasonBody string 1–2000No
curl Copy curl -X POST 'https://www.notificado.co/v1/report-court-outcome' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{
"decidedOn": "<decidedOn>",
"notificationId": "<notificationId>",
"orgId": "<orgId>",
"outcome": "accepted"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/report-court-outcome' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"decidedOn" : "<decidedOn>" ,
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>" ,
"outcome" : "accepted"
}),
});
const result = await response.json();Example response 200 Copy {
"court": "<court>",
"createdAt": "2026-09-25T15:00:00Z",
"decidedOn": "<decidedOn>",
"id": "<id>",
"notificationId": "<notificationId>",
"outcome": "accepted",
"reason": "<reason>",
"source": "customer"
}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/request-batch-send
Firm member Permission: and(and(approval:request, not(notification:send)), approval:request)
requestBatchSend
Parameters of requestBatchSend Name In Type Required importIdBody string (uuid)Yes noteBody string 1–1000No orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/request-batch-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"importId":"<importId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/request-batch-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"importId" : "<importId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"failedCount": -9007199254740991,
"finishedAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"importId": "<importId>",
"juramentoVersion": "<juramentoVersion>",
"note": "<note>",
"requestedBy": "<requestedBy>",
"scheduledCount": -9007199254740991,
"sentCount": -9007199254740991,
"status": "requested",
"swornAt": "2026-09-25T15:00:00Z",
"swornBy": "<swornBy>",
"total": -9007199254740991
}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/request-send-approval
Firm member Permission: and(approval:request, not(notification:send))
requestSendApproval
Parameters of requestSendApproval Name In Type Required noteBody string 1–1000No notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes whenBody "now" | "next_business_open"No
curl Copy curl -X POST 'https://www.notificado.co/api/request-send-approval' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"notificationId":"<notificationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/request-send-approval' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"notificationId" : "<notificationId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"approvalId": "<approvalId>",
"approvalUrl": "<approvalUrl>",
"noDecider": true,
"notificationId": "<notificationId>",
"status": "awaiting_approval"
}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/send-notification
Firm member Permission: or(and(approval:request, not(notification:send)), notification:send) /v1 · bearer token Idempotency-Key MCP tool: sendNotification
REQUEST a send; REQUIRES HUMAN CONFIRMATION: verified lawyer: awaiting_confirmation + confirmUrl; others (unverified, paralegal): awaiting_approval + approvalUrl. Once; never to test. Optional when (now | next_business_open) is a PROPOSAL shown to the lawyer: nothing is sent or scheduled by it.
Parameters of sendNotification Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No confirmBody trueYes noteBody string 1–1000No notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes swornRecipientIdsBody string (uuid) | array of string (uuid)No whenBody "now" | "next_business_open"No
curl Copy curl -X POST 'https://www.notificado.co/v1/send-notification' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"confirm":true,"notificationId":"<notificationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/send-notification' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID() },
body : JSON.stringify({
"confirm" : true ,
"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 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/send-scheduled-now
Firm member Permission: and(notification:send, notification:send) Idempotency-Key
sendScheduledNow
Parameters of sendScheduledNow Name In Type Required Idempotency-KeyHeader string ≤ 255Replays the first response for a repeated key. No notificationIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/send-scheduled-now' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H "idempotency-key: $(uuidgen)" \
-H 'content-type: application/json' \
-d '{"notificationId":"<notificationId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/send-scheduled-now' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , 'idempotency-key' : crypto.randomUUID(), origin : 'https://www.notificado.co' , cookie : sessionCookie },
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 409 X_IDEMPOTENCY_CONFLICT 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/switch-channel
Firm member Permission: and(notification:send, notification:send)
switchChannel
Parameters of switchChannel Name In Type Required emailBody string 1–320Yes evidenceDocumentIdsBody array of string 1–64No juramentoBody boolean | string 0–8No nameBody string 0–300No notificationIdBody string 1–64No orgIdBody string 1–64Yes overrideReasonBody string 0–2000 | nullNo recipientIdBody string 1–64Yes sourceBody string 1–64Yes sourceTextBody string 1–2000Yes whenBody string 0–32No
curl Copy curl -X POST 'https://www.notificado.co/api/switch-channel' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{
"email": "<email>",
"orgId": "<orgId>",
"recipientId": "<recipientId>",
"source": "<source>",
"sourceText": "<sourceText>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/switch-channel' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"email" : "<email>" ,
"orgId" : "<orgId>" ,
"recipientId" : "<recipientId>" ,
"source" : "<source>" ,
"sourceText" : "<sourceText>"
}),
});
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-message-template
Firm member Permission: notification:send /v1 · bearer token MCP tool: updateMessageTemplate
Rewrite a template; drafts already composed keep their text.
Parameters of updateMessageTemplate Name In Type Required bodyBody string 1–20000Yes especialidadBody string 1–60 | nullNo nameBody string 1–120Yes orgIdBody string (uuid)Yes subjectBody string 1–998Yes templateIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/v1/update-message-template' \
-H "authorization: Bearer $NOTIFICADO_TOKEN" \
-H 'content-type: application/json' \
-d '{
"body": "<body>",
"name": "<name>",
"orgId": "<orgId>",
"subject": "<subject>",
"templateId": "<templateId>"
}' TypeScript Copy const response = await fetch('https://www.notificado.co/v1/update-message-template' , {
method : 'POST' ,
headers : { authorization : `Bearer ${token}` , 'content-type' : 'application/json' },
body : JSON.stringify({
"body" : "<body>" ,
"name" : "<name>" ,
"orgId" : "<orgId>" ,
"subject" : "<subject>" ,
"templateId" : "<templateId>"
}),
});
const result = await response.json();Example response 200 Copy {
"archivedAt": "2026-09-25T15:00:00Z",
"body": "<body>",
"createdAt": "2026-09-25T15:00:00Z",
"especialidad": "<especialidad>",
"id": "<id>",
"name": "<name>",
"seedKey": "<seedKey>",
"subject": "<subject>",
"updatedAt": "2026-09-25T15:00:00Z"
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/withdraw-batch-send
Firm member Permission: or(and(and(approval:request, not(notification:send)), approval:request), and(notification:send, notification:send))
withdrawBatchSend
Parameters of withdrawBatchSend Name In Type Required importIdBody string (uuid)Yes orgIdBody string (uuid)Yes sendIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/withdraw-batch-send' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"importId":"<importId>","orgId":"<orgId>","sendId":"<sendId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/withdraw-batch-send' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"importId" : "<importId>" ,
"orgId" : "<orgId>" ,
"sendId" : "<sendId>"
}),
});
const result = await response.json();Example response 200 Copy {
"createdAt": "2026-09-25T15:00:00Z",
"failedCount": -9007199254740991,
"finishedAt": "2026-09-25T15:00:00Z",
"id": "<id>",
"importId": "<importId>",
"juramentoVersion": "<juramentoVersion>",
"note": "<note>",
"requestedBy": "<requestedBy>",
"scheduledCount": -9007199254740991,
"sentCount": -9007199254740991,
"status": "requested",
"swornAt": "2026-09-25T15:00:00Z",
"swornBy": "<swornBy>",
"total": -9007199254740991
}Errors
400 X_INPUT_INVALID 401 X_UNAUTHENTICATED — no credential, or one that did not resolve 403 policy denied 422 X_BODY_INVALID 429 X_RATE_LIMITED — retry after Retry-After seconds POST /api/withdraw-send-approval
Firm member Permission: notification:read
withdrawSendApproval
Parameters of withdrawSendApproval Name In Type Required approvalIdBody string (uuid)Yes orgIdBody string (uuid)Yes
curl Copy curl -X POST 'https://www.notificado.co/api/withdraw-send-approval' \
-b cookies.txt \
-H 'origin: https://www.notificado.co' \
-H 'content-type: application/json' \
-d '{"approvalId":"<approvalId>","orgId":"<orgId>"}' TypeScript Copy const response = await fetch('https://www.notificado.co/api/withdraw-send-approval' , {
method : 'POST' ,
headers : { 'content-type' : 'application/json' , origin : 'https://www.notificado.co' , cookie : sessionCookie },
body : JSON.stringify({
"approvalId" : "<approvalId>" ,
"orgId" : "<orgId>"
}),
});
const result = await response.json();Example response 200 Copy {
"approvedBy": "<approvedBy>",
"createdAt": "2026-09-25T15:00:00Z",
"decidedAt": "2026-09-25T15:00:00Z",
"draftedBy": "<draftedBy>",
"id": "<id>",
"note": "<note>",
"notificationId": "<notificationId>",
"rejectReason": "<rejectReason>",
"rejectedBy": "<rejectedBy>",
"requestedVia": "panel",
"requestedWhen": "now",
"status": "pending",
"withdrawnBy": "<withdrawnBy>"
}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