/v4 API you use. This page lists the query behind each homepage element, so you can reproduce its numbers and reconcile your own results with ours.
Every example uses the request style from Requests: a JSON query parameter, URL-encoded with curl -G --data-urlencode.
Two homepage elements do not come from the public API: the SOFR line on the Tokenized U.S. Treasury Yield chart, and the filter counts in the All Tokenized Assets table. Both are covered below.
Reference IDs
The homepage filters by numeric IDs. These are the IDs it uses:
The homepage code filters on
measure_id. The examples below use measure_slug, which selects the same measure.
How aggregate queries resolve dates
Most homepage figures come from/v4/tokens/aggregates and /v4/tokens/aggregates/timeseries. Three behaviors matter when you reconcile them:
mode: "stock"returns the latest value, andflowreturns a sum. In stock mode,/v4/tokens/aggregatesfinds each token’s latest snapshot. It then takes the latest date within each group and sums the tokens reported on that date. Each result’sdatefield shows which day you got. If you omitmode, the endpoint defaults toflowand sums every daily snapshot in the date range, which is wrong for values and holders.- “30 days ago” is a date filter. To get the value as of an earlier day, add
{ "field": "date", "operator": "onOrBefore", "value": "YYYY-MM-DD" }. Stock mode then returns the latest snapshot on or before that date. groupByis required. The homepage groups byasset_classand adds thevalueof every result to get one total.dateis not a validgroupByvalue. Pagination does not limit aggregate results. If you setgroupLimit, only the top N groups by value are returned individually, and the rest are combined into one “All Others” row. The limit applies separately to each measure.
Ticker marquee
The scrolling ticker at the top of the page shows the top 10 assets in each of nine groups. Each item shows the asset’s current value (val) and its 7-day change (chg_7d_pct).
- Endpoint:
GET /v4/assets, one request per group - Filters: the group’s asset class filter, plus
tokenization_type_idsnot-includes2(this excludes represented assets) - Sort: the group’s measure, descending;
perPage: 10 - Date handling: none;
valis the latest value andchg_7d_pctis the 7-day change in percent - Display: assets with no ticker or no value are skipped
Example (Tokenized U.S. Treasury Funds):
Headline figures
The five figures under Global Market Overview each come from two/v4/tokens/aggregates requests: one for the current value and one for the value 30 days ago.
- Endpoint:
GET /v4/tokens/aggregates - Aggregate:
{ "groupBy": "asset_class", "aggregateFunction": "sum", "mode": "stock" } - Result: add
valueacross all returned asset class rows - Date handling: the current request has no date filter, so each asset class uses its latest snapshot (normally yesterday). For the 30-day-ago request, add
dateonOrBeforethe date 30 days before today. - 30D change:
(current − value30DaysAgo) / value30DaysAgoas a fraction (multiply by 100 for a percentage). If the earlier value is 0 or missing, the homepage shows 0.
Notes:
- RWA value uses
bridged_token_value_dollar, nottotal_asset_value_dollar. Stablecoin value usesbridged_token_market_cap_dollar. - The RWA figures exclude both stablecoins (
28) and cryptocurrency (26). - Total Asset Holders includes distributed and represented assets, so it has no
tokenization_type_idfilter. - Holder figures add up per-token holder counts. A wallet that holds three different tokens is counted three times.
date is returned as a timestamp, and its YYYY-MM-DD part is the snapshot day:
Total RWA Value chart
The large chart below the headline figures plots one series per asset class. Its controls change the query:- Endpoint:
GET /v4/tokens/aggregates/timeseries - Aggregate:
groupBy: "asset_class",aggregateFunction: "sum",groupLimit: 50, plus the interval and mode for each tab (below) - Date handling: no date filter, so the response covers the full history. The chart initially zooms to the last three years. Each point is a daily sum, or one value per week or month for the weekly and monthly tabs.
- Display: the “None” group is hidden. Gaps in the Repurchase Agreements series are filled with the previous day’s value. The tooltip total is the sum of the visible series for that date.
Default view: Total Value, Distributed, stablecoins off
Tabs
In
flow mode, each weekly Transfer Volume point is the sum of that week’s daily totals. Weeks start on Sunday, each point is labeled with that Sunday’s date, and the latest week is partial. In stock mode, each monthly point is the last daily value of that month.
Distribution and stablecoin controls
Every tab keepsasset_class_id ≠ 26. The controls add these filters:
On the Total Value tab, stablecoins report value under a different measure. So with Include Stablecoins on, the chart combines two branches:
RWA League Table
The league table ranks groups by current RWA value. It has four tabs (Networks, Managers, Platforms, and Asset Classes) and a Distributed / Represented / All selector. Distributed is the default.- Endpoint:
GET /v4/tokens/aggregates, two requests (current and 30 days ago) for each tab and selector option - Measure:
bridged_token_value_dollar - Aggregate:
aggregateFunction: "sum",mode: "stock",groupLimit: 100, andgroupByset by the tab:network,manager,protocol(Platforms), orasset_class - Filters:
asset_class_id ≠ 28- U.S. Treasuries must be investable: (
asset_class_id = 27andis_investable = true) orasset_class_id ≠ 27 - Distributed:
tokenization_type_idnotEquals2. Represented:tokenization_type_id = 2. All: no tokenization type filter.
- Date handling: the current request has no date filter. The 30-day-ago request adds
dateonOrBeforethe date 30 days before today. - Rows: the “None” and “All Others” groups are dropped, along with rows with a value of 0 and the off-chain (
book_entry) network row. Rows are sorted by value. - Columns:
- Total Value =
value - 30D% =
(value − value30DaysAgo) / value30DaysAgo. A group that is missing from the 30-day-ago response, or has a value of 0 there, shows 0. - Market Share =
value÷ the sum ofvalueacross all named groups. The sum leaves out “None” and “All Others” but is calculated before the zero-value and off-chain rows are hidden. - RWA Count =
asset_count
- Total Value =
The league table defines “Distributed” as
tokenization_type_id notEquals 2. The headline figures and the chart use tokenization_type_id equals 3. The league table also does not exclude cryptocurrency (26). Its Distributed total can therefore differ from the Distributed Asset Value headline figure.Total RWA Value pie chart
The pie chart reuses the league table data. It defaults to the Platforms tab (groupBy: "protocol") with the Distributed option. Each slice is a league table row’s value. To reproduce it, run the league table query with "groupBy": "protocol".
Tokenized U.S. Treasury Yield chart
This chart shows the equal-weighted average 7-day APY of large tokenized U.S. Treasury funds, smoothed over 7 days.- Endpoint:
GET /v4/assets/aggregates/timeseries - Measure:
apy_7_day - Filters:
asset_tickeris_not_null,asset_class_id = 27,circulating_asset_value_dollargte100000000(current circulating asset value of at least $100M),dateonOrAfter2023-12-26 - Aggregate:
groupBy: "asset_ticker",aggregateFunction: "avg",interval: "day" - Post-processing:
- For each date, average the values of every ticker that has a point on that date. Each fund has equal weight.
- Apply a trailing 7-calendar-day simple moving average. The average for each date is the mean of the points that exist from 6 days before that date through the date itself. A series has no smoothed points until 6 days after its first point.
- Display from 2024-01-01. The query starts on 2023-12-26 so that the first displayed point has a full 7-day window.
- Show Constituents: draws each ticker’s unsmoothed series in gray behind the average.
- SOFR line: not served by the API. It is the Secured Overnight Financing Rate from the Federal Reserve Bank of New York, smoothed with the same 7-day average.
Tokenized High Yield chart
This chart compares the average 30-day APY of five credit and strategy asset classes. Building it takes two steps. Step 1: select qualifying assets. UseGET /v4/assets with:
asset_class_idequal to one of52,51,32,42, or55(anorfilter)circulating_asset_value_dollargte10000000fields: ["id", "ticker"],perPage: 3500
ACRED, BR0OVSCTF004, BR0OVSCTF012, BRVERTDBS0I1, GSTR, mGLO, mGLOBAL, pEAK, RLP, STAC, USD3, xSOLY. The remaining id values are the qualifying assets. This exclusion list is part of the homepage code and may change.
- Endpoint:
GET /v4/assets/aggregates/timeseries - Measure:
apy_30_day - Filters:
asset_idinthe IDs from step 1 - Aggregate:
aggregateFunction: "avg",interval: "day". UsegroupBy: "asset_class"for the default “All asset classes” view. - Date handling: no date filter, so the response covers the full history
- Post-processing: apply the same trailing 7-calendar-day average as the Treasury chart to each series. Each series starts 6 days after its first point.
- Selecting an asset class: add
asset_class_id = <id>and switch togroupBy: "asset". The chart averages the assets’ values on each date with equal weight, smooths that average over 7 days, and draws the individual assets unsmoothed in gray.
[101, 202, 303] with the IDs from step 1.
Net Flows card
Net flows are inflows (mints) minus outflows (burns) over a trailing window, excluding stablecoins. The card defaults to grouping by Asset over 30D.- Endpoint:
GET /v4/tokens/aggregates - Measures:
adjusted_daily_mints_dollarandadjusted_daily_burns_dollar. The homepage request has no measure filter and reads these two measures from the response. Adding the filter shown below gives the same rows. - Filters:
asset_class_id ≠ 28anddateonOrAfterthe window start. Group by Manager also addsmanager_idgt0. - Aggregate:
groupByset toasset,asset_class, ormanager;aggregateFunction: "sum",mode: "flow",groupLimit: 100 - Date handling: the window starts N days before the time the homepage data was loaded and has no end date, so it runs through the latest data (yesterday). 7D = 7 days, 30D = 30, 90D = 90, 6M = 180, 1Y = 365, and YTD starts on January 1 (UTC). The homepage sends the start as a full timestamp rounded down to the hour, for example
2026-09-21T14:00:00.000Z. - Post-processing: for each
group.id, net flow = mintsvalue− burnsvalue. A group with only a burn row has a net flow of −burns. The “All Others” rows (group.id-1) are netted the same way. Sort by absolute net flow and keep the top 10. BecausegroupLimitapplies to mints and burns separately, a group can fall into “All Others” for one measure but not the other.
Recently Registered Assets
This card lists assets that were added to RWA.xyz in the last 30 days and that meet the New Asset Monitor criteria.- Endpoint:
GET /v4/assets - Filters:
token_count > 0,primary_market_id > 0,is_investable = true,inception_dateis_not_null,asset_class_id ≠ 26,asset_class_id ≠ 28, and_created_atonOrAfter30 days before the time the homepage data was loaded. The cutoff is a full timestamp rounded down to the hour, for example2026-09-21T14:00:00.000Z. A date-only value would also include assets registered earlier that day. - Sort:
_created_atdescending;perPage: 250 - Columns: name and ticker, asset class, value (
circulating_asset_value_dollar.val), and registration date (_created_at) - Count:
pagination.resultCount
All Tokenized Assets table
The table at the bottom of the page lists distributed, non-stablecoin RWAs, sorted by value.- Endpoint:
GET /v4/assets - Filters:
asset_class_id ≠ 26,asset_class_id ≠ 28,token_count > 0,primary_market_id > 0,tokenization_type_idsincludes3, andtokenization_type_idsnot-includes2 - Sort:
bridged_token_value_dollardescending;perPage: 50 - Columns:
- Total Value =
bridged_token_value_dollar.val - 30D APY =
apy_30_day.val - 30D =
bridged_token_value_dollar.chg_30d_pct(in percent) - Platform = the most common
tokens[].platformamong the asset’s tokens withissuance_typeNATIVE. On a tie, the platform encountered first wins. - Networks = the asset’s distinct
tokens[].networkvalues by slug, excludingbook-entry, sorted by name
- Total Value =
- Pagination: the example returns the first 50 rows. Request more pages to get the full list.
- Filter panel: the counts and the histogram come from a direct database query over the same base filter. They describe the whole base list, not the currently filtered table. To reproduce them, page through the base query:
- Asset class and network counts: the number of assets per
asset_class_id, and per network. An asset counts once for every network it is on. - Redemption term counts: the number of assets per
primary_market__redemption_frequency, combined into options. Instant =Instant+30 minutes if US markets are open. Otherwise next trading day.; Daily =Daily+U.S. Banking Daily; Monthly =Monthly (30d)+Monthly (Calendar); Weekly, Quarterly, Yearly (Yearly (360d)), and Maturity only (Only at maturity) each map to one value. - 30D APY histogram: collect every
apy_30_day.valgreater than 0. Split the range from 0 toceil(max + 2)into 48 equal-width bins (the range is 0 to 1 when there are no values), count the values in each bin, and scale the bars so the tallest is 1.
- Asset class and network counts: the number of assets per
Data freshness and caching
- Data is T-1. On-chain metrics refresh once a day (see Data Quality), so the latest
dateis normally yesterday. There is no intraday data. - Responses are cached. API responses are edge-cached for up to an hour (
Cache-Control: s-maxage=3600). The homepage also caches its queries for up to an hour. For a while after the daily refresh, the API or the homepage may still show the prior day. - Check the
date. Each/v4/tokens/aggregatesrow includes thedateit represents. Compare figures only when the dates match.
Troubleshooting
My total value is higher or lower than the homepage
My total value is higher or lower than the homepage
- Use
bridged_token_value_dollarfor RWAs andbridged_token_market_cap_dollarfor stablecoins.total_asset_value_dollaris a different measure and will not match. - Send
"mode": "stock". Without it, the aggregates endpoints default toflowand add up every daily snapshot. - Group by
asset_classwithsum, then addvalueacross all returned rows. - Exclude cryptocurrency (
asset_class_id ≠ 26) as well as stablecoins.
Stablecoins and RWAs are mixed together
Stablecoins and RWAs are mixed together
Filter by asset class: use
asset_class_id ≠ 28 for RWAs and asset_class_id = 28 for stablecoins. The homepage shows these as separate figures: Distributed Asset Value, Represented Asset Value, and Total Stablecoin Value.Distributed and represented values don't add up
Distributed and represented values don't add up
The split comes from
tokenization_type_id: 3 is distributed and 2 is represented. Distributed Asset Value and Represented Asset Value are separate figures. The league table’s Distributed view uses tokenization_type_id ≠ 2 and does not exclude cryptocurrency, so its total can differ slightly from the headline figure.My holder count is about twice the homepage's
My holder count is about twice the homepage's
Total Asset Holders and Total Stablecoin Holders are separate figures. If you sum
holding_addresses_count without an asset class filter, you add them together. Use asset_class_id ≠ 28 and ≠ 26 for asset holders, and asset_class_id = 28 for stablecoin holders. Holder figures are sums of per-token counts, not unique wallets.Transfer volume has huge spikes
Transfer volume has huge spikes
daily_transfer_volume_dollar is a raw daily total, and it counts every hop. If tokens move from A to B and then from B to C, both transfers count. Flash-loan loops can move the same funds through many hops in one transaction and inflate the total. For example, on 2026-10-17 the daily total reached about $3.51T on BNB Chain and $170B on Ethereum. The homepage Transfer Volume tab uses the same measure, summed per week in flow mode, so its weekly bars include these spikes too.My numbers match yesterday's homepage, not today's
My numbers match yesterday's homepage, not today's
Data is T-1 and cached for up to an hour on both sides; see Data freshness and caching. Compare the
date in your response with the date the homepage data was loaded.I get an "All Others" row, or fewer data points than expected
I get an "All Others" row, or fewer data points than expected
On plans with limited API access,
/v4/tokens/aggregates returns at most 10 groups plus an “All Others (N Items)” row, and timeseries responses keep only the most recent points (30 for daily measures). Include the “All Others” row when you sum totals. These plans also have a request allowance that is smaller than the number of requests the homepage makes. Contact team@rwa.xyz for full API access."groupBy value must be one of the following"
"groupBy value must be one of the following"
groupBy takes entity names such as asset_class, network, protocol, manager, asset, or token. date and *_id values are not accepted. Call /v4/tokens/aggregates/meta to see the available fields.Still doesn't reconcile
Still doesn't reconcile
If your API key has a scoped access policy, every query is limited to that scope, and totals will be lower than the homepage. Email team@rwa.xyz with your full query and the
date in the response.