Before you start
You need a customer ID, a ready bank capability for the intended method and currency, and a ready issued wallet owned by the same customer. WithallowPending, you can save the request while the selected bank still reviews the customer. Complete open work through Capabilities and tasks.
1. Create or select the settlement wallet
Create an issued wallet through Accounts and wallets, then read it again. Continue only when its current status permits settlement. Store its response-deriveddata.id as SETTLEMENT_WALLET_ID. Do not use an external wallet for settlement.accountId.
2. Create the issued bank account
UsePOST /v3/customers/{customerId}/accounts with these headers:
Request headers
Request body
data.id as BANK_ACCOUNT_ID. Also retain data.status, data.openTaskIds, data.details, and the settlement relationship.
Optional request fields:
Choose the bank
Sendinstitution when the customer needs bank details from a specific bank. Swipelux reserves one issued account per customer, method, currency, and institution. A request without institution returns 409 conflict if the customer already has an issued account for that method and currency at any bank. A request with institution returns 409 conflict only if an account for that bank already exists.
Account reads return the selected bank as institution with id, name, and bic. bic can be null.
Idempotency applies to the selected bank. Replaying the same request returns the original account. Changing institution under the same Idempotency-Key returns 409 idempotency_conflict.
Save the request before bank approval
By default, Swipelux accepts an issued bank account request only after the bank capability is ready. To collect the customer’s account setup earlier, sendallowPending: true with institution:
Request body with allowPending
status: "in_review" with statusReason.code set to waiting_for_approval. The response also includes applicationId and the application’s openTaskIds. Complete those tasks through Capabilities and tasks.
The saved request keeps its account ID, settlement wallet, and account slot. After the application and capability are ready, Swipelux provisions bank details under the same BANK_ACCOUNT_ID. Keep reading that ID. Do not create another request.
While the saved request waits, it holds the account slot. Another allowPending request for the same slot under a different Idempotency-Key returns 409 conflict. The problem’s holder.accountId names the waiting account. Read that account instead of retrying.
If the application is rejected, canceled, or archived first, the account becomes rejected. It no longer holds the account slot.
Choose the settlement currency
By default, deposits settle in the settlement wallet’s currency. Setsettlement.currency to USDC or USDT to choose the delivered asset independently of the wallet’s currency:
Request body with settlement currency
USDT requires a USD account and a settlement wallet on a network that supports USDT delivery. Otherwise the request returns 400 invalid_settlement_target. Account reads return the saved choice, including while the account is provisioning.
The bank account ID and wallet ID have different roles. Read provisioning and bank details through the bank account ID. Use the settlement wallet ID to identify where deposits are credited.
3. Monitor provisioning
ReadGET /v3/customers/{customerId}/accounts/{accountId} after creation and after each relevant webhook.
Keep the customer interface pending while details is absent. If openTaskIds is not empty, complete the latest tasks and refetch the account. Do not infer readiness from elapsed time.
If the account was saved with allowPending: true, it stays in_review with statusReason.code set to waiting_for_approval until the bank approves the application.
If the latest statusReason.code is awaiting_assignment, create the first pay-in for the same customer, capability, and settlement wallet through Receive funds, then read the bank account again. Follow this branch only when the current account requests it.
4. Present bank details safely
Display only the complete details returned by the latest account read. Whendetails.referenceRequired is true, show the exact details.reference and make it copyable. When it is false, do not invent a reference.
For issued swift accounts, display details.bankName, details.swiftCode (the receiving bank’s BIC), details.accountNumber, details.accountHolderName, and details.accountHolderAddress when returned. Senders must copy the beneficiary address exactly into the international wire. Also show details.bankAddress and any intermediary bank fields that the account returns.
These bank details are reusable. Do not replace them with funding coordinates from a quoted pay-in, which belong only to that transfer.
Next, add Webhooks so provisioning updates reach your application without keeping the customer on a polling screen.