Documentation
Rate limits
Last updated
Quota model
Each Farshore service enforces a monthly request budget per API key, per service. The counter rolls over at 00:00 UTC on the first of each calendar month and is reset lazily on the first request of the new month (no scheduler).
The default budget is 20,000 requests per service per month. Subscriptions that need higher throughput can request an increase from support@farshorelabs.com.
What counts
- Every authenticated request that reaches the service handler consumes one unit, regardless of HTTP method or response code (including 4xx).
- Pre-flight
OPTIONSrequests are free. - Web-app traffic (session-cookie authentication) does not count against API-key quotas; it has its own per-user rate limiter.
- Quotas are tracked per service ID. Calling Azure availability does not consume the sanctions-screening budget.
Response headers
Every API response includes:
X-RateLimit-Limit: 20000 X-RateLimit-Remaining: 19978 X-RateLimit-Reset: 2026-06-01T00:00:00Z
X-RateLimit-Limit— the budget assigned to this key for this service.X-RateLimit-Remaining— calls left in the current window.X-RateLimit-Reset— RFC 3339 UTC timestamp at which the window resets.
When the budget is exhausted
Once the budget is reached the service responds with HTTP 429 Too Many Requests and a problem-details body. The response also includes a Retry-After header giving the number of seconds until the next UTC month begins.
HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 821391
{
"type": "https://farshorelabs.com/errors/quota-exceeded",
"title": "Monthly quota exceeded.",
"status": 429,
"detail": "API key has consumed its monthly budget for service 'azure-availability'.",
"outcome": "quota_exceeded",
"limit": 20000,
"resetAt": "2026-06-01T00:00:00Z"
}Best practices
- Treat
X-RateLimit-Remainingas a soft warning — log it and alert your team when it drops below a safety threshold (e.g. 10%). - Respect
Retry-Afteron 429 responses. Do not implement aggressive auto-retry; the budget will not reset until the next month boundary. - For high-volume workloads, cache results on your side where the underlying data does not change frequently (e.g. Azure region/SKU availability changes daily, not per-request).
- Use separate API keys for production vs. development so a runaway dev script cannot exhaust your production budget.
See Error format for the canonical problem-details schema all services emit.