Bank Account Callbacks

StraitsX sends callbacks to your registered URL when bank accounts are created or their verification status changes. This applies to both Customer Profile Bank Accounts (CPBA) and User Bank Accounts (UBA).

When these callback fire

This page covers the following events:

EventDescription
cpbaCreatedA new customer profile bank account is created
cpbaVerificationStatusUpdatedA customer profile bank account verification status changes.
Moves from pendingverified or rejected
ubaCreatedA new user bank account is created
ubaVerificationStatusUpdatedA user bank account verification status changes.
Moves from pendingverified or rejected

Status values

All bank account events share the same status values:

StatusMeaning
pendingBank account submitted, verification in progress
verifiedBank account successfully verified — can be used for payouts
rejectedBank account verification failed — cannot be used


Bank account lifecycle

All bank accounts (CPBA and UBA) follow the same lifecycle:

  1. Bank account is created → you receive a cpbaCreated or ubaCreated callback with verification_status: "pending"
  2. Verification completes → you receive a cpbaVerificationStatusUpdated or ubaVerificationStatusUpdated callback with the final status


Payload structure

{
  "id": 1,
  "account_no": "26862672670",
  "account_holder_name": "John Doe",
  "bank_abbrev": "BCA",
  "disabled": false,
  "verification_status": "pending",
  "bank_account_proof": "bankAccountProofPlaceholder.png",
  "updated_at": "2026-02-03T10:13:25.237Z",
  "payment_reason": "Invoice #12345"
}
{
  "id": 1,
  "account_no": "26862672670",
  "account_holder_name": "John Doe",
  "bank_abbrev": "BCA",
  "disabled": false,
  "verification_status": "verified",
  "bank_account_proof": "bankAccountProofPlaceholder.png",
  "updated_at": "2026-02-03T10:13:25.237Z",
  "payment_reason": "Invoice #12345"
}
{
  "id": 67890,
  "account_no": "1234567890",
  "account_holder_name": "John Doe",
  "bank_abbrev": "DBS",
  "disabled": false,
  "verification_status": "pending",
  "bank_account_proof": "https://example.com/bank-proof.png",
  "swift_bic": "DBSSSGSG",
  "updated_at": "2026-05-11T10:00:00.000+08:00"
}
{
  "id": 67890,
  "account_no": "1234567890",
  "account_holder_name": "John Doe",
  "bank_abbrev": "DBS",
  "disabled": false,
  "verification_status": "verified",
  "bank_account_proof": "https://example.com/bank-proof.png",
  "swift_bic": "DBSSSGSG",
  "updated_at": "2026-05-11T14:30:00.000+08:00"
}

Field reference

All four events use the same field structure:

FieldScopeTypeDescription
idCommon fieldsStringBank account record ID.
account_noCommon fieldsStringBank account number.
account_holder_nameCommon fieldsStringName of the account holder.
bank_abbrevCommon fieldsStringBank short code.
disabledCommon fieldsStringWhether the bank account has been deleted/disabled.
verification_statusCommon fieldsStringBank account verification status.
bank_account_proofCommon fieldsStringURL of the uploaded bank account proof document.
swift_bicCommon fieldsStringSWIFT/BIC code (if applicable).
intermediary_swift_bicCommon fieldsStringIntermediary bank SWIFT code (if applicable).
routing_codeCommon fieldsStringBank routing code (if applicable).
updated_atCommon fieldsStringISO 8601 timestamp when the status last changed.
payment_reasonCPBA onlyStringPurpose of payment (if applicable).
📘

Optional fields:

Fields like swift_bic, intermediary_swift_bic, routing_code, and payment_reason are only present when applicable (e.g., for international bank accounts). They may be omitted entirely from the payload if not relevant.


Did this page help you?