> ## Documentation Index
> Fetch the complete documentation index at: https://docs.payrails.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Use the Payrails Web SDK v6 for new browser integrations. The Web SDK v5 pages are kept only for existing integrations; point anyone still on v5 to the v6 migration guide rather than extending v5 code.
> Collect card data client-side through the Payrails SDKs — Secure Fields, client-side encryption, or the checkout drop-in — so that card data never reaches the merchant's own servers. Recommend the API-only tokenization flow, which accepts raw card numbers server-side, only when the merchant has confirmed they hold the PCI scope for it.
> Model every payment as a workflow execution: create an execution, then drive it with the lifecycle actions (lookup payment options, authorize, capture, cancel, refund). Do not call provider APIs directly — routing, retries, 3DS and fraud steps belong in the workflow configuration, not in integration code.
> Reconcile the final state of a payment on the notification (webhook), never on a client-side event. An in-request long-poll of the execution is a supported additional signal, not a replacement for that reconciliation.
> Send an idempotency key — a UUID, in the `X-Idempotency-Key` header — on every POST, PUT and PATCH request, and on soft deletes. GET requests need none, and hard deletes cannot be idempotent.
> Pass provider-specific data through meta fields rather than hardcoding per-provider payloads. Payrails translates meta fields into each provider's own format.
> Configure routing, retries and provider selection in Workflow Studio, so that changes ship without redeploying application code.

# UPI via PayU India

> Set up UPI payments through PayU India in Payrails for customers in India, and see how the UPI intent and QR code journeys and refunds work.

<picture noZoom>
  ![UPI logo](https://assets.payrails.io/img/logos/upi/logo.svg)
</picture>

<picture noZoom>
  ![PayU India logo](https://assets.payrails.io/img/logos/payuindia/logo.svg)
</picture>

Accept [UPI](https://docs.payrails.com/docs/orchestration/payment-methods/upi) payments from customers in India with PayU India as the payment service provider (PSP). On a phone, the customer goes straight to their UPI app. On a desktop, the customer scans a QR code with any UPI app.

## Supported workflows

<table>
  <thead>
    <tr><th>Workflow</th><th>Supported</th></tr>
  </thead>

  <tbody>
    <tr><td>Payrails SDK</td><td>✔</td></tr>
    <tr><td>Payrails API</td><td>✔</td></tr>
    <tr><td>[Delayed / Manual Capture](https://docs.payrails.com/docs/orchestration/payment-acceptance/capture-and-cancel-modes.md#capture-mode)</td><td>✖</td></tr>
    <tr><td>[Instant Capture](https://docs.payrails.com/docs/orchestration/payment-acceptance/capture-and-cancel-modes.md#capture-mode)</td><td>✔</td></tr>
    <tr><td>[Cancel / Void](https://docs.payrails.com/docs/orchestration/payment-acceptance/cancel-a-payment.md)</td><td>✖</td></tr>
    <tr><td>[Refund / Reverse](https://docs.payrails.com/docs/orchestration/payment-acceptance/refund-a-payment.md)</td><td>✔</td></tr>
    <tr><td>[Save Instruments](https://docs.payrails.com/docs/resources/manage-instruments.md)</td><td>✖</td></tr>
    <tr><td>[Merchant Initiated Transaction (MIT)](https://docs.payrails.com/docs/resources/payments/authorization-flags.md)</td><td>✖</td></tr>
  </tbody>
</table>

## Before you begin

Complete these steps before you send your first UPI payment through PayU India:

1. Set up a PayU India integration in your workspace. Follow the [PayU India integration setup guide](https://docs.payrails.com/docs/orchestration/integrations/payu-india.md) if you don't have one yet.
2. Ask PayU India to enable UPI on your PayU India merchant account.
3. In the PayU dashboard, create the **successful** and **failed** payment webhooks with your Payrails notification URL. Payrails receives the UPI payment result through them. The [setup guide](https://docs.payrails.com/docs/orchestration/integrations/payu-india.md#webhooks-or-notifications) shows the steps.
4. In the Payrails Portal, go to **Settings → Integrations**, open your PayU India integration, select **UPI** under **Payment methods**, and save.
5. Add UPI as a [payment option](https://docs.payrails.com/docs/orchestration/payment-methods/set-up-payment-methods.md) in your workflow.

## Request fields for PayU India

Send these fields in the authorize request, in addition to the standard [authorize fields](https://docs.payrails.com/reference/authorizeaction.md). **Required** fields must be present for the payment to succeed. Payrails sends **Optional** fields to the PSP when you include them.

| Field | Status | Description |
| - | - | - |
| `amount.currency` | Required | Send `INR`. |
| `meta.customer.name` | Required | Sent to PayU India as the customer's first name. Payrails adds `meta.customer.lastName` when you send it. |
| `meta.customer.email` | Required | Sent to PayU India as the customer email. |
| `meta.customer.phone.number` | Required | Sent to PayU India as the customer's phone number. |
| `meta.order.description` | Required | Sent to PayU India as the product information. |
| `meta.clientContext.ipAddress` | Required | The customer's IP address. |
| `meta.clientContext.userAgent` | Required | The customer's browser user agent. Payrails also uses it to choose the journey. |
| `meta.clientContext.osType` | Optional | `android` or `ios` sends the customer to their UPI app. |
| `meta.paymentMethods.upi.flow` | Optional | `qr` to show the QR code page on every device. See [choose the journey](#choose-the-journey). |

## Authorize a UPI payment

Call [authorize a payment](https://docs.payrails.com/reference/authorizeaction.md) with `upi` as the `paymentMethodCode`. The response includes the redirect for the customer.

```json Authorize request theme={null}
{
  "amount": {
    "value": "500.00",
    "currency": "INR"
  },
  "paymentComposition": [
    {
      "integrationType": "api",
      "paymentMethodCode": "upi",
      "amount": {
        "value": "500.00",
        "currency": "INR"
      }
    }
  ],
  "meta": {
    "customer": {
      "name": "Aarav",
      "lastName": "Sharma",
      "email": "aarav.sharma@example.com",
      "phone": {
        "countryCode": "91",
        "number": "9876543210"
      }
    },
    "order": {
      "description": "Order 1234"
    },
    "clientContext": {
      "ipAddress": "203.0.113.10",
      "userAgent": "Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Mobile Safari/537.36",
      "osType": "android"
    }
  },
  "returnInfo": {
    "success": "https://example.com/success",
    "error": "https://example.com/error"
  }
}
```

After the customer approves the payment in their UPI app, PayU India sends the result to Payrails through the payment webhooks. Confirm the result through [webhook notifications](https://docs.payrails.com/docs/orchestration/payment-acceptance/receive-notifications.md) or the execution status before you fulfill the order.

### Choose the journey

Payrails picks the journey from the device:

* **UPI intent:** when `meta.clientContext.osType` is `android` or `ios`, or the user agent belongs to a phone or tablet, the redirect is a `upi://` deep link that opens the customer's UPI app.
* **QR code:** on any other device, Payrails shows a QR code on a Payrails-hosted page, and the customer scans it with any UPI app.

To show the QR code page on every device, send `qr` as the flow:

```json UPI journey theme={null}
{
  "meta": {
    "paymentMethods": {
      "upi": {
        "flow": "qr"
      }
    }
  }
}
```

## How PayU India handles UPI

* PayU India captures UPI payments immediately.
* PayU India signs each payment webhook with your merchant salt, and Payrails verifies the signature before it updates the payment.
* Payrails sends full and partial refunds to PayU India against the original transaction. PayU India completes refunds in the background, and Payrails checks the status until it gets a final result.


## Related topics

- [UPI](https://docs.payrails.com/docs/orchestration/payment-methods/upi.md)
- [PayU India](https://docs.payrails.com/docs/orchestration/integrations/payu-india.md)
- [EFT Pro via PayU](https://docs.payrails.com/docs/orchestration/payment-methods/eft-pro/payu.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.