rivomiDocs

Errors and limits

How errors arrive on MCP and REST, every error code with the fix, and the rate limits.

Every error is a sentence the caller can act on, plus a stable code. Read the sentence: it usually names the tool to call or the setting to change.

  • MCP: a tool result with isError: true, not a JSON-RPC protocol error, so the model reads it and can correct its next call. The code follows the message as (code: …).
  • REST: { "error": "…", "code": "…" } with the HTTP status below.

A wrong id is always an error that names the tool listing the right ids. It is never an empty result.

Codes

CodeStatusMeaningFix
unauthorized401No credential, or an expired or revoked oneReconnect, or use a valid key
grant_revoked401The OAuth grant was disconnected in Settings › APIReconnect and sign in
insufficient_scope403The credential lacks write or sendA key or grant with that scope (scopes)
not_found404No such id in this workspaceTake the id from the list tool the message names
not_configured409The workspace has no company profile yetThe user fills in Settings › Workspace
no_source409Launching an agent with nothing to watchAdd a source
conflict409The action does not apply in the current state (for example, pausing a draft)Read the state first
consent_required412Sending terms not acceptedA human accepts them under Settings › Senders (guardrails)
no_seat409No connected LinkedIn sender to send fromThe user connects one under Settings › Senders
(plan limit)402A plan limit or the credit balance is exhausted; the message names whichWait for the reset or change plan. Nothing was half-done.
rate_limited429Over the request budgetWait Retry-After seconds
org_deleted403The workspace no longer existsNothing to retry

A 400 without a code is a bad argument. The message says which argument and why.

Rate limits

600 requests a minute per workspace, plus a per-key limit. Over either, 429 with a Retry-After header. Poll runs every minute or two, not in a tight loop.

On this page