Skip to content

Bermuda Commercial Bank RESTful Open Banking API Implementation (v1)

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.

Key Features

  • Account details retrieval
  • Internal transfers
  • Payments (Swift)
  • Virtual Accounts
  • Transaction information access
  • Robust security and compliance
  • Comprehensive documentation

Available Environments

UAT Environment

URL: https://api-uat.bcb.bm

Purpose: Testing and integration

Production Environment

URL: https://api.bcb.bm

Purpose: Live production use

Download OpenAPI description
Overview
URL
Bermuda Commercial Bank Limited, 34 Bermudiana Road, Hamilton HM 11, Bermuda
Languages
Servers
Mock server
https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/
UAT Environment - Used for testing and integration purposes
https://api-uat.bcb.bm/
Production Environment - Live environment for production use
https://api.bcb.bm/

Accounts

Operations

Payments

Operations

ACH Local Payment

Request

Initiates a domestic ACH (Automated Clearing House) local bank transfer. The request must include all required payment details including:

  • Source (debtor) account identification
  • Payment amount and currency
  • Debit currency (must match instructed amount currency)
  • Beneficiary account identification and name
  • Creditor bank reference (bank code and currency)
  • Remittance information (1–2 lines)

Key Features

  • Supports local same-currency bank transfers via the ACH clearing network
  • Implements idempotency to prevent duplicate transactions
  • Validates payment requests before processing
  • Supports both JSON and CSV response formats
  • Same-day ACH settlement

Supported Currencies

Only USD and BMD are accepted. The debitCurrency and instructedAmount.currency must be identical (cross-currency is not supported for ACH local transfers).

Cut-Off Time

ACH local transfers must be submitted before 3:15 PM local AST for same-day processing. Submissions after the cut-off will be queued for the next business day.

Settlement

ACH local transfers settle same-day when submitted before the cut-off time. The value/effective date returned in the response reflects the settlement date.

Creditor Bank Reference

Provide creditorBank with the destination bank bankCode and currency. The API validates this combination against the configured bank reference lookup. If the bankCode and currency combination is not found, the API returns 400 Bad Request with error code BANK_REFERENCE_NOT_FOUND.

The ACH local bank reference lookup contains the following values:

Bank CodeCurrencyBank Name
BUTTERFIELDBMDBank of N.T. Butterfield & Sons
HSBCBMDHSBC Bermuda
CLARIENBMDClarien Bank Bermuda
BUTTERFIELDUSDBank of N.T. Butterfield & Sons
HSBCUSDHSBC Bermuda
CLARIENUSDClarien Bank Bermuda

Clients must provide a creditorBank.currency value of USD or BMD, and it must match debitCurrency.

Headers

  • Authorization: Bearer {token} (required)
  • Content-Type: application/json (required)
  • Accept: application/json (default) or Accept: text/csv
  • Idempotency-Key: {uuid} (optional, UUID format)

Content Negotiation

Clients must use the HTTP Accept header to indicate the desired response format:

  • Set Accept: application/json for JSON responses (default)
  • Set Accept: text/csv for CSV responses If the Accept header is omitted, application/json is assumed.

Base URL

All API requests use the versioned base URL:

https://api.bcb.bm/v1/payments/ach-local

Idempotency

The API supports idempotency through the optional Idempotency-Key header:

  • If no idempotency key is provided, the request is processed normally (duplicates are possible)
  • If a valid UUID idempotency key is provided for a new transaction, the system stores the key and associates it with the transaction results
  • If the same idempotency key is received again for the same endpoint/action, the system returns the previously stored response
  • Idempotency keys are user-specific - different users with the same keys don't share cached responses
  • The idempotency key must be a valid UUID format (e.g., "123e4567-e89b-12d3-a456-426614174000")

Validation Rules

FieldConstraint
instructionIdentificationOptional, max 16 characters
debtorAccount.identificationRequired, max 36 characters
debitCurrencyRequired, exactly 3 characters, USD or BMD only
instructedAmount.amountRequired, max 18 characters, valid decimal (up to 2 decimal places)
instructedAmount.currencyRequired, exactly 3 characters, USD or BMD only, must equal debitCurrency
creditorAccount.identificationRequired, max 17 characters
creditorAccount.nameRequired, max 22 characters
creditorBank.bankCodeRequired, 1-100 characters (see Creditor Bank Reference below)
creditorBank.currencyRequired, exactly 3 characters, must match debitCurrency
remittanceInformationRequired, 1–2 non-empty lines, each max 35 characters

Sample Request

async function processAchLocalPayment() {
  try {
    const response = await fetch('https://api.bcb.bm/v1/payments/ach-local', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Idempotency-Key': '123e4567-e89b-12d3-a456-426614174000'
      },
      body: JSON.stringify({
        instructionIdentification: "REF-123456",
        debtorAccount: {
          identification: "123456789012"
        },
        debitCurrency: "USD",
        instructedAmount: {
          currency: "USD",
          amount: "1500.00"
        },
        creditorAccount: {
          identification: "9876543210123",
          name: "John Doe"
        },
        creditorBank: {
          bankCode: "HSBC",
          currency: "USD"
        },
        remittanceInformation: ["Invoice 2026-0001"]
      })
    });
            
    if (!response.ok) {
      const errorData = await response.json();
      throw new Error(`Error: ${errorData.message || 'Unknown error'}`);
    }
            
    const result = await response.json();
    console.log('Payment ID:', result.id);
    console.log('Status:', result.status);
    console.log('Transaction Status:', result.transactionStatus);
  } catch (error) {
    console.error('Error:', error);
  }
}
            
processAchLocalPayment();

Response Structure

FieldTypeDescription
idstringUnique identifier for the payment
statusstringPayment status (success or failed)
transactionStatusstringDetailed transaction status
uniqueIdentifierstringUnique identifier for tracking
detailsobjectPayment details including amounts, accounts, settlement
linkedActivitiesarrayRelated financial activities

Required Permission: payment-ach

This endpoint requires the permission claim payment-ach 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.

Security
(Authorization and Feature Permissions) or Authorization
Bodyapplication/json

The ACH local payment request containing all necessary payment details.

instructionIdentificationstring or null[ 0 .. 16 ] characters

Unique identification as assigned by an instructing party for an instructed party to unambiguously identify the instruction. Max 16 characters.

debtorAccountobjectrequired
debtorAccount.​identificationstring[ 1 .. 36 ] charactersrequired

Unique identification of the account, such as an Bank Account Number or a local account number.

debitCurrencystring= 3 charactersrequired

ISO 4217 currency code for the debit side of the transfer. Must be USD or BMD and must match InstructedAmount currency.

instructedAmountobjectrequired
instructedAmount.​currencystringrequired

Currency ISO code

instructedAmount.​amountstringrequired

Amount

creditorAccountobjectrequired
creditorAccount.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

creditorAccount.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

creditorAccount.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

creditorBankobjectrequired
creditorBank.​bankCodestring[ 1 .. 100 ] charactersrequired

Bank code used to identify the destination bank in the bank reference lookup.

creditorBank.​currencystring= 3 charactersrequired

Three-letter ISO currency code used together with BankCode to resolve the destination bank reference. For ACH local transfers, only USD and BMD are supported.

remittanceInformationArray of stringsrequired

Information supplied to enable the matching/reconciliation of an entry with the items that the payment is intended to settle. Required: 1 to 2 lines; each line max 35 characters.

curl -i -X POST \
  https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/payments/ach-local \
  -H 'Authorization: Bearer <YOUR_jwt_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "instructionIdentification": "REF-123456",
    "debtorAccount": {
      "identification": 123456789012
    },
    "debitCurrency": "USD",
    "instructedAmount": {
      "currency": "USD",
      "amount": 1500
    },
    "creditorAccount": {
      "identification": 9876543210123,
      "name": "John Doe",
      "additionalInformation": null
    },
    "creditorBank": {
      "bankCode": "HSBC",
      "currency": "USD"
    },
    "remittanceInformation": [
      "Invoice 2026-0001"
    ]
  }'

Responses

Created - The ACH local payment was successfully processed.

Bodyapplication/json
idstringrequired

Unique identifier assigned by the bank for the SWIFT transfer. This ID can be used for future reference and tracking of the payment.

statusstringrequired

The current status of the payment processing. Possible values include:

  • success: Payment has been accepted for processing
  • failed: Payment failed
transactionStatusstringrequired

Detailed transaction status indicating the current state of the transfer. This provides more granular status information than the main status field.

uniqueIdentifierstringrequired

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.

detailsobjectrequired
details.​extReferencestringrequired

External reference number assigned by the bank's payment processing system. This reference can be used for tracking and reconciliation purposes.

details.​instructedAmountobjectrequired
details.​instructedAmount.​currencystringrequired

Currency ISO code

details.​instructedAmount.​amountstringrequired

Amount

details.​debtorAccountobjectrequired
details.​debtorAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​debtorAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​debtorAccount.​Namestringrequired

The name of the account, if available (optional).

details.​beneficiaryAccountobjectrequired
details.​beneficiaryAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​beneficiaryAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​beneficiaryAccount.​Namestringrequired

The name of the account, if available (optional).

details.​creditorAccountobjectrequired
details.​creditorAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​creditorAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​creditorAccount.​Namestringrequired

The name of the account, if available (optional).

details.​settlementDetailsobjectrequired
details.​settlementDetails.​amountCreditedobjectrequired
details.​settlementDetails.​amountCredited.​currencystringrequired

Currency ISO code

details.​settlementDetails.​amountCredited.​amountstringrequired

Amount

details.​settlementDetails.​amountDebitedobjectrequired
details.​settlementDetails.​amountDebited.​currencystringrequired

Currency ISO code

details.​settlementDetails.​amountDebited.​amountstringrequired

Amount

details.​settlementDetails.​valueDatestringrequired

The date on which the payment is settled between banks. This is the date when the funds become available to the beneficiary. Format: ISO 8601 date string (YYYY-MM-DD)

details.​settlementDetails.​recordStatusstringrequired

The current status of the settlement record.

details.​chargeDetailsobjectrequired
details.​chargeDetails.​chargesTypestringrequired

Specifies how the charges for the payment are allocated. Possible values:

  • OUR: All charges are paid by the sender
  • BEN: All charges are paid by the beneficiary
  • SHA: Charges are shared between sender and beneficiary
details.​chargeDetails.​chargeAmountobjectrequired
details.​chargeDetails.​chargeAmount.​currencystringrequired

Currency ISO code

details.​chargeDetails.​chargeAmount.​amountstringrequired

Amount

details.​chargeDetails.​chargeAccountobjectrequired
details.​chargeDetails.​chargeAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​chargeDetails.​chargeAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​chargeDetails.​chargeAccount.​Namestringrequired

The name of the account, if available (optional).

details.​chargeDetails.​chargeAnalysisobjectrequired
details.​chargeDetails.​chargeAnalysis.​senderobjectrequired
details.​chargeDetails.​chargeAnalysis.​sender.​currencystringrequired

Currency ISO code

details.​chargeDetails.​chargeAnalysis.​sender.​amountstringrequired

Amount

details.​chargeDetails.​chargeAnalysis.​receiverobjectrequired
details.​chargeDetails.​chargeAnalysis.​receiver.​currencystringrequired

Currency ISO code

details.​chargeDetails.​chargeAnalysis.​receiver.​amountstringrequired

Amount

details.​remittanceInformationArray of objects or null(UnstructuredInformation)

Collection of unstructured information provided with the payment to help with reconciliation and payment identification.

details.​beneficiaryobjectrequired
details.​beneficiary.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

details.​beneficiary.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

details.​beneficiary.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

details.​beneficiaryAgentobjectrequired
details.​beneficiaryAgent.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

details.​beneficiaryAgent.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

details.​beneficiaryAgent.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

details.​intermediaryAgentobjectrequired
details.​intermediaryAgent.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

details.​intermediaryAgent.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

details.​intermediaryAgent.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

linkedActivitiesArray of objects(Activity)required

Collection of related financial activities associated with this payment. This may include charges, forex conversions, or other related transactions.

linkedActivities[].​idstringrequired

The unique identifier for the activity.

linkedActivities[].​transactionStatusstringrequired

The current processing status of the transaction.

linkedActivities[].​statusstringrequired

The general status of the activity.

linkedActivities[].​uniqueIdentifierstring or null

A unique identifier specific to this instance of the activity.

linkedActivities[].​activityDetailsobjectrequired
linkedActivities[].​activityDetails.​arrangementIdstringrequired

Unique identifier for the arrangement associated with this activity.

linkedActivities[].​activityDetails.​activityIdstringrequired

Identifier for the type of activity.

linkedActivities[].​activityDetails.​productIdstringrequired

Product identifier related to the activity.

linkedActivities[].​activityDetails.​currencyIdstringrequired

Currency code for the activity.

linkedActivities[].​activityDetails.​effectiveDatestringrequired

Date when the activity becomes effective.

Response
application/json
{ "id": "PAY-8F2A1C", "status": "success", "transactionStatus": "accepted", "uniqueIdentifier": "20260311-ACH-000123", "details": { "extReference": "REF-123456", "instructedAmount": { … }, "debtorAccount": { … }, "beneficiaryAccount": { … }, "creditorAccount": { … }, "settlementDetails": { … }, "chargeDetails": { … }, "remittanceInformation": [ … ], "beneficiary": { … }, "beneficiaryAgent": { … }, "intermediaryAgent": null }, "linkedActivities": [] }

SWIFT Payment

Request

Initiates a SWIFT payment transfer. The request must include all required payment details including:

  • Source and destination account information
  • Payment amount and currency (or, for FX cross-currency, optional debitAmount in source currency with instructedAmount currency only)
  • Beneficiary details
  • Payment purpose and reference information

Key Features:

  • Supports international wire transfers via SWIFT network
  • Implements idempotency to prevent duplicate transactions
  • Validates payment requests before processing
  • Supports both JSON and CSV response formats
  • Supports additive cross-currency FX formatting (supplying debitAmount instead of instructedAmount.amount)

Cross-Currency FX

For cross-currency payments, you can provide the debit amount instead of the instructed amount:

  • Provide debitAmount (currency and amount) and instructedAmount.currency (no amount).
  • The API will process the payment using the debit amount and allow the core banking system to calculate the credited amount based on the exchange rate.
  • Do not provide both debitAmount.amount and instructedAmount.amount.
  • Supports Cross-Currency FX (Additive) format

Cross-Currency FX Format

When converting currencies, you can use the additive format:

  • Send debitAmount (with currency and amount) as the exact amount you wish to be debited.
  • Provide instructedAmount with just the currency (amount omitted) to let the bank assign the exchange rate.
  • If debitAmount is omitted, the instructedAmount (currency + amount) will be used as the standard behaviour.

Creditor Agent (Beneficiary Bank)

  • If creditorAgent.identification (BIC/bank identifier) is provided, creditorAgent.name and creditorAgent.additionalInformation are optional and may be omitted.
  • If creditorAgent.identification is not provided, supply creditorAgent.name and creditorAgent.additionalInformation to identify the beneficiary bank.

Content Negotiation

Clients must use the HTTP Accept header to indicate the desired response format:

  • Set Accept: application/json for JSON responses (default)
  • Set Accept: text/csv for CSV responses If the Accept header is omitted, application/json is assumed.

Base URL:

All API requests use the versioned base URL:

https://api.bcb.bm/v1/payments/swift

Idempotency

The API supports idempotency through the optional Idempotency-Key header:

  • If no idempotency key is provided, the request is processed normally (duplicates are possible)
  • If a valid UUID idempotency key is provided for a new transaction, the system stores the key and associates it with the transaction results
  • If the same idempotency key is received again for the same endpoint/action, the system returns the previously stored response
  • Idempotency keys are user-specific - different users with the same keys don't share cached responses
  • The idempotency key must be a valid UUID format (e.g., "123e4567-e89b-12d3-a456-426614174000").

Sample Request in JavaScript:

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", // Optional
        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",
          // Optional when a BIC/bank identifier is provided:
          // 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();

Response Structure

FieldTypeDescription
idstringUnique identifier for the payment
statusstringPayment status (success or failed)
transactionStatusstringDetailed transaction status
uniqueIdentifierstringUnique identifier for tracking
detailsobjectPayment details object
linkedActivitiesarrayRelated 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.

Security
(Authorization and Feature Permissions) or Authorization
Bodyapplication/json

The SWIFT payment request containing all necessary payment details.

instructionIdentificationstring or null[ 0 .. 16 ] characters

Unique identification as assigned by an instructing party for an instructed party to unambiguously identify the instruction.

debtorAccountobjectrequired
debtorAccount.​identificationstring[ 1 .. 36 ] charactersrequired

Unique identification of the account, such as an Bank Account Number or a local account number.

instructedAmountobjectrequired
instructedAmount.​currencystringrequired

Currency ISO code

instructedAmount.​amountstringrequired

Amount

debitAmountobject or null
creditorAccountobjectrequired
creditorAccount.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

creditorAccount.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

creditorAccount.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

creditorAgentobjectrequired
creditorAgent.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

creditorAgent.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

creditorAgent.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

intermediaryAgentobject or null
chargesTypestring[ 1 .. 3 ] charactersrequired

Specifies which party/parties will bear the charges associated with the processing of the payment transaction. Max length: 3 characters (e.g., OUR/SHA/BEN).

remittanceInformationArray of stringsrequired

Information supplied to enable the matching/reconciliation of an entry with the items that the payment is intended to settle. Limit: up to 4 lines; each line max 35 characters.

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
    },
    "debitAmount": null,
    "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": [
        "383 Madison Avenue",
        "New York, NY 10179",
        "United States"
      ]
    },
    "intermediaryAgent": {
      "identification": "BCBKBMHM",
      "name": "Bermuda Commercial Bank",
      "additionalInformation": [
        "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"
    ]
  }'

Responses

Created - The payment was successfully processed.

Bodyapplication/json
idstringrequired

Unique identifier assigned by the bank for the SWIFT transfer. This ID can be used for future reference and tracking of the payment.

statusstringrequired

The current status of the payment processing. Possible values include:

  • success: Payment has been accepted for processing
  • failed: Payment failed
transactionStatusstringrequired

Detailed transaction status indicating the current state of the transfer. This provides more granular status information than the main status field.

uniqueIdentifierstringrequired

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.

detailsobjectrequired
details.​extReferencestringrequired

External reference number assigned by the bank's payment processing system. This reference can be used for tracking and reconciliation purposes.

details.​instructedAmountobjectrequired
details.​instructedAmount.​currencystringrequired

Currency ISO code

details.​instructedAmount.​amountstringrequired

Amount

details.​debtorAccountobjectrequired
details.​debtorAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​debtorAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​debtorAccount.​Namestringrequired

The name of the account, if available (optional).

details.​beneficiaryAccountobjectrequired
details.​beneficiaryAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​beneficiaryAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​beneficiaryAccount.​Namestringrequired

The name of the account, if available (optional).

details.​creditorAccountobjectrequired
details.​creditorAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​creditorAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​creditorAccount.​Namestringrequired

The name of the account, if available (optional).

details.​settlementDetailsobjectrequired
details.​settlementDetails.​amountCreditedobjectrequired
details.​settlementDetails.​amountCredited.​currencystringrequired

Currency ISO code

details.​settlementDetails.​amountCredited.​amountstringrequired

Amount

details.​settlementDetails.​amountDebitedobjectrequired
details.​settlementDetails.​amountDebited.​currencystringrequired

Currency ISO code

details.​settlementDetails.​amountDebited.​amountstringrequired

Amount

details.​settlementDetails.​valueDatestringrequired

The date on which the payment is settled between banks. This is the date when the funds become available to the beneficiary. Format: ISO 8601 date string (YYYY-MM-DD)

details.​settlementDetails.​recordStatusstringrequired

The current status of the settlement record.

details.​chargeDetailsobjectrequired
details.​chargeDetails.​chargesTypestringrequired

Specifies how the charges for the payment are allocated. Possible values:

  • OUR: All charges are paid by the sender
  • BEN: All charges are paid by the beneficiary
  • SHA: Charges are shared between sender and beneficiary
details.​chargeDetails.​chargeAmountobjectrequired
details.​chargeDetails.​chargeAmount.​currencystringrequired

Currency ISO code

details.​chargeDetails.​chargeAmount.​amountstringrequired

Amount

details.​chargeDetails.​chargeAccountobjectrequired
details.​chargeDetails.​chargeAccount.​schemeNamestring or null

The name of the identification scheme, e.g. "BBAN", "AccountNumber".

details.​chargeDetails.​chargeAccount.​identificationstringrequired

The identifier within that scheme (e.g. account number).

details.​chargeDetails.​chargeAccount.​Namestringrequired

The name of the account, if available (optional).

details.​chargeDetails.​chargeAnalysisobjectrequired
details.​chargeDetails.​chargeAnalysis.​senderobjectrequired
details.​chargeDetails.​chargeAnalysis.​sender.​currencystringrequired

Currency ISO code

details.​chargeDetails.​chargeAnalysis.​sender.​amountstringrequired

Amount

details.​chargeDetails.​chargeAnalysis.​receiverobjectrequired
details.​chargeDetails.​chargeAnalysis.​receiver.​currencystringrequired

Currency ISO code

details.​chargeDetails.​chargeAnalysis.​receiver.​amountstringrequired

Amount

details.​remittanceInformationArray of objects or null(UnstructuredInformation)

Collection of unstructured information provided with the payment to help with reconciliation and payment identification.

details.​beneficiaryobjectrequired
details.​beneficiary.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

details.​beneficiary.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

details.​beneficiary.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

details.​beneficiaryAgentobjectrequired
details.​beneficiaryAgent.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

details.​beneficiaryAgent.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

details.​beneficiaryAgent.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

details.​intermediaryAgentobjectrequired
details.​intermediaryAgent.​identificationstring[ 1 .. 35 ] charactersrequired

Unique identification of the party, such as a BIC (Bank Identifier Code) for financial institutions or an account number for account holders.

details.​intermediaryAgent.​namestring or null[ 0 .. 35 ] characters

Name by which the party is known and which is usually used to identify the party.

details.​intermediaryAgent.​additionalInformationArray of strings or null<= 4 items

Additional information about the party that may be required for processing the payment, such as address details, country codes, or specific payment instructions. Max 4 lines; each line max 35 characters.

linkedActivitiesArray of objects(Activity)required

Collection of related financial activities associated with this payment. This may include charges, forex conversions, or other related transactions.

linkedActivities[].​idstringrequired

The unique identifier for the activity.

linkedActivities[].​transactionStatusstringrequired

The current processing status of the transaction.

linkedActivities[].​statusstringrequired

The general status of the activity.

linkedActivities[].​uniqueIdentifierstring or null

A unique identifier specific to this instance of the activity.

linkedActivities[].​activityDetailsobjectrequired
linkedActivities[].​activityDetails.​arrangementIdstringrequired

Unique identifier for the arrangement associated with this activity.

linkedActivities[].​activityDetails.​activityIdstringrequired

Identifier for the type of activity.

linkedActivities[].​activityDetails.​productIdstringrequired

Product identifier related to the activity.

linkedActivities[].​activityDetails.​currencyIdstringrequired

Currency code for the activity.

linkedActivities[].​activityDetails.​effectiveDatestringrequired

Date when the activity becomes effective.

Response
application/json
{ "id": "PAY987654321", "status": "success", "transactionStatus": "COMPLETED", "uniqueIdentifier": "unique-identifier-987", "details": { "extReference": "EXT98765", "instructedAmount": { … }, "debtorAccount": { … }, "beneficiaryAccount": { … }, "creditorAccount": { … }, "settlementDetails": { … }, "chargeDetails": { … }, "remittanceInformation": [ … ], "beneficiary": { … }, "beneficiaryAgent": { … }, "intermediaryAgent": { … } }, "linkedActivities": [ { … } ] }

List payment statuses for an account

Request

Retrieves status information for all payments associated with a specific account. This endpoint:

  • Provides comprehensive payment status details including type, status, transaction ID, external reference, remittance information, amounts, value date, and exchange rate.
  • Supports both JSON and CSV response formats based on the Accept header.
  • Supports cursor-based pagination for efficient handling of large payment status datasets.

Pagination

This endpoint uses cursor-based pagination with server-side result-set management:

  • First Request: Optionally specify pageSize (default: 100, max: 1000). The server creates a cursor and returns a pageToken.
  • Subsequent Requests: Use the pageToken from previous responses with pageStart to navigate pages.
  • Page Token: Contains encoded pagination context including pageSize, so don't specify pageSize in subsequent requests.
  • Total Pages: Calculate using Math.ceil(total_size / page_size) from the response metadata.

Content Negotiation

Clients must use the HTTP Accept header to indicate the desired response format:

  • Set Accept: application/json for JSON responses (default)
  • Set Accept: text/csv for CSV responses If the Accept header is omitted, application/json is assumed.

Base URL

All API requests use the versioned base URL:

https://api.bcb.bm/v1/accounts/{accountNumber}/payments

Sample Request in JavaScript

async function getAllPaymentStatusesPaginated(accountNumber) {
  try {
    let allPaymentStatuses = [];
    let pageStart = 1;
    let pageToken = null;
    let totalPages = 0;

    do {
      // Build URL with pagination parameters
      let url = `https://api.bcb.bm/v1/accounts/${accountNumber}/payments`;
      const params = new URLSearchParams();
      
      if (pageStart === 1) {
        // First request: specify pageSize
        params.append('pageSize', '100');
      } else {
        // Subsequent requests: use pageToken and pageStart
        params.append('pageToken', pageToken);
        params.append('pageStart', pageStart.toString());
      }
      
      if (params.toString()) {
        url += '?' + params.toString();
      }

      const response = await fetch(url, {
        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 data = await response.json();
      console.log(`Page ${pageStart} data:`, data);

      // Store pagination info from first request
      if (pageStart === 1 && data.meta && data.meta.pagination) {
        pageToken = data.meta.pagination.page_token;
        totalPages = Math.ceil(data.meta.pagination.total_size / data.meta.pagination.page_size);
        console.log(`Total pages: ${totalPages}, Page token: ${pageToken}`);
      }

      // Collect payment statuses from this page
      if (data.data && data.data.length > 0) {
        allPaymentStatuses.push(...data.data);
        console.log(`Collected ${data.data.length} payment statuses from page ${pageStart}`);
      }

      pageStart++;
    } while (pageStart <= totalPages);

    console.log(`Total payment statuses collected: ${allPaymentStatuses.length}`);

    // Process all collected payment statuses
    allPaymentStatuses.forEach((payment, index) => {
      console.log(`Payment ${index + 1}:`, 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('-------------------');
    });

    return allPaymentStatuses;
  } catch (error) {
    console.error('There was a problem with the fetch operation:', error.message);
    throw error;
  }
}

// Alternative: Get single page of payment statuses
async function getPaymentStatusesPage(accountNumber, pageStart = 1, pageToken = null) {
  try {
    let url = `https://api.bcb.bm/v1/accounts/${accountNumber}/payments`;
    const params = new URLSearchParams();
    
    if (pageStart === 1 && !pageToken) {
      params.append('pageSize', '50'); // Custom page size
    } else {
      params.append('pageToken', pageToken);
      params.append('pageStart', pageStart.toString());
    }
    
    if (params.toString()) {
      url += '?' + params.toString();
    }

    const response = await fetch(url, {
      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 data = await response.json();
    console.log('Payment statuses page:', data);
    return data;
  } catch (error) {
    console.error('There was a problem with the fetch operation:', error.message);
    throw error;
  }
}

// Example usage:
getAllPaymentStatusesPaginated('123456789'); // Retrieves all payment statuses across multiple pages
// OR
getPaymentStatusesPage('123456789', 1).then(firstPage => {
  console.log('First page:', firstPage);
  // Use firstPage.meta.pagination.page_token for subsequent requests
});

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.

Security
(Authorization and Feature Permissions) or Authorization
Path
accountNumberstringrequired

The account number to retrieve payment statuses for.

Query
pageTokenstring or null[ 0 .. 100 ] characters
pageStartinteger or null(int32)
pageSizeinteger or null(int32)
curl -i -X GET \
  'https://developers.bcb.bm/_mock/apis/open-banking-api/open-banking-api/v1/accounts/{accountNumber}/payments?pageToken=string&pageStart=0&pageSize=0' \
  -H 'Authorization: Bearer <YOUR_jwt_HERE>'

Responses

OK - The request was successful.

Bodyapplication/json
metaobject or null
dataArray of objects or null(TransactionStatus)
Response
application/json
{ "meta": { "pagination": { … } }, "data": [ { … }, { … }, { … } ] }

Get payment status

Request

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:

  • Type: The type of payment (e.g., "Outward Swift Payment MT103 API")
  • Status: Current status of the payment (e.g., "Pending", "Completed", "Reversed")
  • TransactionId: Unique payment identifier (or Transaction Id)
  • ExternalReference: External reference number for the payment
  • RemittanceInformation: Free-text information about the purpose of the payment
  • DebitAmount: The amount debited from the account, including currency code
  • CreditAmount: The amount credited to the account, including currency code
  • ValueDate: The date when the payment was/will be processed
  • ExchangeRate: The exchange rate applied to the payment

Content Negotiation

Clients must use the HTTP Accept header to indicate the desired response format:

  • Set Accept: application/json for JSON responses (default)
  • Set Accept: text/csv for CSV responses If the Accept header is omitted, application/json is assumed.

Base URL:

All API requests use the versioned base URL:

https://api.bcb.bm/v1/payments/{paymentId}/status

Sample Request in JavaScript:

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.

Security
(Authorization and Feature Permissions) or Authorization
Path
paymentIdstringrequired

The unique identifier of the payment (also known as transactionId) to retrieve status for.

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>'

Responses

OK - The request was successful.

Bodyapplication/json
typestringrequired

The type of transaction (e.g., "Outward Swift Payment MT103 API")

externalReferencestring or null

External reference number for the transaction

statusstringrequired

Current status of the transaction (e.g., "Pending", "Completed", "Reversed")

remittanceInformationstring or null

Free-text remittance information provided by the client, describing the purpose of the transaction.

transactionIdstringrequired

Unique transaction number

debitAmountobjectrequired
debitAmount.​currencystringrequired

Currency ISO code

debitAmount.​amountstringrequired

Amount

valueDatestringrequired

The date when the transaction will be processed

creditAmountobjectrequired
creditAmount.​currencystringrequired

Currency ISO code

creditAmount.​amountstringrequired

Amount

exchangeRatenumber or null(decimal)

Exchange rate applied to the transaction

Response
application/json
{ "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 }

Credentials

Operations

Testing

Operations

Fx Quotes

Operations

Internal Transfers

Operations

Public Keys

Operations

Token

Operations

Transactions

Operations

Virtual Accounts

Operations

Notifications

Operations

Background Jobs

Operations

System

Operations