Skip to main content
The Messaging API enforces each team’s configured request limit over a one-minute window. The limit is team-wide, not a published per-endpoint table. Graph requests and selected Platform operations use the same quota headers when the per-team limiter applies. When the per-team request limiter counts a request, the response includes:
A rejected request includes the applicable wait time and the limit that was reached:
The exact configured number depends on the team and active entitlements. X-RateLimit-Reset is when the oldest counted request leaves the rolling one-minute window. It is not a fixed minute boundary or a promise that another request will be admitted then: other requests can consume the released slot. The quota headers are absent when the request quota cannot be determined. A 429 caused by another limit, including a WhatsApp limit, can still carry these headers if the request consumed team quota. The headers describe the team budget; Polymorfa-RateLimit-Reason identifies the limit that rejected the request.

Retry behavior

Honor Retry-After even if it is later than X-RateLimit-Reset, then retry with jitter. Do not immediately fan out retries from concurrent processes. WhatsApp and Meta also enforce request limits. Read Polymorfa-RateLimit-Reason to tell them apart: whatsapp and whatsapp_new_chat_limit come from WhatsApp, and BanSafe pacing uses bansafe_pacing or daily_allowance. See Rate-limit reasons for every value.