Assets & Prices
List Assets
GET /api/assets The directory of everything ByteTree tracks. Search it by name, or narrow it by asset type, sector, universe or group. Each entry carries the asset’s basics — name, sector, country, market value — along with its current Weekly and Daily CAPR trend scores and regimes, taken from the latest computed metrics.
Example
curl https://api.bytetree.io/api/assets \
-H "Authorization: Bearer YOUR_API_KEY" const res = await fetch("https://api.bytetree.io/api/assets", {
headers: { "Authorization": "Bearer YOUR_API_KEY" },
});
const body = await res.json(); import requests
res = requests.get(
"https://api.bytetree.io/api/assets",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
body = res.json() 200 The default listing, abridged to three rows {
"count": 500,
"total": 5570,
"limit": 500,
"offset": 0,
"data": [
{
"symbol": "AAPL",
"name": "Apple Inc.",
"isin": "US0378331005",
"type": "stock",
"status": "active",
"sector": "Technology",
"industry": "Consumer Electronics",
"country": "US",
"region": "North America",
"universes": ["bytetrend"],
"dimensions": {
"raw": { "sector": "Technology", "industry": "Consumer Electronics", "country": "US" },
"override": { "sector": null, "industry": null, "country": null, "region": null }
},
"currency": "USD",
"rawCurrency": "USD",
"metadata": { "exchange": "NASDAQ" },
"mktCap": 3845418304554,
"mktCapUsd": 5001625956300,
"byteTrendCapr200w": 5,
"trendRegimeCapr200w": "Neutral",
"changeCapr200w": 0,
"byteTrendCapr30d": 5,
"trendRegimeCapr30d": "Leading Trend",
"changeCapr30d": 0,
"dataQuality": null,
"carryOverReason": null,
"carriedOverFrom": null
},
{
"symbol": "BTCUSD",
"name": "Bitcoin USD",
"isin": null,
"type": "crypto",
"status": "active",
"sector": "Cryptocurrency",
"industry": null,
"country": null,
"region": null,
"universes": ["bytetrend"],
"dimensions": {
"raw": { "sector": "Cryptocurrency", "industry": null, "country": null },
"override": { "sector": null, "industry": null, "country": null, "region": null }
},
"currency": "USD",
"rawCurrency": "USD",
"metadata": { "exchange": "CRYPTO", "circulatingSupply": 19972590 },
"mktCap": 1258952837237,
"mktCapUsd": 1645029037254.946,
"byteTrendCapr200w": 4,
"trendRegimeCapr200w": "Neutral",
"changeCapr200w": 0,
"byteTrendCapr30d": 4,
"trendRegimeCapr30d": "Neutral",
"changeCapr30d": 0,
"dataQuality": null,
"carryOverReason": null,
"carriedOverFrom": null
},
{
"symbol": "GCUSD",
"name": "Gold Futures",
"isin": null,
"type": "commodity",
"status": "active",
"sector": "Commodities",
"industry": "Metals",
"country": null,
"region": null,
"universes": ["bytetrend"],
"dimensions": {
"raw": { "sector": "Commodities", "industry": null, "country": null },
"override": { "sector": null, "industry": "Metals", "country": null, "region": null }
},
"currency": "USD",
"rawCurrency": "USD",
"metadata": { "exchange": "COMMODITY" },
"mktCap": null,
"mktCapUsd": 0,
"byteTrendCapr200w": 3,
"trendRegimeCapr200w": "Neutral",
"changeCapr200w": 0,
"byteTrendCapr30d": 0,
"trendRegimeCapr30d": "Neutral",
"changeCapr30d": 0,
"dataQuality": null,
"carryOverReason": null,
"carriedOverFrom": null
},
"..."
]
} Filter by type
curl "https://api.bytetree.io/api/assets?type=stock" \
-H "Authorization: Bearer YOUR_API_KEY" FX pairs (synthesised from rate data)
curl "https://api.bytetree.io/api/assets?type=fx" \
-H "Authorization: Bearer YOUR_API_KEY" Members of a universe
curl "https://api.bytetree.io/api/assets?universe=bytetrend" \
-H "Authorization: Bearer YOUR_API_KEY" Members of a universe within one dimension group
curl "https://api.bytetree.io/api/assets?universe=bytetrend&dimension=region&group=Europe" \
-H "Authorization: Bearer YOUR_API_KEY" Text search
curl "https://api.bytetree.io/api/assets?q=apple" \
-H "Authorization: Bearer YOUR_API_KEY" Paginate (advance offset until offset + count >= total)
curl "https://api.bytetree.io/api/assets?limit=100&offset=200" \
-H "Authorization: Bearer YOUR_API_KEY" Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
type |
string |
No | Asset type: stock, crypto, etf, index, commodity, or fx (synthesised — see Polymorphic FX rows). An empty value is the same as leaving it out; any other value returns 400 |
status |
string |
No | Asset status: active, pending, or inactive. An empty value is the same as leaving it out; any other value returns 400 |
sector |
string |
No | Sector name (e.g. Technology, Financial Services) |
universe |
string |
No | Universe slug (e.g. bytetrend, bytefolio) — see Universes. Membership filter: returns only that universe’s members. Unknown slugs return 400 listing the valid ones; macro returns 400 — see Universe and group filters |
dimension |
string |
No | One of the five global dimensions: region, sector, industry, type, or country. Must be paired with group; works with or without universe |
group |
string |
No | Group label within dimension, exact match (e.g. Europe, Technology). Must be paired with dimension |
q |
string |
No | Case-insensitive text search on symbol and name |
limit |
number |
No | Maximum number of assets to return per page. Default 500, capped at 1000. |
offset |
number |
No | Number of records to skip before returning results. Default 0. Pair with limit to paginate. |
Universe and group filters
universe is a membership filter. ?universe=bytetrend returns the assets whose universes[] includes bytetrend, whatever their status. memberCount on GET /api/universes counts only the active members, so add status=active for a total that matches it. Without universe, the population is the whole registry.
dimension + group are a global filter, independent of universe. They narrow by the asset’s resolved value in one of the five dimensions, and compose with universe when both are given:
# Every tracked Technology asset
curl "https://api.bytetree.io/api/assets?dimension=sector&group=Technology" \
-H "Authorization: Bearer YOUR_API_KEY"
# Technology members of the ByteTrend universe
curl "https://api.bytetree.io/api/assets?universe=bytetrend&dimension=sector&group=Technology" \
-H "Authorization: Bearer YOUR_API_KEY"
The pair is both-or-neither: dimension without group, or group without dimension, is a 400 ('dimension' requires 'group' — pass both together.). An unknown dimension is a 400 listing the five. The plain type, status, sector and q filters compose with all of the above.
| Request | Status | Body |
|---|---|---|
?universe=<unknown> |
400 |
unknown universe 'zzz'. Valid: bold, bytefolio, bytetrend, … |
?universe=macro |
400 |
'macro' is not a universe — the macro dataset is served at /api/macro. |
?dimension=sector (no group) |
400 |
'dimension' requires 'group' — pass both together. |
?dimension=zzz&group=x |
400 |
unknown dimension 'zzz'. Valid: country, industry, region, sector, type. |
Available universes can be discovered via GET /api/universes.
Polymorphic FX rows
?type=fx returns FX pairs synthesised from rate data alongside the registered asset universe. FX rows share the envelope and most keys with standard rows, but not all of them. Each FX row carries:
symbol,name,type(fx),status,currencyandrawCurrency(bothUSD)baseandquotecurrency codes, withbaseName/quoteNamewhere known.namespells out the two currencies (e.g."Euro / US Dollar"), falling back to slash form (e.g."AED/USD") where a currency’s name isn’t knownisin,sector,industry,country,region,mktCapandmktCapUsd, alwaysnull, because FX pairs aren’t issuer-domiciled instrumentsmetadata, always an empty object- the six score and regime fields:
byteTrendCapr200w,trendRegimeCapr200w,changeCapr200w,byteTrendCapr30d,trendRegimeCapr30d,changeCapr30d
FX rows have no universes, dimensions, etf, dataQuality, carryOverReason or carriedOverFrom keys.
With type=fx, only q (matched against the pair symbol), limit and offset apply. FX pairs have no asset record, so adding status, sector, universe, dimension or group returns 400 naming the filter, rather than an unfiltered list:
{ "error": "Filter 'sector' not supported for type=fx: FX pairs have no asset record (status, sector, universe or dimension). Accepted with type=fx: q (matches the pair symbol), limit, offset." }
{
"symbol": "AEDUSD",
"name": "UAE Dirham / US Dollar",
"base": "AED",
"quote": "USD",
"baseName": "UAE Dirham",
"quoteName": "US Dollar",
"type": "fx",
"currency": "USD",
"rawCurrency": "USD",
"isin": null,
"sector": null,
"industry": null,
"country": null,
"region": null,
"mktCap": null,
"status": "active",
"metadata": {},
"mktCapUsd": null,
"byteTrendCapr200w": 0,
"trendRegimeCapr200w": "Neutral",
"changeCapr200w": 0,
"byteTrendCapr30d": 2,
"trendRegimeCapr30d": "Neutral",
"changeCapr30d": 1
}
/api/fx is the dedicated endpoint for currency-pair scores and metrics — prefer it when you only need currencies. ?type=fx here suits callers looping over mixed asset types.
Response
This endpoint uses the paginated list envelope:
| Field | Type | Description |
|---|---|---|
count |
number |
Length of the returned data array (records on this page) |
total |
number |
Full match count for the same filter, ignoring limit and offset |
limit |
number |
Echoed input limit |
offset |
number |
Echoed input offset |
data |
array |
Array of asset objects |
Each asset object (FX rows differ — see Polymorphic FX rows):
| Field | Type | Description |
|---|---|---|
symbol |
string |
Ticker symbol (e.g. AAPL, BTCUSD) |
name |
string |
Display name |
isin |
string | null |
ISIN code (e.g. US0378331005) |
type |
string |
Asset type: stock, crypto, etf, index, or commodity |
status |
string |
active, pending, or inactive |
sector |
string | null |
Sector name (e.g. Technology) |
industry |
string | null |
Industry name (e.g. Consumer Electronics) |
country |
string | null |
ISO 3166-1 alpha-2 country code (e.g. US, GB) |
region |
string | null |
Geographic region derived from country (e.g. North America, Europe) |
universes |
string[] |
Universes this asset belongs to (e.g. ["bytetrend"]). Always present on non-FX rows — empty for an asset in no universe. Slugs as listed on Universes |
dimensions |
object |
Raw and override layers behind the resolved sector / industry / country / region above — see Dimensions on Get Asset |
etf |
object |
ETF rows only, once the fund has been classified: what the fund holds (asset class, region, sector, fees, weights). Absent otherwise. See ETF exposure on Get Asset |
currency |
string |
Trading currency as quoted, which can be a sub-unit (e.g. USD, EUR, GBp for pence, ZAc for cents) |
rawCurrency |
string |
Currency as reported by the data provider, before any conversion. Today it matches currency on every row |
metadata |
object |
Provider details: exchange (e.g. NASDAQ, CRYPTO), plus circulatingSupply on some crypto rows |
mktCap |
number | null |
Market cap as reported by the data provider, in local currency. Its basis and date can differ from mktCapUsd, so the two don’t reconcile through an FX rate |
mktCapUsd |
number | null |
Market cap in USD, from the latest computed metrics |
byteTrendCapr200w |
number | null |
Latest Weekly CAPR ByteTrend score (0–5), denormalised from latest metrics |
trendRegimeCapr200w |
string | null |
Latest Weekly CAPR trend regime: Leading Trend, Emerging Trend, Weakening Trend, Bear Trend, or Neutral |
changeCapr200w |
number | null |
Day-over-day change in the Weekly CAPR score (−5 to +5) |
byteTrendCapr30d |
number | null |
Latest Daily CAPR ByteTrend score (0–5) |
trendRegimeCapr30d |
string | null |
Latest Daily CAPR trend regime, same five labels |
changeCapr30d |
number | null |
Day-over-day change in the Daily CAPR score (−5 to +5) |
dataQuality |
string | null |
null (or computed) for normally computed metrics. carried-over means the latest metrics were copied forward from an earlier day because that day’s computation couldn’t run; no-baseline means there was no earlier day to copy |
carryOverReason |
string | null |
Why metrics were carried over: insufficient-history, missing-fx, or missing-benchmark. null otherwise |
carriedOverFrom |
string | null |
Date of the row the metrics were copied from. null otherwise |
Notes
- Results are sorted alphabetically by symbol
mktCapUsd, the six score and regime fields and the three carry-over fields are derived from computed price metrics and may benullif computations have not yet run for an assetmktCapis provider-reported and can differ frommktCapUsdin basis and date, even for USD-denominated assets. UsemktCapUsdwhen comparing assets- The
total,limit, andoffsetenvelope fields are additive — pre-2026-05-01 callers that only readcountanddataare unaffected. See the Changelog for the cutover note.