Payment Modes Version:V1 VS Version V2


This page documents the version:V1 schema for paymentModeConfig. Version:V1 is the original payment mode configuration schema and remains supported for merchants who integrated before version:V2 was introduced.

If you are starting a new integration, use version:V2. It provides finer control over card networks, variants, geography, UPI apps, instruments, and bank-level filtering. See Configure Payment Modes for the version:V2 reference.

You can use version:v1 in one of two ways.

  • Omit the version field from paymentModeConfig entirely, or
  • Set "version": "V1" explicitly

Both produce identical behaviour. Version:V1 and version:V2 schemas are mutually exclusive and once you set "version": "V2", all constraint objects must follow the version:V2 schema.

paymentModeConfig is nested inside paymentFlow. It is not a top-level field.

{
  "merchantOrderId": "ORDER_123",
  "amount": 1000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        { "type": "UPI_INTENT" },
        { "type": "UPI_QR" },
        { "type": "CARD", "cardTypes": ["CREDIT_CARD", "DEBIT_CARD"] }
      ]
    }
  }
}

Note: The version field is omitted above. You may also set "version": "V1" explicitly, both are equivalent.

ParameterTypeMandatoryDefaultDescription
versionstringOptionalV1Omit this field or set "V1" to use the version:V1 schema. Set "V2" to switch to the version:V2 schema.
enabledPaymentModesarray of objectsConditionalList of payment mode constraints that define the allowlist. Mutually exclusive with disabledPaymentModes.
disabledPaymentModesarray of objectsConditionalList of payment mode constraints that define the blocklist. Mutually exclusive with enabledPaymentModes.

Each element in enabledPaymentModes or disabledPaymentModes is a constraint object identified by its type field.

Important: version:V1 type values are different from version:V2. UPI is split into three separate types (UPI_INTENTUPI_QRUPI_COLLECT) rather than a single UPI type with a flows field. Using version:V2 type values (such as "UPI") in a version:V1 request will not work.

ParameterTypeMandatoryDefaultDescription
typestringRequiredThe payment mode to configure. Accepted values: "UPI_INTENT""UPI_QR""UPI_COLLECT""CARD""NET_BANKING".

UPI_INTENT

Controls UPI intent flow, the flow where the customer is redirected to a UPI app on their device.

ParameterTypeMandatoryDefaultDescription
typestringRequiredMust be "UPI_INTENT".

Note: version:V1 does not support filtering by UPI app or instrument. To restrict by app or instrument, migrate to version:V2 and use type: "UPI" with apps and instruments fields.

Example

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        { "type": "UPI_INTENT" }
      ]
    }
  }
}

UPI_QR

Controls UPI QR code flow, the flow where a QR code is shown on screen for the customer to scan with any UPI app.

ParameterTypeMandatoryDefaultDescription
typestringRequiredMust be "UPI_QR".

Example

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        { "type": "UPI_QR" }
      ]
    }
  }
}

UPI_COLLECT

Controls UPI collect flow, the flow where the customer enters their UPI ID (VPA) and receives a collect request in their UPI app.

ParameterTypeMandatoryDefaultDescription
typestringRequiredMust be "UPI_COLLECT".

Example

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        { "type": "UPI_COLLECT" }
      ]
    }
  }
}

CARD

Controls card payments. Version:V1 supports filtering by card type (credit or debit) using the cardTypes field.

ParameterTypeMandatoryDefaultDescription
typestringRequiredMust be "CARD".
cardTypesarray of stringsOptionalAll typesCard types to allow or block. Accepted values: "CREDIT_CARD""DEBIT_CARD". Omit to match all card types.

Note: Version:V1 does not support filtering by card network, variant, or geography. To filter by network (Visa, Mastercard, RuPay…), variant (consumer, corporate…), or geography (domestic, international), migrate to version:V2 and use type: "CARD" with networksvariants, and geoScopes fields.

Example: Allow credit cards only

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        {
          "type": "CARD",
          "cardTypes": ["CREDIT_CARD"]
        }
      ]
    }
  }
}

Example: Allow all card types

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        {
          "type": "CARD"
        }
      ]
    }
  }
}

NET_BANKING

Controls retail net banking payments. Version:V1 does not support bank-level filtering, you can only enable or disable net banking as a whole.

ParameterTypeMandatoryDefaultDescription
typestringRequiredMust be "NET_BANKING".

Note: Version:V1 does not support filtering by specific banks. To restrict net banking to a list of banks (for example, HDFC and ICICI only), migrate to version:V2 and use type: "NET_BANKING" with the banks field.

Example: Enable net banking

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "enabledPaymentModes": [
        { "type": "NET_BANKING" }
      ]
    }
  }
}

Example: Disable net banking

{
  "merchantOrderId": "ORDER_123",
  "amount": 50000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "disabledPaymentModes": [
        { "type": "NET_BANKING" }
      ]
    }
  }
}

Version:V1 provides coarse-grained, method-level control only. The following capabilities are not available in version:V1:

CapabilityVersion:V1Workaround
Filter UPI by app (GPay, PhonePe…)Not supportedMigrate to version:V2 — use type: "UPI" with apps
Filter UPI by instrument (RuPay CC, Credit Line…)Not supportedMigrate to version:V2 — use type: "UPI" with instruments
Filter cards by network (Visa, Mastercard, RuPay…)Not supportedMigrate to version:V2 — use type: "CARD" with networks
Filter cards by variant (consumer, corporate, premium…)Not supportedMigrate to version:V2 — use type: "CARD" with variants
Filter cards by geography (domestic vs. international)Not supportedMigrate to version:V2 — use type: "CARD" with geoScopes
Filter net banking by specific banksNot supportedMigrate to version:V2 — use type: "NET_BANKING" with banks
Corporate net banking controlNot supportedMigrate to version:V2 — use type: "CORPORATE_NET_BANKING"
EMI control (independent of cards)Not supportedMigrate to version:V2 — use type: "EMI"
Wallet controlNot supportedMigrate to version:V2 — use type: "WALLET"

To migrate from version:V1 to version:V2:

  1. Add "version": "V2" inside your paymentModeConfig object.
  2. Replace version:V1 type values with their version:V2 equivalents:
Version:V1 TypeVersion:V2 Equivalent
UPI_INTENT"type": "UPI", "flows": ["INTENT"]
UPI_QR"type": "UPI", "flows": ["QR"]
UPI_COLLECT"type": "UPI", "flows": ["COLLECT"]
CARD with cardTypes"type": "CARD" with types field
NET_BANKING"type": "NET_BANKING" (same, now supports banks filter)
  1. Remove the cardTypes field and replace with types for the CARD constraint.
  2. Test your integration to confirm behavior is as expected.

Important: Do not mix version:V1 and version:V2 type values in the same request. Once "version": "V2" is set, type values such as UPI_INTENTUPI_QR, and UPI_COLLECT are not recognized.

Head over to the next section to understand the complete reference of all accepted values for payment mode configuration fields.

Is this article helpful?