USDx is a placeholder used throughout this guide. Wherever you see
usdx or USDx, substitute the stablecoin you’re actually migrating from (for example, USDB or USDC). OUSD always refers to the stablecoin you’re migrating to.Overview
The standard migration involves six main steps. Bridge highly recommends executing them in order to ensure an issue-free migration.- Halt payments temporarily (planned downtime) — temporarily stop new activity that could increment or reduce your Bridge wallet balance (e.g. incoming deposits or outgoing withdrawals) to avoid customer payment disruption during the migration window.
- Update liquidation addresses — change the destination currency from
usdxtoousd. - Update static transfer templates — change the destination currency and close out any active transfers still awaiting USDx.
- Update virtual accounts — change the destination currency from
usdxtoousd. - Migrate wallet balances — transfer funds from USDx to OUSD by creating transfers per wallet.
- Resume operations — resume new activity now that migration is complete.
Prerequisites
Before starting the migration, ensure you have the following:- Your Bridge API key
- A list of all your liquidation address IDs (per customer)
- A list of all your static transfer template IDs (if applicable)
- A list of all your virtual account IDs (per customer, if applicable)
- A list of all your wallet IDs and their associated chains
- No in-flight transfers or wallet funding in progress
Rate limits apply throughout the migration:
Step 1: Halt active transactions
Before making any changes, stop all new activity:
- Stop initiating new transfers (both on-ramp and off-ramp)
- Stop funding wallets with new deposits
- Wait for any in-flight transfers to reach a terminal state (
payment_processed,canceled, etc.)
Step 2: Update liquidation addresses
For each customer, update every liquidation address to change the destination currency from Step 2b: Update each liquidation addressAPI Reference: Update a liquidation address
usdx to ousd.Step 2a: List your liquidation addressesRetrieve all liquidation addresses for a customer to identify which ones use USDx.API Reference: Get all liquidation addresses for a customerRequest
Request
- You must iterate through each liquidation address for each customer. There is no bulk update endpoint.
- Only the
destination.currencyfield is being changed for a same-chain migration. The address and payment rail otherwise remain the same. - Verify the update was successful by checking that the response shows
"currency": "ousd"in the destination.
Step 3: Update static transfer templates
If you use static transfer templates, update each template’s destination currency from Step 3b: Update the destination currencyFor each static transfer template that uses USDx as the destination currency, update it to OUSD.API Reference: Update a transferReplace Step 3c: Close out active transfers awaiting USDxAny active transfers created from a static template that are still in the
usdx to ousd and close out any active transfers still awaiting USDx funds.Step 3a: List your static transfer templatesRetrieve all your static transfer templates to identify which ones use USDx.API Reference: Get all transfersRequest (all templates)
Request (per customer)
Request
payment_rail with your preferred chain.- After updating the template, new transfers created from it will use
ousdas the destination. - You must iterate through each static transfer template individually. There is no bulk update endpoint.
awaiting_funds state and expecting USDx should be deleted, since they will no longer receive USDx deposits.API Reference: Delete a transferRequest
Only transfers in the
awaiting_funds state can be deleted. Transfers that have progressed past this state must settle naturally.Step 4: Update virtual accounts
If you use virtual accounts, update each virtual account’s destination currency from Step 4b: Update each virtual accountAPI Reference: Update a virtual account
usdx to ousd.Step 4a: List your virtual accountsRetrieve all virtual accounts for a customer to identify which ones use USDx.API Reference: List virtual accounts by customerRequest
Request
- You must iterate through each virtual account for each customer. There is no bulk update endpoint.
- Only the
destination.currencyfield is being changed for a same-chain migration. Deposit instructions otherwise remain the same. - Verify the update was successful by checking that the response shows
"currency": "ousd"in the destination.
Step 5: Migrate wallet balances
For each wallet, create a transfer that moves the full USDx balance into OUSD.Step 5a: List your walletsRetrieve all Bridge wallets for a customer to identify which ones hold a USDx balance.API Reference: Get all Bridge wallets for a customerStep 5b: Get each wallet’s USDx balanceAPI Reference: Get a Bridge walletIn the response, find the entry in the Step 5c: Create the transferFor each wallet with a USDx balance, create a transfer to convert the full balance from USDx to OUSD.API Reference: Create a transferReplace
Request
Request
balances array where currency is "usdx". The balance field is the amount you will transfer.Response (excerpt)
Request
payment_rail with the chain your wallet is on (e.g. ethereum, solana, base, arbitrum, polygon, etc.). For a same-chain migration, this must match the wallet’s current chain.- Create one transfer per wallet per customer.
- Use the full balance from the GET wallet response. Do not leave partial USDx balances.
- Use a unique
Idempotency-Keyper transfer to safely retry on failure (e.g.migration-{wallet_id}-usdx-to-ousd). - Monitor the transfer state — wait for it to reach
payment_processedbefore proceeding.
Step 6: Resume operations
Once liquidation addresses, static transfer templates, virtual accounts, and wallet balances have all been migrated:
- Resume initiating new transfers using
ousdas the currency (on the destination chain, for cross-chain migrations) - Resume wallet funding
- Resume initiating prefunded transfers, if applicable — these will now use OUSD as the source currency
- Verify your systems are reading
ousdbalances correctly
Rollback
If you need to reverse the migration, follow the steps in reverse order:- Halt transactions again
- Create transfers from OUSD back to USDx for each wallet (swap source and destination currencies)
- Update virtual accounts back to
usdx - Update static transfer templates back to
usdx - Update liquidation addresses back to
usdx - Resume operations