How it works
Two payment pipelines. One rule: nobody guesses whether money arrived.
ToroPay handles direct UPI payment links and optional aggregator checkouts differently. This page explains both, using the same status words you see in the dashboard.
Default
Direct UPI payment link
Money goes from the customer to your UPI ID. The customer says they paid; you check your bank or UPI app and confirm. No aggregator, no fee, no custody.
Optional
Provider checkout
A hosted checkout can use Razorpay or Cashfree. Their signed webhook settles the payment after ToroPay verifies the signature and the amount.
The direct UPI path, step by step
- 1
Share the link
The merchant shares a payment link or QR code on WhatsApp, Instagram, SMS, email or a printed poster.
- 2
Customer pays
The link opens a UPI intent. The customer reviews the payee name and amount, then approves the payment in their own UPI app.
- 3
Customer says paid
Back on the ToroPay page, the customer taps "I have paid". The payment moves to "Customer says paid" - a claim, not a confirmation.
- 4
Merchant checks
The merchant looks at their bank account or UPI app. ToroPay cannot see that credit.
- 5
Merchant confirms
The merchant marks the payment paid. The order advances, loyalty points are awarded and any subscribed webhook fires.
What each status means
The dashboard uses plain words. The database stores a shorter set of values.
| You see | Stored as | What it means | What happens next |
|---|---|---|---|
| Started | initiated | The customer opened the payment page but has not said they paid. | If the money reached you anyway, you can still confirm it. |
| Abandoned | initiated (older than 30 minutes) | The customer started but did not finish within the hold window. | Same as Started: confirm it manually if the money arrived. |
| Customer says paid | pending | The customer tapped "I have paid". This is a claim, not proof. | Check your bank or UPI app, then confirm or reject. |
| Paid | success | You confirmed the money arrived (or a signed provider webhook did). | The order advances, loyalty points are awarded and a webhook fires. |
| Rejected | failed | You marked the payment as not received. | A late payment can still be confirmed as received. |
Who can change a payment
The customer
Can: Say they have paid. That moves a started payment to "Customer says paid".
Cannot: Mark a payment as paid, or change a payment that is already final.
The merchant
Can: Confirm or reject a direct UPI payment after checking their own bank or UPI app.
Cannot: Undo a confirmation more than 30 minutes after making it.
A signed provider webhook
Can: Settle a hosted checkout payment (Razorpay, Cashfree or the mock provider) after HMAC verification and an amount check.
Cannot: Settle a direct UPI payment link. There is no UPI provider webhook.
An API key or AI assistant with write scope
Can: Confirm or reject payments through the v1 API, including the live workspace.
Cannot: Do anything the merchant could not do. Every action is audit-logged.
The provider path, if you enable it
When a hosted checkout uses an aggregator, ToroPay creates the provider session and waits for a webhook. The webhook's raw body is verified with the provider's signing secret before anything is parsed. The event id is stored so a retry cannot be applied twice, and the amount is checked against the order. A mismatch is flagged rather than silently accepted.
A payment can move from pending to processing to paid, failed or expired. Once paid, it can only move to a refund or dispute state. A late success after a failure is still accepted, because money can arrive out of order.
What ToroPay never does
It does not hold funds, settle money, auto-confirm a direct UPI credit, move a refund, or auto-debit a subscription. Those are not configuration choices - the product has no code path for them.
Questions
Does ToroPay confirm a UPI payment automatically?
No. For a direct UPI payment link, the customer says they paid, then the merchant checks their own bank or UPI app and confirms it. ToroPay has no bank feed that can verify every UPI credit.
Can a customer mark their own payment as paid?
No. A customer can only mark a started payment as "Customer says paid", which is a claim. Only the merchant, a signed provider webhook, or an authorised API client can mark it paid.
What if the customer paid but never tapped "I have paid"?
The payment stays "Started" or becomes "Abandoned" after 30 minutes. The merchant can still open it and confirm the payment if the money arrived.
Can a confirmation be undone?
Yes, within 30 minutes. A confirmed payment can only be moved to "Rejected" in that window. After that it is final.
Does ToroPay hold or settle the money?
No. Money moves from the customer to the merchant’s own UPI ID. There is no ToroPay balance, wallet, escrow or settlement step.
Can an AI assistant confirm payments?
Yes, if the merchant connects it through OAuth with the write scope. The consent screen says "Create and confirm payments on your behalf". The merchant can revoke access from Settings, and every change is recorded.
Do subscriptions auto-debit the customer?
No. Each billing cycle creates a fresh payment link. The customer pays it like any other UPI payment.
Go deeper
The documentation covers payment links, statuses, webhooks, the API and the MCP connector. Each page also has a Markdown version for tools and assistants.