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:
- you have completed identity verification;
- the Retrieve User Information endpoint does not return the
bank_account_usd:forbidden
scope (a list of all available scopes and their descriptions can be found in the Scopes Guide);- you have subscribed to a plan that supports USD accounts creation.
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:
Name | Type | Required | Description |
---|---|---|---|
bankAccountOfferId | uuid | ✅ | The 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
Status | Description |
---|---|
DATA_COLLECTION | The USD account opening request has been initiated; the user should now provide all necessary information. |
PENDING | Request pending review. |
PENDING | The bank account opening request could not be processed. For further assistance, please reach out to our support team. |
INVOICE_FAILED | The 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:
Retrieves an invoice by its ID in case it is available for the user.
Path Parameters:
Name | Type | Required | Description |
---|---|---|---|
id | string | ✅ | the 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:
Name | Type | Required | Description |
---|---|---|---|
invoiceId | string | ✅ | the invoice ID. |
Query Parameters:
Name | Type | Required | Description |
---|---|---|---|
discountCode | string | ✅ | the 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:
Name | Type | Required | Description |
---|---|---|---|
invoiceId | string | ✅ | the invoice ID. |
type | string | ✅ | Payment provider type (only PLATFORM one is available). |
accountId | string | ✅ | Identifies the CHECKING type of account in the wallet service. All accounts can be retrieved using List all accounts endpoint. |
currency | string | ✅ | Currency used for the payment. |
anyCurrency | boolean | ✅ | Flag 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:
Name | Type | Required | Description |
---|---|---|---|
invoiceId | string | ✅ | the invoice ID. |
type | string | ✅ | Payment provider type (only PLATFORM one is available). |
paymentId | string | ✅ | Unique identifier for the payment from Step 4. |
accountId | string | ✅ | Identifies the CHECKING type of account in the wallet service. All accounts can be retrieved using List all accounts endpoint. |
currency | string | ✅ | Currency used for the payment. |
anyCurrency | boolean | ✅ | Flag 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:
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.
Updated about 4 hours ago