Skip to content

Notifications

47 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

approvalSettings

GET/_x/query/approval-settings

Firm memberPermission: notification:readMCP 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
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/_x/query/approval-settings?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

bounceAlerts

GET/v1/bounce-alerts

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: bounceAlerts

Recipients bounced, failed or complained and not re-issued yet; the lawyer re-issues in the panel.

Parameters of bounceAlerts
NameInTypeRequired
notificationIdQuerystring (uuid)No
orgIdQuerystring (uuid)Yes
_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/bounce-alerts?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  {
    "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

caseCourtOutcomes

GET/v1/case-court-outcomes

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: caseCourtOutcomes

The current court outcome per notification of a case.

Parameters of caseCourtOutcomes
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/case-court-outcomes?caseId=<caseId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

caseMemorials

GET/v1/case-memorials

Firm memberPermission: memorial:read/v1 · bearer tokenMCP tool: caseMemorials

A case's memoriales with their hashes.

Parameters of caseMemorials
NameInTypeRequired
caseIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
_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-memorials?caseId=<caseId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  {
    "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

caseNotifications

GET/v1/case-notifications

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: caseNotifications

One case's notifications, newest first (up to 200), with their status and where the evidence stands.

Parameters of caseNotifications
NameInTypeRequired
caseIdQuerystring (uuid)Yes
limitQueryinteger 1–200No
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-notifications?caseId=<caseId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

caseRecipients

GET/v1/case-recipients

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: caseRecipients

Recipients of a case's notifications with delivery, acuse and surtida (UTC).

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

creditsSummary

GET/_x/query/credits-summary

Firm memberPermission: notification:readMCP 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
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/_x/query/credits-summary?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

getNotification

GET/v1/get-notification

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: getNotification

One notification: recipients, attachments with SHA-256 and the evidence timeline (UTC). Opens are indicio.

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

getSendConfirmation

GET/v1/get-send-confirmation

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: getSendConfirmation

One send request: pending, confirmed or expired (after 24 h).

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

listMessageTemplates

GET/v1/list-message-templates

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: listMessageTemplates

The firm's message templates and merge fields; pass an id as messageTemplateId.

Parameters of listMessageTemplates
NameInTypeRequired
archivedQuerybooleanNo
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/list-message-templates?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

listPendingApprovals

GET/_x/query/list-pending-approvals

Firm memberPermission: notification:read

listPendingApprovals

Parameters of listPendingApprovals
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/_x/query/list-pending-approvals?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

listPendingSends

GET/v1/list-pending-sends

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: listPendingSends

Send requests still waiting for a lawyer to confirm, newest first.

Parameters of listPendingSends
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/list-pending-sends?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

memorialReadiness

GET/v1/memorial-readiness

Firm memberPermission: memorial:read/v1 · bearer tokenMCP tool: memorialReadiness

Whether createMemorial can run now for a notification, and why not.

Parameters of memorialReadiness
NameInTypeRequired
notificationIdQuerystring (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/memorial-readiness?notificationId=<notificationId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

notificationApprovals

GET/_x/query/notification-approvals

Firm memberPermission: notification:read

notificationApprovals

Parameters of notificationApprovals
NameInTypeRequired
notificationIdQuerystring (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/notification-approvals?notificationId=<notificationId>&orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

notificationCourtOutcomes

GET/v1/notification-court-outcomes

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: notificationCourtOutcomes

What the juzgado decided on one notification, newest first; the first row is current. Not evidence.

Parameters of notificationCourtOutcomes
NameInTypeRequired
notificationIdQuerystring (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/notification-court-outcomes?notificationId=<notificationId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

notificationList

GET/v1/notification-list

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: notificationList

Notifications, newest first; filter by q, status and from/to (Bogotá days); page with the last row's cursor.

Parameters of notificationList
NameInTypeRequired
cursorQuerystring 1–64No
fromQuerystring 1–10No
limitQueryinteger 1–200No
orgIdQuerystring (uuid)Yes
qQuerystring 1–200No
statusQuery"draft" | "awaiting_approval" | "scheduled" | "sent" | "delivered" | "acknowledged" | "bounced" | "failed"No
toQuerystring 1–10No
_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/notification-list?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

notificationMemorials

GET/v1/notification-memorials

Firm memberPermission: memorial:read/v1 · bearer tokenMCP tool: notificationMemorials

A notification's memoriales with their hashes; poll it after createMemorial.

Parameters of notificationMemorials
NameInTypeRequired
limitQueryinteger 1–200No
notificationIdQuerystring (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/notification-memorials?notificationId=<notificationId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

notificationTrace

GET/v1/notification-trace

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: notificationTrace

One notification’s evidence events in chain order (UTC). Opens are indicio.

Parameters of notificationTrace
NameInTypeRequired
notificationIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
curl
curl 'https://www.notificado.co/v1/notification-trace?notificationId=<notificationId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
{
  "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

notificationsPerWeek

GET/_x/query/notifications-per-week

Firm memberPermission: notification:readMCP 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
NameInTypeRequired
orgIdQuerystring (uuid)Yes
weeksQueryinteger 1–52No
_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/notifications-per-week?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

openBatchRequests

GET/_x/query/open-batch-requests

Firm memberPermission: notification:read

openBatchRequests

Parameters of openBatchRequests
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/_x/query/open-batch-requests?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

recentApprovalDecisions

GET/_x/query/recent-approval-decisions

Firm memberPermission: notification:read

recentApprovalDecisions

Parameters of recentApprovalDecisions
NameInTypeRequired
limitQueryinteger 1–100No
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/recent-approval-decisions?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

recentNotifications

GET/v1/recent-notifications

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: recentNotifications

The 10 newest notifications and where their evidence stands.

Parameters of recentNotifications
NameInTypeRequired
limitQueryinteger 1–10No
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/recent-notifications?orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

recentSendsTo

GET/v1/recent-sends-to

Firm memberPermission: notification:read/v1 · bearer tokenMCP 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
NameInTypeRequired
caseIdQuerystring (uuid) | nullNo
daysQueryinteger 1–365No
emailsQueryarray of string (email)Yes
excludeQuerystring (uuid)No
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/recent-sends-to?emails=&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
[
  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

requestableDrafts

GET/_x/query/requestable-drafts

Firm memberPermission: notification:read

requestableDrafts

Parameters of requestableDrafts
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/_x/query/requestable-drafts?orgId=<orgId>' \
  -b cookies.txt
TypeScript
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
[
  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

sendCost

GET/v1/send-cost

Firm memberPermission: notification:read/v1 · bearer tokenMCP 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
NameInTypeRequired
notificationIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
curl
curl 'https://www.notificado.co/v1/send-cost?notificationId=<notificationId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
{
  "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

sendTiming

GET/v1/send-timing

Firm memberPermission: notification:read/v1 · bearer tokenMCP 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
NameInTypeRequired
notificationIdQuerystring (uuid)Yes
orgIdQuerystring (uuid)Yes
curl
curl 'https://www.notificado.co/v1/send-timing?notificationId=<notificationId>&orgId=<orgId>' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN"
TypeScript
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
{
  "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

addRecipient

POST/api/add-recipient

Firm memberPermission: or(and(notification:send, notification:send), and(and(approval:request, not(notification:send)), approval:request))

addRecipient

Parameters of addRecipient
NameInTypeRequired
emailBodystring (email)Yes
evidenceDocumentIdsBodyarray of string (uuid)Yes
juramentoBodybooleanYes
juramentoTextBodystring 1–4000No
nameBodystring 1–300Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
overrideReasonBodystring 1–2000 | nullNo
saveToPartyIdBodystring (uuid) | nullNo
sourceBody"comunicaciones_previas" | "camara_de_comercio" | "rut" | "contrato" | "web_oficial" | "otro"Yes
sourceTextBodystring 1–2000Yes
curl
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
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
{
  "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

approveSend

POST/api/approve-send

Firm memberPermission: and(notification:send, notification:send)

approveSend

Parameters of approveSend
NameInTypeRequired
approvalIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
swornRecipientIdsBodystring (uuid) | array of string (uuid)No
whenBody"now" | "next_business_open"No
curl
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
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
{
  "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

archiveMessageTemplate

POST/api/archive-message-template

Firm memberPermission: notification:send

archiveMessageTemplate

Parameters of archiveMessageTemplate
NameInTypeRequired
archivedBodyboolean | "true" | "false"Yes
orgIdBodystring (uuid)Yes
templateIdBodystring (uuid)Yes
curl
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
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
{
  "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

cancelScheduledSend

POST/api/cancel-scheduled-send

Firm memberPermission: and(notification:send, notification:send)

cancelScheduledSend

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

confirmBatchSend

POST/api/confirm-batch-send

Firm memberPermission: and(notification:send, notification:send)

confirmBatchSend

Parameters of confirmBatchSend
NameInTypeRequired
idempotencyKeyBodystring 8–80Yes
importIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
rowIdsBodystring (uuid) | array of string (uuid)Yes
swornRowIdsBodystring (uuid) | array of string (uuid)No
curl
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
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
{
  "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

confirmSend

POST/api/confirm-send

Firm memberPermission: and(notification:send, notification:send)

confirmSend

Parameters of confirmSend
NameInTypeRequired
confirmationIdBodystring (uuid)Yes
draftSha256Bodystring 64–64No
orgIdBodystring (uuid)Yes
returnToBodystring 1–2048No
swornRecipientIdsBodystring (uuid) | array of string (uuid)No
whenBody"now" | "next_business_open"No
curl
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
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
{
  "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

createMemorial

POST/v1/create-memorial

Firm memberPermission: memorial:write/v1 · bearer tokenIdempotency-KeyMCP tool: createMemorial

Generate the memorial DRAFT (DOCX and PDF) for the juzgado; the lawyer signs and files it.

Parameters of createMemorial
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

createMessageTemplate

POST/v1/create-message-template

Firm memberPermission: notification:send/v1 · bearer tokenIdempotency-KeyMCP tool: createMessageTemplate

Create a template with merge fields. Never write the art. 8 statements: they are appended.

Parameters of createMessageTemplate
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
bodyBodystring 1–20000Yes
especialidadBodystring 1–60 | nullNo
nameBodystring 1–120Yes
orgIdBodystring (uuid)Yes
subjectBodystring 1–998Yes
curl
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
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
{
  "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

downloadMemorial

POST/v1/download-memorial

Firm memberPermission: memorial:read/v1 · bearer tokenMCP tool: downloadMemorial

A memorial as docx or pdf bytes (base64), re-hashed first. Recorded.

Parameters of downloadMemorial
NameInTypeRequired
formatBody"docx" | "pdf"Yes
memorialIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

exportEvents

POST/v1/export-events

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: exportEvents

Excel workbook (base64) of evidence events, a line each, exportNotifications' filters and cursor.

Parameters of exportEvents
NameInTypeRequired
cursorBodystring 1–1024No
fromBodystring 1–10No
orgIdBodystring (uuid)Yes
qBodystring 1–200No
statusBody"draft" | "awaiting_approval" | "scheduled" | "sent" | "delivered" | "acknowledged" | "bounced" | "failed"No
toBodystring 1–10No
curl
curl -X POST 'https://www.notificado.co/v1/export-events' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>"}'
TypeScript
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
{
  "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

exportNotifications

POST/v1/export-notifications

Firm memberPermission: notification:read/v1 · bearer tokenMCP tool: exportNotifications

Excel workbook (base64) of notifications, a line per recipient, notificationList's filters; 5,000 a call, then cursor.

Parameters of exportNotifications
NameInTypeRequired
cursorBodystring 1–1024No
fromBodystring 1–10No
orgIdBodystring (uuid)Yes
qBodystring 1–200No
statusBody"draft" | "awaiting_approval" | "scheduled" | "sent" | "delivered" | "acknowledged" | "bounced" | "failed"No
toBodystring 1–10No
curl
curl -X POST 'https://www.notificado.co/v1/export-notifications' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"orgId":"<orgId>"}'
TypeScript
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
{
  "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

rejectSend

POST/api/reject-send

Firm memberPermission: and(notification:send, notification:send)

rejectSend

Parameters of rejectSend
NameInTypeRequired
approvalIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
reasonBodystring 1–1000Yes
curl
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
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
{
  "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

reportCourtOutcome

POST/v1/report-court-outcome

Firm memberPermission: notification:send/v1 · bearer tokenIdempotency-KeyMCP tool: reportCourtOutcome

Report what the juzgado decided on a SENT notification; a later report corrects it. Not evidence.

Parameters of reportCourtOutcome
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
attachmentUploadIdBody"" | string (uuid)No
courtBodystring 1–300No
decidedOnBodystring 8–10Yes
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
outcomeBody"accepted" | "rejected" | "nulidad_requested"Yes
reasonBodystring 1–2000No
curl
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
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
{
  "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

requestBatchSend

POST/api/request-batch-send

Firm memberPermission: and(and(approval:request, not(notification:send)), approval:request)

requestBatchSend

Parameters of requestBatchSend
NameInTypeRequired
importIdBodystring (uuid)Yes
noteBodystring 1–1000No
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

requestSendApproval

POST/api/request-send-approval

Firm memberPermission: and(approval:request, not(notification:send))

requestSendApproval

Parameters of requestSendApproval
NameInTypeRequired
noteBodystring 1–1000No
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
whenBody"now" | "next_business_open"No
curl
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
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
{
  "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

sendNotification

POST/v1/send-notification

Firm memberPermission: or(and(approval:request, not(notification:send)), notification:send)/v1 · bearer tokenIdempotency-KeyMCP 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
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
confirmBodytrueYes
noteBodystring 1–1000No
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
swornRecipientIdsBodystring (uuid) | array of string (uuid)No
whenBody"now" | "next_business_open"No
curl
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
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
{
  "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

sendScheduledNow

POST/api/send-scheduled-now

Firm memberPermission: and(notification:send, notification:send)Idempotency-Key

sendScheduledNow

Parameters of sendScheduledNow
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
notificationIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
curl
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
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
{
  "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

switchChannel

POST/api/switch-channel

Firm memberPermission: and(notification:send, notification:send)

switchChannel

Parameters of switchChannel
NameInTypeRequired
emailBodystring 1–320Yes
evidenceDocumentIdsBodyarray of string 1–64No
juramentoBodyboolean | string 0–8No
nameBodystring 0–300No
notificationIdBodystring 1–64No
orgIdBodystring 1–64Yes
overrideReasonBodystring 0–2000 | nullNo
recipientIdBodystring 1–64Yes
sourceBodystring 1–64Yes
sourceTextBodystring 1–2000Yes
whenBodystring 0–32No
curl
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
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
{
  "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

updateMessageTemplate

POST/v1/update-message-template

Firm memberPermission: notification:send/v1 · bearer tokenMCP tool: updateMessageTemplate

Rewrite a template; drafts already composed keep their text.

Parameters of updateMessageTemplate
NameInTypeRequired
bodyBodystring 1–20000Yes
especialidadBodystring 1–60 | nullNo
nameBodystring 1–120Yes
orgIdBodystring (uuid)Yes
subjectBodystring 1–998Yes
templateIdBodystring (uuid)Yes
curl
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
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
{
  "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

withdrawBatchSend

POST/api/withdraw-batch-send

Firm memberPermission: or(and(and(approval:request, not(notification:send)), approval:request), and(notification:send, notification:send))

withdrawBatchSend

Parameters of withdrawBatchSend
NameInTypeRequired
importIdBodystring (uuid)Yes
orgIdBodystring (uuid)Yes
sendIdBodystring (uuid)Yes
curl
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
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
{
  "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

withdrawSendApproval

POST/api/withdraw-send-approval

Firm memberPermission: notification:read

withdrawSendApproval

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