The system pushes card operation and transaction events in real-time to the merchant's configured callback URL.
| Header | Type | Required | Description |
|---|---|---|---|
| Content-Type | String | Yes | application/json;charset=UTF-8 |
| X-Event-Type | String | Yes | Event type identifier |
The push payload is a JSON object with business fields and sign at the same level:
{
"<business_field_1>": "...",
"<business_field_2>": "...",
"sign": "<signature_value>"
}
The merchant callback must return the following JSON structure:
| Field | Type | Description |
|---|---|---|
respCode | String | Response code, return 20000 to confirm receipt |
respMsg | String | Response message |
Pushed when card operations (creation, freeze, unfreeze, deposit, etc.) change status.
| Item | Details |
|---|---|
| X-Event-Type | cardOperateRecordEvent |
| Field | Type | Description |
|---|---|---|
| Long | Target merchant number |
| Long | Operation record ID |
| Long | Card ID |
| String | Idempotent request ID |
| String | Operation type |
| String | Operation status |
| BigDecimal | Amount |
| String | Currency |
| Array | Fee detail list |
| BigDecimal | Fee amount |
| String | Fee currency |
| String | Signature value |
{
"merchantNo": 88888,
"operateRecordId": 200001,
"cardId": 100001,
"clientRequestId": "REQ_20260101_001",
"type": "DEPOSIT",
"status": "SUCCESS",
"remark": null,
"amount": 100.00,
"currency": "USD",
"feeList": [
{ "feeAmount": 1.00, "feeCurrency": "USD" }
],
"sign": "a1b2c3d4e5f6..."
}
Pushed when transactions (authorization, clearing, refund, etc.) occur.
| Item | Details |
|---|---|
| X-Event-Type | transactionEvent |
| Field | Type | Description |
|---|---|---|
| String | Transaction type: |
| String | Transaction status: |
| String | Transaction order number |
| String | Original transaction order number |
| String | Original payment order number for refund |
| String | Card number (masked) |
| BigDecimal | Transaction amount |
| String | Transaction currency |
| Long | Transaction time (timestamp, milliseconds) |
| BigDecimal | Card amount |
| String | Card currency |
| BigDecimal | Settlement amount |
| String | Settlement currency |
| BigDecimal | Transaction fee |
| BigDecimal | Cross-border fee |
| BigDecimal | Exchange fee |
| String | Merchant name |
| String | Merchant country code |
| String | Merchant MCC code |
| String | Signature value |
authTime, authorizationCode, authMessageDesc, settleTime, fee currency fields, and merchant address details. See the push example for all fields.{
"txnType": "CHARGE",
"txnStatus": "S",
"txnOrderNo": "TXN20260101001",
"originTxnOrderNo": null,
"originTxnOrderNoForRefund": null,
"cardNo": "411111******1111",
"authTime": 1735689600000,
"authorizationCode": "AUTH001",
"authMessageDesc": "Approved",
"transactionAmount": 50.00,
"transactionCurrency": "USD",
"transactionTime": 1735689600000,
"cardAmount": 50.00,
"cardCurrency": "USD",
"settleAmount": 50.00,
"settleCurrency": "USD",
"settleTime": 1735776000000,
"transactionFee": 0.50,
"transactionFeeCurrency": "USD",
"crossBorderFee": null,
"crossBorderFeeCurrency": null,
"exchangeFee": null,
"exchangeFeeCurrency": null,
"merchantId": "MCH001",
"merchantName": "Amazon",
"merchantCountry": "United States",
"merchantCountryCode": "US",
"merchantStateProvince": "WA",
"merchantCity": "Seattle",
"merchantPostalCode": "98101",
"merchantMccCode": "5411",
"sign": "a1b2c3d4e5f6..."
}
sign field) as a JSON stringnull values, place remaining fields into a TreeMap<String, String> (sorted by key ASCII order), and sign with the private keysign field to the payload, then serialize as the final request bodynull top-level fields in the payload, sorted by key in ASCII ascending ordersign field itself is not included in the signature calculation (appended only after signing)