Skip to main content
POST
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 when the response returns status_code: OTP_GENERATED. This two-step flow does not apply to GIFT_PPI or CLOSED_LOOP_PPI sub-wallets.
Refer to Status and status-code reference for a comprehensive list of status and status_code combinations.

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. 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. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.

Required string length: 1 - 50
Example:

"USER827364"

wallet_id
string
required

Unique identifier for the wallet, as provided by you during wallet creation. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.

Required string length: 1 - 50
Example:

"WALLET936721"

cf_sub_wallet_id
string
required

Unique identifier of the sub-wallet from which the amount will be debited. Only numeric characters are allowed.

Required string length: 1 - 19
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 pairs for any extra information. Keys and values must be strings. The following constraints apply:

  • Maximum 10 entries.
  • Keys: maximum 50 characters. Alphanumeric characters, underscores (_), periods (.), commas (,), single quotes ('), ampersands (&), hyphens (-), and spaces are allowed.
  • Values: maximum 200 characters. Same character set as keys.
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_code: OTP_GENERATED with status: PENDING 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
enum<string>

Status of the debit transaction. Refer to Debit status and status-code mapping for all valid combinations.

  • For GIFT_PPI and CLOSED_LOOP_PPI sub-wallets, 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 status: PENDING and status_code: OTP_GENERATED until you verify the OTP using the Verify Debit Wallet API, after which status and status_code become SUCCESS.
Available options:
PENDING,
SUCCESS,
FAILED,
REJECTED,
REVERSED
Example:

"SUCCESS"

status_code
enum<string>

Status code for detailed tracking of debit progress. Refer to Debit status and status-code mapping for all valid combinations.

Available options:
PENDING,
OTP_GENERATED,
OTP_GENERATION_FAILED,
LAST_OTP_ATTEMPT_FAILED,
OTP_VERIFICATION_FAILED,
OTP_EXPIRED,
OTP_VERIFICATION_ATTEMPT_EXHAUSTED,
SUCCESS,
FAILED,
REJECTED,
REVERSED
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 pairs for any extra information. Keys and values must be strings. The following constraints apply:

  • Maximum 10 entries.
  • Keys: maximum 50 characters. Alphanumeric characters, underscores (_), periods (.), commas (,), single quotes ('), ampersands (&), hyphens (-), and spaces are allowed.
  • Values: maximum 200 characters. Same character set as keys.
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).