Payment Callbacks

StraitsX sends a paymentStatusUpdated callback to your registered URL when an incoming payment status changes (e.g., pending → completed or completed → refunded).

This event covers payments received via:

  • Bank Transfer (SGD/UGD) — deposits into your Virtual Bank Account
  • PayNow — PayNow QR code payments

When this callback fires

TriggerDescription
Payment receivedA sender deposits funds into your VBA or pays via PayNow
Status changePayment moves from pending → completed, or completed → refunded

Status values

StatusMeaning
pendingPayment received but not yet settled
completedPayment successfully credited to your account
refundedPayment was refunded back to the sender

Payload structure

{
  "id": "contract_820d55d3621342bbad68a5d795e8a88d",
  "type": "Direct bank transfer",
  "idempotency_id": "0ded43ab-3f06-498d-a776-8fa8fd8ddf35",
  "amount": "29955.0",
  "fees": "0.0",
  "status": "completed",
  "bank_account_no": "885381014328374",
  "merchant_ref": "John Doe",
  "blocked_reasons": [],
  "currency": "xusd",
  "end_to_end_ref": "S0661340E3B601",
  "transaction_remarks": "MYSELF PERSONAL PURPOSE",
  "payment_method": {
    "id": "virtual_account_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "reference_id": "John Doe",
    "account_no": "885381014328374",
    "bank_short_code": "DBS",
    "bank_name": "DBS Bank",
    "bank_address": "12 MARINA BOULEVARD, MBFC TOWER 3, SINGAPORE 018982",
    "bank_country": "Singapore",
    "swift_bic": "DBSSSGSGXXX",
    "recipient_name": "JOHN DOE"
  },
  "sender_information": {
    "account_holder_name": "JOHN DOE",
    "account_number": "SA 832-011076-001",
    "bank_short_code": null,
    "bank_name": null,
    "end_to_end_ref": "S0661340E3B601",
    "swift_bic": "SABBSARIXXX",
    "transaction_remarks": "MYSELF PERSONAL PURPOSE"
  },
  "sender_bank": null,
  "sender_bank_account_no": "SA 832-011076-001",
  "sender_bank_account_holder_name": "JOHN DOE",
  "sender_bank_swift_bic": "SABBSARIXXX",
  "created_at": "2025-04-16T08:15:42.681Z",
  "updated_at": "2025-04-16T08:15:43.330Z",
  "customer_profile_id": "customer_profile_74a5cfe1-587e-4dcf-8885-3e92f5d3c96c"
}
{
  "id": "contract_ce3e2a69c5694665a41fe3f7130e0f35",
  "type": "Direct bank transfer",
  "idempotency_id": "a4e709611640500d5b1c66241850c3b6",
  "amount": "1000.0",
  "fees": "0.0",
  "status": "completed",
  "bank_account_no": "3225445900001",
  "merchant_ref": "merchant-va-ref-001",
  "blocked_reasons": [],
  "currency": "xsgd",
  "end_to_end_ref": "Acme Fintech 0514023018201",
  "transaction_remarks": null,
  "payment_method": {
    "id": "StraitsX-175932-fc1783e5-7854-4388-8111-035385ff9220",
    "reference_id": "merchant-va-ref-001",
    "account_no": "3225445900001",
    "bank_short_code": "FAZZ",
    "recipient_name": "Xfers Pte Ltd"
  },
  "sender_information": {
    "account_holder_name": "ACME FINTECH PTE. LTD.",
    "account_number": "0721100001",
    "bank_short_code": "DBS",
    "bank_name": "DBS Bank Ltd",
    "end_to_end_ref": "Acme Fintech 0514023018201",
    "swift_bic": "DBSSSGSGXXX",
    "transaction_remarks": null
  },
  "sender_bank": "DBS Bank Ltd",
  "sender_bank_account_no": "0721100001",
  "sender_bank_account_holder_name": "ACME FINTECH PTE. LTD.",
  "sender_bank_swift_bic": "DBSSSGSGXXX",
  "created_at": "2025-04-16T02:30:22.492Z",
  "updated_at": "2025-04-16T02:30:22.850Z",
  "customer_profile_id": "customer_profile_af516116-f262-4582-9536-4ddc86fc7442"
}
{
  "id": "contract_a1b2c3d4e5f6789012345678abcdef01",
  "type": "paynowTransaction",
  "idempotency_id": "2026051400001234",
  "amount": "50.0",
  "fees": "0.0",
  "status": "completed",
  "bank_account_no": null,
  "merchant_ref": "2026051400001234",
  "blocked_reasons": [],
  "currency": "xsgd",
  "end_to_end_ref": "paynow1a2b3c4d5e6f789012",
  "transaction_remarks": null,
  "payment_method": {
    "id": "paynow_b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "reference_id": "2026051400001234",
    "base64_encoded_image": "<base64 QR code image>",
    "qr_code_data": "00020101021226650009SG.PAYNOW...",
    "expires_at": "2026-05-14T14:25:32.000Z"
  },
  "sender_information": {
    "account_holder_name": "Jane Smith",
    "account_number": "1234567890",
    "bank_short_code": "UOB",
    "bank_name": "United Overseas Bank Ltd",
    "end_to_end_ref": "paynow1a2b3c4d5e6f789012",
    "swift_bic": "UOVBSGSGXXX",
    "transaction_remarks": null
  },
  "sender_bank": "United Overseas Bank Ltd",
  "sender_bank_account_no": "1234567890",
  "sender_bank_account_holder_name": "Jane Smith",
  "sender_bank_swift_bic": "UOVBSGSGXXX",
  "customer_profile_id": "customer_profile_c3d4e5f6-a7b8-9012-cdef-123456789012",
  "created_at": "2026-05-14T14:19:33.483Z",
  "updated_at": "2026-05-14T14:19:58.509Z"
}

Field reference

📘

Note:

  1. All paymentStatusUpdated callbacks share the same top-level structure. Use the type and currency fields to determine the payment type.
  2. The payment_method object varies depending on the payment type and currency.
type valuecurrencyPayment type
"Direct bank transfer"xsgd / sgdSGD Bank Transfer
"Direct bank transfer"xusd / usdUSD Bank Transfer
"paynowTransaction"xsgdPayNow

Top-level fields

FieldTypeDescription
idStringUnique contract ID.
typeStringDirect bank transfer for bank transfers, paynowTransaction for PayNow.
idempotency_idStringYour external reference ID (provided during VBA or PayNow creation).
amountStringPayment amount received.
feesStringFees charged.
statusStringPayment status.
bank_account_noStringVBA account number that received the payment.
null for PayNow.
merchant_refStringYour merchant reference.
blocked_reasonsStringReasons the payment is held. Empty array if not blocked.
currencyStringCurrency code (lowercase).
end_to_end_refStringBank end-to-end reference.
transaction_remarksStringSender's transaction remarks.
payment_methodObjectPayment method details. Structure varies by payment type (see below).
sender_informationObjectDetails about who sent the payment.
customer_profile_idString

Customer profile this payment belongs to.

Note: Only present for First Party and Third Party integration models. Not included for Regular Transfer payments.

created_atStringISO 8601 timestamp when the transaction was created.
updated_atStringISO 8601 timestamp when the status last changed.

payment_method object

FieldScopeTypeDescription
idCommon fieldsStringPayment method ID.
reference_idCommon fieldsStringYour reference ID.
account_noCommon fieldsStringVBA account number.
bank_short_codeCommon fieldsStringBank short code.
recipient_nameCommon fieldsStringRegistered recipient name on the VBA.
bank_nameUSD onlyStringBank full name.
bank_addressUSD onlyStringBank address.
bank_countryUSD onlyStringBank country.
swift_bicUSD onlyStringSWIFT/BIC code.
base64_encoded_imagePayNow onlyStringBase64-encoded QR code image.
qr_code_dataPayNow onlyStringRaw QR code data string.
expires_atPayNow onlyStringISO 8601 expiry timestamp for the PayNow QR.

sender_information object

FieldTypeDescription
account_holder_nameStringSender's name as registered with their bank.
account_numberStringSender's bank account number.
bank_short_codeStringSender's bank short code. May be null for international transfers.
bank_nameStringSender's bank full name. May be null for international transfers.
end_to_end_refStringEnd-to-end reference from sender's bank.
swift_bicStringSender's SWIFT/BIC code.
transaction_remarksStringSender's transaction remarks.
⚠️

Deprecated flat fields

The top-level fields sender_bank, sender_bank_account_no, sender_bank_account_holder_name, and sender_bank_swift_bic duplicate data from sender_information object. Use the sender_information object instead. These flat fields are retained for backward compatibility.


Did this page help you?