Rate Limits & Processing Speed
CVFormatter balances high-throughput resume ingestion with predictable latency across our distributed OCR and LLM inference clusters. Our edge API gateway enforces sliding-window rate limits to prevent runaway polling loops, protect your credit reserves, and maintain median document processing speeds under 3.5 seconds.
How CVFormatter rate limiting works
Rate limits operate per organization token using a distributed sliding-window counter evaluated at the Cloudflare edge. Traffic is segmented into distinct operation tiers so frequent polling or report downloads never block time-critical candidate file uploads:
Applies to POST /resumes and reprocess endpoints to protect GPU inference nodes from sudden burst overloads during bulk hiring migrations.
Generous thresholds on status checks and structured data queries (/resumes/:id/data) allowing frequent client status checks without latency penalties.
Governs heavy Word (.docx) document compilation and XML generation pipelines to ensure steady memory usage across workers.
Quota thresholds by endpoint category
Requests exceeding these thresholds receive an HTTP 429 response accompanied by standard rate-limiting headers:
| Traffic Scope | Sustained Threshold | Exceeded Status |
|---|---|---|
| File Uploads & Reprocess | 60 requests per minute (1 req/sec average) | 429 Too Many Requests |
| Status Checks & JSON Reads | 300 requests per minute (5 req/sec average) | 429 Too Many Requests |
| DOCX Exports & Previews | 120 requests per minute (2 req/sec average) | 429 Too Many Requests |
| Health Probes (/health) | Unmetered (exempt from tenant quotas) | 200 OK |
Real-time rate limit HTTP response headers
Every response returned by the API contains telemetry headers so your integration can dynamically regulate request velocity before reaching throttling limits:
| Header Name | Type & Meaning |
|---|---|
| X-RateLimit-Limit | The maximum number of allowed requests in the active 60-second sliding window for this endpoint tier. |
| X-RateLimit-Remaining | The number of remaining requests your token can execute within the current window before receiving a 429. |
| X-RateLimit-Reset | Unix timestamp (in seconds) indicating exactly when the sliding window clears and quota resets to 100%. |
| Retry-After | Included exclusively on HTTP 429 responses. Specifies the precise integer number of seconds your client must sleep before retrying. |
How to handle 429 responses gracefully
When rate limits are triggered, the gateway returns an HTTP 429 status code with a structured JSON payload and a Retry-After header:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Retry-After: 12
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Upload threshold of 60 req/min exceeded. Please wait before retrying.",
"request_id": "req_rl_7701ab4",
"retry_after_seconds": 12
}
}In your HTTP client interceptor or retry wrapper, parse response.headers.get("Retry-After"), fall back to retry_after_seconds from the body, and delay subsequent requests by that duration plus 50–100ms of random jitter to avoid thundering herd conditions.
Bulk hiring migrations & enterprise quota increases
Migrating hundreds of thousands of candidate documents from legacy ATS databases (such as Bullhorn, Greenhouse, or Workday) may require elevated concurrency. Enterprise workspace plans support custom burst parameters and dedicated GPU worker clusters up to 1,200 uploads per minute. Contact our solutions engineering team from your organization dashboard to request a temporary or permanent limit increase.