Rate Limiting
To ensure our service remains available and reliable for all customers, we may place restrictions on how many API requests you can make in a specific amount of time.
Rate limiting is applied in two tiers:
- Catch-all limit — applied to every request, regardless of endpoint
- Per-endpoint limit — applied to specific endpoints, with per-minute and per-hour windows
Tier 1: Catch-All Limit
Every request to the Fieldwire API is subject to a coarse limit of 3,000 requests per 5 minutes. This limit exists to protect overall service availability and applies universally across all endpoints.
When this limit is exceeded, the API responds with an HTTP 429 status and the following headers:
| Header | Description | Type |
|---|---|---|
X-RateLimit-Limit | Maximum requests allowed in the window | integer |
X-RateLimit-Remaining | Requests remaining before the limit resets | integer |
X-RateLimit-Reset | Unix timestamp at which the window resets | integer |
No response body is returned for this tier.
Tier 2: Per-Endpoint Limits
On top of the catch-all, specific endpoints enforce their own per-minute and per-hour limits. We restrict the number of requests made to each endpoint per-minute and per-hour. The specific limits for each endpoint are documented in our API reference.
Monitoring Rate Limits
For rate-limited endpoints, the API will include several headers with information on how many requests you have remaining:
| Header | Description | Type |
|---|---|---|
ratelimit-limit-minute | Per-minute request limit for this endpoint | integer |
ratelimit-remaining-minute | Number of requests still allowed in the current minute | integer |
ratelimit-limit-hour | Per-hour request limit for this endpoint | integer |
ratelimit-remaining-hour | Number of requests still allowed in the current hour | integer |
ratelimit-reset | Unix timestamp at which the next request would become available. It is 0 if the limit is not exceeded | integer timestamp |
retry-after | Number of seconds to wait before retrying. Only present in headers when a 429 is returned | integer |
Exceeding the Rate Limit
If you exceed either the per-minute or per-hour limit, the API will respond with an HTTP 429 status code and the following JSON body:
{
"errors": [
{
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Too many requests. Retry after 2026-01-01 00:00:00Z",
"details": {
"endpoint_hour_limit": 3000,
"endpoint_minute_limit": 50,
"request_retry_after": "2026-01-01 00:00:00Z",
"throttled_by": "hour"
}
}
]
}Wait until the time indicated in details.request_retry_after, or use the ratelimit-reset /
retry-after headers before retrying.
Legacy Rate Limiting
We are in the process of phasing out an older fixed-window rate limiting system. Some number of endpoints still use this system.
When the limit is exceeded, the API responds with an HTTP 429 status, the following header, and response body:
| Header | Description | Type |
|---|---|---|
X-RateLimit-Reset | Timestamp at which you may retry the request | timestamp |
{
"error": true,
"request_retry_after": "2026-01-01 00:00:00 UTC"
}Wait until the time indicated in request_retry_after before retrying.
Updated 5 days ago