Unified Error Code Center
About This Page
What: All error codes, status codes, and rejection reason codes across all banks in the deposit/withdrawal system — organized by bank, with meaning and handling instructions for each code Audience: Anyone who needs to quickly look up the meaning and handling of an error code or status code Prerequisites: None — refer to this page anytime How to use: Ctrl+F to search by error code number or keyword, or jump via the index below Reading time: Reference-style, search as needed Owner: Deposit & Withdrawal Product Team
Quick Jump:
- Airstar BST → 1. Airstar
- CMB/Minsheng → 2. CMB/Minsheng
- BOCHK → 3. BOCHK
- HSBC → 4. HSBC
- Hang Seng → 5. Hang Seng
- SCB → 6. SCB
- CGB → 7. CGB
- ICBC → 8. ICBC
- System Common → 9. System Common
Search by Scenario:
- Deposit not arriving → Check Deposit Application Status Codes first, then the corresponding bank error code
- Withdrawal in progress → Check Withdrawal Approval Templates and the corresponding bank status code
- eDDA failure → Check HSBC eDDA or Hang Seng eDDI
- BST exception → Check Airstar Error Codes or CMB/Minsheng Callback Codes
1. Airstar BST
Airstar Capability Overview
Airstar connects via the Mandate authorization model. Error code prefix meanings: 140600 = authorization request, 140630 = Futu-initiated transfer, 140670 = bank-initiated transfer, 140870 = bank authorization callback.
1.1 Futu-to-Bank Transfer Error Codes
Rejection codes returned by Airstar when users initiate BST deposit/withdrawal via moomoo.
| Error Code | Meaning | Description & Handling | Customer Service Script |
|---|---|---|---|
| 140630001 | Transfer parameter error | Request parameter validation failed; check parameters, contact engineering | "The system encountered a temporary issue. Please try again later; if it persists, contact support." |
| 140630002 | Unauthorized BST | Mandate does not exist or has been cancelled; guide user to re-authorize | "Please re-authorize BST in the moomoo App." |
| 140630003 | Transfer limit exceeded | Daily/cumulative limit exceeded; contact bank to adjust limit or split amount | "Your transfer exceeds the bank limit. Please reduce the amount or contact Airstar Bank to adjust the limit." |
| 140630004 | Single transaction limit exceeded | Exceeds the bank's per-transaction cap; split into multiple smaller transfers | "The single transfer amount exceeds the cap. Please split into multiple smaller transfers." |
| 140630005 | Insufficient balance | Bank account balance is insufficient; notify user to top up | "Your Airstar Bank account balance is insufficient. Please top up and try again." |
| 140630006 | Invalid amount | Amount is zero or negative; guide user to re-enter | "Please check and re-enter the correct transfer amount." |
| 140630007 | Invalid bank account number | Account number format or digit count is wrong; verify bank account number | "The bank account information is incorrect. Please verify your Airstar Bank account number and try again." |
| 140630008 | Name mismatch | Securities account name does not match bank account name; verify and re-authorize if necessary | "Your securities account name does not match the bank account name. Please verify and re-authorize BST." |
| 140630009 | Deposit rejected | Bank account is frozen/restricted/closed; guide user to contact Airstar | "Your bank account may have restrictions. Please contact Airstar Bank customer service." |
| 140630010 | Withdrawal rejected | Bank account does not allow withdrawals; guide user to contact Airstar | "Your bank account currently does not support withdrawals. Please contact Airstar Bank to confirm account status." |
| 140630099 | Bank system error | Airstar internal exception; wait for recovery and retry | "The bank system is temporarily unavailable. Please try again later." |
High-Frequency Error Codes
140630005 (Insufficient balance) and 140630003 (Limit exceeded) are the two most common codes. When Operations receives an alert, first verify the user's bank account balance and limits — most cases are resolved by the user themselves.
1.2 Bank-to-Futu Transfer Error Codes
Rejection codes returned by moomoo when the bank initiates a transfer instruction.
| Error Code | Meaning | Description & Handling | Customer Service Script |
|---|---|---|---|
| 140670001 | Authorization expired | Mandate has expired/been cancelled; notify user to re-authorize | "Your BST authorization has expired. Please re-authorize in the moomoo App." |
| 140670002 | Bank Card not found | Bound Bank Card has been deleted; guide user to re-bind and authorize | "Your bound Bank Card is no longer valid. Please re-bind your Bank Card and complete authorization." |
| 140670003 | Risk Control restriction | Hit a Risk Control rule; escalate to the Risk Control team | "Your account has a security restriction. Our Risk Control team will follow up." |
| 140670004 | Account has outstanding debt | Securities Account has a debt that must be repaid first; notify user | "Your Securities Account has an outstanding debt. Please repay it before proceeding." |
| 140670005 | Insufficient balance | Withdrawal amount exceeds available balance; notify user to confirm | "Your available balance is insufficient. Please confirm your account balance." |
| 140670006 | Dormant account | Account flagged due to prolonged inactivity; contact the account team to activate | "Your account has been suspended due to inactivity. Please contact support for activation." |
| 140670007 | Account does not exist | Securities Account has been closed; verify account status | "No corresponding Securities Account found. Please verify your account information." |
| 140670008 | NSS questionnaire incomplete | Regulatory compliance questionnaire not filled; guide user to complete | "Please complete the NSS questionnaire before proceeding with deposit/withdrawal." |
| 140670009 | GDCA incomplete | GDCA certification not completed; guide user to complete | "Please complete GDCA certification before proceeding with deposit/withdrawal." |
| 140670010 | Online account opening deposit insufficient | Deposit below 10,000 HKD; inform user of the minimum | "Online account opening requires a cumulative deposit of at least HKD 10,000 before this feature can be used." |
| 140670011 | Online account opening withdrawal restricted | Cumulative deposit below 10,000 HKD; inform user to complete minimum deposit first | "Your cumulative deposit has not yet reached HKD 10,000. The withdrawal feature will be available once you reach this threshold." |
| 140670012 | Withdrawal rejected by Approval | Manually rejected in the Approval workflow; check rejection reason | "Your withdrawal application did not pass review. Please check the rejection reason or contact support for details." |
| 140670099 | System exception | moomoo internal error; contact engineering | "The system encountered a temporary issue. Please try again later." |
Online Account Opening Specific Codes
140670010 and 140670011 only affect online account opening users in new card binding scenarios. Minimum deposit threshold is 10,000 HKD.
1.3 Authorization Request Error Codes
Futu-to-Bank (140600xxx)
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 140600001 | Parameter error | Authorization request parameter validation failed; verify user info and re-submit |
| 140600002 | Phone number mismatch | Does not match the bank's registered number; confirm the bank-bound phone number |
| 140600003 | Name mismatch | Different from bank account holder name; verify registration name vs. account name |
| 140600004 | ID information mismatch | ID number does not match the bank's records; verify ID information |
| 140600005 | Invalid bank account number | Card number format or digit count is wrong; verify bank account number |
| 140600006 | Active agreement already exists | A valid Mandate already exists; no need to re-authorize |
| 140600007 | Customer status abnormal | Customer is in abnormal status on Airstar's side; contact Airstar Bank |
| 140600008 | Account status abnormal | Account does not permit authorization; contact Airstar Bank |
| 140600009 | Pending record exists | Previous authorization is still being processed; wait for completion then retry |
| 140600099 | Bank refused authorization | Airstar system issue; contact Airstar technical support |
Bank-to-Futu Callback (140870xxx)
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 140870001 | Multiple moomoo IDs | Same card bound to multiple accounts; confirm identity, retain correct binding |
| 140870002 | Authorization rejected | Rejected on bank side; verify reason and guide user to retry |
| 140870003 | User info mismatch | Cannot find corresponding user; verify registration information |
| 140870004 | User status abnormal | moomoo account is abnormal; contact account team |
| 140870005 | Phone number mismatch | Different from moomoo registration phone; verify phone number |
| 140870006 | Account name mismatch | Different from moomoo registration name; verify name |
| 140870007 | ID info mismatch | Different from moomoo registration ID; verify ID |
| 140870099 | System exception | moomoo internal error; contact engineering |
1.4 Cancel Authorization Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 140610001 | Cancel parameter error | Verify cancel request parameters |
| 140610002 | BST binding does not exist | Confirm whether binding has already expired |
| 140610099 | System exception | Contact engineering |
| 140890001 | Unbinding failed | Verify reason and retry |
| 140890002 | In-flight deposit/withdrawal exists | Wait for in-flight transactions to complete before cancelling |
| 140890099 | System exception | Contact engineering |
1.5 Mandate Authorization Status Codes
| Status Value | Meaning | Description |
|---|---|---|
Authorised | Authorization successful | Deposit/withdrawal can proceed normally |
PendingAuthorise | Pending authorization | Waiting for bank processing |
Unauthorised | Not authorized | Authorization has not been initiated |
Revoked | Cancelled | Cancelled by user or bank |
PendingRevoked | Pending cancellation | Waiting for bank to process cancellation |
RejectAuthorise | Authorization rejected | Bank review did not pass |
Key Reminder
Only the Authorised status allows deposit/withdrawal. All transaction instructions during PendingAuthorise will be rejected (returns 140630002).
1.6 Deposit Transaction Status Codes
| Status Value | Meaning | Operations Note |
|---|---|---|
new | Newly created | Normal |
notify_bank_approval | Notified bank deposit is allowed | Normal |
notify_bank_reject | Notified bank deposit is not allowed | Check rejection reason |
query_transfer | Querying transfer result | Polling in progress, watch for timeout |
write_flow | Writing Bank Statement | Normal |
success | Deposit successful | Normal terminal state |
fail | Deposit failed | Check error code to identify cause |
reject | Deposit rejected | Check rejection reason |
wait_refund | Waiting for refund | Bank initiated refund, requires attention |
refund | Refunded | Requires Reversal, notify user |
1.7 Withdrawal Transaction Status Codes
| Status Value | Meaning | Operations Note |
|---|---|---|
new | Newly created | Normal |
notify_bank_approval | Notified bank withdrawal is allowed | Normal |
notify_bank_reject | Notified bank withdrawal is not allowed | Check rejection reason |
query_transfer | Querying transfer result | Polling in progress, watch for timeout |
success | Withdrawal successful | Normal terminal state |
fail | Withdrawal failed | Check error code |
reject | Withdrawal rejected | Check rejection reason |
1.8 Airstar Internal Service Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 0 | Success | — |
| -1001 | Internal system error | Contact engineering |
| -1002 | Invalid parameter | Check request parameters |
| -1003 | Database error | Contact engineering |
| -1004 | RPC client error | Inter-service communication exception |
| -1005 | Parse failure | Data format exception |
| -1006 | Record not found | Verify business data |
| -1099 | Unknown error | Contact engineering |
| -2001 | Account card number not found | Verify Bank Card binding |
| -2002 | Bank Card not found | Verify Bank Card information |
| -2003 | Customer has not opened an account | Guide user to complete account opening |
| -2004 | Customer is not an individual account | Confirm account type |
| -2005 | Authorization task already exists | Wait for existing task to complete |
| -2006 | Authorization already exists | No need to re-authorize |
| -2007 | ID number validation failed | Verify ID information |
| -2008 | Phone number validation failed | Verify phone number |
| -3000 | HTTP request error | Contact engineering |
| -3001 | HTTP retry error | System auto-retrying |
| -3002 | HTTP non-retryable error | Contact engineering |
Code Location
- Transfer error codes:
airstar_service/internal/app/errs/bank_transfer_err.go - Authorization error codes:
airstar_service/internal/app/errs/bank_auth_err.go - State machine:
airstar_service/internal/app/enum/status/deposit.go,withdraw.go,auth.go
2. CMB / Minsheng BST
CMB/Minsheng Capability Overview
CMB and Minsheng connect via SM2-encrypted Socket with real-time push mode. The error code system is simple, with 3 core callback codes.
2.1 BST Callback Codes
| Callback Code | Meaning | Description & Handling |
|---|---|---|
| 0 | Success | System auto-updates task status; no action needed |
| -5 | Timeout | System auto-switches to backup server and retries; do not manually resend before confirming bank-side status |
| -6 | Bank rejected | Contact bank to confirm rejection reason; may need to switch Channel and re-initiate withdrawal |
BST Timeout (-5) Handling Key Points
Timeout is usually network jitter — the system will auto-switch to a backup server and retry. Critical: Before confirming bank-side status, do not manually re-initiate a withdrawal, otherwise duplicate payments may occur.
2.2 Comparison with Airstar Error Handling
| Dimension | CMB/Minsheng | Airstar |
|---|---|---|
| Callback mode | Real-time push | Polling |
| Timeout handling | Switch to backup server (seconds) | 10 polls → 2-hour fallback |
| Error code granularity | 3 codes | 11+ codes |
| Operations intervention frequency | Low | Medium |
3. BOCHK
BOCHK Capability Overview
BOCHK collects deposit Bank Statements via B2E XML interface and executes withdrawals via FTS. This involves three categories: Bank Statement identification codes, FTS status codes, and authentication errors.
3.1 B2E Bank Statement Transaction Type Identification Codes
The system identifies the deposit method via keywords in the particulars field:
| Keyword | TransType | Deposit Method |
|---|---|---|
FPS | 220 | FPS Faster Payment |
E-BANKING | 207 | Online Banking Transfer |
CHATS | 203 | CHATS Transfer |
REMIT IN | 209 | Cross-border Remittance |
CBS | 203 | Bank Counter |
Identification Failure Scenario
If particulars cannot match the keywords above, the Bank Statement is marked as unidentified type and requires Operations to manually select the deposit method during manual Matching.
3.2 FTS Withdrawal Status Codes
| Status Code | Meaning | Description & Handling |
|---|---|---|
S | Success | No action needed |
F | Failed | Check error description, contact BOCHK to confirm |
R | Returned | Confirm return reason, correct information and re-initiate withdrawal if necessary |
C | Cancelled | Confirm cancellation source, re-initiate if necessary |
3.3 B2E Common Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
E11071 | No data | No transactions within query range, normal situation |
GE11012 | No data (alternate code) | Same as above |
RJ0002 | Request frequency too high | Reduce query frequency |
E99999 | Generic error | Contact BOCHK technical support |
3.4 B2E Token Authentication
BOCHK B2E Token validity period is 900 days (~2.5 years).
| Exception | Symptom | Handling |
|---|---|---|
| Token expired | Authentication failure | Contact BOCHK for renewal |
| Token parameter error | SetAuth() failure | Verify authentication parameters |
Code Location
- Bank Statement collection:
bochk_flow_go/internal/app/biz/service/constants.go - FTS withdrawal:
bochk_flow_go/FTS-related modules
4. HSBC
HSBC Capability Overview
HSBC connects via eDDA + eDDI for deposit direct debit. The error code system is relatively complex, involving four categories: authorization error codes, debit rejection codes, bank processing status codes, and rate limiting.
4.1 eDDA Authorization Error Codes
| Error Code | Meaning | Customer Service Script |
|---|---|---|
MFISAC01 | Account number error | "Please verify your HSBC bank account number." |
MPP01006 | Phone number mismatch | "Please confirm the phone number registered with HSBC." |
MPP01007 | Name mismatch | "Please confirm that your moomoo registration name matches your HSBC account holder name." |
MPP01008 | No phone registered with bank | "Please first register a phone number with HSBC." |
MPP02013 | No phone registered with bank | Same as above (returned by different interface) |
MPP04000 | Verification code error | "Please request a new verification code." |
MPP04003 | Verification code expired | "Please request a new verification code." |
MPP04004 | Verification code already used | "Please request a new verification code." |
MPP06001 | Account status abnormal | "Please contact HSBC to confirm your account status." |
ECH09001 | Generic authorization failure | "Please try again later." |
4.2 eDDI Debit Rejection Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
MPP02020 | Authorization cancelled | Guide user to re-authorize |
MPP02021 | Payment account closed | Guide user to use a different account |
MPP02022 | Debit limit exceeded | Contact bank to adjust limit or split amount |
MPP02023 | Authorization does not exist | Guide user to re-authorize |
MPP02038 | Authorization dormant | Guide user to contact HSBC to reactivate |
MPP02039 | Authorization expired | Guide user to re-authorize |
MPP05000 | Limit exceeded | Contact bank to adjust limit |
MFD10007 | Duplicate transaction ID | System-level error, contact engineering |
4.3 eDDI Bank Processing Status Codes
| Status Code | Meaning | Operations Note |
|---|---|---|
ACSC | Completed | Normal terminal state |
RJCT | Rejected | Check rejection codes above to identify cause |
ACCP | Accepted | Intermediate state, continue waiting |
ACSP | Processing | Intermediate state, continue waiting |
4.4 Retryable Error Codes
The following error codes indicate the bank service is temporarily unavailable and the system will auto-retry: MPP05004, MPP09992–MPP09996, ECH09001.
4.5 HTTP Rate Limiting
HSBC eDDI uses Token Bucket optimistic locking rate limiting, 4 tokens per second. Operations does not need to monitor this mechanism — only pay attention when the system alerts "rate limit triggered" to check if debit tasks are piling up.
Code Location
- eDDI debit:
sba_hsbc_eddi/eddi/src/worker/bin/handles.py - Retryable error codes:
sba_hsbc_eddi/eddi/src/worker/lib/pub/useful_list.py - Token Bucket:
sba_hsbc_eddi/proxy/token_bucket/bin/model.py
5. Hang Seng
Hang Seng Capability Overview
Hang Seng connects via eDDA/eDDI for deposit direct debit, using BRC_/CAC_/FP prefix error codes and InnoDB row-level pessimistic locking for concurrency control.
5.1 eDDI Debit Rejection Codes
| Error Code | Meaning | Description & Handling | Customer Service Script |
|---|---|---|---|
BRC_8I1 | Insufficient balance | Notify user to top up and retry | "Please confirm your Hang Seng bank account has sufficient balance and try again." |
BRC_8RZ | Bank account abnormal | Guide user to contact Hang Seng Bank | "Your Hang Seng bank account status is abnormal. Please contact Hang Seng Bank customer service." |
BRC_8RW + FP2414 | Authorization not found | Verify authorization status, guide user to re-authorize | "Your eDDA authorization has expired. Please re-sign the authorization." |
BRC_8RW + FP2415 | Authorization not yet effective | Guide user to activate at Hang Seng | "Your eDDA authorization is not yet effective. Please log in to the Hang Seng Bank App to complete activation." |
BRC_8RW + FP2416 | Authorization expired | Guide user to re-authorize | "Your eDDA authorization has expired. Please re-sign." |
BRC_8RW + FP2417 | Authorization limit exceeded | Reduce amount or guide user to adjust limit | "The debit amount exceeds the authorization limit. Please reduce the amount or contact Hang Seng to adjust the limit." |
BRC_8I1 May Trigger Automatic Authorization Cancellation
After consecutive BRC_8I1 (insufficient balance) responses, Hang Seng may automatically cancel the eDDA authorization. When the user tops up and attempts debit again, they will receive FP2414 (authorization not found) and need to re-sign the eDDA. When Operations receives BRC_8I1 alerts, they should proactively remind the user to top up.
5.2 Web Notification Error Codes
| Error Code | Meaning | System Handling |
|---|---|---|
000 | Transaction successful | Normal credit |
BRC_8I1 | Insufficient balance | Mark as failed, notify user |
BRC_8RW | Account/authorization abnormal | Combine with FP24xx code to identify cause |
BRC_8RZ | Account abnormal | Mark as failed, guide user to contact bank |
5.3 Hang Seng Transaction Status Codes
| Status Code | Field | Meaning |
|---|---|---|
S | transactionStatus | Transaction successful |
P | transactionStatus | Processing |
F | transactionStatus | Failed |
S | enquiryStatus | Query successful |
F | enquiryStatus | Query failed |
5.4 Bank Service Unavailable Codes
The following error codes indicate Hang Seng service is temporarily unavailable and the system will retry with delay: CAC_018, CAC_021, BRC_8RK, BRC_8RM, CAC_998 (timeout), CAC_999 (timeout).
CAC_022 (duplicate transaction request) can enter tracking — not an error.
5.5 HSBC vs Hang Seng eDDI Error Code Comparison
| Scenario | HSBC | Hang Seng |
|---|---|---|
| Insufficient balance | — | BRC_8I1 |
| Authorization cancelled | MPP02020 | FP2414 |
| Authorization expired | MPP02039 | FP2416 |
| Limit exceeded | MPP02022 | FP2417 |
| Authorization does not exist | MPP02023 | FP2414 |
| Authorization dormant | MPP02038 | — |
| Account closed | MPP02021 | BRC_8RZ |
| Concurrency control | Token Bucket | InnoDB row lock |
Code Location
- Hang Seng eDDI:
sba_hase_eddi/src/worker/bin/handles.py - Error code list:
sba_hase_eddi/src/worker/lib/pub/useful_list.py
6. SCB
SCB Capability Overview
SCB connects via FPS API for withdrawals and Bank Statement collection, with Webhook async notification support.
6.1 FPS Payment Status Codes
| Status | Meaning | Description & Handling | Customer Service Script |
|---|---|---|---|
NEW | New | Awaiting processing | "Your withdrawal application has been submitted and is being processed. Please wait." |
PENDING | Processing | Normal wait | "Your withdrawal is being processed and should arrive shortly." |
SUCCESS | Success | Normal terminal state | "Your withdrawal was successful. Funds will arrive in your bank account." |
FAILED | Failed | Check reason, switch Channel if necessary | "FPS transfer failed. Please try again later or choose another withdrawal method." |
RETURNED | Returned | Confirm return reason, re-initiate withdrawal | "FPS transfer was returned. Please verify recipient information and re-submit." |
6.2 Internal Transfer Status Codes
| Status Code | Meaning |
|---|---|
| 0 | New |
| 1 | Processing |
| 2 | Success |
| 3 | Failed |
| 4 | Returned |
6.3 Webhook Event Types
| Event Type | Meaning |
|---|---|
payment_status | Payment status update |
credit_debit_advice | Credit/debit notification |
unknow | Unknown type |
6.4 Service Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 30000 | HTTP request failed | Contact engineering |
| 30001 | HTTP retry error | System auto-retrying |
| 30002 | HTTP unknown error | Contact engineering |
| 31000 | Amount error | Check amount format and range |
| 31001 | Internal error | Contact engineering |
| 31002 | Parameter error | Check request parameters |
| 31003 | Currency error | Confirm supported currencies |
Code Location
- Payment status:
scb_service/internal/app/enum/payment_status.go - Webhook:
scb_service/internal/app/enum/webhook.go
7. CGB
CGB Capability Overview
CGB connects via FPS interface for withdrawals, supporting both batch and single-transaction modes. Key pitfall: The same status code has opposite meanings in different message types.
7.1 FPS Message Type Codes
| Message Type | Direction | Purpose |
|---|---|---|
| 2063 | Initiator → Bank | Single withdrawal |
| 2064 | Bank → Receiver | Batch withdrawal |
| 2065 | Query → Bank | Single query |
| 2066 | Bank → Receiver | Batch query |
7.2 Transaction Status Codes
Status Code Meaning Reversal
In CGB FPS, 2063/2065 (single) and 2064/2066 (batch) status codes have different meanings. Always distinguish by message type when handling.
Single Response (2063 / 2065):
| Status Code | 2063 Meaning | 2065 Meaning |
|---|---|---|
| 0 | Success | Processing |
| 1 | Failed | Success |
| 2 | Processing | Failed |
Batch Response (2064 BATCHSTATUS / 2066 BATCHSTATUS):
| Status Code | 2064 Meaning | 2066 Meaning |
|---|---|---|
| 0 | — | Failed |
| 1 | Failed | Success |
| 2 | Processing | Processing |
2066 per-transaction TRANSTATUS: 0 = Processing, 1 = Success, 2 = Failed
7.3 Internal Batch Status Codes
| Status | Meaning |
|---|---|
PENDING_SEND | Pending send (initial) |
SENDING | Sending (locked) |
DEGRADED | Degraded (batch split to single) |
RECEIVED_PROCESSING | Bank processing |
DONE_SUCCESS | Success terminal state |
DONE_FAILED | Failed terminal state |
UNKNOWN | Unknown, requires manual intervention |
7.4 API Internal Error Codes
| Error Code | Meaning | Retryable |
|---|---|---|
PARAM_INVALID | Parameter validation failed | No |
NOT_FOUND | Task not found | No |
STATE_CONFLICT | State conflict | No |
SYSTEM_ERROR | System error | Yes |
BANK_ERROR | Bank returned error | Depends |
SIGN_ERROR | Signature/verification error | No |
NETWORK_ERROR | Network error | Yes |
DUPLICATE_TID | Duplicate transaction ID | No |
MAX_ATTEMPT | Max retry exceeded | No |
QUERY_NOT_FOUND | No record found | No |
AMOUNT_MISMATCH | Amount/count mismatch | No |
7.5 Bank Return Error Codes
| Error Code | Meaning | Retryable |
|---|---|---|
0000 | Success | — |
A012 | Duplicate serial number | No |
A014 | System busy | Yes |
0249 | No record found | No |
7.6 Service-Level Error Codes
| Error Code | Meaning |
|---|---|
| 30001 | Server error |
| 30002 | Parameter error |
| 30003 | Request format error |
| 30004 | Business error |
| 30005 | Bank interface exception |
| 30006 | State conflict |
| 30007 | Resource not found |
| 30008 | Duplicate request |
| 30009 | Under maintenance |
Code Location
- Message types/status codes:
cgb_fps_service/internal/app/biz/cgb/dto/common.go - Batch status:
cgb_fps_service/internal/app/enum/batch_status.go - API error codes:
cgb_fps_service/internal/app/enum/error_code.go
8. ICBC
ICBC Capability Overview
ICBC connects via Bank-Enterprise Direct Link for Bank Statement collection, using RSA signature verification. The interface is relatively traditional with a simple error code system.
8.1 Bank-Enterprise Direct Link Status Codes
| Status Code | Meaning | Description & Handling |
|---|---|---|
| 0 | Success | Normal |
| 400011 | Timeout | Contact engineering to confirm network, wait for recovery |
8.2 Common Exceptions
| Exception Type | Handling |
|---|---|
| RSA signature failed | Check if RSA key has expired |
| Balance continuity check failed | Compare start/end date balances, contact engineering |
| Amount format error | ICBC uses "cents" as the unit (100 yuan = 10000); check conversion logic |
Code Location
- Bank-Enterprise Direct Link:
icbc_be_relay/main directory
9. System Common Error Codes
9.1 System-Level Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
| -1 | System error | Contact engineering |
| -2 | Interface does not exist | Requested an unregistered interface |
| -3 | Addressing failed | Service discovery exception |
| -4 | Initialization failed | Service startup exception |
| -5 | Network error | Usually retryable |
| -6 | Insufficient permissions | Check operator permission configuration |
| -7 | Timeout | Retryable |
| -8 | Partition table does not exist | Database partition exception |
| -9 | Database error | Contact engineering |
9.2 Business-Level Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 0 | Success | — |
| 1 | Parameter error | Check request parameters |
| 2 | User does not exist | Verify uid |
| 3 | User has not opened an account | Guide user to open account |
| 4 | Account does not exist | Verify account_id |
| 5 | Account status abnormal | Contact account team |
| 6 | Not the account holder | Verify account ownership |
| 7 | User configuration does not exist | Contact engineering |
| 8 | Need to contact support | Escalate to support |
| 9 | Need to re-login | Guide user to re-login |
| 10 | Abnormal deposit does not exist | Verify record |
| 11 | Abnormal deposit Bank Statement does not exist | Verify Bank Statement |
| 12 | Abnormal deposit already processed | No duplicate action needed |
| 13 | Abnormal deposit status has changed | Refresh and retry |
| 14 | User configuration error | Contact engineering |
| 15 | GDCA certification required | Guide user to complete GDCA |
| 16 | Not retryable | Check specific error reason |
| 17 | Account has outstanding debt | Notify user to repay |
| 1001 | eDDA exception | Check eDDA error codes |
| 1002 | Blocked for business reason | Check specific blocking reason |
| 1003 | Deposit prohibited | Account is restricted, contact relevant team |
9.3 Bank Card Service Error Codes
| Error Code | Meaning | Description & Handling |
|---|---|---|
| 420 | Bank Card error | Verify Bank Card information |
| 421 | Bank Card service timeout | Retry later |
| 422 | Bank Card service response abnormal | Contact engineering |
| 423 | Bank Card service returned error | Contact engineering |
9.4 Deposit Application Status Codes
| Status Code | Meaning | Operations Action |
|---|---|---|
| 0 | Pending | Normal wait; if not matched after timeout → check Bank Statement |
| 1 | Processing | Normal wait; if stuck → check SBA status |
| 2 | Completed | No action needed |
| 3 | Rejected | Handle by rejection reason code |
| 4 | Withdrawn | Confirm withdrawal reason |
| 5 | Reversed | Verify Reversal reason, notify user |
9.5 Deposit Method Code (DepositMethod)
Note: These are deposit method codes, which differ from the TransType enum in proto (101-502 bank Channel types).
| Code | Method | Description |
|---|---|---|
| 1 | BST | CMB/Minsheng/Airstar |
| 2 | ATM/Counter | — |
| 3 | FPS Faster Payment | — |
| 4 | Bill Payment | — |
| 5 | Online Banking Transfer | — |
| 6 | Cheque | — |
| 7 | Overseas Remittance | Sub-account deposit |
| 8 | eDDA Hang Seng | — |
| 9 | eDDA HSBC | — |
| 203 | CHATS Transfer | BOCHK B2E |
| 207 | E-BANKING | BOCHK B2E |
| 209 | REMIT IN | BOCHK B2E |
| 220 | FPS | BOCHK B2E |
9.6 Deposit Method Code (Deposit Method)
| Method Code | Meaning | Corresponding Bank |
|---|---|---|
bst | BST Transfer | CMB/Minsheng |
atm | ATM/Counter | Various banks |
fps | FPS Faster Payment | Various banks |
bp | Bill Payment | — |
ebank | Online Banking Transfer | Various banks |
check | Cheque | Various banks |
subAccount | Sub-account deposit | Non-HK banks |
os | Overseas Remittance | Overseas banks |
edda | eDDA Hang Seng | Hang Seng |
eddaHSBC | eDDA HSBC | HSBC |
bstAsb | Airstar BST | Airstar |
9.7 Bank Statement Status Codes
| Status Code | Meaning |
|---|---|
| 0 | Pending (awaiting Matching) |
| 1 | Processed (Matching completed) |
| 2 | Error (requires manual handling) |
| 3 | Locked (processing) |
| 4 | In transit |
| 9 | Soft deleted |
9.8 Bank Statement Disposition Result
| Code | Meaning |
|---|---|
| 0 | System Matching |
| 1 | Manual Matching |
| 2 | Initiate deposit |
| 3 | Refund |
| 4 | Other |
| 5 | Emergency handling |
| 6 | Auto credit |
9.9 Matching Result Constants
| Code | Meaning |
|---|---|
| 0 | Unmatched |
| 1 | Assisted Matching (requires manual confirmation) |
| 2 | Auto credit (all five dimensions matched) |
9.10 Deposit Rejection Reason Codes
| Code | Meaning | Operations Action | Customer Service Script |
|---|---|---|---|
| 1 | Information unclear | Request supplementary proof | "Your deposit information is incomplete. Please provide the transfer receipt." |
| 2 | Online banking info missing | Request supplementary online banking transfer info | "Your online banking transfer information is incomplete. Please provide the relevant receipt." |
| 3 | ATM info missing | Request supplementary ATM receipt info | "Your ATM receipt information is incomplete. Please provide the complete details." |
| 4 | Bank account info missing | Request supplementary info | "Your bank account information is incomplete. Please provide the full bank account number." |
| 5 | Securities Account abnormal | Escalate to account team | "Your Securities Account status is abnormal. We are handling it for you. Please wait." |
| 6 | Transaction cancelled | Confirm cancellation reason on bank side | "Your deposit transaction was cancelled by the bank. Please contact your remitting bank." |
| 7 | Application merged | Retain the merged application | "Your multiple deposit applications have been merged. Please refer to the merged record." |
| 8 | Duplicate application | Retain one | "A duplicate deposit application was detected. The system has retained one; please do not submit again." |
| 9 | Timeout | System usually auto-rejects | "Your deposit application has timed out. Please re-submit." |
| 10 | Other (HK region) | Check remarks | "Your deposit application was not approved. Please contact support for details." |
| 11 | Other (Mainland) | Check remarks | "Your deposit application was not approved. Please contact support for details." |
| 12 | Other (Overseas) | Check remarks | "Your deposit application was not approved. Please contact support for details." |
| 14 | Account mismatch | Contact user to confirm | "The deposit account does not match the Securities Account. Please confirm you are using your own bank account." |
| 15 | Insufficient transfer info | Request supplementary transfer receipt | "Your transfer receipt is incomplete. Please provide additional details and re-submit." |
9.11 eDDI Deposit Type
| Code | Type | Meaning |
|---|---|---|
| 1 | FOUNDING_AIP | Fund regular investment |
| 2 | STOCK_MP | Stock regular investment |
| 3 | FUND_PURCHASE | Fund purchase |
| 11 | FUND_HOLD | Fund regular investment (frozen) |
| 21 | STOCK_HOLD | Stock regular investment (frozen) |
| 31 | FUND_PURCHASE_HOLD | Fund purchase (frozen) |
9.12 Deposit Type Code (DepositType)
| Code | Type | Operations Note |
|---|---|---|
| 1 | Normal deposit | No attention needed |
| 2 | PRE_APPROVAL | Online account opening flow, auto-processed |
| 3 | Abnormal deposit | Monitor handling result |
| 4 | Auto-approved | No action needed |
| 5 | High-risk deposit | Contact Risk Control to confirm |
| 11 | Frozen deposit | Confirm freeze reason |
| 21 | STOCK_HOLD stock frozen deposit | Frozen after eDDI deposit, reserved for stock regular investment debit |
| 31 | FUND_PURCHASE_HOLD fund purchase frozen deposit | Frozen after eDDI deposit, reserved for fund purchase |
9.13 Withdrawal Method Code (Method)
| Method Code | Name | Bank | Channel Type |
|---|---|---|---|
manual | Manual withdrawal | ICBC etc. | Manual |
auto_bs | BST auto | CMB/Minsheng/Airstar | BST |
check | Cheque | — | Cheque |
tele_transfer | Cross-border wire | BOCHK | Wire transfer |
boc | BOCHK intra-bank | BOCHK | Intra-bank transfer |
hase | Hang Seng online banking | Hang Seng | Corporate online banking |
hsbc | HSBC online banking | HSBC | Corporate online banking |
boc_fps | BOCHK FPS | BOCHK | FPS |
cgb_fps_api | CGB FPS | CGB | FPS API |
ewb | EWB wire | EWB | Wire transfer |
chats_rtgs | CHATS/RTGS | — | Intra-HK cross-bank |
sc | SCB FPS | SCB | FPS |
9.14 Withdrawal Approval Templates
| Template Key | Applicable Scenario | Steps |
|---|---|---|
withdraw_default | Normal withdrawal | Confirm → Remittance |
withdraw_unusual | Abnormal withdrawal | Audit → Confirm → Remittance |
withdraw_om | OM account | Confirm → Remittance |
withdraw_om_unusual | OM account abnormal | Audit → Confirm → Remittance |
fund | Fund redemption | Confirm → Remittance |
fund_unusual | Fund redemption abnormal | Audit → Confirm → Remittance |
9.15 eDDA Authorization Status Codes
| Code | Status | Operations Action |
|---|---|---|
| 0 | Authorization failed | Check eDDA error codes, guide user to retry |
| 1 | Bank processing | Wait; if over 24 hours → contact bank |
| 2 | Authorization effective | No action needed |
| 3 | Request pending send | Wait; if not sent for extended time → check service |
9.16 Freeze Type Codes
| Code | Meaning | Operations Action |
|---|---|---|
| 1 | Deposit frozen | Contact relevant team to confirm then unfreeze |
| 2 | Withdrawal frozen | Contact relevant team to confirm then unfreeze |
| 3 | Both deposit & withdrawal frozen | Usually involves compliance/Risk Control, needs escalation |
9.17 System Permission Codes
Deposit Permissions: CASH_IN_APPLY_VIEW (view applications), CASH_IN_FLOW_VIEW (view Bank Statements), CASH_IN_TASK_APPROVAL (Matching confirmation/Approval), CASH_IN_TASK_REVERSE (Reversal), CASH_IN_APPLY_MODIFY (modify application), ABNORMAL_DEPOSIT_VIEW (view abnormal deposits), ABNORMAL_DEPOSIT_MODIFY (handle abnormal deposits)
Withdrawal Permissions: PERMISSION_CASH_TASKS_OUT_AUDIT (Audit review), PERMISSION_CASH_TASKS_OUT_CONFIRM (Confirm), PERMISSION_CASH_TASKS_OUT_REMIT (Remittance execution)
After Reading
| I want to... | Go to |
|---|---|
| Look up deposit-side parameters and limits | Deposit Rules Reference |
| Look up withdrawal-side code tables and schema | Withdrawal Data Dictionary |
| Understand the business context of eDDA error codes | eDDA Direct Debit Deposit |
| Understand BST bank technical details | Mainland Bank BST |
| Troubleshoot deposit issues by symptom | Deposit Troubleshooting |
| Troubleshoot withdrawal issues by symptom | Withdrawal Troubleshooting |