
- Every approved VAS money movement must respect the Settlement -> Parent -> Sub hierarchy.
- A create call is asynchronous. You must wait for the background job result before treating the account as created.
GET /v1/virtual-accountsreturns Settlement, Parent, and Sub accounts together.clientReferenceis updated withPATCH /v1/virtual-accounts/{virtualAccountNumber}.
| Flow | Allowed |
|---|---|
| External bank -> Sub Account | Yes |
| Settlement -> Parent -> Sub | Yes |
| Sub -> Parent -> Settlement | Yes |
| Sub -> same-name external beneficiary | Yes |
| Settlement -> external counterparty | Yes |
| Sub -> Sub | No |
| Settlement -> Sub direct bypass | No |
| Sub -> Settlement direct bypass | No |
curl -X POST "https://api-uat.bcb.bm/v1/virtual-accounts" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"items": [
{
"currency": "USD",
"accountHolderName": "Jane Smith",
"accountName": "Jane Smith",
"clientReference": "USER-12345"
}
]
}'Then:
- poll
GET /v1/jobs/{jobId} - read
GET /v1/jobs/{jobId}/results - extract the created
virtualAccountNumberfromresultJson
curl -X PATCH "https://api-uat.bcb.bm/v1/virtual-accounts/1000327642" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"clientReference": "USER-12345-PRIMARY"
}'curl -X POST "https://api-uat.bcb.bm/v1/internal-transfers" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"debitAccountNumber": "1000428667",
"debitAmountCurrency": "USD",
"creditAccountNumber": "1000432675",
"creditAmountCurrency": "USD",
"debitAmount": "100.00"
}'Why it is invalid:
- both accounts are sub accounts
- same currency is not enough
- Sub -> Sub is not a permitted VAS flow
The create response only confirms the job was accepted. The account is not ready until the background job completes and the item result succeeds.