Deposit and Withdrawal Callbacks

StraitsX sends callbacks to your registered URL when deposits into or withdrawals from your business account change status. These events track fund movements at the account level (your StraitsX business account), as opposed to customer-level payment/payout events.

When these callbacks fire

This page covers the following events:

EventDescription
userDepositStatusUpdatedAn incoming bank transfer deposit to your business account is received or changes status.
userWithdrawalStatusUpdatedAn outgoing bank transfer withdrawal from your business account is initiated or changes status.

Status values

Both events share the same status values:

StatusMeaning
pendingTransaction is being processed
completedFunds successfully deposited/sent
failedTransaction could not be completed

Deposit vs Withdrawal vs Payment vs Payout

EventDirectionScope
paymentStatusUpdatedIncomingFunds to a Virtual Bank Account (on behalf of a customer profile)
payoutStatusUpdatedOutgoingFunds to an external bank account (on behalf of a customer)
userDepositStatusUpdatedIncomingFunds directly to your business account
userWithdrawalStatusUpdatedOutgoingFunds directly from your business account


userDepositStatusUpdated

Payload structure

{
  "data": {
    "id": "contract_d4e5f6a7-b8c9-0123-def0-234567890123",
    "type": "bankTransfer",
    "attributes": {
      "idempotencyId": "deposit-external-ref-001",
      "currency": "xsgd",
      "amount": "2500.0",
      "fees": "0.0",
      "status": "completed",
      "createdAt": "2026-05-11T09:00:00+08:00",
      "senderInformation": {
        "accountHolderName": "John Doe",
        "accountNumber": "9876543210",
        "swiftBic": "OCBCSGSG",
        "transactionRemarks": "Invoice payment #1234",
        "endToEndRef": "20260511OCBCSGSGXXXX0002"
      },
      "blockedReasons": []
    }
  }
}

Field reference

Top-level fields

FieldTypeDescription
data.idStringUnique deposit contract ID.
data.typeStringAlways bankTransfer.
data.attributes.idempotencyIdStringExternal reference ID.
data.attributes.currencyStringCurrency code.
data.attributes.amountStringDeposit amount received.
data.attributes.feesStringFees charged.
data.attributes.statusStringDeposit contract status.
data.attributes.createdAtStringISO 8601 timestamp when the deposit was created.
data.attributes.senderInformationObjectDetails about who sent the deposit.
data.attributes.blockedReasonsArrayReasons the deposit is held. Empty array if not blocked.

senderInformation object

FieldTypeDescription
accountHolderNameStringSender's name as registered with their bank.
accountNumberStringSender's bank account number.
swiftBicStringSender's SWIFT/BIC code.
transactionRemarksStringSender's transaction remarks (if any).
endToEndRefStringBank end-to-end reference.


userWithdrawalStatusUpdated

Payload structure

{
  "data": {
    "id": "contract_c3d4e5f6-a7b8-9012-cdef-123456789012",
    "type": "withdrawal",
    "attributes": {
      "amount": "500.0",
      "fees": "0.0",
      "transactionRemarks": "Monthly supplier payment",
      "idempotencyId": "withdrawal-unique-key-789",
      "currency": "sgd",
      "bankAccount": {
        "account_no": "1234567890",
        "account_holder_name": "Acme Pte Ltd",
        "bank": "SCB",
        "swift_bic": "SCBLSG22XXX",
        "routing_code": null,
        "intermediary_swift_bic": null
      },
      "status": "completed",
      "netAmount": "500.0",
      "createdAt": "2026-05-11T10:00:00+08:00",
      "updatedAt": "2026-05-11T10:15:00+08:00"
    }
  }
}

Field reference

Top-level fields

FieldTypeDescription
data.idStringUnique withdrawal contract ID.
data.typeStringAlways withdrawal.
data.attributes.amountStringWithdrawal amount.
data.attributes.feesStringFees charged.
data.attributes.transactionRemarksStringYour transaction remarks/notes.
data.attributes.idempotencyIdStringYour idempotency key from the withdrawal request.
data.attributes.currencyStringCurrency code.
data.attributes.bankAccountObjectRecipient bank account details.
data.attributes.statusStringWithdrawal contract status.
data.attributes.netAmountStringNet amount sent (amount + fees).
data.attributes.createdAtStringISO 8601 timestamp when the withdrawal was created.
data.attributes.updatedAtStringISO 8601 timestamp when the status last changed.

bankAccount object

FieldTypeDescription
account_noStringRecipient bank account number.
account_holder_nameStringRecipient account holder name.
bankStringBank short code.
swift_bicStringSWIFT/BIC code (if applicable).
routing_codeStringBank routing code (if applicable).
intermediary_swift_bicStringIntermediary bank SWIFT code (if applicable).


Did this page help you?