RWA Trading
Bitget Wallet Trading API now supports on-chain RWA (Real World Assets) liquidity, enabling bidirectional swaps between any on-chain token (AnyToken) and tokenized US equities and other RWA assets (RWA Tokens).
Integrated RWA Liquidity
Reality , Ondo Finance , and XStocks are integrated today; more will be added over time. When quoting or placing an order, set fromContract and toContract to the RWA Token contract on the target chain. The aggregator selects the route by asset. You do not need extra parameters per liquidity provider, and you do not need to pick RFQ vs AMM manually.
Reality
Reality offers tokenized US equities, ETFs, and more (rTokens), fully backed 1:1 and custodied by Alpaca.
- Common chains: Arbitrum, Morph (per quote).
- Routing: Mostly official RFQ, executed through the aggregator for AnyToken ↔ rToken swaps.
- Notes: Quotes have a short validity—refresh them before the user signs. Quotes may be unavailable during US market closures.
Ondo Finance
Ondo Finance offers tokenized USD, US equities, precious metals, treasuries, and more.
- Common chains: ETH, Base, Solana, BNB, etc. (per quote).
- Routing: Mostly official RFQ, executed through the aggregator for AnyToken ↔ RWA swaps.
- Notes: Quotes have a short validity—refresh them before the user signs. Quotes may be unavailable during US market closures.
XStocks
XStocks offers tokenized US equities, precious metals, and more.
- Common chains: Solana, ETH, TON, Ink, BSC, Mantle, etc. (per quote).
- Routing: May use official AMM pools or combine with other on-chain liquidity—follow the quoted route.
- Notes: Some tokens use Rebase; dividends change balance quantity. Watch pool depth and slippage. Use asset list or market APIs for contract addresses and chain IDs.
Platform Capabilities
AnyToken ↔ RWA Asset Swaps
Native RWA liquidity typically covers only a few fixed pairs and cannot swap an arbitrary token straight into RWA. The Bitget Wallet aggregator combines quotes from multiple market makers into a multi-hop route at quote time. Integrators pass only the AnyToken and RWA Token contracts, and the aggregator handles the intermediate hops so users can swap in either direction.
Full Settlement in One Shot
Multi-hop routes can partially fill or fail on-chain when different liquidity types are stitched together carelessly. On RWA-related paths Bitget Wallet uses a consistent quote-based matching style, so each hop’s input and output amounts are fixed when the transaction is built. The full trade settles in one shot at the quoted sizes, reducing partial fills and amount mismatches across hops.
Integration Tips
- Quotes expire: refresh about every 5 seconds before signing; Ondo may have no quote during market closures.
- Follow the quote: Supported chains and whether the path is RFQ multi-hop or AMM come from
/quoteorgetSwapPrice—do not hard-code route types in your app. - XStocks Rebase: Balances may change with dividends; adjust UI and reconciliation accordingly.
- Slippage and depth: When pools or routes are thin, watch
priceImpact, slippage, and minimum order size.
Integration Modes
RWA swaps reuse the same APIs and flow as generic Swap. Both Instruction Mode and Order Mode support RWA. See Trading API Overview when choosing between them.
RWA Dividend Claim
Generates Reality RWA dividend claim transaction data (contract + calldata) for the integrator to sign and broadcast. This endpoint does not submit the transaction on-chain.
Request Path: /bgw-pro/swapx/pro/rwa/claim
Request Method: POST
Request Parameters:
| Field Name | Field Type | Required | Description |
|---|---|---|---|
| address | string | Yes | User EVM wallet address |
| chain | string | Yes | Chain identifier, e.g. arbitrum; must be a claim-enabled chain |
Request Example:
{
"address": "0xd8FeBD1C242a282f1b8226d34282942F6F63248b",
"chain": "arbitrum"
}Response Description:
| Parameter Name | Parameter Type | Required | Description |
|---|---|---|---|
| status | number | Yes | Response code, 0 indicates success |
| data | object | Yes | - |
| claims | array | Yes | List of claimable dividend transactions; empty array [] when nothing is claimable |
| claims[].sourceAsset | string | No | Source asset identifier for the dividend |
| claims[].payoutAsset | string | No | Payout asset identifier |
| claims[].unclaimed | string | No | Claimable amount |
| claims[].contract | string | No | Dividend distributor contract address (transaction to) |
| claims[].calldata | string | No | Claim transaction calldata |
| claims[].value | string | No | Native coin value attached to the call; currently "0" |
Response Example:
{
"status": 0,
"error_code": 0,
"data": {
"claims": [
{
"sourceAsset": "0xSourceAsset...",
"payoutAsset": "0xPayoutAsset...",
"unclaimed": "12.345678901234567",
"contract": "0xDistributor...",
"calldata": "0x...",
"value": "0"
}
]
},
"msg": "success"
}Notes:
- Only claim-enabled chains are supported; unsupported chains return 80013.
- The endpoint only returns unsigned transaction data; signing and broadcasting are done by the integrator.
- Generation failures return 80025; see Error Codes for other codes.


