Skip to main content

Webhook Events

FinCard Virtual pushes real-time event notifications to your configured webhook URL. Events are signed with the platform RSA private key — verify using the platform public key.
Callback URL: POST /api/v2.1/fincard/virtual/webhook/callback

Signature Verification

All webhook events include an X-FC-SIGNATURE header containing a SHA256withRSA signature of the response body, base64-encoded.
// Verify: SHA256withRSA(responseBody, platformPublicKey) === X-FC-SIGNATURE
Your endpoint must return {"success": true} to acknowledge receipt.

Event Types

Card Operation Transaction Event

Triggered when card operations complete (create, deposit, withdraw, freeze, unfreeze, cancel, block, overdraft).
FieldTypeDescription
orderNoStringTransaction ID
merchantOrderNoStringClient tx ID
cardNoStringCard ID
currencyStringCurrency
amountBigDecimalAmount
feeBigDecimalFee
receivedAmountBigDecimalNet amount
typeStringcreate / deposit / withdraw / Freeze / UnFreeze / cancel / blocked / overdraft_statement
statusStringsuccess / fail
transactionTimeLongMillisecond timestamp

Card Authorization Transaction Event

Triggered for card consumption events (purchases, refunds, verifications).
FieldTypeDescription
cardNoStringCard ID
tradeNoStringTransaction serial number
originTradeNoStringOriginal transaction (for refunds/voids)
currencyStringTransaction currency
amountBigDecimalTransaction amount
authorizedAmountBigDecimalAuthorized amount (card currency)
authorizedCurrencyStringCard currency
feeBigDecimalAuthorization fee
crossBoardFeeBigDecimalCross-border fee
merchantNameStringMerchant name
merchantDataObjectMerchant details (MCC, country, city, etc.)
typeStringauth / refund / verification / Void / maintain_fee
statusStringauthorized / failed / succeed
transactionTimeLongMillisecond timestamp

Card Authorization Fee Transaction Event

Triggered when insufficient card balance causes fee deduction from merchant reserve.
FieldTypeDescription
cardNoStringCard ID
tradeNoStringFee transaction ID
originTradeNoStringOriginal authorization transaction
currencyStringFee currency
amountBigDecimalFee amount
typeStringcard_patch_fee / card_patch_cross_border
deductionSourceFundsStringwallet (deducted from merchant account)
statusStringsuccess
transactionTimeLongMillisecond timestamp

Card 3DS Transaction Event

Triggered for 3DS verification (OTP), transaction authorization URLs, and physical card activation codes.
FieldTypeDescription
cardNoStringCard ID
tradeNoStringTransaction serial number
currencyStringCurrency
amountBigDecimalAmount
merchantNameStringMerchant/scenario name
valuesStringRSA-encrypted value (OTP code, auth URL, or activation code)
typeStringthird_3ds_otp / auth_url / activation_code
expirationTimeLongExpiration time (ms)
transactionTimeLongMillisecond timestamp
The values field is encrypted with the merchant’s RSA public key. Decrypt using your RSA private key.

Card Holder Event

Triggered when cardholder approval status changes.
FieldTypeDescription
holderIdLongCardholder ID
statusFlowLocationStringadmin / channel
statusStringpass_audit / reject / under_review
descriptionStringReason (especially for rejections)

Activate Card Event

Triggered when a physical card is activated.
FieldTypeDescription
cardNoStringCard ID
typeStringcard_activated
statusStringsuccess / fail

Work Order Event

Triggered when work order status changes.
FieldTypeDescription
orderNoStringWork order ID
merchantOrderNoStringClient tx ID
tradeStatusStringprocessing / success / fail

Wallet Transaction Event (v2)

Triggered for crypto wallet deposit/withdrawal completions.
FieldTypeDescription
orderNoStringTransaction ID
coinKeyStringCoin key
coinNameStringCoin name
txHashStringOn-chain hash
txAmountBigDecimalOn-chain amount
receivedAmountBigDecimalNet received
receivedCurrencyStringCurrency
typeStringDEPOSIT / WITHDRAW
statusStringsuccess / fail

Response Format

Your webhook endpoint must respond with:
{
  "success": true
}
If your endpoint fails to respond or returns an error, the platform will retry delivery. Ensure idempotent processing using orderNo / tradeNo as deduplication keys.