Pre-Requisites
To enable this feature, you will need to provide your own Coinbase Developer Platform (CDP) API keys. You can find instructions on how to do this here. Head over to Reown Dashboard and navigate to the “Fund from Exchange” section to configure your API keys.
Quickstart
This feature will start working as soon as your team is on the allowed-list. Contact us via our form here to get started.Usage Options
There are two ways to use Deposit from Exchange:1. Built-in within AppKit (No extra code required)
After enabling the feature, it’s automatically available within the AppKit modal. Users can access it by:- Connecting their wallet through AppKit
- Opening the Account Screen
- Clicking on the “Fund wallet” button

2. Stand-alone feature (Programmatic control)
If you want more control over when and how the deposit flow is triggered, you can use it as a stand-alone feature. This allows you to:- Open the deposit screen from anywhere in your app
- Pre-configure assets, recipients, and other options
- Listen to deposit success events
- Get available payment assets based on the network:
includeTest: will include or exclude testnet assets (e.g., Sepolia, Base Sepolia). These are included by default.
- Configure the feature (if desired):
| Parameter | Type | Default | Description |
|---|---|---|---|
supportedAssets | List<ExchangeAsset>? | allExchangeAssets | List of assets available for deposit. If not provided, all supported assets are available. |
configuredRecipients | Map<String, String> | {} | Map of namespace to recipient address (e.g., {'eip155': '0x...', 'solana': '...'}). If provided, funds will be sent to these addresses instead of the connected wallet. If not set and no wallet is connected, an error will occur. |
filterByNetwork | bool? | true | When true, filters available assets by the currently selected network. |
depositAssetButton | bool? | true | Controls visibility of the asset selection button. Note: If preselectedAsset is not set, this is always forced to true. |
showNetworkIcon | bool? | true | Shows or hides the chain icon on asset options. |
preselectedAsset | ExchangeAsset? | null | If provided, locks the feature to this specific asset and disables the Asset Selector. The asset’s network must be a valid CAIP-2 chain ID and must be registered in ReownAppKitModalNetworks. |
- Open the modal on Deposit Screen:
- Listen to deposit success events:
As a standalone option you can also use this feature in a headless (no UI) version
Instance creation
Create aReownAppKit instance and initialize it (as with any other AppKit usage).
Initialize the SDK
After creating the instance, initialize it.Supported Assets
Currently the feature works with a set of supported assets. You can use the following function to filter them according to your needs.Get Supported Exchanges
Whether you previously selected a supportedasset or not, the next step is to get all the supported exchanges. If asset is provided, the response will include only the exchanges supporting that particular asset.
GetExchangesParams also accepts includeOnly and exclude parameters to filter the getExchanges response. Example:
GetExchangesResult contains a list of exchanges (List<Exchange>) and the total number of them.
Payment URL
After the user selects the Exchange to fund their wallet from, it’s time to get the payment (funding) redirect URL with params:- Selected
Exchange⇒ id - Selected
ExchangeAsset - Amount to fund
- Your wallet address in CAIP-10
sessionId (relevant later to check the status of the transaction/funding) and the payment URL.
At this point, your dApp will launch this URL on the user’s device, and the Exchange App will be launched if installed; otherwise, their default browser will open to log into the exchange and fund.
Status Check
Once the user completes the transaction on the Exchange side, they should return to your dApp and wait for the confirmation status.The recommended approach here is that, right after the user launches the payment URL, your dApp starts to query the confirmation status in a loop with a 3-second delay between each request, until a terminal status is received (or your own timeout logic is triggered). The SDK uses a maximum of 30 polling attempts by default.
status are: UNKNOWN, IN_PROGRESS, CONFIRMED, FAILED
- UNKNOWN: Transaction has not been submitted yet
- IN_PROGRESS: Transaction submitted, checking confirmation
- CONFIRMED: Transaction confirmed, payment successful,
txHashwill be provided along with this status - FAILED: Transaction failed
