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:

  1. Catch-all limit — applied to every request, regardless of endpoint
  2. 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:

HeaderDescriptionType
X-RateLimit-LimitMaximum requests allowed in the windowinteger
X-RateLimit-RemainingRequests remaining before the limit resetsinteger
X-RateLimit-ResetUnix timestamp at which the window resetsinteger

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:

HeaderDescriptionType
ratelimit-limit-minutePer-minute request limit for this endpointinteger
ratelimit-remaining-minuteNumber of requests still allowed in the current minuteinteger
ratelimit-limit-hourPer-hour request limit for this endpointinteger
ratelimit-remaining-hourNumber of requests still allowed in the current hourinteger
ratelimit-resetUnix timestamp at which the next request would become available. It is 0 if the limit is not exceededinteger timestamp
retry-afterNumber of seconds to wait before retrying. Only present in headers when a 429 is returnedinteger

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:

HeaderDescriptionType
X-RateLimit-ResetTimestamp at which you may retry the requesttimestamp
{
  "error": true,
  "request_retry_after": "2026-01-01 00:00:00 UTC"
}

Wait until the time indicated in request_retry_after before retrying.