Setup
Please follow the common dLocal instructions to get set up with UPI. Next, make sure to enable UPI as a payment method on your configured account.Features
- Tokenization - Save payment methods for future use
- Delete tokens - Remove stored payment methods
- Partial refunds - Refund a portion of the captured amount
- Refunds - Full refund support
- Settlement reporting - Access to settlement reports
- Transaction sync - Automatic transaction status synchronization
Supported countries
dLocal supports transactions from buyers inIN.
Supported currencies
dLocal supports processing payments inINR.
Limitations
- Capture - Delayed capture is not supported
- Void - Transaction void is not supported
Integration
For UPI, the default integration is through a redirect to a hosted payments page. Start by creating a new transaction with the following required fields.payment_method.approval_url and the status is set to buyer_approval_pending.
Redirect the buyer to the approval_url so they can complete the payment. After approval the buyer is redirected to the redirect_url you provided when creating the transaction. Do not rely solely on the redirect - either poll the transaction or (recommended) rely on webhooks to detect the final status (for example capture_succeeded or failure states).
Recurring transactions
Recurring UPI payments are not confirmed in real-time. A transaction takes at least 24 hours (up to 48 hours) to be confirmed due to a mandatory upcoming payment notification rule in India. As a result, the UPI integration waits for an asynchronous callback (webhook) to receive the final payment status. The same process applies to the tokenization of a payment method, which only works for recurring or installments transactions. You can specify the payment frequency using the dLocal UPI connection options. The example below demonstrates how to configure a monthly payment that recurs for one year.Usage with Embed
When storing a UPI payment method with Embed, dLocal requires it to be set up as a recurring transaction. You can do this by setting thepaymentSource to recurring.
If this isn’t configured correctly, the transaction errors with “Payment method tokenization is only supported for recurring transactions.”.