Smart routing and failover
Per-country route order, promoted automatically when another route delivers at least 10 points better. A permanent rejection moves to the backup route with a fresh code.
Auskal OTP sends each code on the best route for its country, switches route automatically when a carrier rejects it, and only says "delivered" when the phone confirms it.
Most OTP tools stop at "sent". Auskal follows the message to the handset and back, so you can see where a code got stuck.
Per-country route order, promoted automatically when another route delivers at least 10 points better. A permanent rejection moves to the backup route with a fresh code.
Accepted, sent, delivered, failed or unknown. Delivery reports from Infobip and Twilio are matched, de-duplicated and reconciled if they never arrive.
Country allow-lists, limits per phone, IP, tenant and country, daily spend caps and monthly quotas stop SMS pumping before it costs you.
Delivery rate, median delivery time and spend by country and provider. Tenants, API keys, routes and a test console in one place.
One script gives you a phone field with 242 country codes, code boxes with paste and Android autofill, resend timers and WhatsApp fallback.
Codes are stored only as keyed hashes. Phone numbers are masked in logs and purged after 30 days. Webhooks are signed.
This demo runs in sandbox mode: no real SMS is sent and the code appears on screen. Numbers ending in 0000 show a failed delivery; 2222 shows a missing report.
Open the checkout template · Login template · Signup template
Primary and backup route per destination, with estimated cost per verification. Prices are list or account rates as of 5 Nov 2026, in USD; set your own in config/routes.json.
| Destination | Primary | Est. USD | Backup | Est. USD | Why |
|---|
Try live codes on real phones first. When you're happy with delivery, choose a plan.
Send from your server, verify, and you're finished. Or use the browser widget with a publishable key, then confirm the token on your server.
# 1. send curl -X POST https://sms.auskal.tech/v1/verifications \ -H "Authorization: Bearer $AUSKAL_SECRET_KEY" \ -d '{"to":"+67570123456","purpose":"login"}' # → {"id":"otp_…","delivery":{"status":"accepted"}, …} # 2. check curl -X POST https://sms.auskal.tech/v1/verifications/otp_…/check \ -H "Authorization: Bearer $AUSKAL_SECRET_KEY" \ -d '{"code":"482915"}' # → {"valid":true,"status":"verified","verification_token":"…"}