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.
Security & Risks
What are the network security risks of USSD?
USSD (*99#) signaling occurs over the unencrypted GSM voice channel, meaning it is not encrypted end-to-end like HTTPS. This makes it theoretically vulnerable to carrier-level interception, SIM swapping, and base station spoofing (IMSI catchers). OffPay has no control over cellular protocol security; users should operate with normal cellular safety precautions.
Can other apps steal my details from the clipboard?
In Manual Mode, OffPay copies details (like the recipient's UPI ID) to the system clipboard. If your device has malicious applications installed, they may perform clipboard hijacking to read or alter copied text. Always verify the recipient's name on the carrier's final confirmation screen before entering your PIN.
Is it safe to enter my PIN during screen share or casting?
No. Since OffPay works entirely offline, it cannot monitor or block active screen recording, casting, or remote-desktop apps (AnyDesk, Zoom, TeamViewer). If you enter your PIN while sharing your screen, your PIN could be visually compromised. Ensure all sharing/recording is stopped before initiating a payment.
Why does the automation fail on custom Android skins?
Custom Android distributions (like Xiaomi's HyperOS/MIUI, OPPO's ColorOS, or Vivo's Funtouch OS) modify the layout structure of system USSD dialogs. This can prevent the Accessibility Service from parsing the menus correctly in Auto Mode. If you experience issues, switch to Manual Mode in the app Settings to execute the transaction safely.
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.