Skip to content

SCB (Standard Chartered)

About This Page

What: Standard Chartered Bank's FPS withdrawal channel, Book Transfer (crypto asset transfer), and Webhook event mechanism Audience: PMs needing to understand SCB integration details Prerequisites: Bank Capability MatrixReading time: 2 minutes Owner: Withdrawal Product Manager

Key takeaway: SCB's core capability is FPS withdrawal API + Webhook event push, representing semi-automated withdrawal — no need for operations to log into online banking.


Capability Overview

CapabilitySupportedProtocol/ChannelCore Service
Deposit Statements
FPS WithdrawalREST API + Webhookscb_service (Go)
Book TransferREST APIscb_service (Go)
Sub-accountSub-account deposit matching
eDDA/eDDI
BST

SCB is a withdrawal-dedicated bank — no deposit statement collection, primarily providing FPS withdrawal and Book Transfer channels.


Withdrawal: FPS

Withdrawal Method

DimensionDescription
Method CodeTRANSFER_METHOD_SC = 'sc'
ClassificationElectronic bank method (allEBankMethod)
NameSCB Online Banking Withdrawal

Data Flow

Webhook Events

SCB asynchronously notifies transaction status changes via Webhook callbacks, no polling needed:

Webhook TypeMeaningTrigger Scenario
payment_statusPayment status changeWithdrawal instruction processing result
credit_debit_adviceDebit/Credit adviceFund arrival/debit confirmation

Webhook Processing Status:

Status CodeMeaning
0New (pending)
1Processing
2Processed

FPS Withdrawal Statement Query

The system can query statement records via API:

  • Supports pagination (cursor-based, default 20 per page)
  • Return fields: TransactionID, BankStatementID, ValueTime, ValueDate, Amount, Currency
  • Includes Payer/Payee info: receiving card number, payer bank name, SWIFT code

Book Transfer (Crypto Asset Transfer)

Book Transfer is SCB's internal inter-account transfer capability, used for fund movement in specific scenarios:

DimensionDescription
PurposeFund transfer between sub-accounts
Request ParametersRequestID, Amount, Debtor (payer), Creditor (payee)
Amount ValidationMust be >= 0
ID GenerationSnowflake algorithm generates ReferenceID
Queue EventQueueEventTransferCreate

Sub-Account Deposit

Although SCB doesn't have an independent deposit statement collection service, it supports sub-account deposit matching. Users transfer funds via SCB sub-accounts, and the system auto-matches after verifying sub-account ownership via SubAccountSDK.


Channel Interface Details

Channel Interface Overview

DimensionDescription
Protocol TypeHTTPS REST + JSON
AuthenticationTLS mutual authentication + JWT Token (30-second validity)
EncryptionAES256Signed (response encryption)
Signature AlgorithmRS256 (RSA)
Core Servicescb_service (Go)

HTTP Headers (Required for All Requests)

Every request to SCB API must carry these Headers:

HeaderValueDescription
Content-TypeApplication/JSONRequest body format
ResponseEncryptionTypeAES256SignedResponse encryption method
Routing-IdentifierZZRouting identifier
GroupIdGHK54005Group ID
AuthorizationBearer [JWT_TOKEN]JWT token (30-second validity)

Note: messageSender and countryCode are fields in the request body JSON (see PaymentInitRequest below), not HTTP Headers.

Certificate Configuration

SCB uses TLS mutual authentication + RS256-signed JWT Token, involving multiple key sets:

CertificatePathPurpose
Client certificateconf/keys/client.cerTLS mutual authentication
Client private keyconf/keys/clientcertsslprivatekey.pemSigning / Decryption
Client public keyconf/keys/clientpubkey.pemBank verifies our identity
JWT signing keyconf/keys/scbapibankingprivatekey.pemJWT RS256 signing

JWT Token Parameters:

ParameterValue
Issuer"SCB"
Audience"SCB-APIBanking"
Validity30 seconds

Extremely Short JWT Validity

JWT Token is valid for only 30 seconds; the system must regenerate before each request. Clock skew exceeding a few seconds may cause authentication failure — ensure server NTP synchronization.


Interface 1: Payment Initialization (Withdrawal Initiation)

POST /openapi/payments/v2/initiate

Request PaymentInitRequest:

FieldTypeRequiredDescription
header.messageSenderstring(<=246)Sender
header.messageIdstring(<=35)Message ID, unique identifier
header.countryCodestring(2)Country code. Value "HK"
header.timestampint64Unix timestamp
instruction.paymentTimestampint64Payment timestamp
instruction.requiredExecutionDatestring(<=10)Execution date. Format "YYYY-MM-DD"
instruction.amount.currencyCodestring(3)Currency. Values "HKD" / "USD"
instruction.amount.amountstringAmount. e.g. "1000.00"
instruction.referenceIDstring(<=16)Reference number
instruction.purposestring(<=10)Purpose
instruction.paymentTypestring(<=4)Payment type
instruction.chargerBearerstring(<=4)Fee bearer
instruction.debtor.namestring(<=140)Payer name
instruction.debtorAccount.idstring(<=34)Payer account
instruction.debtorAccount.identifierTypestringAccount type. Values "BBAN" / "IBAN" / "Other"
instruction.creditor.namestring(<=140)Payee name
instruction.creditorAccount.idstring(<=34)Payee account
instruction.creditorAgent.financialInstitution.BICstring(<=11)Payee bank BIC. e.g. "SCBLHKHHXXX"
instruction.remittanceInfo.multiUnstructuredarray[string]Remittance information

Response PaymentInitResponse:

FieldTypeDescription
paymentIdentifierstringSCB payment identifier
internalTrackingIdstring(<=35)Internal tracking ID
clientReferenceIdstring(<=35)Client reference ID
referenceIdstring(<=35)Reference number
statusStringstring(<=10)Status
timestampISO-8601(<=24)Timestamp

Interface 2: Payment Status Query

POST /openapi/payments/v2/status

Request:

json
{
  "clientReferenceIds": ["ref1", "ref2", "..."]
}

Supports batch query of multiple withdrawal statuses.

Response (per record):

FieldTypeDescription
statusStringstringStatus description
statusCodestringISO 20022 status code
reasonCodestringReason code
valueDateYYYY-MM-DDValue date
debitDateYYYY-MM-DDDebit date
debitAmountstringDebit amount

Scheduling rule: System polls incomplete withdrawal statuses every 30 seconds.


Interface 3: Webhook Credit/Debit Advice (Deposit Notification)

POST /credit-debit-advice

SCB proactively pushes credit/debit notifications via Webhook. Full payload fields:

FieldTypeDescription
groupIdstringGroup ID
accountIdentifier.accountIdstringAccount number
accountIdentifier.currencyCode.isoCodestringCurrency
eventDateYYYY-MM-DDEvent date
adviceTypestring"CRDT"=Credit (deposit) / "DBIT"=Debit (withdrawal)
valueDateYYYY-MM-DDValue date
transactionAmount.currencyCodestringTransaction currency
transactionAmount.amountdecimalTransaction amount
transactionFreeTextarray[string]Transaction description (free text)
payerDetails.namestringPayer name
payerDetails.account.idstringPayer account
timestampISO-8601Timestamp

Configured Receiving Accounts

CurrencyAccountBICPurpose
HKD44700993333SCBLHKHHXXXSecurities
HKD91701015121SCBLHKHHXXXCrypto / Hash Key
HKD91701015121SCBLHKHHXXXPantherTrade
USD44700993333SCBLHKHHXXXSecurities
USD91701015121SCBLHKHHXXXCrypto / Hash Key
USD91701015121SCBLHKHHXXXPantherTrade

moomoo-Side Adaptation

Webhook → BankFlow Mapping: Upon receiving SCB Webhook, the system converts payload to internal BankFlow records:

Webhook FieldBankFlow FieldDescription
transactionAmount.amountamountAmount
transactionAmount.currencyCodecurrencyCurrency
payerDetails.namepayer_namePayer name
payerDetails.account.idpayer_accountPayer account
adviceTypedirectionCRDT→Deposit, DBIT→Withdrawal
eventDatetransaction_dateTransaction date

Status Code Mapping (ISO 20022 → Internal Status):

ISO 20022 Status CodeMeaningInternal Status
ACCCAccepted Settlement CompletedSuccess
RJCTRejectedFailed
CANCCancelledCancelled
ACSPAccepted Settlement in ProcessProcessing
ACCPAccepted Customer ProfileAccepted

Change Guide

Change RequirementModification LocationDescription
Add new Webhook event typescb_service → webhook handlerAdd new event processing logic
Modify FPS withdrawal parametersscb_service → withdrawal request builderAdjust API request fields
Book Transfer add validationscb_servicebook_transfer.goModify amount/account validation rules
Modify sub-account matching rulesSubAccountSDK configurationAdjust sub-account ownership verification
Modify withdrawal approval templateTask.php$stepTemplatesAdjust SCB withdrawal approval flow

Common Customer Complaints Top 3

#User FeedbackCauseCS Script
1"FPS withdrawal didn't arrive"Webhook push delay or withdrawal still processing"FPS withdrawals typically arrive within minutes; please contact customer service if it exceeds 30 minutes"
2"FPS withdrawal was returned"Incorrect payee information"The transfer has been returned by the bank; please verify payee bank card information and resubmit"
3"Withdrawal status shows processing forever"SCB Webhook not received"Your withdrawal is being processed; we are confirming bank status, please wait"

Monitoring & Alerts

Alert ItemTrigger ConditionSeverityHandling Steps
Webhook reception failureSCB push notification not receivedHighCheck Webhook endpoint availability, proactively call status interface
JWT Token expiredAuthentication failure (30-second validity)MediumCheck server NTP clock sync, ensure skew < 5 seconds
FPS payment long PENDINGWithdrawal hasn't reached terminal state after 30 minutesMediumProactively call Payment Status interface, confirm bank-side status

After Reading

I want to...Go to
See SCB's position among all banksBank Capability Matrix
Understand SCB withdrawal's full approval flowWithdrawal Lifecycle
Compare with another FPS withdrawal bankCGB
Check withdrawal channel execution detailsChannel Execution Manual
Was this page helpful?

内部业务文档 · 仅限 moomoo 团队使用