The Bermuda Commercial Bank (BCB) RESTful Open Banking API provides secure, programmatic access to BCB's banking services, enabling developers to integrate financial services into their applications.
https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/
https://api-uat.bcb.bm/
https://api.bcb.bm/
Initiates a SWIFT payment transfer. The request must include all required payment details including:
Clients must use the HTTP Accept header to indicate the desired response format:
Accept: application/json
for JSON responses (default)Accept: text/csv
for CSV responses If the Accept header is omitted, application/json
is assumed.All API requests use the versioned base URL:
https://api.bcb.bm/v1/payments/swift
The API supports idempotency through the optional Idempotency-Key
header:
async function processSwiftPayment() {
try {
const response = await fetch('https://api.bcb.bm/v1/payments/swift', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json',
'Idempotency-Key': '123e4567-e89b-12d3-a456-426614174000' // Optional: UUID format required if provided
},
body: JSON.stringify({
instructionIdentification: "PAYMENT-123456",
debtorAccount: {
identification: "DEBTOR-ACC-123"
},
instructedAmount: {
currency: "USD",
amount: "1000.00"
},
creditorAccount: {
identification: "CREDITOR-ACC-456",
name: "John Doe",
additionalInformation: ["Additional details"]
},
creditorAgent: {
identification: "BANKBIC123",
name: "Beneficiary Bank",
additionalInformation: ["SWIFT/BIC code"]
},
chargesType: "OUR",
remittanceInformation: ["Payment for services"]
})
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(`Error processing payment: ${errorData.message || 'Unknown error'}`);
}
const result = await response.json();
// Check payment status
if (result.status === 'success') {
console.log('Payment processed successfully');
// Log payment details
console.log('Payment ID:', result.id);
console.log('Transaction Status:', result.transactionStatus);
console.log('Unique Identifier:', result.uniqueIdentifier);
// Process payment details
const details = result.details;
console.log('External Reference:', details.extReference);
console.log('Instructed Amount:', details.instructedAmount.amount, details.instructedAmount.currency);
// Process account information
console.log('Debtor Account:', details.debtorAccount.identification);
console.log('Creditor Account:', details.creditorAccount.identification);
console.log('Beneficiary Account:', details.beneficiaryAccount.identification);
// Process settlement details
const settlement = details.settlementDetails;
console.log('Amount Credited:', settlement.amountCredited.amount, settlement.amountCredited.currency);
console.log('Amount Debited:', settlement.amountDebited.amount, settlement.amountDebited.currency);
console.log('Value Date:', settlement.valueDate);
console.log('Record Status:', settlement.recordStatus);
// Process charge details
const charges = details.chargeDetails;
console.log('Charges Type:', charges.chargesType);
console.log('Total Charges:', charges.chargeAmount.amount, charges.chargeAmount.currency);
// Process charge analysis
const chargeAnalysis = charges.chargeAnalysis;
console.log('Sender Charges:', chargeAnalysis.sender.amount, chargeAnalysis.sender.currency);
console.log('Receiver Charges:', chargeAnalysis.receiver.amount, chargeAnalysis.receiver.currency);
// Process beneficiary information
console.log('Beneficiary Name:', details.beneficiary.name);
console.log('Beneficiary Bank:', details.beneficiaryAgent.name);
// Process remittance information
if (details.remittanceInformation) {
console.log('Remittance Information:');
details.remittanceInformation.forEach(info => console.log('-', info));
}
// Process linked activities
if (result.linkedActivities && result.linkedActivities.length > 0) {
console.log('Linked Activities:');
result.linkedActivities.forEach(activity => {
console.log('- Activity ID:', activity.id);
console.log(' Status:', activity.status);
console.log(' Transaction Status:', activity.transactionStatus);
console.log(' Unique Identifier:', activity.uniqueIdentifier);
});
}
} else {
console.error('Payment processing failed:', result.status);
// Handle failed payment
if (result.details) {
console.error('Error details:', result.details);
}
}
} catch (error) {
console.error('Error:', error);
// Handle error appropriately
}
}
// Example usage:
processSwiftPayment();
Field | Type | Description |
---|---|---|
id | string | Unique identifier for the payment |
status | string | Payment status (success or failed ) |
transactionStatus | string | Detailed transaction status |
uniqueIdentifier | string | Unique identifier for tracking |
details | object | Payment details object |
linkedActivities | array | Related financial activities |
Required Permission: payment-swift
This endpoint requires the permission claim payment-swift
to be present in the JWT token. These permissions are embedded in the token during the authentication process and cannot be modified afterward. The token must be obtained with the appropriate permissions to access this endpoint.
The SWIFT payment request containing all necessary payment details.
Unique identification as assigned by an instructing party for an instructed party to unambiguously identify the instruction.
Unambiguous identification of the account of the debtor to which a debit entry will be made as a result of the transaction.
Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party.
Unambiguous identification of the account of the creditor to which a credit entry will be posted as a result of the payment transaction.
Unambiguous identification of the account of the creditor to which a credit entry will be posted as a result of the payment transaction.
Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.
Name by which the party is known and which is usually used to identify the party.
Financial institution servicing an account for the creditor.
Financial institution servicing an account for the creditor.
Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.
Name by which the party is known and which is usually used to identify the party.
Agent between the debtor's agent and the creditor's agent.
Agent between the debtor's agent and the creditor's agent.
Specifies which party/parties will bear the charges associated with the processing of the payment transaction.
https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/payments/swift
https://api-uat.bcb.bm/v1/payments/swift
https://api.bcb.bm/v1/payments/swift
curl -i -X POST \
https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/payments/swift \
-H 'Authorization: Bearer <YOUR_jwt_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"instructionIdentification": "PAY-2024-03-21-001",
"debtorAccount": {
"identification": "BM12BCBK00001234567890"
},
"instructedAmount": {
"currency": "USD",
"amount": 50000
},
"creditorAccount": {
"identification": "US12BCBK00001234567890",
"name": "Global Investment Services Inc",
"additionalInformation": [
"350 Fifth Avenue",
"New York, NY 10118",
"United States"
]
},
"creditorAgent": {
"identification": "CHASUS33",
"name": "JPMorgan Chase Bank",
"additionalInformation": [
"SWIFT/BIC: CHASUS33",
"383 Madison Avenue",
"New York, NY 10179",
"United States"
]
},
"intermediaryAgent": {
"identification": "BCBKBMHM",
"name": "Bermuda Commercial Bank",
"additionalInformation": [
"SWIFT/BIC: BCBKBMHM",
"Victoria Place",
"31 Victoria Street",
"Hamilton HM 10, Bermuda"
]
},
"chargesType": "OUR",
"remittanceInformation": [
"Payment for investment management services Q1 2024",
"Invoice #INV-2024-001",
"Service Period: Jan-Mar 2024"
]
}'
Created - The payment was successfully processed.
Unique identifier assigned by the bank for the SWIFT transfer. This ID can be used for future reference and tracking of the payment.
The current status of the payment processing. Possible values include:
Detailed transaction status indicating the current state of the transfer. This provides more granular status information than the main status field.
A unique identifier specific to this instance of the SWIFT transfer. This identifier remains constant throughout the lifecycle of the payment and can be used for reconciliation purposes.
Detailed information about the payment transaction including amounts, accounts, and settlement information.
Detailed information about the payment transaction including amounts, accounts, and settlement information.
{ "id": "PAY987654321", "status": "success", "transactionStatus": "COMPLETED", "uniqueIdentifier": "unique-identifier-987", "details": { "extReference": "EXT98765", "instructedAmount": { … }, "debtorAccount": { … }, "beneficiaryAccount": { … }, "creditorAccount": { … }, "settlementDetails": { … }, "chargeDetails": { … }, "remittanceInformation": [ … ], "beneficiary": { … }, "beneficiaryAgent": { … }, "intermediaryAgent": { … } }, "linkedActivities": [ { … } ] }
Retrieves status information for all payments associated with a specific account. This endpoint provides a comprehensive view of payment status details including:
Clients must use the HTTP Accept header to indicate the desired response format:
Accept: application/json
for JSON responses (default)Accept: text/csv
for CSV responses If the Accept header is omitted, application/json
is assumed.All API requests use the versioned base URL:
https://api.bcb.bm/v1/accounts/{accountNumber}/payments
async function getAccountPaymentStatuses(accountNumber) {
try {
const response = await fetch(`https://api.bcb.bm/v1/accounts/${accountNumber}/payments`, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(`Error: ${errorData.message || 'Unknown error'}`);
}
const { meta, data } = await response.json();
console.log('Payment statuses:', data);
// Process pagination metadata if available
if (meta && meta.pagination) {
console.log('Page Start:', meta.pagination.page_start);
console.log('Total Size:', meta.pagination.total_size);
console.log('Page Size:', meta.pagination.page_size);
console.log('Page Token:', meta.pagination.page_token);
// Optionally, store the page token for fetching subsequent pages
localStorage.setItem('paginationToken', meta.pagination.page_token);
}
// Process each payment status
data.forEach(payment => {
console.log('Payment ID:', payment.transactionId);
console.log('Type:', payment.type);
console.log('Status:', payment.status);
console.log('External Reference:', payment.externalReference);
console.log('Remittance Information:', payment.remittanceInformation);
console.log('Value Date:', payment.valueDate);
console.log('Debit Amount:', `${payment.debitAmount.amount} ${payment.debitAmount.currency}`);
if (payment.creditAmount && payment.creditAmount.amount) {
console.log('Credit Amount:', `${payment.creditAmount.amount} ${payment.creditAmount.currency}`);
}
console.log('-------------------');
});
} catch (error) {
console.error('There was a problem retrieving payment statuses:', error.message);
}
}
// Example usage:
getAccountPaymentStatuses('123456789');
After obtaining the page token from the initial request and storing it (e.g., in localStorage), you can retrieve subsequent pages. For example, to fetch results starting from page 2 using the stored token:
async function getAccountPaymentStatusesPage() {
try {
// Retrieve the stored page token from localStorage
const storedPageToken = localStorage.getItem('paginationToken');
// Make the API call with the stored page token and pagination parameters
const response = await fetch(`https://api.bcb.bm/v1/accounts/123456789/payments?pageToken=${storedPageToken}&pageStart=2`, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
// Check if the response is OK; if not, throw an error with details
if (!response.ok) {
const errorData = await response.json();
throw new Error(`Error fetching payment statuses: ${JSON.stringify(errorData)}`);
}
// Parse the JSON response
const { meta, data } = await response.json();
// Log pagination metadata and store the new page token
console.log('Pagination Meta:', meta.pagination);
localStorage.setItem('paginationToken', meta.pagination.page_token);
// Process each payment status record
data.forEach(payment => console.log('Payment ID:', payment.paymentId));
} catch (error) {
// Log any errors that occur during the fetch operation
console.error('Error:', error);
}
}
// Execute the function to fetch payment statuses with pagination
getAccountPaymentStatusesPage();
Required Permission: get-payment-status
This endpoint requires the permission claim get-payment-status
to be present in the JWT token. These permissions are embedded in the token during the authentication process and cannot be modified afterward. The token must be obtained with the appropriate permissions to access this endpoint.
https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/accounts/{accountNumber}/payments
https://api-uat.bcb.bm/v1/accounts/{accountNumber}/payments
https://api.bcb.bm/v1/accounts/{accountNumber}/payments
curl -i -X GET \
'https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/accounts/{accountNumber}/payments?pageSize=0&pageStart=0&pageToken=string' \
-H 'Authorization: Bearer <YOUR_jwt_HERE>'
{ "meta": { "pagination": { … } }, "data": [ { … }, { … }, { … } ] }
Retrieves detailed status information for a specific payment identified by its payment ID (also known as transaction ID). This endpoint provides comprehensive status details including:
Clients must use the HTTP Accept header to indicate the desired response format:
Accept: application/json
for JSON responses (default)Accept: text/csv
for CSV responses If the Accept header is omitted, application/json
is assumed.All API requests use the versioned base URL:
https://api.bcb.bm/v1/payments/{paymentId}/status
async function getPaymentStatus(paymentId) {
try {
const response = await fetch(`https://api.bcb.bm/v1/payments/${paymentId}/status`, {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(`Error: ${errorData.message || 'Unknown error'}`);
}
const paymentStatus = await response.json();
console.log('Payment Status Details:');
console.log('Payment ID:', paymentStatus.transactionId);
console.log('Type:', paymentStatus.type);
console.log('Status:', paymentStatus.status);
console.log('External Reference:', paymentStatus.externalReference);
console.log('Remittance Information:', paymentStatus.remittanceInformation);
console.log('Value Date:', paymentStatus.valueDate);
console.log('Debit Amount:', `${paymentStatus.debitAmount.amount} ${paymentStatus.debitAmount.currency}`);
if (paymentStatus.creditAmount && paymentStatus.creditAmount.amount) {
console.log('Credit Amount:', `${paymentStatus.creditAmount.amount} ${paymentStatus.creditAmount.currency}`);
}
// Implement business logic based on payment status
if (paymentStatus.status === 'Completed') {
console.log('Payment has been successfully completed.');
} else if (paymentStatus.status === 'Pending') {
console.log('Payment is still being processed.');
} else if (paymentStatus.status === 'Failed') {
console.log('Payment failed. Please check the details or contact support.');
}
} catch (error) {
console.error('There was a problem retrieving the payment status:', error.message);
}
}
// Example usage:
getPaymentStatus('PAY-001-2023');
Required Permission: get-payment-status
This endpoint requires the permission claim get-payment-status
to be present in the JWT token. These permissions are embedded in the token during the authentication process and cannot be modified afterward. The token must be obtained with the appropriate permissions to access this endpoint.
https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/payments/{paymentId}/status
https://api-uat.bcb.bm/v1/payments/{paymentId}/status
https://api.bcb.bm/v1/payments/{paymentId}/status
curl -i -X GET \
'https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/payments/{paymentId}/status' \
-H 'Authorization: Bearer <YOUR_jwt_HERE>'
OK - The request was successful.
Free-text remittance information provided by the client, describing the purpose of the transaction.
The amount debited from the account
The amount debited from the account
The amount credited from the account
The amount credited from the account
{ "type": "Outward Swift Payment MT103 API", "externalReference": "REF123456", "status": "Completed", "remittanceInformation": "Invoice payment #INV-2023-001", "transactionId": "TX-001-2023", "debitAmount": { "currency": "USD", "amount": 1000 }, "valueDate": "2023-05-15", "creditAmount": { "currency": "USD", "amount": null }, "exchangeRate": null }