Updated

Payment status

Every status in plain words, the allowed transitions, and who can mark a payment as received.

Two pipelines

Direct UPI payment links use a merchant-confirmed status. Hosted provider checkouts use a signed webhook. The two are intentionally separate.

Direct UPI statuses

  • Started (stored as initiated): the checkout was opened, but the customer has not said they paid.
  • Abandoned (stored as initiated, older than 30 minutes): the customer did not finish in the hold window. It can still be confirmed if money arrived.
  • Customer says paid (stored as pending): the customer tapped "I have paid". This is a claim, not proof.
  • Paid (stored as success): the merchant confirmed the money arrived.
  • Rejected (stored as failed): the merchant marked it not received. A late arrival can still be confirmed as paid.

Who can change what

  • A customer can only move a Started payment to Customer says paid. They cannot settle a payment.
  • The owning merchant can confirm a payment and can undo a confirmation for 30 minutes.
  • An API key or OAuth token with write scope can do the same through the v1 API.
  • A signed provider webhook can settle a provider checkout, never a direct UPI link.

Provider checkout statuses

A provider payment moves pending -> processing -> paid, failed or expired. Once paid it can only move to partially_refunded, refunded or disputed.

Webhook events are stored by provider event id, so a duplicate delivery is ignored. The amount is checked against the order; a mismatch is flagged for review instead of being applied silently.

Late or out-of-order provider messages never move a payment backwards.

What fires when the status changes

A merchant webhook is dispatched for payment.confirmed and payment.rejected. Loyalty points are awarded on success and reversed when a success is undone. Subscription history is updated when the linked transaction settles.

What never happens

ToroPay does not mark a direct UPI payment paid on its own, does not read your bank account, does not move refunds and does not auto-debit subscriptions.