Skip to content

Errors & limits ​

A tool that fails returns the public API's error envelope unchanged, plus a hint written for the assistant. Most clients show it verbatim, so this page is for reading what the assistant reports back.

json
{
  "error": {
    "status": 409,
    "code": "VERSION_LOCKED",
    "message": "…",
    "holder": { "name": "Ana" },
    "expiresAt": "2026-09-09T20:05:00.000Z",
    "hint": "Ana has this open in the editor (lock expires …). Nothing was written. Retry after the lock expires, or ask them to close it.",
    "retryAfterSeconds": 240
  }
}

Codes ​

CodeStatusMeaningWhat to do
API_TOKEN_REQUIRED401No Authorization: Bearer atk_… (or X-API-Key) header reached the serverCheck the client config; the placeholder from Studio must be replaced with the full token
INVALID_API_TOKEN401The token is revoked, expired, or belongs to a different organization than the org in the URLCreate or regenerate a token; check the org id
FEATURE_DISABLED403AI assistants are not on the organization's plan (requiredPlan: "team")Upgrade in Studio → Settings → Billing
TOKEN_SCOPE_READ_ONLY403A write was attempted with a read tokenCreate a read + write token
PROJECT_REQUIRED400The token is organization-wide and the call named no project; the error lists the choicesTell the assistant the project, or narrow the token
TOKEN_PROJECT_MISMATCH403The token is narrowed to one project and the call named a different oneUse the token's project (the message names it), or use an organization-wide token
NOT_FOUND404The document type, document, taxonomy or term does not exist in the view being readA read token cannot see drafts; check the slug and status
VALIDATION_ERROR422The payload was refused; fields names each problem (an unknown field slug, a missing required field, a term that does not exist)Fix the named fields; nothing was written
SLUG_CONFLICT409The requested slug is taken in the projectOmit slug to derive a unique one, or choose another
VERSION_LOCKED409An editor has the document open; holder.name and expiresAt say who and until whenRetry after the lock expires, or ask them to close it
RATE_LIMITED429A rate limit was hit; retryAfterSeconds says how long to waitWait; do not retry in a loop
PLATFORM_READ_ONLY503The operator has paused writes platform-wide; reads still work; retryAfterSeconds says how long to waitKeep reading; do not loop on writes — wait and retry the write once
PLATFORM_MAINTENANCE503The platform is down for maintenance; everything except public delivery reads is refused; retryAfterSeconds says how long to waitWait retryAfterSeconds, then retry; do not retry in a loop
DELIVERY_BLOCKED403Content delivery for the organization is blocked by the platform (abuse containment); nothing was read or writtenDo not retry; the organization's owner is notified when a block is set and can contact support from Studio → Help
ACCOUNT_CLOSED403The organization has been closedDo not retry; the token will not work again
BILLING_TERMINATED402The organization's subscription was terminated for non-paymentDo not retry until an owner settles the invoice in Studio → Settings → Billing
QUERY_FAILED500The API could not complete the read or writeRetry; if it persists, contact support with the time and tool name

Anything else is passed through from the API with its own status, code and message.

Reads that answer "not found" ​

The public surface never distinguishes "does not exist" from "not published" — that would let a read token discover draft work. A document that exists as a draft is NOT_FOUND to a read token and to any read with the default status: "published". Use status: "draft" with a read + write token to see it.

Rate limits ​

Three limits apply, each per token, each answering 429 with a Retry-After the server turns into retryAfterSeconds:

LimitApplies toWhy
120 reads / minuteEvery read toolKeeps a chatty assistant from affecting site builds that share the token
60 writes / minute and 2,000 writes / dayCreate, update, publish, unpublish, trash, uploadThe daily cap stops a runaway agent loop
300 requests / minute to the MCP serverEvery call, including initialize and tools/listA backstop for the server itself

Reads and writes are separate buckets: a throttled write never blocks reads. The assistant's hint says to wait retryAfterSeconds and not to loop; if it keeps hitting the daily cap, that is the signal to look at what it is being asked to do.

Errors from the client itself ​

The client says…Meaning
Server failed to start / exitedClaude Desktop could not launch the mcp-remote bridge — usually npx not on its PATH (fix)
Authentication requiredThe header never reached the server; the config is wrong or the token placeholder was not replaced
Resource not found (-32002)A resource URI named a document type or document that does not exist in the published view
Parse error / payload too largeThe client sent malformed or oversized JSON (limit 1 MB)

Documentation for Hypervalent Studio