Handling OTP errors and rate limits
Build resilient verification: timeouts, refunds for missed codes, retry/backoff, and respecting rate limits.
Verification is inherently flaky — codes occasionally don't arrive and pools sell out. Resilient code handles that gracefully.
Missed codes
If no SMS arrives within your window, cancel the order — you're refunded, so a miss costs nothing.
try:
code = wait_for_otp(order.order_id, timeout=120)
except TimeoutError:
client.orders.cancel(order.order_id) # refunded
# retry in another country/service based on live availability
Rate limits
The API returns 429 when you exceed your plan's RPM. Back off exponentially and retry — don't hammer.
Sold-out pools
A create call can fail if a (country, service) pool is empty. Pick the next option from the live availability the pricing endpoints report, rather than retrying the same dead pool.
Ready to build? Create a free Eveses account, top up a wallet, and grab your API key — no KYC. See the API docs or live pricing.