SMSLocal
OTP & Transactional

OTP retry and failover logic

If the primary route fails, we fail over to the next-fastest one before your user even sees a delay.

3 min readUpdated 13 Mar 2026

OTP sends automatically retry on failure, with a per-channel and per-carrier retry policy that respects operator capacity and your own rate limits.

The default retry ladder

  1. 01Send on the primary route with a 7-second timeout.
  2. 02On failure or timeout, failover to the second-fastest route for that operator.
  3. 03If both SMS routes fail, automatically fall back to WhatsApp OTP (if enabled and the user has WhatsApp).
  4. 04If WhatsApp also fails, fall back to voice OTP as a last resort.
  5. 05Return a final status to your webhook within 12 seconds.

You can tighten or relax this ladder per message by passing a retry_strategy in the send payload.

Did this article help?

If something isn't clear or the steps don't match what you're seeing, tell us and we'll fix the doc the same day.