An Azure communication platform for deploying applications across devices and platforms.
Azure Communication Services email imposes strict per-minute and per-hour rate limits, and when these are exceeded, requests are rejected with HTTP 429 (Too Many Requests). For Azure-managed domains, the documented limits are:
- 5 emails per subscription per minute
- 10 emails per subscription per 60 minutes
When these limits are exceeded, requests are rejected until the service’s internal counters fall back under the configured rate window. The platform uses the standard throttling pattern: after hitting the limit, requests can be attempted again only after the Retry-After time has passed. There is no separate documented daily limit in the provided information, but repeated retries while still within the same rolling window will continue to be counted and rejected.
Key points based on the documented behavior:
- Email throttling is enforced per minute and per hour.
- When the limit is exceeded, the service returns 429 and the request must be retried only after the indicated
Retry-Afterperiod. - All requests (including repeated retries) accrue against usage limits, so immediate or frequent retries can prolong the throttling period.
- If sustained volume is needed beyond the default limits, the guidance is to request a quota increase for email sending limits via Azure Support for eligible scenarios. However, higher limits are not available for Azure-managed domains; they are only available for verified custom domains.
Given this, if 429 responses continue for several hours:
- It is likely that ongoing retries or additional send attempts are keeping the usage within the rolling window’s threshold.
- Ensure the application reduces send frequency and respects
Retry-Afterheaders. - For higher sustained throughput, consider moving to a verified custom domain and then requesting a quota increase as documented.
References:
- Service limits for Azure Communication Services
- Throw an exception when email sending tier limit is reached (programming-language-python)
- Throw an exception when email sending tier limit is reached (programming-language-csharp)
- Throw an exception when email sending tier limit is reached (programming-language-java)
- Throw an exception when email sending tier limit is reached (programming-language-javascript)