Webhook signature
Cashfree includes the webhook signature in the request header. The following is a sample header from a webhook request.| Header name | Header value |
|---|---|
| content-length | 1099 |
| x-webhook-attempt | 1 |
| content-type | application/json |
| x-webhook-signature | 07r5C3VMwsGYeldGOCYxe5zoHhIN1zLfa8O0U/yngHI= |
| x-webhook-timestamp | 1746427759733 |
| x-webhook-version | 2025-01-01 |
Verifying the signature is mandatory before processing any webhook. Refer to Signature Verification for more details.
Transfer webhook events
Cashfree triggers the following events at different stages of a wallet transfer:| Event | Description |
|---|---|
| PPI_TRANSFER_SUCCESS | The transfer is successfully credited to the beneficiary’s account. |
| PPI_TRANSFER_FAILED | The transfer cannot be processed due to an error or rejection by the bank. |
| PPI_TRANSFER_REVERSED | The beneficiary bank returns the transfer after initial processing. |
| PPI_TRANSFER_REJECTED | Cashfree rejects the transfer before it reaches the bank due to a validation failure. |
PPI_TRANSFER_SUCCESS
PPI_TRANSFER_SUCCESS
PPI_TRANSFER_FAILED
PPI_TRANSFER_FAILED
PPI_TRANSFER_REVERSED
PPI_TRANSFER_REVERSED
PPI_TRANSFER_REJECTED
PPI_TRANSFER_REJECTED
Transfer webhook payload fields
The webhook payload contains important metadata in its top-level fields.| Field | Type | Description |
|---|---|---|
event_type | string | Type of transfer event: PPI_TRANSFER_SUCCESS, PPI_TRANSFER_FAILED, PPI_TRANSFER_REVERSED, or PPI_TRANSFER_REJECTED |
event_time | string | The UTC timestamp when the event occurred, in ISO 8601 format |
data | object | Transfer-specific event details |
Transfer data fields
Transfer webhook events contain the following fields insidedata:
| Field | Type | Description |
|---|---|---|
user_id | string | Identifier of the user who initiated the transfer |
wallet_id | string | Identifier of the wallet from which the transfer was made |
transfer_id | string | Your unique identifier for the transfer transaction |
cf_transfer_id | string | Cashfree’s unique identifier for the transfer transaction |
amount | number | Transfer amount in INR |
transfer_mode | string | Transfer mode requested: RTGS, NEFT, IMPS, or UPI |
actual_mode | string | Transfer mode actually used to process the transaction. Set only when the transfer reaches the bank (SUCCESS or REVERSED); null otherwise |
sub_wallet | object | Details of the sub-wallet from which funds were transferred |
sub_wallet.cf_sub_wallet_id | string | Cashfree’s unique identifier for the sub-wallet |
sub_wallet.name | string | Name of the sub-wallet |
sub_wallet.type | string | Type of the sub-wallet (for example, PRIMARY, FULL_KYC_PPI, GIFT_PPI) |
sub_wallet.status | string | Current status of the sub-wallet (for example, ACTIVE, SUSPENDED) |
sub_wallet.balance | number | Total balance in the sub-wallet in INR |
sub_wallet.available_balance | number | Balance available for new transfers after accounting for funds on hold, in INR |
sub_wallet.funds_on_hold | number | Amount reserved for in-flight transfers not yet settled, in INR |
status | string | Current status of the transfer: SUCCESS, FAILED, REVERSED, or REJECTED |
status_code | string | Granular status code for the transfer (for example, ACKNOWLEDGED_VIA_BENE_BANK, INSUFFICIENT_BALANCE, RETURNED_FROM_BENE, BENE_BLACKLISTED) |
bank_reference_number | string | Bank reference number for the transaction. Set only when the transfer reaches the bank (SUCCESS or REVERSED); null otherwise |
bene_details | object | Beneficiary details for the transfer |
bene_details.bene_id | string | Your unique identifier for the beneficiary |
bene_details.bene_instrument_id | string | Your unique identifier for the beneficiary instrument |
purpose | string | Purpose of the transfer |
remarks | string | Additional remarks for the transfer |
notes | object | null | Custom key-value pairs provided during transfer creation. Returns null if no notes were set. |
initiated_at | string | Timestamp when the transfer was initiated |
processed_at | string | Timestamp when the transfer reached a terminal state |