Rate Limits
Track endpoint capacity with response headers and retry safely when a window is exhausted.
Current implementation
Search and Scrape use bounded per-client-IP windows on the active service instance. The counters are intentionally lightweight; use your own queue/backoff for durable multi-worker coordination.
Endpoint Limits
POST /api/v1/search60 requests / minute
Search requests, including rejected API-key attempts.
POST /api/v1/scrape10 requests / minute
Scrape requests, including rejected API-key attempts.
Inspect Every Response
Rate-limit response headerscURL
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1788003600
X-Request-ID: req_abc123X-RateLimit-LimitMaximum requests in the current endpoint window.
X-RateLimit-RemainingRequests left in the current endpoint window.
X-RateLimit-ResetUnix timestamp for the next reset.
Retry-AfterSeconds to wait; present on 429 responses.
Bounded Backoff
Read Retry-After on 429; for transient 5xx responses use capped exponential backoff with jitter.
Probe with response headerscURL
curl -i -X POST https://search.venym.io/api/v1/search \
-H "Authorization: Bearer $VENYM_SEARCH_API_KEY" \
-H "Content-Type: application/json" \
--data '{"query":"latest news","max_results":1}'429 responseJSON
{
"error": "Search rate limit exceeded",
"code": "RATE_LIMITED",
"message": "Search rate limit exceeded",
"retry_after": 42,
"request_id": "req_def456",
"timestamp": "2026-08-29T12:00:00.000Z",
"documentation_url": "https://search.venym.io/docs/errors"
}Rate-limit metadata is returned on Search/Scrape success and error responses, including invalid-key responses. Validation is free but does not consume an endpoint Search/Scrape slot.