Skip to main content
SmsManager enforces limits on both how many recipients you can target in a single API call and how frequently you can initiate phone number verifications. Understanding these limits helps you design robust integrations that batch requests efficiently and recover gracefully when a limit is reached.

Sending API limits

The sending API does not impose a hard per-second request rate limit, but it does enforce per-request recipient limits that you must respect when batching outbound messages. For campaigns larger than these limits, split your recipients across multiple sequential or concurrent API calls.
If you need to send to very large volumes — tens of thousands of messages in a short window — contact SmsManager support to discuss high-volume arrangements and dedicated capacity.
A 200 response does not mean every message was dispatched. Check the rejected array in the response body to identify any recipients that were not accepted within a single call. Rejected entries do not count against rate limits — you can retry them immediately after resolving the underlying issue (such as topping up credit).

Verify API rate limits

The Verify API implements multi-level rate limiting to prevent abuse and protect both your account and individual users. Limits are enforced simultaneously at two levels:
  • Per-account (tenant): Caps the total number of new validation sessions your account can start within a rolling time window. This protects your overall quota.
  • Per-phone-number: Prevents a single phone number from being flooded with verification codes by limiting how many sessions can be started for that number within a time window.
When any of these limits is exceeded, the API returns an HTTP 429 response with one of the following error codes in the response body:

Handling rate limits

When you receive a 429 response, you should not retry immediately. Use exponential backoff with jitter to spread out retries and avoid thundering-herd conditions.

Verification attempt limits

Each validation session (started via POST /v1/validations) allows a limited number of code verification attempts before it is locked. Once a session reaches the maximum number of failed attempts, subsequent POST /v1/validations/{token}/verify calls return HTTP 429 with the message "Too many attempts". At that point, you must start a new validation session.
Display an attempt counter to your users (the attemptsRemaining field is returned in error responses) so they know how many tries remain before the session expires. This reduces frustration and unnecessary API calls.
Do not automatically retry a failed code verification in a tight loop — each failed attempt consumes one of the session’s limited tries. Prompt your user to re-enter the code manually.