Skip to content

Limits

Limits an integrator can run into. Server-side derivation tuning is not listed — it is not something you can set or observe.

LimitOn breach
Per-IP, token endpoint10/min429 + Retry-After
Global600/min429 + Retry-After

Both fail closed: when the limiter cannot make a decision, the request is refused rather than allowed through.

Retry-After is in whole seconds and the SDK waits it rather than applying its own backoff — the server knows when the bucket refills, the client does not. Exhausted retries surface a typed RateLimitedError carrying it.

A 429 from the token endpoint uses the RFC 6749 OAuth shape, not our fault envelope, and puts its correlation id only in X-Request-Id. The SDKs normalise both into one typed error.

LimitOn breach
Request bodysee payload_too_large413

Not retryable. Shrink the batch or use the presigned payload_ref flow. An SDK that retried a 413 would send the same too-large body again.

evidence.ingest takes a batch and can partly succeed — 200 with accepted[] and rejected[], which is a success with a mixed result, not a failure.

Do not retry the whole batch; resubmit the rejected subset. See Write evidence back.

DefaultWhose
Per-attempt30sclient
Total60sclient
latency_budget_ms800msserver, on context.assemble

The first two are client-side and fail the call. The third is server-side and degrades — returning a smaller answer, not an error. Do not conflate them: a degraded assemble is a success and must not consume a retry. See Degraded mode.

Your own context deadline always wins. Backoff sleeps consume the total budget.

Note
top_kDefaults to 8. Raising it costs tokens and latency; measure with context.report before assuming more is better
Graph expansionOne hop. Multi-hop traversal does not exist

Only exact match and org:* are structurally computable. Everything else fails closed. See Scopes and inheritance.

OutcomeRetried
Transport error before a responseyes
429yes, after Retry-After
500, 503yes, with backoff
400, 401, 403, 404, 409, 410, 413no
Any verdict, any decisionno — a success

422 is never emitted. Anything not listed is not retried, because an unknown status is an unknown cause.