instant, source-verified

Verify UPI payments
the instant they land.

Paste a UTR, get back a verified transaction — amount, sender, and transaction ID, confirmed straight from the source. No payment gateway, no dashboard, just an endpoint.

verify.sh
# verify a payment by UTR
curl "https://gatewaylive.qzz.io/api/check
?mail=you@gmail.com
&apppass=xxxxxxxxxxxxxxxx
&utr=301268197755"

# response
{
  "status": "success",
  "data": {
    "transaction_id": "FMPIB5255631361",
    "amount": 10,
    "utr": "301268197755",
    "sender_name": "Anuj Patel",
    "verified": true
  }
}
// how it works

Three steps, one source of truth.

No third-party payment processor sits in the middle — your own account stays in control end to end.

1

User sends payment + pastes UTR

Your bot or site collects the UTR (or transaction ID) the payer gets from their UPI app.

2

Ton checks the record

The API confirms the transaction actually happened by cross-referencing where it landed.

3

Match, then credit

A confirmed, unused transaction comes back verified — your app credits the user.

// live tester

Try a real check.

Runs against whatever base URL you deploy this project to. Nothing here is sent to us — the request goes straight from your browser to your own API.

The base URL of your hosted payment API.
Generated at myaccount.google.com/apppasswords — never your real Gmail password.
idle
// response will appear here
// documentation

API reference

One endpoint. Query params in, JSON out.

GET /api/check

Searches the given Gmail inbox for an email matching the UTR, extracts transaction details, and confirms whether the amount matches. Returns within a few seconds depending on inbox size.

Parameters

paramtyperequireddescription
mailstringyesGmail address to search.
apppassstringyesGmail App Password (16 characters, spaces removed).
utrstringyesUTR or transaction reference to search for.

There's no amount input — the amount is read straight out of the matching email and returned in the response. Check data.amount in your own app before crediting anything.

Response

// verified match
{
  "status": "success",
  "data": {
    "transaction_id": "FMPIB5255631361",
    "amount": 10,
    "utr": "301268197755",
    "sender_name": "Anuj Patel",
    "verified": true,
    "reason": null
  }
}

// no matching email found
{ "status": "success", "data": { "verified": false, "reason": "no_matching_email_found" } }

// this UTR was already verified once before
{ "status": "success", "data": { "verified": false, "reason": "already_used" } }

Code samples

cURL
Node.js
Python
curl "https://gatewaylive.qzz.io/api/check\
?mail=you@gmail.com\
&apppass=xxxxxxxxxxxxxxxx\
&utr=301268197755"

Security notes

This project reads your Gmail inbox to confirm payments. A few things to know before you rely on it:

Amount is not checked server-side. verified: true means "an unused UTR was found in the inbox" — it does not confirm the amount your user claims to have paid. Your app must compare data.amount from the response against what the user actually claims before crediting them.
App passwords grant real inbox access. Prefer storing your own Gmail credentials as server-side environment variables over passing them in a public query string, if you're always checking the same inbox.