Work through it, tick as you go.
- User requests a codeSign-in, payment or sign-up
- Your app calls the verify APIOne request per code
- BroadNet delivers the codeOn the best available channelFallback if undeliveredSMSWhatsAppVoice
- User enters the codeChecked against the issued code
- VerifiedAccess granted
Channel strategy & fallback
- Define a channel waterfall per market (e.g. SMS → WhatsApp/RCS → voice call).Fallback should be time-boxed: if channel one isn't confirmed in N seconds, escalate.
- Prefer app-native verification where available (silent/OTP autofill, app-based push) to cut SMS dependency.
- Use voice OTP as a fallback in markets with poor SMS deliverability or for accessibility.
- Avoid sending the same OTP across two channels simultaneously — it doubles cost and AIT exposure.
Sender ID, templates & routing
- Register sender IDs where the market requires it; unregistered IDs are frequently dropped.Sender-ID pre-registration is mandatory in a growing number of markets.
- Use a dedicated, low-latency OTP route separate from marketing traffic.Never share a route between transactional OTP and promotional bulk.
- Keep template content minimal, branded, and consistent to pass content filters.
- Support autofill formats (e.g. the origin-bound one-time-code convention on the last line) to speed entry.
- Set a short validity_period so a delayed OTP expires instead of arriving stale.
Latency & retries
- Measure end-to-end latency to handset (submit → DLR), not just submit-accept latency.
- Set a resend cooldown and cap resends per user per window.Uncapped resends are the primary attack surface for SMS pumping.
- Trigger fallback on missing DLR within your latency budget, not only on explicit failure.
- Deduplicate: one logical verification = one code, even across retries, to avoid confusing the user.
- Instrument delivery rate, median/p95 latency, and conversion (code entered) per market.
Message & code design
- Use 6-digit numeric codes as a default; longer only where policy requires.
- Bind the code to the session/device and expire it server-side after first use or timeout.
- Localise the message body while keeping the code and brand token stable.
- Never include the code in a clickable link that could be phished; keep it copy/type only.
Fraud & AIT (artificially inflated traffic) protection
AIT / SMS pumping fraud generates real OTP requests to numbers the fraudster controls, inflating your bill with no legitimate user. This is the highest-ROI section for most senders.
- Rate-limit OTP requests per phone number, per IP, and per device fingerprint.
- Add friction (CAPTCHA / challenge) when velocity spikes from a source.
- Block or throttle high-risk destination ranges and known-bad number prefixes.Sudden traffic to an unusual country range is the classic AIT signature.
- Monitor conversion rate per destination — pumped traffic shows requests with near-zero code entry.
- Use number-intelligence / HLR lookup to reject invalid or high-risk numbers before sending.
- Work with a provider that offers AIT detection and will act on suspicious patterns.
Standards and regulator references cited in this guide. BroadNet is a GSMA Associate Member and MEF member operating carrier-grade messaging since 2003.