Skip to content

Errors

How to read a refusal from Notificado (code, cause and fix) and the codes you will meet most often.

Updated:

Every refusal has the same three parts:

Part What it is
code Stable, X_SCREAMING_SNAKE. Branch on it, never on the wording.
cause What was wrong, in words.
fix The next step that ends it; usually literal.

Over HTTP they arrive as application/problem+json with a status; over MCP, as a tool result with isError, or as an HTTP answer (401, 413, 429) with the same body.

{
  "type": "urn:ultimate:error:X_CASE_RADICADO_TAKEN",
  "title": "case radicado taken",
  "status": 409,
  "code": "X_CASE_RADICADO_TAKEN",
  "cause": "this org already has open case <caseId> for radicado 05001310300320260012300",
  "fix": "use the existing case — getCase({ orgId, caseId: '<caseId>' }) — instead of opening a second one; to replace it with corrected data, createCase({ …, correctionOf: '<caseId>' }) archives it and opens the corrected case",
  "requestId": "<requestId>"
}

Quote the requestId when you write to admin@notificado.co.

The API's own answers (/v1)

Status Code What to do
401 X_UNAUTHENTICATED No token, or one that is unknown, expired or revoked. Issue a new one at /cuenta/api.
404 X_ROUTE_NOT_FOUND The operation does not exist or is outside the token's scopes. Check the path, then the scopes.
404 X_NOT_FOUND A single-object read (get-case, get-notification, get-send-confirmation, get-import) found no such id in your firm: it does not exist, belongs to another firm or was deleted. The operation does exist and the token does reach it. Do not retry with the same id; look it up in the list.
400 X_INPUT_INVALID Also when a limit or a _first is above the list's maximum: it is refused, never cut down. cause names the field and the maximum; the maximums are in Limits. Ask for fewer rows and continue with nextCursor.
400 X_CURSOR_INVALID The cursor is not this list's: it comes from another list, other filters or another order, it was edited, or the key that signs it changed. Also an exportNotifications cursor sent with filters other than the first call's. Ask for the first page again, with no cursor.
422 X_PAGE_LIMIT_INVALID A page size outside its bounds reached the read itself. Each operation's schema usually stops it first, with 400 X_INPUT_INVALID; both refusals mean the same: nothing is ever cut down. Ask for at most the ceiling cause names and continue with the cursor.
422 X_DEADLINE_CURSOR_CONFLICT listDeadlines got cursor and after with different values. after is the earlier name of cursor: send cursor alone.
409 X_IDEMPOTENCY_CONFLICT That Idempotency-Key names another body, or its first attempt is still running. See Idempotent retries.
400 X_IDEMPOTENCY_KEY_INVALID An empty key, or one longer than 255 characters.
429 X_RATE_LIMITED Over the per-token limit; wait Retry-After seconds.

The two 404s differ by code: X_ROUTE_NOT_FOUND is about the operation, X_NOT_FOUND about the object you asked for.

Every code the API can answer, with its HTTP status, what it means and what to do, is in the error catalog, each under its own anchor: /docs/api/errores#x-case-radicado-taken.

Common codes

Code What to do
X_INPUT_INVALID / X_BODY_INVALID A field fails the schema; the issues list names each one.
X_FORBIDDEN Your role does not allow the action, or the orgId is not your firm's.
X_CSRF_BLOCKED A write to the panel's routes with a cookie and no origin. Never on /v1, which takes no cookie; see Authentication.
X_KYC_REQUIRED Your lawyer verification is not approved; finish it in the panel.
X_CASE_RADICADO_TAKEN The case already exists; look it up instead of creating another.
X_CASE_RADICADO_INVALID The radicado is not a valid 23-digit number.
X_NOTIFICATION_NOT_DRAFT The notification was already sent; it cannot be edited or re-sent.
X_NOTIFICATION_NO_RECIPIENTS Recipients are missing; add them in the panel.
X_NOTIFICATION_NO_ATTACHMENTS Attach at least one document.
X_JURAMENTO_REQUIRED / X_PROVENANCE_REQUIRED An address's sworn statement or provenance is missing.
X_ATTACHMENTS_TOO_LARGE Attachments exceed 6 MB in total. Compress the PDFs or split them across more than one notification.
X_ATTACHMENT_DUPLICATE That document is already attached; carry on.
X_CREDITS_INSUFFICIENT Not enough credits. With meta.mode = paid (sales are on since 30 September 2026), buy a pack at /creditos. With meta.mode = free, the deployment sells no credits: your free sends are used up and you can write to admin@notificado.co (Notificado staff can grant you credits).
X_PAYMENT_CHECKOUT_DISABLED Online checkout is not ready yet (free mode); nothing can be bought for now. Do not retry.
X_SEND_CONFIRMATION_EXPIRED Nobody confirmed the send within 24 hours; nothing was sent.
X_SEND_CONFIRMATION_TOKEN_REVOKED The token or connection the agent asked with was revoked before the confirmation; nothing was sent. Send it yourself from the draft, or have the agent ask again over a live connection.
X_CONSTANCIA_NOT_FOUND No constancia yet: it is issued once delivery events arrive.
X_EVIDENCE_ZIP_NOT_READY The package is still being built; retry once after 30 seconds.
X_MCP_SCOPE_DENIED The token lacks that tool's scope.
X_MCP_RATE_LIMITED Too many calls; wait as long as retry-after says.

Retries

Never repeat a refused call unchanged. Only *_NOT_READY answers, rate limits and network failures are retried, after waiting; a create is retried with the same Idempotency-Key (Idempotent retries).

Assistants have the same list in the MCP server's docs://guides/errors guide.