tracts.ai API

Rate Limits

Per-key throttling, 429 behavior, and how to read rate-limit headers.

How rate limiting works

Hourly rate limits are enforced per API key. Each key has its own independent counter — a spike on one key does not affect others on the same account.

Limits are applied on a rolling window. If you exceed the limit, subsequent requests return 429 Too Many Requests until the window resets.

Monthly quotas are enforced per account from the active subscription plan. If there is no active paid subscription, the account uses the Free plan quota.

429 response

When you are rate-limited, the API returns:

HTTP/2 429 Too Many Requests
{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded. Try again later."
  }
}

If the monthly plan quota is exhausted, the API returns:

{
  "error": {
    "code": "monthly_quota_exceeded",
    "message": "Monthly request quota exceeded. Upgrade your plan or wait until the next billing month."
  }
}

Response headers

Successful authenticated responses include hourly rate-limit headers when the key has rate limiting enabled, plus monthly quota headers when the account is on a metered plan:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the hourly key window
X-RateLimit-RemainingRequests remaining in the hourly key window
X-Monthly-Quota-PlanActive plan slug, e.g. free, builder, or scale
X-Monthly-Quota-LimitMonthly request quota for the active plan
X-Monthly-Quota-UsedMonth-to-date requests after the current request
X-Monthly-Quota-RemainingMonthly requests remaining after the current request

Best practices

  • Check X-RateLimit-Remaining before making bulk requests. If it is low, spread your requests over time.
  • Back off on 429 responses. Retrying immediately will not help and can burn quota once the window resets.
  • Use one key per workload. A nightly bulk-ingest job and a real-time lookup service should use separate keys so neither starves the other.
  • Cache aggressively. Parcel data is refreshed on a county-by-county schedule, not in real time. A local cache with a daily TTL is appropriate for most use cases.

Increasing limits

If your workload exceeds default limits, upgrade from the dashboard or reach out at chad@tracts.ai to discuss higher-throughput plans.

On this page