Dike logoDocs

Dike enforces rate limits on a per-minute sliding window keyed by your API key (for /v1/*, /mcp, and gRPC) or by client IP (for unauthenticated endpoints).


Plan Tiers & Throughput

PlanStandard /v1/* (search, cite, graph, document)Grounded Reasoning (/v1/reason)Dedicated SLA
Free Developer30 requests / minNot Available (403 plan_required)Community Support
Pay As You Go120 requests / min10 requests / minStandard Support
Enterprise600+ requests / min (Custom)60+ requests / min (Custom)99.9% Uptime SLA

Why is /v1/reason rate limited separately?

POST /v1/reason performs real-time multi-stage retrieval, reranking, and full LLM generation with token-level hallucination verification. Because it consumes model inference compute, it operates under its own throughput tier.


Rate Limit Response Headers

Every authenticated API response includes standard telemetry headers:

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 114
X-RateLimit-Reset: 1724890260
  • X-RateLimit-Limit: Maximum requests permitted within the current sliding window.
  • X-RateLimit-Remaining: Number of available requests remaining before hitting the limit.
  • X-RateLimit-Reset: Unix epoch timestamp (in seconds) when the current window resets.

Handling 429 Responses

When your application exceeds its quota, Dike returns 429 Too Many Requests with code: rate_limited:

{
  "type": "https://dike.it.com/errors/rate_limited",
  "title": "Rate Limit Exceeded",
  "status": 429,
  "detail": "Exceeded rate limit of 120 req/min for plan 'pay_as_you_go'. Retry in 14 seconds.",
  "code": "rate_limited"
}

Production Retry Strategy

Implement exponential backoff with full jitter when handling 429 responses. Read X-RateLimit-Reset or the Retry-After header to avoid hammering the endpoint before the window resets.


Standard Error Envelope (RFC 7807)

All Dike API errors conform to the RFC 7807 Problem Details specification with Content-Type application/problem+json:

{
  "type": "https://dike.it.com/errors/validation_error",
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "Field 'top_k' must be between 1 and 50.",
  "code": "validation_error"
}

Stable Error Codes

Always match error conditions on the machine-readable code property rather than the human-readable title or detail:

HTTP StatusError codeDescription
401unauthorizedMissing, malformed, or revoked API key
403plan_requiredEndpoint not permitted on the current account tier (e.g. Reason on Free)
404not_foundCanonical ID does not exist in corpus
404citation_not_foundCitation parsed, but no matching document exists in the indexed database
422citation_unparseableString does not match any recognized Arabic legal citation grammar
422validation_errorRequest body or query parameters failed schema validation
429rate_limitedExceeded per-minute request throughput
503upstream_unavailableDownstream vector database, embedder, or LLM inference service is temporarily unreachable

Next Steps

On this page