The checkout flow
After you create a session, your customer completes payment on the hosted checkout page at the checkout_url. The page handles collecting the UPI payment, the transaction reference, and optional proof — you don't build these steps yourself.
What the customer does
On the checkout page, the customer pays the shown amount over UPI, then submits the 12-digit transaction reference (UTR) from their payment app. We match that reference against the incoming bank credit and confirm the payment.
Follow-up endpoints
These endpoints back the checkout page. They use the session token in the URL and do not require your API key. The hosted checkout page calls them for you; they are documented here so you understand the full lifecycle.
Submit UTR
POST /payments/session/{session_token}/submit-utrBody: {"utr":"312482855519"}. On success, returns {"status":"UTR_SUBMITTED","message":"UTR received — verifying payment"}.
Situation | Status | Response |
|---|---|---|
Missing UTR | 400 |
|
Invalid UTR format | 422 |
|
Unknown session | 404 |
|
Session already in a final state | 409 |
|
Session expired | 410 |
|
More than 10 submissions per minute for the same session | 429 |
|
Upload payment proof
POST /payments/session/{session_token}/proofSent as multipart/form-data with a file field named proof. Accepts JPG, PNG, WebP, or HEIC up to 5 MB. On success, returns {"ok":true,"uploadedAt":"..."}. Limited to 5 uploads per 15 minutes per session, and 10 per minute per IP address.
Cancel a session
POST /payments/session/{session_token}/cancelNo body required. Only sessions that are CREATED or UTR_SUBMITTED can be cancelled; the session becomes FAILED and a FAILED webhook is sent.
Situation | Status | Response |
|---|---|---|
Unknown session | 404 |
|
Status cannot be cancelled | 409 |
|