Create a dynamic UPI QR for any amount. Your customer pays straight to your own UPI ID, and we confirm it from your Gmail in seconds. No KYC, no settlement delays, no cut of your money.
No bank integration, no payment aggregator. Just your UPI ID and your Gmail.
Add the UPI ID where you want money, then link the Gmail that receives your FamPay payment emails. Takes two minutes.
One API call returns a QR image and UPI link with a fixed amount. Show it in your bot, app or store.
Send the customer's UTR. We find the payment email, check the amount, and tell you it's paid.
Built for Telegram bots, digital stores and side projects that sell in India.
We search your inbox for the matching payment email, read the amount and confirm the UTR. Waits up to 30 seconds so slow emails still count.
Money moves from your customer's UPI app straight to yours. We never touch it.
Fixed-amount QR codes that open any UPI app. Valid for 10 minutes.
Every UTR works once, and the paid amount must match the QR you created.
Every payment, its status and your total collected, in one place.
Two calls, clean JSON. Works from Python, Node.js, PHP, or any Telegram bot library. Docs with a live playground.
Every account gets a private key. Rotate it in one click if it ever leaks.
Pick whichever is easier for you. You can switch anytime.
A 16-letter code from your Google account. Works with any Gmail that has 2-Step Verification.
One click on Google's own page. We get read-only access to your mail.
We built it so there's as little to trust as possible.
Payments go from your customer's UPI app directly to your UPI ID. No wallet, no payouts, no settlement delays.
App Passwords are encrypted at rest with AES-256-GCM. Account passwords are hashed with scrypt, never stored in plain text.
We search only for the UTR you ask about and only read those emails. Nothing is sent, deleted or marked as read.
Copy, paste, replace the key.
# 1. Create a QR for ₹100 curl -X POST https://YOUR_DOMAIN/api/payment/generate \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"amount": 100}' # 2. Verify with the UTR the customer sends you curl -X POST https://YOUR_DOMAIN/api/payment/verify \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"utr": "412345678901", "transaction_id": "TXN-..."}'
import requests API = "https://YOUR_DOMAIN" HEADERS = {"x-api-key": "YOUR_API_KEY"} # 1. Create a QR for ₹100 qr = requests.post(f"{API}/api/payment/generate", json={"amount": 100}, headers=HEADERS).json() txn_id = qr["data"]["transaction_id"] # 2. Verify with the UTR the customer sends you res = requests.post(f"{API}/api/payment/verify", json={"utr": "412345678901", "transaction_id": txn_id}, headers=HEADERS).json() print(res["status"]) # "success"
const API = 'https://YOUR_DOMAIN'; const headers = { 'x-api-key': 'YOUR_API_KEY', 'Content-Type': 'application/json' }; // 1. Create a QR for ₹100 const qr = await fetch(`${API}/api/payment/generate`, { method: 'POST', headers, body: JSON.stringify({ amount: 100 }) }).then(r => r.json()); // 2. Verify with the UTR the customer sends you const res = await fetch(`${API}/api/payment/verify`, { method: 'POST', headers, body: JSON.stringify({ utr: '412345678901', transaction_id: qr.data.transaction_id }), }).then(r => r.json());
No. Your customer pays from their UPI app directly to your UPI ID. We only generate the QR and check your Gmail for the payment confirmation email. We never receive, hold or move funds.
A FamPay UPI ID that receives payments, and the Gmail where FamPay sends "payment received" emails. Sign up, add your UPI ID, connect Gmail, and you get an API key straight away.
It's a 16-letter code you create in your Google account (with 2-Step Verification on) that lets an app read mail without your real password. We store it encrypted and use it only to search for payment emails. You can delete it on Google's App Passwords page anytime, and it stops working immediately.
Usually a few seconds after the payment email arrives. The verify call waits up to 30 seconds for the email, so most payments confirm in a single request.
No. Every UTR can be verified only once. When you verify against the QR you generated, the paid amount must match exactly, or verification fails.
Yes, that's what it was built for. Generate a QR, send the image to the user, ask for their UTR, and call verify. See the docs for Python and Node.js examples.
Free account. Your money, your UPI ID, your inbox.