USD Bank Account Opening

This guide provides a structured process for opening a USD bank account.

🚧

Important

Before submitting a bank account opening request, ensure that:


Step 1. Get Available USD Accounts Opening Offers

Endpoint:

GET /bank/v2/bank-account-offers

Retrieves the bank account opening offers including connected fee, currency and other details.

Response Example:

   {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "price": {
      "amount": 0,
      "currency": "string"
    },
    "bankAccountType": "WIRE",
    "currency": "USD",
    "depositFeePercent": 0,
    "withdrawFeePercent": 0,
    "bankToCryptoFeePercent": 0,
    "cryptoToBankFeePercent": 0
  }

This endpoint returns a complete list of all fees associated with a specific bank account, including one-time account opening fees and recurring usage fees.



Step 2. Create a Bank Account Opening Request

Endpoint:

POST /bank/v2/bank-account-requests

If successful, it retrieves the request identifier, status, and KYC-connected information.

Body Parameters:

NameTypeRequiredDescription
bankAccountOfferIduuidThe unique identifier for an offer to create a bank account opening request.

Response Example:

   {
    "id": "a1e5816e-fef3-4282-b8ed-654ca411864c",
    "bankAccountType": "WIRE",
    "currency": "USD",
    "status": "DATA_COLLECTION",
    "additionalStatuses": [],
    "invoiceId": null,
    "kycInfo": {
        "personalIdentityId": "01991432-d09b-7e01-a122-b775426a92a8",
        "level": "L0",
        "upgradeInfo": {
            "upgradable": true,
            "requiredLevel": "L2",
            "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJmb3J0cmVzcy5lbGVtZW50cyIsImlzcyI6ImZvcnRyZXNzLmVsZW1lbnRzIiwiZXhwIjoxNzU3NTkwNjM4LCJpYXQiOjE3NTc1ODcwMzgsImp0aSI6IjYzZjlkNWYwLTFlMGUtNDQyZS05YTU0LWEzNTNmZTk1ODJjYiIsImh0dHBzOi8vZm9ydHJlc3NhcGkuY29tL29yZ2FuaXphdGlvbl9pZCI6ImE4MTg0NmNjLTIzNzEtNDc1Zi1hNjMzLTM0YmFjZGRmYTQwOCIsIkVsZW1lbnRUeXBlIjoiS3ljIiwibmJmIjoxNzU3NTg3MDM4fQ.wgErYVyLUaoThnCk9PkcEFYG0KyqoJiKZY7qaLki6jk"
        }
    }
}

The kycInfo array contains the data necessary to launch the widget in the subsequent step.



Step 3. Additional KYC-verification

Opening the USD bank account requires a few extra checks. For more information see the documentation at the link below: https://developers.fortresstrust.com/docs/elements-kyc-widget.

Use the details contained in kycInfo array retrieved by the POST /bank/v2/bank-account-requests endpoint to launch the widget (sandbox / production) and provide the following details and documents:

  • date of birth;
  • SNN (for US citizens) or National ID Number (for non-US citizens);
  • residential address;
  • photo of an identity document (passport, driver's licence or ID-card — required for non-US citizens).

Once the KYC verification is complete the endpoint GET /bank/v2/bank-account-requests retrieves the ID of invoice to be paid. This endpoint can also be used to track the current status of a bank account opening request.

Possible Request Statuses

StatusDescription
DATA_COLLECTIONThe USD account opening request has been initiated; the user should now provide all necessary information.
PENDINGRequest pending review.
PENDINGThe bank account opening request could not be processed. For further assistance, please reach out to our support team.
INVOICE_FAILEDThe invoice payment has failed and can not be processed. User should verify payment details and submit again.

The bank account opening request can be cancelled via POST /bank/v2/bank-account-requests/{bankAccountRequestId}/cancel endpoint while the status of the request is one of: DATA_COLLECTION, INVOICE_FAILED.

❗️

If the partner declines the bank account request, the account opening fee is non-refundable. The user will receive a notification email.



Step 4. Get Invoice by ID

Endpoint:

GET /acquiring/invoice/{id}

Retrieves an invoice by its ID in case it is available for the user.

Path Parameters:

NameTypeRequiredDescription
idstringthe invoice ID.

Response Example:

{
  "status" : "INIT",
  "payments" : [ ],
  "lastModifiedDate" : "2025-04-22T10:16:56.773584Z",
  "recurrentInvoiceId" : "c2cc3212-7bd5-44f7-a6b0-50ba2beedf11",
  "externalClientId" : "8a7b9019-bec5-4580-9b34-31a0b8fb613f",
  "id" : "8ff3635a-0f80-40a1-8eb3-555802c0635d",
  "amount" : 3,
  "currency" : "usd",
  "type" : "ORIGINAL",
  "alignable" : true
}


Optional. Apply Discount to Invoice

Endpoint:

PUT /acquiring/invoice/{invoiceId}/discount

Enables clients to apply promotional discounts before finalizing the payment.

Path Parameters:

NameTypeRequiredDescription
invoiceIdstringthe invoice ID.

Query Parameters:

NameTypeRequiredDescription
discountCodestringthe discount code to be applied to the invoice, which may provide a percentage or fixed discount.

Response Example:

{
  "status" : "INIT",
  "payments" : [ ],
  "discountCode" : "WELCOME100",
  "amountBeforeDiscount" : 102,
  "lastModifiedDate" : "2025-04-22T10:22:47.441401859Z",
  "recurrentInvoiceId" : "034cd818-18ca-4896-bfe2-cc7c445320cb",
  "externalClientId" : "8a7b9019-bec5-4580-9b34-31a0b8fb613f",
  "id" : "fea628c5-fa29-4f54-98ef-e4a2ede4d755",
  "amount" : 0.00000000,
  "currency" : "usd",
  "type" : "ORIGINAL",
  "alignable" : true
}


Step 5. Initialize Payment

Endpoint:

POST /acquiring/invoice/payment

Initializes the payment for the USD bank account opening.

Body Parameters:

NameTypeRequiredDescription
invoiceIdstringthe invoice ID.
typestringPayment provider type (only PLATFORM one is available).
accountIdstringIdentifies the CHECKING type of account in the wallet service. All accounts can be retrieved using List all accounts endpoint.
currencystringCurrency used for the payment.
anyCurrencybooleanFlag indicating whether multiple currencies are supported.

Response Example:

{
  "accountId" : "59341629-5f86-47a5-a867-1c4225f119b0",
  "id" : "8caf4504-d6b0-461b-9b67-53dacee85156",
  "invoiceId" : "a90f36dd-57af-4f5e-a2f5-086631f9edac",
  "status" : "INIT",
  "type" : "PLATFORM",
  "amount" : 15,
  "description" : "Invoice payment",
  "last_modified_date" : "2025-04-07T21:32:11.716207540Z",
  "created_date" : "2025-04-07T21:32:11.716207540Z"
}


Step 6. Confirm Invoice Payment

Endpoint:

POST /acquiring/invoice/payment/pay

Confirms payment of the invoice.

Body Parameters:

NameTypeRequiredDescription
invoiceIdstringthe invoice ID.
typestringPayment provider type (only PLATFORM one is available).
paymentIdstringUnique identifier for the payment from Step 4.
accountIdstringIdentifies the CHECKING type of account in the wallet service. All accounts can be retrieved using List all accounts endpoint.
currencystringCurrency used for the payment.
anyCurrencybooleanFlag indicating whether multiple currencies are supported.

Response Example:

{
  "accountId" : "59341629-5f86-47a5-a867-1c4225f119b0",
  "id" : "8caf4504-d6b0-461b-9b67-53dacee85156",
  "invoiceId" : "a90f36dd-57af-4f5e-a2f5-086631f9edac",
  "status" : "PROCESSING",
  "type" : "PLATFORM",
  "amount" : 15,
  "description" : "Invoice payment",
  "last_modified_date" : "2025-04-07T21:32:14.700515749Z",
  "created_date" : "2025-04-07T21:32:11.716208Z"
}


Step 7. Retrieve Bank Accounts Info

Endpoint:

GET /bank/v2/bank-accounts

Retrieves user's bank accounts details. Upon successful issuance, the response includes the bank accounts' IDs and connected information.

Response Example:

[
    {
        "id": "7d4c2f69-f8dd-4ffb-8c42-c6dda544c1e0",
        "type": "WIRE",
        "bankName": "Portage Bank",
        "bankAddress": "US, Greenville, 29611, 154 Deer Haven Drive, ",
        "swiftBic": "PORGUS62XXX",
        "accountNumber": "404609295718",
        "accountHolderName": "Mila Smith",
        "accountHolderAddress": "DE, dfdf, 121223, sdfdf, dfdf",
        "routingNumber": "021000021",
        "currency": "USD",
        "status": "ACTIVE",
        "accountId": "e9434540-ef00-4418-b8e6-0d4eb6993ad7",
        "balance": 0,
        "depositFeePercent": 0
    },
    {
        "id": "10dd0b65-cca2-4e25-b7d5-6475a53af3fb",
        "type": "SEPA",
        "bankName": "SETTLEGO SOLUTIONS LTD",
        "bankAddress": "THE BOWER BUILDING 207 - 211 OLD STREET SHOREDITCH, LONDON",
        "swiftBic": "SEOUGB21",
        "accountNumber": "GB50SEOU19870010414276",
        "accountHolderName": "Mila Smith",
        "accountHolderAddress": "ES, 12345, Test city, Test Address 1",
        "routingNumber": null,
        "currency": "EUR",
        "status": "ACTIVE",
        "accountId": "ab01a663-a5bd-40b9-8344-3d65b2852b7c",
        "balance": 0,
        "depositFeePercent": 13.00
    }
]

📘

Once the bank account is opened, the user can top up funds and make withdrawals . Note that all withdrawals require manual approval — the user will receive an email to confirm each transaction.