Dike

Rate limits & errors

Per-plan rate limits and the RFC 7807 error shape every endpoint returns.

Rate limits

Limits are per API key, requests per minute:

PlanDefault /v1/*/v1/reason
Free30 req/minnot available — see below
Pay As You Go120 req/min10 req/min

/v1/reason requires a Pay As You Go plan — it runs a full LLM generation on top of retrieval and isn't offered on Free. Calling it on Free returns 403 with code: plan_required.

A small number of unauthenticated, IP-keyed routes have their own tighter limits: the /pdf/* proxy (30 req/min) and the public /survey endpoint (5 req/min).

Going over a limit returns 429 with code: rate_limited.

Errors

Every error is RFC 7807 application/problem+json:

{
  "type": "https://dike.it.com/errors/rate_limited",
  "title": "Too Many Requests",
  "status": 429,
  "detail": "Rate limit of 30 requests/minute exceeded.",
  "code": "rate_limited"
}

code is the stable, machine-readable field — match on it, not on title/detail, which are for humans and can change wording without notice.

StatuscodeMeaning
401unauthorizedMissing or invalid API key
403plan_requiredEndpoint needs a Pay As You Go plan
404not_foundResource doesn't exist (e.g. unknown canonical_id)
404citation_not_found/v1/cite parsed the citation but no document matched
422citation_unparseable/v1/cite couldn't parse the citation string at all
422validation_errorRequest body failed schema validation
429rate_limitedOver the plan's rate limit
503upstream_unavailableA downstream dependency (Mongo/Qdrant/embedding/LLM) is down

Dike never fabricates a citation to avoid returning an error — see /v1/reason for how the hallucination guard handles context it can't ground an answer in.