Bind the session to the SIM.
SIM Binding locks a user's account to one SIM in one device. The SIM is verified at the network layer, then watched for the life of the session — and the moment it's swapped, cloned, or removed, the session is revoked. No code to intercept. No window for takeover.
The number is the identity. So attack the SIM.
Mobile numbers anchor login, payments, KYC, and recovery. That makes the SIM the highest-value target in the stack — and SIM-based fraud has climbed accordingly. SIM Binding closes the gap by proving possession at bind time and enforcing it for the whole session.
What breaks when the number alone is trusted
- SIM swapAttacker socials the carrier into porting the number to a new SIM.
- SIM cloningA duplicate SIM receives the same OTPs and call routing.
- Account takeoverThe next OTP resets the PIN — the wallet is drained.
- Device–SIM mismatchA valid session continues on a SIM that has quietly changed.
- OTP interception & replayCodes are phished, screenshotted, or captured in transit.
What SIM Binding holds true, end to end
- Possession is proven, not assumedThe user must prove the SIM is physically present before binding.
- The session is leashed to the SIMIt stays valid only while the exact bound SIM remains active.
- Any change is caught in real timeOS-level SIM events trigger validation against the binding record.
- Mismatch means instant revokeThe token is killed and re-authentication is forced — no grey area.
- Audit trail by defaultEvery bind, check, and revoke is logged for RBI / NPCI evidence.
Four layers. One source of truth.
Binding is built from four cooperating layers — prove the SIM is present, read what it is, store the 1:1 link, then watch it for the life of the session.
Three ways to prove the SIM.
Before binding, the SIM must be proven present. Pick by UX, telco support, and device capability — OTPless routes to the strongest available method and falls back automatically.
Silent Network Auth
The carrier confirms SIM ownership silently over the mobile-data channel. No SMS, no prompt, no user action.
- Zero friction, runs in the background
- No SMS cost or permissions
- Needs mobile data on the bound SIM
Outbound SMS token
The device sends an SMS carrying a one-time bind-token to a VMN. Because it originates from the SIM, the MSISDN cannot be spoofed.
- Strongest proof — SMS comes from the SIM
- Works without internet connectivity
- Needs SMS permissions and an active pack
OTP + sender-ID
An OTP is sent over a registered sender ID; the app validates the code, sender-ID authenticity, and device integrity together.
- Familiar UX, broad device reach
- Sender-ID check blocks spoofed routes
- Auto-read needs Android GMS 24.20+
| Attribute | Silent Network Auth | Outbound SMS token | OTP + sender-ID |
|---|---|---|---|
| Possession assurance | Network-grade | Highest | High |
| User friction | Zero-tap | One silent send | Reads OTP |
| Connectivity | Mobile data | None required | SMS delivery |
| Permissions | None | Phone · SMS | SMS read |
| Fallback order | Primary | Second | Third |
A changed SIM ends the session.
Binding is only as strong as how fast you notice a change. The SDK listens for every OS-level SIM event and re-validates against the binding record on the spot.
POST /sim/validate with the live SIM identifier.Recognised by NPCI for UPI.
Every UPI account must be bound to the SIM that holds the registered mobile number — NPCI and RBI treat it as a recognised 2FA factor. The legacy outbound-SMS flow is slow and opaque. SIM Binding via SNA makes it silent, fast, and audit-ready.
NPCI · RecognisedMeasured against outbound-SMS binding.
On first-time binding flows.
Silent — no SMS sent.
Bind once. Validate on every SIM event.
One SDK call binds the SIM after presence is verified. The SDK then watches SIM state and re-validates against your backend — you just handle the verdict.
import com.otpless.main.OtplessManager import com.otpless.dto.SimBindRequest // 1. Presence verified → bind the SIM in the chosen slot val req = SimBindRequest() req.setPhoneNumber("91", "7069914791") req.setSlot(0) otpless.bindSim(req, ::onBound) // 2. Listen for SIM-state changes for the session's life otpless.onSimChange { event -> val res = otpless.validateSim() // → /sim/validate if (res.status != "MATCH") { session.revoke() // kill token startReauth() // re-bind new SIM } }
Common questions.
Is SIM Binding mandatory for UPI apps in India?
Which presence method should we use?
Does it work with eSIM and dual-SIM devices?
How fast is revocation after a SIM change?
What permissions does the app need?
What stops a man-in-the-middle on the bind token?
Stop trusting the number. Bind the SIM behind it.
SNA-verified binding with instant revoke-on-change — NPCI-aligned and audit-ready. Talk to us about a binding pilot on your app.