FAQ

Questions
answered.

Everything about how OffPay works, what it can and can't do, sourced from the app itself.


What is it
What is *99# UPI?
*99# is India's USSD-based UPI service built by NPCI. It works without internet. You dial a code, your bank responds through SMS-style menus over the voice channel, and you reply to send money. Works on any phone with a basic cellular signal.
Is OffPay on the Play Store?
Not currently. Download the APK from GitHub releases, or use the PWA on any phone (Android or iOS) without sideloading.
Do I need an account?
No account, no email, no sign-up. Your bank account is already linked to *99# by NPCI when you set up UPI. OffPay is just the interface.
The two modes
What are Auto and Manual mode?
Auto

OffPay handles the carrier USSD dialog automatically using Accessibility Service. You stay in the app the whole time.

Manual

Opens your dialer pre-filled with the *99# code. You navigate the menus yourself. No Accessibility Service needed.

Carriers & limits
Which carriers work?
Airtel, Vodafone (Vi), and BSNL: yes. Jio: no. That's a Jio network-level constraint, not an OffPay limitation.
AIRTEL ✓ VI ✓ BSNL ✓ JIO ✗
What are the transaction limits?
₹5,000 per transaction and ₹10,000 per day. These are NPCI-level limits for the *99# channel, not set by OffPay.
Setup & permissions
How do I enable banking on *99# first?
One-time setup to link your bank to the *99# channel. After this, OffPay handles everything.
1
Open your phone's dialer and call *99#
2
Enter your bank name when prompted (SBI, HDFC, ICICI…)
3
Follow on-screen prompts to link your bank account
Done once, never again.
How do I enable *99# in BHIM app?
If you use BHIM as your UPI app, toggle on the *99# service in BHIM settings once.
1
Open BHIM → tap your profile avatar (top-left initials)
2
Scroll down → tap Settings
3
Find "USSD service (*99#)" under Account settings → toggle ON
Why does it need Accessibility Service?
Android's only public USSD API can't navigate multi-step menus. Accessibility Service lets OffPay automatically type your amount, UPI ID, and PIN into the carrier's dialog so you don't have to. If you'd rather not, use Manual mode: it just opens your dialer instead.
Why does it need Call Phone permission?
To programmatically initiate USSD calls to *99#. OffPay never places regular phone calls, only USSD requests to the carrier. It also reads the active SIM's carrier name to warn you if you're on Jio (where *99# is unsupported).
Android 13+ won't let me enable Accessibility
Since OffPay is sideloaded, Android 13+ blocks restricted settings like Accessibility by default. The fix:
1
Settings → Apps → OffPay
2
Tap the ⋮ three-dot menu (top right)
3
Allow restricted settings → confirm with your PIN or fingerprint
4
Return to OffPay → enable Accessibility. It works now.
The setup video shows exactly where.
Payments & failures
Is my PIN safe?
Your PIN is held in volatile memory only, masked as •••• in any logs, cleared within 500ms of session end, never persisted, and never shared. The app has no INTERNET permission and is structurally incapable of sending anything anywhere.
What if a payment fails?
OffPay surfaces the carrier's exact error message. Common causes: wrong PIN, bank not linked to *99#, daily limit exceeded, wrong UPI ID, or weak signal. Tap the failed transaction in history to see the full reply and retry in one tap. A 25-second timeout prevents stuck sessions.
How does the overlay work?
In Auto mode, OffPay paints a branded overlay over the system USSD dialog so you only ever see OffPay's UI during a session. We never see your PIN, as it's typed locally on your device, never stored, and never sent anywhere.
PWA
What is the PWA and how is it different?
The web app at offpay.vercel.app has the same UI and QR scanner. It generates a tel: link that opens your native dialer pre-filled with the *99# code, and you complete the menus there. No Accessibility Service needed, works on Android and iOS.
Does the PWA work offline?
Yes. After the first load the PWA caches itself and runs fully offline. The *99# call goes over your SIM, with no internet needed for the transaction itself.