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
| Plan | Standard /v1/* (search, cite, graph, document) | Grounded Reasoning (/v1/reason) | Dedicated SLA |
|---|---|---|---|
| Free Developer | 30 requests / min | Not Available (403 plan_required) | Community Support |
| Pay As You Go | 120 requests / min | 10 requests / min | Standard Support |
| Enterprise | 600+ 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: 1724890260X-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 Status | Error code | Description |
|---|---|---|
401 | unauthorized | Missing, malformed, or revoked API key |
403 | plan_required | Endpoint not permitted on the current account tier (e.g. Reason on Free) |
404 | not_found | Canonical ID does not exist in corpus |
404 | citation_not_found | Citation parsed, but no matching document exists in the indexed database |
422 | citation_unparseable | String does not match any recognized Arabic legal citation grammar |
422 | validation_error | Request body or query parameters failed schema validation |
429 | rate_limited | Exceeded per-minute request throughput |
503 | upstream_unavailable | Downstream vector database, embedder, or LLM inference service is temporarily unreachable |
Next Steps
- Explore the complete Error Handling Catalog.
- Learn about Production Resilience & Retries.