Rate Limits
Rate limits are applied per organization, per subscription tier. Limits are rolling-windowed at the minute granularity.
Tier caps
Generated from the server's tier limiter — a drift-guard test fails CI if any per-tier reads/writes/sync value here diverges from TIER_RATE_LIMITS.
| Tier | Reads / minute | Writes / minute | Sync / minute |
|---|---|---|---|
PLANT_OPERATOR | 60 | 20 | 10 |
CONTRACTOR | 300 | 100 | 30 |
BUILDER | 1000 | 300 | 100 |
HIRE | 1000 | 300 | 100 |
When you hit a limit
Over-limit requests return 429 RATE_LIMITED with a Retry-After header indicating the seconds until your bucket refills. Clients should wait and retry. Short, linear back-off is sufficient in almost every case; exponential back-off is required only if you repeatedly fail.
Scoping
Every endpoint is classified read, write, or sync (bulk sync from the mobile app). Limits apply to the respective bucket. API keys and session tokens share the bucket for the issuing organization — deeply parallel integrations should coordinate to avoid self-throttling.