Reference

Error catalog

Every typed error code the Calypso public API returns, in one table — with the shared envelope, retryability, and the endpoints that raise each.

The error envelope

Every error from the search, ingest, and manage surfaces uses one shape. code is machine-stable, retryable tells you whether backing off and retrying can succeed, and request_id (also echoed in the X-Request-Id header) is what to quote in support requests:

{
  "error": {
    "code": "bucket_not_found",
    "message": "Bucket not found or not active: docs",
    "retryable": false,
    "details": { "bucket": "docs" }
  },
  "request_id": "req_abc123"
}

The exception is the OpenAI-compatible ask endpoints (/v1/responses, /v1/chat/completions, /v1/models): they return OpenAI-style errors ({"error": {"code", "message", "type"}}) so stock SDK error handling keeps working — no top-level request_id or retryable field there.

Auth & authorization

StatusCodeRetryableMeaning
401invalid_project_keynoThe key is missing, malformed (keys start with sk-), or inactive.
403forbidden_project_keynoThe key lacks a required capability — details.required_capability names it. See Capabilities.

Ingestion

StatusCodeRetryableMeaning
400bucket_requirednoNo destination bucket (legacy body-addressed routes only — impossible on /v1/buckets/{bucket}/… paths).
404bucket_not_foundnoThe bucket does not exist or is archived.
400bucket_assignment_failednoA named bucket could not be resolved or assigned.
409bucket_slug_existsnoBucket create collided on slug without a matching Idempotency-Key.
400empty_filenoZero-byte upload.
413file_too_largenoOver the 25 MB cap (details.max_bytes).
422url_is_web_pagenoFile import got HTML — cross-referral to /pages; force: true overrides.
422url_is_filenoPage ingestion got a document URL — cross-referral to files/import; force: true overrides.
400url_fetch_blockednoURL rejected by fetch policy.
502url_fetch_failedyesThe remote host failed to serve the file.
409website_url_existsnoThe page URL already exists for this team (details carry the source id).
502website_analysis_failedyesPage crawl or analysis failed.
409idempotency_key_conflictnoThe same Idempotency-Key was reused with a different request body.
400invalid_idempotency_keynoThe Idempotency-Key was empty, over length, or contained non-visible-ASCII characters.
409request_in_progressyesAn identical request with this Idempotency-Key is still running. Back off and retry — the retry replays the original result once it settles.
409team_store_maintenanceyesThe team's search store is being rebuilt. Honor details.retry_after_seconds and retry.

Readiness & retrieval

StatusCodeRetryableMeaning
409bucket_store_indexing_pendingyesThe bucket has no indexed content yet — wait for the first source to become ready.
404model_not_foundnoThe requested model/agent id is not a Calypso agent id.
404agent_not_foundnoThe named agent does not exist.
504search_timeoutyes/v1/search exceeded its latency budget.
502search_failedyesThe search provider failed to serve the query.
503search_disabledyes/v1/search is temporarily disabled for maintenance.

Deletion

StatusCodeRetryableMeaning
409delete_blockednoThe target has dependents — a source with references, or an agent the team's widget is bound to (details.bound_surface). Pass force=true to override.
400force_requirednoDestructive cascades (DELETE /v1/buckets/{bucket}) must be confirmed with force=true.
409delete_in_progressyesA delete cascade for this bucket is already running. Retry after it finishes: 404 if the cascade completed, 200 (re-running the cascade) if a partial failure restored the bucket.
400metadata_filter_too_largenoA search over an explicit-id scope exceeded the provider filter limit — switch the agent to bucket scope.

Quotas & limits

StatusCodeRetryableMeaning
429rag_quota_exceededno (until reset)The workspace reached its plan's answer limit (asks and searches both count).
402agent_limit_reachednoThe plan's named-agent cap is reached.
400no_updatesnoPUT /v1/agents/{agent_id} needs at least one field to update.
400invalid_agent_profilenoThe agent update failed schema validation (details.errors).
503agent_replay_check_unavailableyesAgent create hit an id collision but could not confirm whether it was your own idempotent replay. Retry with the same Idempotency-Key.
429upload_rate_limitedyesIngestion creates are limited to 5 requests/second/team. Honor the Retry-After header (details.retry_after_seconds) and retry.

Server

StatusCodeRetryableMeaning
500internal_errornoUnexpected server error — include request_id when reporting.

Handling guidance

  • Branch on code, never on message — messages can change, codes do not.
  • Respect retryable: retry with backoff when true, fix the request when false.
  • Cross-referral errors (url_is_web_page, url_is_file) are navigational: follow details.suggested_endpoint rather than treating them as failures.