transaction.declined — delivered when a transaction on one of your cards is declined.ACTIVE, or the transaction is not in USD.availableLimit.declineReason is a human-readable explanation for display and support; do not parse it.fees is empty and
totalFeeAmount is 0.00. Any amount held on your balance for the attempt is released.| Field | Type | Description |
|---|---|---|
eventId | string | Unique per event. Deduplicate on this value |
eventType | string | Always transaction.declined |
version | string | Payload schema version. Additive changes do not bump it |
occurredAt | string | When the event happened, not when it was delivered (ISO 8601) |
data | object | The transaction, see below |
dataGET /api/v1/issuing/transaction/{transactionNo}, so
| Field | Type | Description |
|---|---|---|
transactionNo | string | PIK transaction number |
cardNo | string | PIK card number |
cardholderNo | string | PIK cardholder number |
type | string | PURCHASE / REFUND / REVERSAL / ATM_WITHDRAWAL / VERIFICATION / SETTLEMENT_ADJUST |
status | string | DECLINED for this event |
originalTransactionNo | string | null unless the declined attempt referenced an earlier transaction |
transactionAmount | string | Amount in the merchant's currency |
transactionCurrency | string | Merchant currency, ISO 4217 |
billingAmount | string | Amount that would have been posted in the settlement currency |
billingCurrency | string | Settlement currency, ISO 4217 |
fx | object | Foreign exchange details, see below |
fees | array | Empty for declined transactions |
totalFeeAmount | string | 0.00 |
totalDebitAmount | string | Equals billingAmount, since no fee applies |
merchant | object | name / mcc / city / country |
transactionTime | string | Time the transaction was attempted |
postedTime | string | null — the transaction never posted |
declineReason | string | Human-readable reason, for display and support. Do not parse it |
fx| Field | Type | Description |
|---|---|---|
isCrossCurrency | boolean | Whether the transaction currency differs from the billing currency |
rate | string | Exchange rate applied, billing currency per unit of transaction currency |
{
"eventId": "evt_01J9X8ZQ4T5S",
"eventType": "transaction.declined",
"version": "1.0",
"occurredAt": "2026-08-11T03:05:02Z",
"data": {
"transactionNo": "TX260811V4W6X2",
"cardNo": "CD260811X9Y8Z7",
"cardholderNo": "CH260811A1B2C3",
"type": "PURCHASE",
"status": "DECLINED",
"originalTransactionNo": null,
"transactionAmount": "620.00",
"transactionCurrency": "USD",
"billingAmount": "620.00",
"billingCurrency": "USD",
"fx": {
"isCrossCurrency": false,
"rate": "1.00000000"
},
"fees": [],
"totalFeeAmount": "0.00",
"totalDebitAmount": "620.00",
"merchant": {
"name": "CLOUD HOSTING LTD",
"mcc": "5734",
"city": "Singapore",
"country": "SG"
},
"transactionTime": "2026-08-11T03:05:00Z",
"postedTime": null,
"declineReason": "Insufficient card limit"
}
}| Header | Value |
|---|---|
X-Webhook-Event | Event category, always ISSUING for this event |
X-Webhook-Event-Type | The specific event type, see above |
X-Webhook-Signature | HMAC-SHA256 signature, lowercase hex |
X-Webhook-Signature = hex_lower( HMAC_SHA256( appSecret, rawBody ) )appSecret — there is no separate webhook secret.eventId is mandatory, not optional.eventId.occurredAt to decide which version is newer.