Configure Payment Modes


Payment mode configuration allows you to control which payment methods, instruments, and flows are available to customers during checkout. These preferences are passed directly within the Create Payment API request body, with no need for any dashboard-level configuration. Since the configuration is applied at a transaction level, it provides granular, per-order control over the checkout experience.

Note: This page documents the V2 schema. If your integration was built prior to the introduction of V2 and your requests either omit the version field or specify it as V1, please refer to the V1 documentation. V2 offers enhanced flexibility and finer control, and is recommended for all new integrations.

paymentModeConfig is nested inside paymentFlow.

{
  "merchantOrderId": "ORDER_123",
  "amount": 1000,
  "paymentFlow": {
    "type": "PG_CHECKOUT",
    "merchantUrls": {
      "redirectUrl": "https://www.yoursite.com/callback"
    },
    "paymentModeConfig": {
      "version": "V2",
      "enabledPaymentModes": [
        { "type": "UPI", "flows": ["INTENT"], "apps": ["phonepe", "gpay"] },
        { "type": "CARD", "types": ["CREDIT_CARD"], "networks": ["VISA", "MASTER_CARD"] },
        { "type": "NET_BANKING", "banks": ["HDFC", "ICIC", "SBIN"] }
      ]
    }
  }
}
ParameterData TypeMandatoryDescription
versionstringRequiredMust be "V2" to use the V2 schema. Omitting this field falls back to V1 behavior.
enabledPaymentModesArrayConditionalList of payment mode constraints that define the allowlist. Mutually exclusive with disabledPaymentModes.
disabledPaymentModesArrayConditionalList of payment mode constraints that define the blocklist. Mutually exclusive with enabledPaymentModes.

Payment Mode Constraint Object

Each element in enabledPaymentModes or disabledPaymentModes is a constraint object. The type field identifies the payment mode; additional fields are dimension filters specific to that type.

ParameterTypeMandatoryDescription
typeStringRequiredAccepted values: “UPI”, “CARD”, “NET_BANKING”, “CORPORATE_NET_BANKING”, “EMI”, “WALLET”.

UPI

ParameterTypeMandatoryDefaultDescription
flowsarray of stringsOptionalAll flowsFlows to allow or block: “INTENT”, “COLLECT”, “QR”.
appsarray of stringsOptionalAll appsUPI apps to allow or block (lowercase). For example: "phonepe", "gpay", "paytm".
instrumentsarray of stringsOptionalAll instrumentsInstrument types: "BANK_ACCOUNT", "RUPAY_CC", "CREDIT_LINE".

CARD

ParameterTypeMandatoryDefaultDescription
typesarray of stringsOptionalAll typesCard types: “CREDIT_CARD”, “DEBIT_CARD”.
networksarray of stringsOptionalAll networksCard networks: “VISA”, “MASTER_CARD”, “RUPAY”, “AMEX”, “DINERS_CLUB”.
variantsarray of stringsOptionalAll variantsCard tiers: “CONSUMER”, “PREMIUM”, “SUPER_PREMIUM”, “CORPORATE”.
geoScopesarray of stringsOptionalAll geographiesIssuing geography: “DOMESTIC”, “INTERNATIONAL”.

NetBanking

ParameterTypeMandatoryDefaultDescription
banksarray of stringsOptionalAll banksBank codes (uppercase). For example: `”HDFC”`, `”ICIC”`, `”SBIN”`. See Supported Banks for the full list.

Corporate NetBanking

ParameterTypeMandatoryDefaultDescription
banksarray of stringsOptionalAll banksBank codes (uppercase). Uses the same values as NET_BANKING. See Supported Banks for the full list.

EMI

ParameterTypeMandatoryDefaultDescription
typesarray of stringsOptionalAll typesEMI instrument types: “CREDIT_CARD”.

Wallet

ParameterTypeMandatoryDefaultDescription
walletsarray of stringsOptionalAll walletsWallet providers: “PHONEPE”.
Use CaseExample GoalRecommended Approach
App-Specific UPIShow only PhonePe and GPayenabledPaymentModes with type: "UPI", apps: ["phonepe", "gpay"]
Domestic OnlyBlock international cardsenabledPaymentModes with type: "CARD", geoScopes: ["DOMESTIC"]
Debit-Only FlowAllow only domestic debit VisaenabledPaymentModes with type: "CARD", types: ["DEBIT_CARD"], networks: ["VISA"], geoScopes: ["DOMESTIC"]
Enterprise PayrollRestrict net banking to specific banksenabledPaymentModes with type: "NET_BANKING", banks: ["HDFC", "ICIC"]
Total SuppressionHide net banking entirelydisabledPaymentModes with type: "NET_BANKING"

V1 and V2 schemas are mutually exclusive. Once you set "version": "V2", all constraints must follow the V2 schema. V1 type values (like UPI_INTENT or UPI_QR) are completely ignored in V2.

FeatureV1 SchemaV2 Schema
TriggerOmit version fieldSet "version": "V2" in paymentModeConfig
GranularityCoarse-grained (method-level)Fine-grained (instrument, network, app, variant, geography)
UPI SetupSeparate types: UPI_INTENT, UPI_QR, UPI_COLLECTSingle type: "UPI" filtered by flows, apps, instruments
Card Setuptype: "CARD" with cardTypes (basic)type: "CARD" filtered by types, networks, variants, geoScopes
NetBankingtype: "NET_BANKING" (no bank-level control)type: "NET_BANKING" filtered via banks list

enabledPaymentModes vs disabledPaymentModes

enabledPaymentModes: Only the methods and instruments matching your constraints will be shown to customers. All other payment options are suppressed.

disabledPaymentModes: The specified methods and instruments are hidden, and everything else remains available.

Important: You cannot use both enabledPaymentModes and disabledPaymentModes in the same request. Choose one approach per transaction.

Wildcard Behavior

Omitting a field from a constraint means “match all values for that dimension.” You only need to specify the dimensions you want to restrict.

{
  "type": "CARD",
  "types": ["CREDIT_CARD"]
}

This allows all credit cards regardless of network, variant, or geography, because networks, variants, and geoScopes are all omitted (wildcard).

Per-Transaction Scope

Payment mode configuration applies only to the specific Create Payment call in which it is passed. There is no persistent merchant-level configuration. Each order can have a different configuration.

Note: Only the first constraint for each type value is processed. If you include two objects with “type“: “UPI“, only the first one takes effect.

This example enables only GPay UPI intent payments and domestic Visa or Mastercard credit cards:

curl -X POST https://api.phonepe.com/apis/pg/checkout/v2/pay \
  -H "Content-Type: application/json" \
  -H "Authorization: O-Bearer <token>" \
  -d '{
    "merchantOrderId": "ORDER_123",
    "amount": 50000,
    "paymentFlow": {
      "type": "PG_CHECKOUT",
      "merchantUrls": {
        "redirectUrl": "https://www.yoursite.com/callback"
      },
      "paymentModeConfig": {
        "version": "V2",
        "enabledPaymentModes": [
          {
            "type": "UPI",
            "flows": ["INTENT"],
            "apps": ["phonepe"]
          },
          {
            "type": "CARD",
            "types": ["CREDIT_CARD"],
            "networks": ["VISA", "MASTER_CARD"],
            "geoScopes": ["DOMESTIC"]
          }
        ]
      }
    }
  }'

Payload Breakdown:

  • UPI: Shows only the PhonePe intent flow. Collect, QR, other apps, and UPI instruments like RuPay CC or Credit Line are hidden.
  • Card: Shows only domestic Visa and Mastercard credit cards. Debit cards, international cards, other networks, and EMI are hidden.
  • NetBanking: Not included in enabledPaymentModes, so it is hidden entirely.

Is this article helpful?