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. 1

    Share the link

    The merchant shares a payment link or QR code on WhatsApp, Instagram, SMS, email or a printed poster.

  2. 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. 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. 4

    Merchant checks

    The merchant looks at their bank account or UPI app. ToroPay cannot see that credit.

  5. 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 seeStored asWhat it meansWhat happens next
StartedinitiatedThe customer opened the payment page but has not said they paid.If the money reached you anyway, you can still confirm it.
Abandonedinitiated (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 paidpendingThe customer tapped "I have paid". This is a claim, not proof.Check your bank or UPI app, then confirm or reject.
PaidsuccessYou confirmed the money arrived (or a signed provider webhook did).The order advances, loyalty points are awarded and a webhook fires.
RejectedfailedYou 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.