Use this guide to get from credentials to a working virtual account in UAT without relying on the portal UI.
By the end of this guide you should be able to:
- create a virtual account with
POST /v1/virtual-accounts - monitor the background job with
GET /v1/jobs/{jobId} - read the final result from
GET /v1/jobs/{jobId}/results - identify the account categories returned by
GET /v1/virtual-accounts - update
clientReferencewithPATCH /v1/virtual-accounts/{virtualAccountNumber}
- Base URL:
https://api-uat.bcb.bm - You need valid UAT credentials and a token from
/auth/token. - Your client must be enabled for Virtual Accounts.
- The currency you want to use must already have both of these provisioned for your client:
- a Settlement Account
- a Parent Account
If either account is missing for that currency, the create request may still be accepted as a background job, but the item result will fail with a 400 and an error such as:
{
"error": "BAD_REQUEST",
"message": "Unfortunately, your virtual account could not be created / updated due to a technical issue. Please verify all provided information is correct.; No parent account with matching currency found"
}If this happens, contact your Relationship Manager or api@bcb.bm and ask for VAS provisioning in that currency.
The quickest API check is to list VAS accounts for the currency you want to use:
curl -X GET "https://api-uat.bcb.bm/v1/virtual-accounts?currency=USD&pageSize=100" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"The response can contain three account categories:
| Category | Meaning |
|---|---|
CMS Settlement | External-facing settlement account for that currency |
CMS Parent Cate | Parent account for that currency |
CMS Sub Acct | Actual virtual accounts / sub accounts |
If you do not see both CMS Settlement and CMS Parent Cate for the requested currency, do not continue with account creation yet.
POST /v1/virtual-accounts is asynchronous. A 202 Accepted response means the request has been queued, not completed.
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"
}
]
}'Expected response:
{
"jobId": "550e8400-e29b-41d4-a716-446655440001",
"status": "Pending",
"statusUrl": "https://api-uat.bcb.bm/v1/jobs/550e8400-e29b-41d4-a716-446655440001",
"resultUrl": "https://api-uat.bcb.bm/v1/jobs/550e8400-e29b-41d4-a716-446655440001/results"
}Use the jobId or statusUrl from the create response.
curl -X GET "https://api-uat.bcb.bm/v1/jobs/550e8400-e29b-41d4-a716-446655440001" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"Typical lifecycle:
Pending: queued and waiting to be processedInProgress: actively being processedCompleted: all items succeededCompletedWithErrors: the job finished, but one or more items failed
Pending is a normal intermediate state in UAT. Do not treat it as a failure by itself.
Once the job is complete, retrieve the per-item results:
curl -X GET "https://api-uat.bcb.bm/v1/jobs/550e8400-e29b-41d4-a716-446655440001/results?pageStart=1&pageSize=100" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"Each result item gives you the final outcome for the submitted account:
status: item processing statushttpStatus: HTTP result for that itemerror: failure reason, if anyresultJson: the created virtual account details on success
Use resultJson as the source of truth for the created virtualAccountNumber and bicCode.
After a successful create, list VAS accounts again:
curl -X GET "https://api-uat.bcb.bm/v1/virtual-accounts?currency=USD&pageSize=100" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Accept: application/json"Important: this endpoint returns more than just sub accounts.
CMS Settlementis your settlement accountCMS Parent Cateis your parent accountCMS Sub Acctare the virtual accounts you created
If you are building a customer-facing list, filter for category === "CMS Sub Acct" in your application.
You can update clientReference after the account has been created and allocated.
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"
}'Use this when you need to map the virtual account to your own user or wallet identifier.
Once the account exists, these are the most useful verification endpoints:
GET /v1/virtual-accounts/{virtualAccountNumber}GET /v1/virtual-accounts/{virtualAccountNumber}/transactionsGET /v1/virtual-accounts/{virtualAccountNumber}/deposits
If the portal UI and API disagree in UAT, treat the API as the source of truth and verify state directly through these endpoints.
- Read the API Flows guide before implementing money movement.
- Read the Troubleshooting guide for common
400and job-state issues. - Read the UAT limitations guide for sandbox-specific behavior.