---
updatedAt: 2026-09-08T05:39:47.000Z
---

Fetch the complete documentation index at: https://docs.payu.in/llms.txt. Use this file to discover all available pages before exploring further. Append .md to any documentation page URL to get its markdown version.

# Collect Payment with Rewards API

The **Collect Payment using Rewards** API (**\_payment** API) is used to initiate a payment transaction that combines reward points (TWID/Zillion) with other payment methods like Cards or UPI.

<Callout icon="📚" theme="info">
  ### Reference:

  The below procedure is for Merchant Hosted Checkout integration. For Server-to-Server (S2S) integration, refer to the following based on the payment method:

-  [Cards S2S](https://docs.payu.in/reference/_payment_s2s_classic_integration)

-  [UPI S2S](https://docs.payu.in/reference/_payment_s2s_upi_collection)
</Callout>

**Environment**

|            |                                   |
| :--------- | :-------------------------------- |
| Test       | <https://test.payu.in/_payment>   |
| Production | <https://secure.payu.in/_payment> |

HTTP Method: **POST**

## Request parameters

<HTMLBlock>{`
<style>
/* Target only the second column in the table */
.markdown-body table td:nth-child(2) {
  word-break: break-word !important;
}

/* Keep the first column from breaking unnecessarily */
.markdown-body table td:nth-child(1) {
  word-break: normal;
  white-space: nowrap;
}
</style>

<Table align={["left","left","left"]}>
  <thead>
    <tr>
      <th style={{ textAlign: "left" }}>
        Parameter
      </th>
      <th style={{ textAlign: "left" }}>
        Description
      </th>
      <th style={{ textAlign: "left" }}>
        Example
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style={{ textAlign: "left" }}>
        key <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> Merchant key provided by PayU during onboarding.
      </td>
      <td style={{ textAlign: "left" }}>
        KOEfPI
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        txnid <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The transaction ID is a reference number for a specific order that is generated by the merchant.
      </td>
      <td style={{ textAlign: "left" }}>
        ram1234
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        amount <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The payment amount for the transaction.
      </td>
      <td style={{ textAlign: "left" }}>
        1000
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        productinfo <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> A brief description of the product.
      </td>
      <td style={{ textAlign: "left" }}>
        Product Info
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        firstname <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The first name of the customer.
      </td>
      <td style={{ textAlign: "left" }}>
        Ashish
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        email <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The email address of the customer.
      </td>
      <td style={{ textAlign: "left" }}>
        test@gmail.com
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        phone <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The phone number of the customer.
      </td>
      <td style={{ textAlign: "left" }}>
        9876543210
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        surl <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The success URL where the customer is redirected after a successful payment.
      </td>
      <td style={{ textAlign: "left" }}>
        https://www.merchant-surl.com
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        furl <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The failure URL where the customer is redirected after a failed payment.
      </td>
      <td style={{ textAlign: "left" }}>
        https://www.merchant-furl.com
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        hash <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>String</code> The hash generated for the transaction.
      </td>
      <td style={{ textAlign: "left" }}>
        generated_hash_value
      </td>
    </tr>
    <tr>
      <td style={{ textAlign: "left" }}>
        split-info <br/>
        <code>mandatory</code>
      </td>
      <td style={{ textAlign: "left" }}>
        <code>JSON String</code> Contains split payment details including childPaymentInstruments, loyaltyDetails, and earnPaymentInstruments. <strong>For new TWID flow, must include loyaltyDetails block with loyaltyApiVersion and sessionId.</strong>
      </td>
      <td style={{ textAlign: "left" }}>
        See examples below
      </td>
    </tr>
  </tbody>
</Table>
`}</HTMLBlock>

<br />

> **Notes:**
>
> * The reward child (RD/TWID) **cannot be the first transaction**
> * RD is always the **second child** in the split workflow
> * Bank rewards do not work with saved-card or network-token flows unless `cardBin` and `cardLastFour` are passed

## Split-Info JSON Structure

The `split-info` parameter must be a valid JSON string with the following structure:

```json
{
  "childPaymentInstruments": [...],
  "loyaltyDetails": {
    "loyaltyApiVersion": 1,
    "sessionId": "sessionId11323"
  },
  "earnPaymentInstruments": [],
  "totalAmount": "1000.00",
  "consent": false
}
```

### loyaltyDetails Object

| Parameter         | Type   | Description                                                         | Example            |
| ----------------- | ------ | ------------------------------------------------------------------- | ------------------ |
| loyaltyApiVersion | Number | Identifies TWID API flow. 0 = legacy; 1 = new routing               | `1`                |
| sessionId         | String | Session identifier from Fetch Balance API. TWID validates on redeem | `"sessionId11323"` |

### childPaymentInstruments Parameters

### For Credit/Debit Card Child

| Parameter          | Description                                         | Example                   |
| ------------------ | --------------------------------------------------- | ------------------------- |
| name               | Payment instrument type                             | `"CC"`                    |
| bankCode           | Bank code for the payment method                    | `"CC"`                    |
| cardNumber         | Card number (for new cards not saved)               | `"5123456789012346"`      |
| storeCardToken     | PayU saved card token (when storecardTokenType = 0) | `"c4dba91483c91772bb23c"` |
| networkToken       | Network token (when storecardTokenType = 1)         | `"5123456789012346"`      |
| altId              | Alternative identifier for the card                 | `"5123456789012346"`      |
| storecardTokenType | 0 = PayU saved card; 1 = Network token (non-PayU)   | `0` or `1`                |
| cvv                | Card CVV                                            | `"345"`                   |
| validThrough       | Card expiry date (MM/YY)                            | `"12/27"`                 |
| ownerName          | Cardholder name                                     | `"test"`                  |
| transactionAmount  | Amount to be charged on this payment instrument     | `"997"`                   |
| userCredentials    | Merchant ID and mobile number (for saved cards)     | `"180012:9304204920"`     |
| additionalInfo     | Additional information object (for network tokens)  | See below                 |

### additionalInfo Object (for Network Tokens)

| Parameter   | Description                             | Example                         |
| ----------- | --------------------------------------- | ------------------------------- |
| tavv        | Token Authentication Verification Value | `"wAAAAAAPtP+g6IAmbSeg1gAAAA="` |
| last4digits | Last 4 digits of the card               | `"2346"`                        |

#### For UPI Child

| Parameter         | Description                                     | Example          |
| ----------------- | ----------------------------------------------- | ---------------- |
| name              | Payment instrument type                         | `"UPI"`          |
| bankCode          | Bank code for UPI                               | `"UPI"`          |
| vpa               | Virtual Payment Address (UPI ID)                | `"customer@psp"` |
| transactionAmount | Amount to be charged on this payment instrument | `"995"`          |

#### For Reward (RD) Child

| Parameter         | Description                                                                      | Example       |
| ----------------- | -------------------------------------------------------------------------------- | ------------- |
| name              | Payment instrument type (always "RD" for rewards)                                | `"RD"`        |
| bankCode          | Bank code for reward provider                                                    | `"TWIDLS"`    |
| transactionAmount | Reward amount to be redeemed                                                     | `"3"`         |
| rewardId          | Reward identifier from Fetch Balance API response                                | `270943`      |
| rewardName        | Brand name from `issuerDetailDTO.brandName` in Fetch Balance response (for TWID) | `"twid Cash"` |
| cardBin           | Card BIN (first 6 digits). Use "000000" for non-card rewards                     | `"512345"`    |
| cardLastFour      | Last 4 digits of card. Use "0000" for non-card rewards                           | `"2346"`      |

<Callout icon="📘" theme="info">
  ### **Reward Name Mapping**

  The `rewardName` value must match the `issuerDetailDTO.brandName` from the Fetch Balance API response when using TWID rewards. This field is **NOT applicable for Zillion** rewards.
</Callout>

### Notes

#### Transaction Ordering

* ❌ **The reward child (RD/TWID) CANNOT be the first transaction**
* ✅ RD must always be the **second child** in the `childPaymentInstruments` array
* Flow sequence: Core payment → Split-payment → Core payment → Loyalty

#### Bank Rewards Limitation

* ❌ Bank reward redemption does **not work** with:
  * PayU saved-card flows (when card BIN is unavailable)
  * Network-token flows (when card BIN is unavailable)
* ✅ **Workaround:** Pass `cardBin` and `cardLastFour` in the reward child object

#### Session Consistency

* ⚠️ **CRITICAL:** The `sessionId` in `loyaltyDetails` must be **identical** to the `sessionId` used in the Fetch Balance API request
* TWID validates this sessionId during the redemption process

## Sample Request

### Burn Points with Card (TWID)

````bash
curl -X POST "https://test.payu.in/_payment" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_MERCHANT_KEY" \
  -d "txnid=TXN123456" \
  -d "amount=1000" \
  -d "productinfo=Product Info" \
  -d "firstname=Ashish" \
  -d "email=test@gmail.com" \
  -d "phone=9876543210" \
  -d "surl=https://www.merchant-surl.com" \
  -d "furl=https://www.merchant-furl.com" \
  -d "hash=generated_hash_value" \
  --data-urlencode 'split-info={
    "childPaymentInstruments": [
      {
        "name": "CC",
        "bankCode": "CC",
        "cardNumber": "5123456789012346",
        "cvv": "345",
        "validThrough": "05/29",
        "ownerName": "Payu",
        "transactionAmount": "997"
      },
      {
        "name": "RD",
        "bankCode": "TWIDLS",
        "transactionAmount": "3",
        "rewardId": 270943,
        "rewardName": "twid Cash",
        "cardBin": "512345",
        "cardLastFour": "2346"
      }
    ],
    "loyaltyDetails": {
      "loyaltyApiVersion": 1,
      "sessionId": "sessionId11323"
    },
    "earnPaymentInstruments": [],
    "totalAmount": "1000.00",
    "consent": false
  }'
### Burn Points with Saved Card Flow (TWID and storecardTokenType = 0)

**Use Case:** PayU saved card with reward redemption

```bash
curl -X POST "https://test.payu.in/_payment" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_MERCHANT_KEY" \
  -d "txnid=TXN123456" \
  -d "amount=1000" \
  -d "productinfo=Product Info" \
  -d "firstname=Ashish" \
  -d "email=test@gmail.com" \
  -d "phone=9876543210" \
  -d "surl=https://www.merchant-surl.com" \
  -d "furl=https://www.merchant-furl.com" \
  -d "hash=generated_hash_value" \
  --data-urlencode 'split-info={
    "childPaymentInstruments": [
    {
      "name": "CC",
      "bankCode": "CC",
      "storeCardToken": "c4dba91483c91772bb23c",
      "userCredentials": "180012:9304204920",
      "cvv": "345",
      "ownerName": "test",
      "transactionAmount": "997",
      "storecardTokenType": 0
    },
    {
      "name": "RD",
      "bankCode": "TWIDLS",
      "transactionAmount": "3",
      "rewardId": 270943,
      "rewardName": "twid Cash",
      "cardBin": "000000",
      "cardLastFour": "0000"
    }
  ],
  "loyaltyDetails": {
    "loyaltyApiVersion": 1,
    "sessionId": "84664h99870030988ccr"
  },
  "earnPaymentInstruments": [],
  "totalAmount": "1000.00",
  "consent": false
  }
````

### Burn Points with Saved Card Flow Network Token Flow (TWID with storecardTokenType = 1)

**Use Case:** Network token (non-PayU saved card) with TAVV/cryptogram

```bash
curl -X POST "https://test.payu.in/_payment" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_MERCHANT_KEY" \
  -d "txnid=TXN123456" \
  -d "amount=1000" \
  -d "productinfo=Product Info" \
  -d "firstname=Ashish" \
  -d "email=test@gmail.com" \
  -d "phone=9876543210" \
  -d "surl=https://www.merchant-surl.com" \
  -d "furl=https://www.merchant-furl.com" \
  -d "hash=generated_hash_value" \
  --data-urlencode 'split-info={
    "childPaymentInstruments": [
    {
      "name": "CC",
      "bankCode": "CC",
      "networkToken": "5123456789012346",
      "storecardTokenType": 1,
      "cvv": "345",
      "validThrough": "12/27",
      "ownerName": "test",
      "transactionAmount": "997",
      "additionalInfo": {
        "tavv": "wAAAAAAPtP+g6IAmbSeg1gAAAA=",
        "last4digits": "2346"
      }
    },
    {
      "name": "RD",
      "bankCode": "TWIDLS",
      "transactionAmount": "3",
      "rewardId": 270943,
      "rewardName": "twid Cash",
      "cardBin": "000000",
      "cardLastFour": "0000"
    }
  ],
  "loyaltyDetails": {
    "loyaltyApiVersion": 1,
    "sessionId": "84664h99870030988yyr"
  },
  "earnPaymentInstruments": [],
  "totalAmount": "1000.00",
  "consent": false
  }
```

### Burn Points with ALT ID Flow (TWID)

**Use Case:** Alternative identifier flow with additionalInfo

```bash
curl -X POST "https://test.payu.in/_payment" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_MERCHANT_KEY" \
  -d "txnid=TXN123456" \
  -d "amount=1000" \
  -d "productinfo=Product Info" \
  -d "firstname=Ashish" \
  -d "email=test@gmail.com" \
  -d "phone=9876543210" \
  -d "surl=https://www.merchant-surl.com" \
  -d "furl=https://www.merchant-furl.com" \
  -d "hash=generated_hash_value" \
  --data-urlencode 'split-info={
    "childPaymentInstruments": [
    {
      "name": "CC",
      "bankCode": "CC",
      "altId": "5123456789012346",
      "cvv": "345",
      "validThrough": "12/27",
      "ownerName": "test",
      "transactionAmount": "997",
      "additionalInfo": {
        "tavv": "wAAAAAAPtP+g6IAmbSeg1gAAAA=",
        "last4digits": "2346"
      }
    },
    {
      "name": "RD",
      "bankCode": "TWIDLS",
      "transactionAmount": "3",
      "rewardId": 270943,
      "rewardName": "twid Cash",
      "cardBin": "000000",
      "cardLastFour": "0000"
    }
  ],
  "loyaltyDetails": {
    "loyaltyApiVersion": 1,
    "sessionId": "84664h99870030988yyr"
  },
  "earnPaymentInstruments": [],
  "totalAmount": "1000.00",
  "consent": false
}
```

### Burn Points with UPI (TWID)

**Use Case:** UPI VPA with reward redemption (Zillion example)

```bash
curl -X POST "https://test.payu.in/_payment" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_MERCHANT_KEY" \
  -d "txnid=TXN123456" \
  -d "amount=1000" \
  -d "productinfo=Product Info" \
  -d "firstname=Ashish" \
  -d "email=test@gmail.com" \
  -d "phone=9876543210" \
  -d "surl=https://www.merchant-surl.com" \
  -d "furl=https://www.merchant-furl.com" \
  -d "hash=generated_hash_value" \
  --data-urlencode 'split-info={
    "childPaymentInstruments": [
    {
      "name": "UPI",
      "bankCode": "UPI",
      "vpa": "customer@psp",
      "transactionAmount": "995"
    },
    {
      "name": "RD",
      "bankCode": "TWIDLS",
      "rewardId": 271508,
      "rewardName": "Zillion",
      "transactionAmount": "5"
    }
  ],
  "loyaltyDetails": {
    "loyaltyApiVersion": 1,
    "sessionId": "session_placeholder"
  },
  "earnPaymentInstruments": [],
  "totalAmount": "1000.00",
  "consent": false
  }
```

## Sample response

### Success scenario (TWID + Cards)

```json
{
  "mihpayid": "999091000010480",
  "mode": "SPLITPAY",
  "status": "success",
  "unmappedstatus": "success",
  "key": "KOEfPI",
  "txnid": "ram1234",
  "amount": "512",
  "discount": "0.00",
  "net_amount_debit": "512",
  "addedon": "2025-01-10 15:00:00",
  "productinfo": "Product Info",
  "firstname": "Payu-Admin",
  "email": "test@example.com",
  "phone": "8800108522",
  "hash": "29efcd4f7a8a9a60a61481d70e21baf5ba6e7a472716d9b99bd911ef5390240411107b959e5bc8cdabc31463d150d4e02578349afa20529b18e271f60dd6db59",
  "payment_source": "payuS2S",
  "PG_TYPE": "SPLITPAY-PG",
  "bank_ref_num": "1255",
  "error": "E000",
  "bankcode": "TWIDX",
  "error_Message": "No Error",
  "splitPayInfo": {
    "cc": {
      "name": "CC",
      "bankCode": "CC",
      "transactionAmount": "412"
    },
    "rd": {
      "name": "RD",
      "bankCode": "TWIDLS",
      "transactionAmount": "100"
    }
  }
}
```

### Success scenario (Zillion + UPI)

```json
{
  "mihpayid": "999091000010475",
  "mode": "SPLITPAY",
  "status": "success",
  "unmappedstatus": "success",
  "key": "KOEfPI",
  "txnid": "ram12345",
  "amount": "100",
  "discount": "0.00",
  "net_amount_debit": "100",
  "addedon": "2025-01-10 14:56:13",
  "productinfo": "Product Info",
  "firstname": "Payu-Admin",
  "email": "test@example.com",
  "phone": "8800**8522",
  "hash": "29efcd4f7a8a9a60a61481d70e21baf5ba6e7a472716d9b99bd911ef5390240411107b959e5bc8cdabc31463d150d4e02578349afa20529b18e271f60dd6db59",
  "payment_source": "payuS2S",
  "PG_TYPE": "SPLITPAY-PG",
  "bank_ref_num": "1254",
  "error": "E000",
  "bankcode": "ZRD",
  "error_Message": "No Error",
  "splitPayInfo": {
    "upi": {
      "name": "UPI",
      "bankCode": "UPI",
      "vpa": "kk@okaxis",
      "transactionAmount": "99"
    },
    "rd": {
      "name": "RD",
      "bankCode": "ZLS",
      "transactionAmount": "1"
    }
  }
}
```

### Failure scenario

```json
{
  "mihpayid": "20869277619",
  "mode": "CC",
  "status": "failure",
  "unmappedstatus": "failed",
  "key": "L43t1c",
  "txnid": "26ba7cd6a67b0a010542",
  "amount": "1.00",
  "cardCategory": "domestic",
  "discount": "0.00",
  "net_amount_debit": "0.00",
  "error": "E1903",
  "error_Message": "Authorization failed at Bank"
}
```