Skip to main content
All errors are returned as JSON with a top-level error field — plus structured fields when they help.

Status code catalog

Common error shapes

Quota exceeded (Builder tier)

Builder tier hard-blocks at the cap. Upgrade to Studio (overage allowed) or wait for the next billing cycle.

Rate limit exceeded

Plus headers:
Honor Retry-After — back off with jitter rather than hammering.

Subscription inactive

Sent on 402 when an org’s subscription is canceled, unpaid, or incomplete_expired. Internal/enterprise tiers never see this.

Tier limit reached (agent/connector)

Same shape for connector_limit_reached.

Invalid OAuth state

Possible reasons: state was issued more than 10 minutes ago, was tampered with, was issued for a different provider, or was forged. Restart the OAuth flow from the console.

Provider errors (502)

These pass through the upstream provider’s error message when available. Common causes: revoked tokens, expired refresh tokens, provider API downtime.

Idempotency

/v1/ingest is idempotent on (organizationId, provider, externalId) — re-posting the same document is a no-op (counted in skipped). /v1/sync-runs enforces “at most one active run per connector” at the DB level — duplicate queue attempts return the existing run with alreadyActive: true. Other endpoints (/v1/search, /v1/context, /v1/ask) are not idempotent — each call consumes a credit. If you retry, you’ll burn an extra credit.