Skip to content
Peritus
Reference

Errors and limits

Errors are RFC 9457 problems and are never billed. An abstention is not an error.

When the data cannot support an answer, the response is HTTP 200 with a typed abstention. Read about abstentions.

The problem shape

Content type application/problem+json.

title
stringRequired
status
integerRequired. The HTTP status
code
stringRequired. A code from the table below
detail
stringOptional

Problem codes

Problem codes
HTTPCodeWhen
400INVALID_REQUESTMalformed JSON, unknown fields, bad filter, limit exceeded
401UNAUTHENTICATEDMissing, malformed, or revoked key
402PAYMENT_REQUIRED, SPEND_LIMIT_REACHEDNo balance or plan, or the daily cap was hit
403FORBIDDEN_SCOPEThe key lacks the required scope
404NOT_FOUNDUnknown response, job, document, or reserved route
409IDEMPOTENCY_CONFLICTSame idempotency key with a different body
413PAYLOAD_TOO_LARGEBody or upload over the limit
422UNPROCESSABLEWell-formed but semantically invalid
429RATE_LIMITEDRate limit or per-tenant model cap
500INTERNAL, POLICY_ASSERT_FAILED, RESPONSE_UNREPLAYABLEServer fault. The last two also alert
503STORE_UNAVAILABLE, LLM_UNAVAILABLE, LOG_UNAVAILABLEA dependency is down or a budget tripped
504TIMEOUTA deadline was exceeded

Rate limits

Query routes return the bucket's state on every response. Past it, the route returns 429 RATE_LIMITED.

RateLimit-Limit
The bucket's size.
RateLimit-Remaining
Tokens left in it.
RateLimit-Reset
Seconds until it is full.

The daily cap

When the daily cap is hit, calls return 402 SPEND_LIMIT_REACHED until it resets. With no balance or plan they return 402 PAYMENT_REQUIRED. Neither is billed.

Request limits

Over a limit, a field returns 400 INVALID_REQUEST; a body over the size limit returns 413 PAYLOAD_TOO_LARGE.

question (ask)
2000 characters
references (fetch)
100
fields
50
mentions (resolve)
100
limit (search, changes)
500
request (field request)
1000 characters