This is money moving in the other direction from the rest of the Billing section. Everything here is cash your customers paid you after being sent a payment link over WhatsApp. What you pay for Customer Pro lives on Invoices.
Where a payment comes from #
Payments are not created on this screen. A row appears when something asks for one:
An AI agent closes a sale
Agents have a built-in request_payment tool. Mid-conversation, the agent asks for an amount and the customer gets a link without a human touching it.
Your own system asks
The API endpoint takes a contact, an amount in paise and a tier name, and returns the payment it created.
Whichever route, the same thing happens: a hosted Razorpay checkout is created for the exact amount, a seven-character short code is minted for it, and the short link is sent to the contact over WhatsApp.
The link your customer clicks #
The short link is public. Anyone holding it can open it without an account: it resolves the code and redirects straight to the Razorpay checkout page. That is deliberate — a customer paying you should never have to sign in to anything of yours.
An unknown code returns a plain 404 page. A link past its expiry returns 410 and says so. Expiry is chosen when the payment is requested: 24 hours, 7 days, or never.
Statuses and filters #
| Field | What it does |
|---|---|
| Pending | Requested, link live, not paid yet. |
| Paid | Razorpay confirmed the money. The contact is tagged and a thank-you goes out over WhatsApp. |
| Failed | The customer attempted payment and it was declined. |
| Expired | The link ran past its expiry unpaid. |
| Refunded | Paid and returned. |
The four cards across the top count your whole history, not the filtered view: total collected across paid payments, and counts of paid, pending and failed. Below them you can filter the log by status and by the last 24 hours, 7 days or 30 days. The log itself shows the time, the tier name, the amount, the payment type, the status and the Razorpay payment ID once there is one.
Rescuing a stuck payment #
Normally Razorpay tells us the moment a payment succeeds and the row updates itself. When that message never arrives — a webhook not registered, a bad signing secret, a temporary failure — the customer's money has moved but your log still says pending.
Pending rows that have a Razorpay link carry a Refresh button. It asks Razorpay directly about that one payment and applies whatever it finds: confirmed as paid, marked expired if the link had lapsed, or no change if Razorpay still shows it unpaid. If Razorpay cannot be reached you get the error back rather than a silent no-op.