| Role | Read conversations | Operator reply | Read templates | Create / delete templates | Connect / reconfigure channel |
|---|---|---|---|---|---|
| Owner | Allowed | Allowed | Allowed | Allowed | Allowed |
| Accountant | Not allowed | Not allowed | Not allowed | Not allowed | Not allowed |
Overview
Stop chasing customers for screenshots of UPI payments. Neev raises a Razorpay payment link straight off an invoice — the customer pays by UPI, card or NEFT — and when the money lands, the invoice marks itself paid. No re-keying, no "did it come or not" phone calls. The link carries the invoice number, so the payment comes home to the right bill on its own.
Razorpay turns on the moment the Owner adds the Razorpay keys (Key ID, Key Secret and Webhook Secret) to the channel settings. Until those keys are present, Neev runs a built-in stub that fakes links to stub.razorpay.com so you can try the flow in dev — but no real money moves, and a live deployment refuses to start without the keys set.
Where to find it
Payment links are raised from an invoice, so the work lives on the money screens, not a separate Razorpay page.
- Invoice detail —
/invoices/[id]. Open a finalized invoice and use its payment-link action; the short link appears on the invoice once created. - Payments —
/payment-record. Where received money is recorded and reconciled against invoices. - Keys and channel setup —
/settings/channels. Owner-only. This is where the Razorpay Key ID, Key Secret and Webhook Secret are stored.
Razorpay is web-only. The webhook that closes the loop is a server endpoint (/api/webhooks/razorpay) — you never open it; Razorpay calls it for you.
Key concepts
- A payment link is a short Razorpay URL (UPI / card / NEFT) tied to one invoice. It carries the invoice as its reference ID, which is how the payment finds its way back to the bill.
- A webhook is Razorpay phoning Neev when something happens — most importantly the
payment_link.paidevent. Neev checks thex-razorpay-signatureheader against your Webhook Secret before trusting it, so a forged "you got paid" message is rejected. - Reconcile means matching received money to the open invoice. When a link is paid, Neev finds the invoice that link was raised for, records a captured payment, sums every captured payment on that invoice, and flips it to paid, partial or overpaid.
- An idempotency key stops a retried request from charging or recording twice. Razorpay calls are capped at 5 per second and carry an
X-Razorpay-Idempotencykey so a hiccup never doubles a payment.
Common workflows
Go to /settings/channels and enter the Razorpay Key ID, Key Secret and Webhook Secret. In the Razorpay dashboard, point the webhook at /api/webhooks/razorpay and use the same Webhook Secret. Without these, links stay in stub mode.
Open the finalized invoice at /invoices/[id] and create a payment link. Neev sends Razorpay the invoice total (in paise), the invoice as reference, and the customer's name, email and phone. Razorpay texts and emails the customer for you.
The customer opens the short link and pays by UPI, card or NEFT. Nothing for you to do here.
Razorpay fires the payment_link.paid webhook. Neev verifies the signature, records a captured payment against that exact invoice, totals all captured payments, and sets the invoice to paid, partial or overpaid.
If money arrives in instalments, each paid link records another captured payment against the same invoice. Neev re-sums every captured payment and moves the invoice to partial, paid or overpaid — no manual tallying.
Role notes
Only two roles touch Razorpay here, and they split cleanly: the Owner sets up the keys, the Accountant works the money.
| Role | Set Razorpay keys (channel settings) | Raise payment link | Record / reconcile payment | Void invoice |
|---|---|---|---|---|
| Owner | Allowed | Allowed | Allowed | Allowed |
| Accountant | Not allowed | Allowed | Allowed | Not allowed |
- Owner holds every non-Pack permission, so the Owner configures the Razorpay keys on
/settings/channels(Owner-only) and can do anything the Accountant can. - Accountant owns the invoice-payment surface — raising payment links, recording payments and reading financial reports. The Accountant cannot void or cancel an invoice (that is Owner-only), does not finalize or generate invoices, and has no access to channel settings or platform admin. So if a link was raised against the wrong bill, the Accountant records the payment as it lands — they cannot make the invoice itself disappear.
Tips & time-savers
The payment link already carries the invoice number as its reference, so when the customer pays you don't pick the invoice by hand — Neev matches it for you. Just finalize the invoice, hit the payment-link action, and let the webhook close the loop. One less daily reconciliation chore.
Razorpay also messages the customer by SMS and email the moment the link is created, so you don't have to forward it yourself — though you can still paste the short link into a WhatsApp chat if the customer prefers it there.
Gotchas
The auto-reconcile only fires when your Webhook Secret in Neev matches the one in your Razorpay dashboard. If they differ, Razorpay's "paid" call fails the signature check and is rejected — the customer's money is safely with Razorpay, but the invoice stays unpaid in Neev until you fix the secret. Double-check both secrets are identical when you set up the channel.
If the Razorpay keys are missing on a live deployment, Neev refuses to start — that is on purpose, so you never accidentally raise fake stub links in production. Add the keys before going live, not after.