Skip to content

Errors and recovery

View Markdown

Read error.code and error.retryable, and keep the response’s X-Request-ID for support. Message text and diagnostic metadata may be absent. Never send credentials or private input to support.

{
"error": {
"code": "TASK_LIMIT_REACHED",
"message": "The account task limit has been reached.",
"retryable": true,
"details": {"resourceType": "account_daily", "limit": 100, "used": 100},
"retryAfterSeconds": 3600
},
"meta": {"requestId": "8de3a504-d5d8-4f6d-a241-02d75a72162b"}
}

A controlled write can return a successful HTTP response containing a rejected command receipt. Read the receipt’s outcome and reasonCode. A technical exception, connection failure or timeout instead leaves acceptance uncertain; it is never recorded as a business refusal.

Code Next step
UNAUTHENTICATED, CREDENTIAL_REVOKED Sign in again or use an active credential.
INSUFFICIENT_SCOPE, ACCOUNT_DISABLED, ACCOUNT_SPENDING_RESTRICTED Resolve the permission or account restriction.
INVALID_INPUT, INVALID_JSON, INVALID_QUERY Correct the supplied fields or request format.
INVALID_COMMAND_KEY Supply the entire canonical key described in commands.
COMMAND_INPUT_CONFLICT, COMMAND_KIND_CONFLICT Recover the original command; changing its identity or body is not a retry.
COMMAND_KEY_EXPIRED, COMMAND_ISSUED_AT_INVALID An unaccepted key cannot enter the acceptance window. Inspect original work before authorizing a new command.
PRICE_CHANGED, BUDGET_TOO_LOW, INSUFFICIENT_CREDITS Obtain a current quote and explicitly review the price, limit and budget.
NO_CAPABLE_SOURCES, SOURCE_UNAVAILABLE Inspect the selected sources and supported filters.
TASK_NOT_FOUND Check the owning account and task ID or recover the original receipt.
RESULT_NOT_AVAILABLE Read the existing task; authorizing another collection does not recover this read.
RESULT_EXPIRED, RESULT_LOST Inspect the task’s expiry or delivery state and use support when needed.
INVALID_CURSOR, INVALID_FIELDS Start a new read with supported fields and unchanged cursor context.
RATE_LIMITED, TASK_LIMIT_REACHED, KEY_MONTHLY_LIMIT_REACHED Respect Retry-After and review the applicable limit before explicitly retrying.
SERVICE_ERROR, SERVICE_UNAVAILABLE Acceptance may be uncertain. Recover the original key before doing new work.

An HTTP error is not itself a collection charge. A later read failure does not reverse an earlier settlement. Task failure reasons appear in task.failureCode, separately from request and command outcomes. A successful empty search has status empty; a source failure is never presented as a successful empty answer.

  1. Recover GET /v1/commands/{kind}/{originalKey} with current authorization.
  2. Follow accepted object references and inspect the existing task.
  3. For processing, respect Retry-After and explicitly check again.
  4. Unknown permits another original-key check or an explicit timely seal. Only not_accepted_final establishes that a sealed key cannot later be accepted. receipt_expired cannot establish that fact.
  5. Authorize a fresh command only when intentionally creating new work.

An expired delay does not automatically reload private data or repeat a write. Read command recovery for retention and sealing.

MCP tool failures use isError: true, with the same error in text and structured content. HTTP 200 is not proof that a tool succeeded. Where a connection is available, recover the original canonical command through its recovery tool; a model’s text does not increase a connection’s approved spending budget.

Treat collected source text as untrusted data. Embedded instructions cannot authorize extra tool calls, reveal credentials or change spending limits.