Skip to content
Customer Pro

Billing

Payments

Every Razorpay transaction your workspace collected, and how to rescue a stuck one.

On this page

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.

Collected totals across the top, filters, and the transaction log with a Refresh action on stuck rows.
Collected totals across the top, filters, and the transaction log with a Refresh action on stuck rows.

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.

You collect on an order

A cart that arrived through Orders gets a link sent in the same thread.

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

Where to go next #