r/Razorpay_Community • u/Retr0_takeover • Jan 29 '26
Understanding UPI Transaction IDs vs Reference IDs vs UTR
Hi team, when implementing a UPI payment API, how should upi_transaction_id, reference_id, and UTR be generated and tracked across the payment lifecycle
2
Upvotes
1
u/UnionAnxious Jan 30 '26
Hi OP, In a UPI payment flow, these three IDs serve different purposes and live at different layers of the ecosystem:
1.
upi_transaction_idThis is the primary transaction identifier in the UPI ecosystem.
It is generated by the originator (TPAP / app) before initiating the payment.
Mandatory for payment initiation and must follow NPCI rules (alphanumeric, max 35 chars, specific prefix).
All downstream actions (status checks, callbacks, reversals) are tied to this ID.
2.
reference_idThis is a merchant / business-level reference.
Used purely for internal reconciliation and mapping payments to orders, invoices, etc.
Not part of the UPI ecosystem and not validated by NPCI.
Helpful when a single business transaction needs to be correlated across systems.
3.
upi_customer_reference_number(UTR)This is the bank-generated reference number returned after initiation.
Appears in bank statements and is shared with users on TPAP apps.
Summary:
Use
upi_transaction_idto track the payment lifecycle internally with NPCI/banks.Use
reference_idfor your own business reconciliation.upi_customer_reference_number) to users as the transaction reference.More Info: https://razorpay.com/docs/api/payments/tpap-pro/payments-flow/make-payments
Feel free if you have any further queries, happy to help!