Skip to main content
Rate limits are enforced per organization across three windows: All three apply at once. The first window you exceed returns 429 Too Many Requests with a Retry-After header telling you how long to wait for that window to reset.

Response headers

These headers are present on both successful and 429 responses, so you can track your remaining budget without waiting to get throttled:
  • X-RateLimit-Limit — the per-minute ceiling.
  • X-RateLimit-Remaining — requests left in the current minute window (0 on a per-minute 429).
  • X-RateLimit-Reset — Unix timestamp (seconds) when the minute window resets.
  • X-RateLimit-Monthly-Remaining — requests left in your monthly quota.
The 429 response additionally carries Retry-After — seconds to wait before retrying. Use this value, don’t hardcode delays.

Weighted cost

Most endpoints cost 1 request against every window. The exception is launching a sequence (POST /sequences/{id}/launch): it charges your monthly quota proportionally to the number of contacts enqueued. Enrolling 5,000 leads consumes roughly 5,000 monthly units — so bulk enrollment is not “free.” The per-second and per-minute windows still count a launch as a single request; only the monthly quota is charged the weighted cost. This weighting applies to all channels, including WhatsApp sequences — the cost is the number of enqueued contacts. Sending a one-off WhatsApp message (POST /whatsapp/send) costs 1 monthly unit per message, like any ordinary request — it is not weighted.
Check X-RateLimit-Monthly-Remaining before a large launch. If you have 41,280 monthly requests left and try to enroll 50,000 leads, the launch will exhaust your monthly quota.

Exemptions

Some organizations are not subject to these limits:
  • Organizations on the lifetime plan.
  • Any organization an administrator has explicitly exempted.
Exempt organizations may also be configured with custom limits (higher per-second / per-minute / monthly ceilings) instead of being fully unlimited.

Best practices

Honor Retry-After. Pause for that many seconds, then retry the exact same request.
  • Spread bulk operations. At 200 requests/minute you can sustainably push ~3 requests/second; aim to stay under the per-second burst of 3 to leave headroom.
  • Watch the monthly quota. 50,000 requests/month is shared across the whole organization, and sequence launches draw down that quota by the number of contacts enrolled. Budget accordingly.
  • Cache catalog lookups (/lead-sources, /pipeline/stages, /webhooks/events) instead of hitting them on every request — they change rarely.
  • Batch reads with the query filter instead of N individual GET /leads/{id} calls when you need to look up several leads.

When you hit the wall

If your integration legitimately needs more than the default budget provides, contact soporte@flowestate.app — organizations can be exempted or configured with custom limits on a per-organization basis.