Skip to main content
POST
/
ppi
/
wallet
/
debit
curl --request POST \
  --url https://api.cashfree.com/ppi/wallet/debit \
  --header 'Content-Type: application/json' \
  --header 'x-api-version: <x-api-version>' \
  --header 'x-client-id: <api-key>' \
  --header 'x-client-secret: <api-key>' \
  --data '
{
  "debit_id": "DEBIT420984",
  "user_id": "USER827364",
  "wallet_id": "WALLET936721",
  "cf_sub_wallet_id": "35246543210987654321",
  "amount": 600,
  "remarks": "Purchase of electronics item",
  "notes": {
    "example_key": "example_value"
  }
}
'
{
  "debit_id": "DEBIT420984",
  "user_id": "USER827364",
  "cf_debit_id": "8901234567890123456",
  "wallet_id": "WALLET936721",
  "sub_wallet": {
    "cf_sub_wallet_id": "35246543210987654321",
    "name": "Gift Wallet",
    "type": "GIFT_PPI",
    "status": "ACTIVE",
    "balance": 1500.75,
    "available_balance": 1500.75,
    "funds_on_hold": 0
  },
  "applied_gift_codes": [
    {
      "code": "GHO-8900-HKDH-8899",
      "amount_debited": 100,
      "value": 100,
      "expiry": "2026-07-28T10:30:00Z"
    },
    {
      "code": "NMK-8454-JKJD-4224",
      "amount_debited": 500,
      "value": 600,
      "expiry": "2026-07-28T10:30:00Z"
    }
  ],
  "status": "SUCCESS",
  "amount": 600,
  "remarks": "Purchase of electronics item",
  "initiated_at": "2025-07-28T10:30:00Z",
  "processed_at": "2025-07-28T10:30:00Z",
  "notes": {
    "example_key1": "example_value1",
    "example_key2": "example_value2"
  }
}
For SMALL_PPI and FULL_KYC_PPI sub-wallets, the auth object with mode: OTP_VERIFICATION is required to initiate a debit. To complete the transaction, call the Verify Wallet Debit API. This two-step flow does not apply to GIFT_PPI or CLOSED_LOOP_PPI sub-wallets.

Authorizations

x-client-id
string
header
required

Your unique client identifier issued by Cashfree. You can find this in your Merchant Dashboard.

x-client-secret
string
header
required

The secret key associated with your client ID. Use this to authenticate your API requests. You can find this in your Merchant Dashboard.

Headers

x-api-version
string
default:2025-11-01
required

API version to be used. Format is in YYYY-MM-DD.

Example:

"2025-11-01"

Body

application/json

Request parameters to debit funds from a user's wallet.

debit_id
string
required

Unique identifier that you create to identify the debit transaction in your system. Maximum 100 characters. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.

Required string length: 1 - 50
Example:

"DEBIT420984"

user_id
string
required

Unique identifier for the user, as provided by you during PPI user creation.

Required string length: 1 - 50
Example:

"USER827364"

wallet_id
string
required

Unique identifier for the wallet, as provided by you during wallet creation.

Example:

"WALLET936721"

cf_sub_wallet_id
string
required

Unique identifier of the sub-wallet from which the amount will be debited.

Required string length: 1 - 100
Example:

"35246543210987654321"

amount
number<double>
required

Amount to be debited. Decimal values are allowed. The minimum value should be equal to or greater than 1.00 (>= 1.00).

Required range: x >= 1
Example:

100.5

remarks
string

Alphanumeric and whitespaces are allowed. The maximum character limit is 60.

Maximum string length: 500
Example:

"Payment for subscription service"

notes
object

Optional key-value metadata for the debit transaction.

auth
object

Required for SMALL_PPI and FULL_KYC_PPI sub-wallets. Set mode to OTP_VERIFICATION and specify at least one channel in data.notification_modes (for example, SMS or WHATSAPP). Not applicable for GIFT_PPI or CLOSED_LOOP_PPI sub-wallets.

Response

Success response for debiting a wallet.

  • For GIFT_PPI and CLOSED_LOOP_PPI, the debit completes in one step.
  • For other sub-wallet types with OTP verification, the response body includes auth (echoed from the request) and status OTP_GENERATED until you call the Verify Debit Wallet API.
debit_id
string

Unique identifier for the debit transaction, as provided by you during the debit request.

Example:

"DEBIT420984"

user_id
string

Unique identifier for the user, as provided by you during PPI user creation.

Example:

"USER827364"

cf_debit_id
string

Unique identifier for the debit transaction, generated by Cashfree.

Example:

"8901234567890123456"

wallet_id
string

Primary wallet ID from which the amount was debited.

Example:

"WALLET936721"

sub_wallet
object
applied_gift_codes
object[]

List of gift codes used in the transaction are applicable for GIFT type wallets.

status
string

The status of the debit transaction.

  • For GIFT_PPI and CLOSED_LOOP_PPI sub-wallets, the status is SUCCESS when the debit completes in a single call.
  • For SMALL_PPI and FULL_KYC_PPI sub-wallets, the Debit Wallet API returns OTP_GENERATED until you verify the OTP using the Verify Debit Wallet API, after which the status moves to SUCCESS.
Example:

"SUCCESS"

amount
number<double>

Amount that was debited.

Example:

600

remarks
string

Remarks for the debit transaction.

Example:

"Purchase of electronics item"

initiated_at
string<date-time>

Timestamp when the debit transaction was initiated.

Example:

"2025-07-28T10:30:00Z"

processed_at
string<date-time> | null

Timestamp when the debit transaction was processed. Returns null while the debit is awaiting OTP verification or is still in progress.

Example:

"2025-07-28T10:30:00Z"

notes
object

Optional key-value metadata for the debit transaction.

auth
object

Present only when you sent auth in the Debit Wallet request body for an OTP flow (SMALL_PPI or FULL_KYC_PPI). Echoes the same mode and data you supplied. Omitted for single-step debits (such as GIFT_PPI or CLOSED_LOOP_PPI).