OffPay needs Accessibility Service to auto-dial *99#. Watch the guide (takes about 2 minutes).
Watch Setup Guide →OffPay uses *99# (India's USSD-based UPI protocol) to send money, check balance, and scan QR codes entirely over your SIM's voice channel. Works on Airtel, Vi and BSNL with zero data.
A real payment on a real phone. Airplane mode on. No tricks.
Built around one constraint: no internet permission in the manifest. The app is physically incapable of making a network call.
Accessibility Service drives the carrier USSD dialog in the background. You stay in the app the whole time.
Camera reads merchant UPI QR codes. Parsed locally, with no network call to decode anything.
Check your bank balance over *99# the same way. No data needed.
Up to 200 transactions stored on-device with SQLCipher encryption. Swipe to delete, tap to retry.
Skip Accessibility altogether: manual mode opens your dialer pre-filled with the *99# sequence.
Every permission, every API call is on GitHub. Verify it yourself before installing.
offpay.vercel.app offers the same interface and QR scanner, and works on Android and iOS. Hands the *99# step to your native dialer. Installable from your browser. Runs offline after first load.
Safari → Share → Add to Home Screen
Chrome → menu → Install app
OffPay handles the carrier dialog automatically using Accessibility Service, keeping you in OffPay throughout the payment.
Copies the UPI ID and opens your dialer pre-filled with the *99# code. You navigate the menus yourself. No Accessibility Service needed.
More → full FAQ
Android APK, sideload, no Play Store. Or the PWA, which works on any phone with no install needed.
Setup guide · Source on GitHub · MIT License