Skip to main content
Webhooks are event-based notifications that are received when a specific event related to the Card occurs.
In rare cases, such as network retries, read timeouts, processing delays, or delivery failures, the same webhook might be sent more than once for the same event. To prevent unintended side effects, implement idempotency in your webhook handler to handle duplicate deliveries.

Webhook signature

You will receive the webhook signature in the webhook header. Here is a sample header from a webhook request.
Header nameHeader value
content-length1099
x-webhook-attempt1
content-typeapplication/json
x-webhook-signature07r5C3VMwsGYeldGOCYxe5zoHhIN1zLfa8O0U/yngHI=
x-webhook-timestamp1746427759733
x-webhook-version2025-01-01
Always capture the webhook payload in its raw text format before parsing into JSON. Parsing and reserialising the payload can change the structure (for example, array ordering, spacing, or null handling) and cause a signature mismatch during verification. Use the exact raw body string from the request when computing the signature.

Card transaction webhooks

Webhook payload fields

The webhook payload contains important metadata in its top-level fields.
FieldTypeDescription
event_typestringIndicates the type of event that triggered the webhook. Possible values: CARD_TRANSACTION_SUCCESS, CARD_TRANSACTION_FAILED, CARD_TRANSACTION_REVERSED, CARD_TRANSACTION_REJECTED.
event_timestringThe UTC timestamp of when the event occurred, formatted in ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).
versionstringThe version of the webhook payload.
dataobjectContains event-specific details related to this feature.
The following events are triggered at different stages of a card transaction:
EventDescription
CARD_TRANSACTION_SUCCESSThe card transaction was successfully processed.
CARD_TRANSACTION_FAILEDThe card transaction failed due to an error (for example, insufficient funds).
CARD_TRANSACTION_REVERSEDThe card transaction was reversed (for example, a refund or void).
CARD_TRANSACTION_REJECTEDThe card transaction was rejected by the system or issuer.
{
  "event_type": "CARD_TRANSACTION_SUCCESS",
  "event_time": "2025-01-02T15:04:05Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "amount": 500.0,
    "channel": "ECOM",
    "status": "SUCCESS",
    "statusCode": "SUCCESS",
    "bank_reference_number": "123456789012",
    "usedAt": "AMAZON INDIA",
    "initiated_at": "2025-01-02T15:00:00Z",
    "processed_at": "2025-01-02T15:04:05Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1000.0,
      "available_balance": 1000.0,
      "funds_on_hold": 0.00
    }
  }
}
{
  "event_type": "CARD_TRANSACTION_FAILED",
  "event_time": "2025-01-02T15:01:30Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "amount": 100000.0,
    "channel": "ECOM",
    "status": "FAILED",
    "statusCode": "UNKNOWN_REASON",
    "bank_reference_number": null,
    "usedAt": "LUXURY STORE",
    "initiated_at": "2025-01-02T15:01:00Z",
    "processed_at": "2025-01-02T15:01:30Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1000.0,
      "available_balance": 1000.0,
      "funds_on_hold": 0.00
    }
  }
}
{
  "event_type": "CARD_TRANSACTION_REVERSED",
  "event_time": "2025-01-02T16:00:00Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "amount": 500.0,
    "channel": "ECOM",
    "status": "REVERSED",
    "statusCode": "REVERSED",
    "bank_reference_number": "123456789012",
    "usedAt": "AMAZON INDIA",
    "initiated_at": "2025-01-02T15:00:00Z",
    "processed_at": "2025-01-02T16:00:00Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1500.0,
      "available_balance": 1500.0,
      "funds_on_hold": 0.00
    }
  }
}
{
  "event_type": "CARD_TRANSACTION_REJECTED",
  "event_time": "2025-01-02T15:00:01Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "amount": 500.0,
    "channel": "POS",
    "status": "REJECTED",
    "statusCode": "INSUFFICIENT_BALANCE",
    "bank_reference_number": null,
    "usedAt": "SUSPICIOUS MERCHANT",
    "initiated_at": "2025-01-02T15:00:00Z",
    "processed_at": "2025-01-02T15:00:01Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1000.0,
      "available_balance": 1000.0,
      "funds_on_hold": 0.00
    }
  }
}

Card transaction data fields

FieldTypeDescription
user_idstringMerchant’s unique ID for the user.
wallet_idstringMerchant’s unique ID for the wallet.
cf_wallet_idstringCashfree’s unique ID for the wallet.
card_idstringMerchant’s unique ID for the card.
cf_card_idstringCashfree’s unique ID for the card.
cf_card_transaction_idstringCashfree’s unique ID for the transaction.
amountnumberTransaction amount.
channelstringChannel used for transaction (for example, ECOM, POS, ATM).
statusstringStatus of the transaction.
statusCodestringGranular Status code of the transaction.
bank_reference_numberstringBank reference number (RRN) for the transaction.
usedAtstringLocation or merchant information where the card was used.
initiated_atstringTimestamp when the transaction was initiated (ISO 8601).
processed_atstringTimestamp when the transaction was processed (ISO 8601).
sub_walletobjectDetails of the sub-wallet used for the transaction.

Status and statusCode mapping

The following table shows the possible statusCode values for each transaction status:
StatusStatusCode
RECEIVEDRECEIVED
SUCCESSSUCCESS
REVERSEDREVERSED
FAILEDUNKNOWN_REASON
REJECTEDCARD_VELOCITY_LIMIT_EXCEEDED, INVALID_CARD, INVALID_CVV, FRM_DECLINE, INVALID_OTP, INSUFFICIENT_BALANCE, WALLET_VELOCITY_LIMIT_EXCEEDED, USER_NOT_ACTIVE, CARD_NOT_ACTIVE, CARD_EXPIRED, MCC_NOT_ALLOWED, CHANNEL_NOT_ALLOWED

Card refund webhooks

Webhook payload fields

The webhook payload contains important metadata in its top-level fields.
FieldTypeDescription
event_typestringIndicates the type of event that triggered the webhook. Possible values: CARD_REFUND_SUCCESS, CARD_REFUND_FAILED, CARD_REFUND_REJECTED.
event_timestringThe UTC timestamp of when the event occurred, formatted in ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).
versionstringThe version of the webhook payload.
dataobjectContains event-specific details related to this feature.
The following events are triggered at different stages of a card refund:
EventDescription
CARD_REFUND_SUCCESSThe card refund was successfully processed and credited.
CARD_REFUND_FAILEDThe card refund failed due to an error during processing.
CARD_REFUND_REJECTEDThe card refund was rejected by the system or bank.
{
  "event_type": "CARD_REFUND_SUCCESS",
  "event_time": "2025-01-02T15:04:05Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "cf_card_refund_id": "REF987654321",
    "amount": 500.0,
    "status": "SUCCESS",
    "bank_reference_number": "123456789012",
    "used_at": "AMAZON INDIA",
    "initiated_at": "2025-01-02T15:00:00Z",
    "processed_at": "2025-01-02T15:04:05Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1500.0,
      "available_balance": 1500.0,
      "funds_on_hold": 0.00
    }
  }
}
{
  "event_type": "CARD_REFUND_FAILED",
  "event_time": "2025-01-02T15:01:30Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "cf_card_refund_id": "REF987654322",
    "amount": 100.0,
    "status": "FAILED",
    "bank_reference_number": null,
    "used_at": "LUXURY STORE",
    "initiated_at": "2025-01-02T15:01:00Z",
    "processed_at": "2025-01-02T15:01:30Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1000.0,
      "available_balance": 1000.0,
      "funds_on_hold": 0.00
    }
  }
}
{
  "event_type": "CARD_REFUND_REJECTED",
  "event_time": "2025-01-02T15:00:01Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "card_id": "CARD5678",
    "cf_card_id": "78901234567890123",
    "cf_card_transaction_id": "47821234567890123",
    "cf_card_refund_id": "REF987654323",
    "amount": 500.0,
    "status": "REJECTED",
    "bank_reference_number": null,
    "used_at": "SUSPICIOUS MERCHANT",
    "initiated_at": "2025-01-02T15:00:00Z",
    "processed_at": "2025-01-02T15:00:01Z",
    "sub_wallet": {
      "cf_sub_wallet_id": "35246543210987654321",
      "name": "General Wallet",
      "type": "GENERAL_PPI",
      "status": "ACTIVE",
      "balance": 1000.0,
      "available_balance": 1000.0,
      "funds_on_hold": 0.00
    }
  }
}

Card refund data fields

FieldTypeDescription
user_idstringMerchant’s unique ID for the user.
wallet_idstringMerchant’s unique ID for the wallet.
cf_wallet_idstringCashfree’s unique ID for the wallet.
card_idstringMerchant’s unique ID for the card.
cf_card_idstringCashfree’s unique ID for the card.
cf_card_transaction_idstringCashfree’s unique ID for the original card transaction.
cf_card_refund_idstringCashfree’s unique ID for the refund.
amountnumberRefund amount.
statusstringStatus of the refund.
bank_reference_numberstringBank reference number (RRN) for the refund transaction.
used_atstringLocation or merchant information where the card was used.
initiated_atstringTimestamp when the refund was initiated (ISO 8601).
processed_atstringTimestamp when the refund was processed (ISO 8601).
sub_walletobjectDetails of the sub-wallet where the refund was credited.

Card status update webhooks

Webhook payload fields

The webhook payload contains important metadata in its top-level fields.
FieldTypeDescription
event_typestringIndicates the type of event that triggered the webhook. Possible values: PPI_CARD_INACTIVE, PPI_CARD_EXPIRED.
event_timestringThe UTC timestamp of when the event occurred, formatted in ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).
versionstringThe version of the webhook payload.
dataobjectContains event-specific details related to this feature.
The following events are triggered when a card’s status changes:
EventDescription
PPI_CARD_INACTIVEThe card status has been updated to INACTIVE.
PPI_CARD_EXPIREDThe card has reached its expiry date and is now EXPIRED.
{
  "event_type": "PPI_CARD_INACTIVE",
  "event_time": "2025-01-02T15:00:01Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "cf_program_id": "10021",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "wallet_name": "PayNext Vendor Program",
    "sub_wallets": [
      {
        "cf_sub_wallet_id": "35246543210987654321",
        "name": "Holiday Gift Card 2026",
        "type": "STANDARD_PPI",
        "status": "ACTIVE",
        "balance": 0.00,
        "available_balance": 0.00,
        "funds_on_hold": 0.00
      }
    ],
    "card": {
      "card_name": "PayNext Vendor Program",
      "card_id": "CARD5678",
      "cf_card_id": "78901234567890123",
      "masked_card_number": "XXXXXXXXXXXX7092",
      "name_on_card": "John Doe",
      "card_holder_name": "John Doe",
      "network": "RUPAY",
      "status": "INACTIVE"
    }
  }
}
{
  "event_type": "PPI_CARD_EXPIRED",
  "event_time": "2025-01-02T00:00:01Z",
  "version": "2025-01-01",
  "data": {
    "user_id": "USER827364",
    "cf_program_id": "10021",
    "wallet_id": "WALLET936721",
    "cf_wallet_id": "901234567890123456",
    "wallet_name": "PayNext Vendor Program",
    "sub_wallets": [
      {
        "cf_sub_wallet_id": "35246543210987654321",
        "name": "Holiday Gift Card 2026",
        "type": "STANDARD_PPI",
        "status": "ACTIVE",
        "balance": 0.00,
        "available_balance": 0.00,
        "funds_on_hold": 0.00
      }
    ],
    "card": {
      "card_name": "PayNext Vendor Program",
      "card_id": "CARD5678",
      "cf_card_id": "78901234567890123",
      "masked_card_number": "XXXXXXXXXXXX7092",
      "name_on_card": "John Doe",
      "card_holder_name": "John Doe",
      "network": "RUPAY",
      "status": "EXPIRED"
    }
  }
}

Card status update data fields

FieldTypeDescription
user_idstringMerchant’s unique ID for the user.
cf_program_idstringCashfree’s unique ID for the card wallet program.
wallet_idstringMerchant’s unique ID for the wallet.
cf_wallet_idstringCashfree’s unique ID for the wallet.
wallet_namestringName of the wallet.
sub_walletsarrayList of sub-wallets associated with the wallet.
sub_wallets[].cf_sub_wallet_idstringCashfree’s unique ID for the sub-wallet.
sub_wallets[].namestringName of the sub-wallet.
sub_wallets[].typestringType of the sub-wallet.
sub_wallets[].statusstringCurrent status of the sub-wallet.
sub_wallets[].balancenumberTotal balance in the sub-wallet.
sub_wallets[].available_balancenumberBalance available for transactions in the sub-wallet.
sub_wallets[].funds_on_holdnumberFunds that are reserved and not yet available for use.
cardobjectDetails of the card whose status was updated.
card.card_namestringName of the card program.
card.card_idstringMerchant’s unique ID for the card.
card.cf_card_idstringCashfree’s unique ID for the card.
card.masked_card_numberstringMasked card number.
card.name_on_cardstringName as printed on the card.
card.card_holder_namestringName of the person holding the card.
card.networkstringCard network (for example, RUPAY).
card.statusstringNew status of the card (for example, INACTIVE, EXPIRED).
Verifying the signature is mandatory before processing any response. Refer to Signature Verification for more details.