Groups
Universe Groups
GET /api/universes/:universe The same group figures as the Macro Dataset, counting only one universe’s members — for example, the average trend score by sector within bytetrend. This route returns every group in all five dimensions (Region, Sector, Industry, Type, Country) at once.
Dimensions are global, so every universe is grouped the same way.
Example
curl https://api.bytetree.io/api/universes/bytetrend \
-H "Authorization: Bearer YOUR_API_KEY" const res = await fetch("https://api.bytetree.io/api/universes/bytetrend", {
headers: { "Authorization": "Bearer YOUR_API_KEY" },
});
const body = await res.json(); import requests
res = requests.get(
"https://api.bytetree.io/api/universes/bytetrend",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
body = res.json() 200 {
"universe": "bytetrend",
"count": 205,
"smallOmitted": 30,
"data": {
"region": [
{
"dimension": "bytetrend/region",
"group": "North America",
"date": "2026-10-09T00:00:00.000Z",
"assetCount": 3039,
"avgByteTrendLocal200w": 3.315,
"avgByteTrendLocal30d": 2.0566,
"avgByteTrendCapr200w": 1.7271,
"avgByteTrendCapr30d": 1.5745,
"medianByteTrendLocal200w": 4,
"pctScore5Local200w": 0.3416,
"pctScore0Local200w": 0.078,
"totalMarketCapUsd": 96864038677949.31,
"dominantTrend": "Neutral",
"byteTrendBins": {
"local200w": [217, 205, 467, 438, 504, 950],
"local30d": [709, 551, 747, 279, 238, 461],
"capr200w": [1027, 452, 371, 397, 252, 282],
"capr30d": [1285, 522, 351, 216, 227, 384]
},
"..." : "..."
}
],
"sector": [
{ "dimension": "bytetrend/sector", "group": "Technology", "assetCount": 493, "..." : "..." }
],
"industry": [ "..." ],
"type": [ "..." ],
"country": [ "..." ]
}
} All dimensions for ByteFolio
curl https://api.bytetree.io/api/universes/bytefolio \
-H "Authorization: Bearer YOUR_API_KEY" Time series
curl "https://api.bytetree.io/api/universes/bytetrend?from=2026-01-01&to=2026-03-01" \
-H "Authorization: Bearer YOUR_API_KEY" Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
universe |
string |
Yes | Universe slug (e.g. bytetrend, bytefolio) — see Universes for the roster. Unknown slugs return 404; macro returns 400 (the macro dataset is at /api/macro). |
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
from |
string |
No | Start date YYYY-MM-DD. Returns time series when provided. |
to |
string |
No | End date YYYY-MM-DD |
fields |
string |
No | Comma-separated metric fields to include |
includeSmall |
boolean |
No | true to include groups with fewer than 5 assets, hidden from listings by default — see Small-group floor. Only the exact value true is recognised |
Small-group floor
These group listings omit groups with fewer than 5 assets by default. Pass includeSmall=true to include them. The response envelope reports smallOmitted — the number of groups hidden by the floor (0 when includeSmall=true). Fetching one group by its exact name (Group History) is unaffected — you always get the group you name.
The floor is a relevance cut that keeps tiny, low-signal groups out of browse listings, not a permission. It is the same threshold on every universe, so how much it hides depends on the universe’s size. On bytetrend and the Macro Dataset, region and sector groups generally clear it and the floor mostly bites on the country and industry listings. On a small universe — a portfolio-led one with a handful of holdings, say — most groups can fall below five, and a listing can come back with little or nothing in data and the rest counted in smallOmitted. Pass includeSmall=true there. The same floor and includeSmall parameter apply to the Dimension Groups and Macro Dataset listings.
Response
| Field | Type | Description |
|---|---|---|
universe |
string |
Universe key |
count |
number |
Total number of group records across all dimensions |
smallOmitted |
number |
Number of groups hidden by the small-group floor (0 when includeSmall=true) |
data |
object |
Groups organised by category: { region: [...], sector: [...], industry: [...], type: [...], country: [...] } |
Each group metric object contains:
Identification
| Field | Type | Description |
|---|---|---|
dimension |
string |
Universe/category slug (e.g. bytetrend/region, bytefolio/sector) |
group |
string |
Group label (e.g. Europe, North America, Technology) |
date |
string |
Aggregation date |
assetCount |
number |
Number of assets in this group |
ByteTrend Score Aggregates
Each of the four ByteTrend scores (see Latest Metrics) has a matching set of group-level aggregates. Window suffixes map to UI labels: 200w = Weekly, 30d = Daily.
| Field | Type | Description |
|---|---|---|
avgByteTrendLocal200w / avgByteTrendLocal30d |
number | null |
Mean Local (Weekly / Daily) score across the group |
avgByteTrendCapr200w / avgByteTrendCapr30d |
number | null |
Mean CAPR (Weekly / Daily) score |
medianByteTrendLocal200w / medianByteTrendLocal30d |
number | null |
Median Local (Weekly / Daily) score |
medianByteTrendCapr200w / medianByteTrendCapr30d |
number | null |
Median CAPR (Weekly / Daily) score |
pctScore5Local200w / pctScore0Local200w |
number | null |
Fraction of assets at Weekly Local score 5 / 0 |
pctScore5Local30d / pctScore0Local30d |
number | null |
Fraction at Daily Local score 5 / 0 |
pctScore5Capr200w / pctScore0Capr200w |
number | null |
Fraction at Weekly CAPR score 5 / 0 |
pctScore5Capr30d / pctScore0Capr30d |
number | null |
Fraction at Daily CAPR score 5 / 0 |
ByteTrend Score Bins
Per-variant histograms of the assets in the group, bucketed by their ByteTrend score (0–5) — the shape of the distribution rather than its average, which a mean alone hides. Each variant’s array is the bin count vector; bins[0] counts assets at score 0, bins[5] counts assets at score 5.
| Field | Type | Description |
|---|---|---|
byteTrendBins |
object |
Per-variant score histograms, on every row from 2005 onwards. See shape below. |
The byteTrendBins object:
| Key | Type | Description |
|---|---|---|
local200w |
number[6] |
Score histogram for Weekly Local — bins[i] = count of assets at Local Weekly score i |
local30d |
number[6] |
Score histogram for Daily Local |
capr200w |
number[6] |
Score histogram for Weekly CAPR |
capr30d |
number[6] |
Score histogram for Daily CAPR |
For each variant, sum(bins) ≤ assetCount — the sum equals assetCount minus the number of group members whose score for that variant is null (e.g. asset hasn’t accumulated enough history for the long window).
"byteTrendBins": {
"local200w": [4, 7, 27, 3, 17, 47],
"local30d": [11, 15, 16, 17, 10, 37],
"capr200w": [23, 16, 15, 16, 13, 22],
"capr30d": [40, 10, 18, 11, 4, 23]
}
(Sample: /api/macro/region/North America, assetCount = 106 — sums of 105 / 106 / 105 / 106 reflect 1, 0, 1, 0 null-score members respectively.)
Trend Distribution
| Field | Type | Description |
|---|---|---|
trendDistribution |
object |
Count of assets per Weekly CAPR trend regime (e.g. { "Leading Trend": 3, "Neutral": 95, ... }) |
dominantTrend |
string | null |
Most common trend regime |
Returns
| Field | Type | Description |
|---|---|---|
avgReturnUsd1W … avgReturnUsd12M |
number | null |
Equal-weighted average USD returns |
capWtReturnUsd1W … capWtReturnUsd12M |
number | null |
Market-cap-weighted USD returns |
Risk
| Field | Type | Description |
|---|---|---|
avgVolatility30w |
number | null |
Average 30-week volatility |
avgSharpe52w |
number | null |
Average 52-week Sharpe ratio |
totalMarketCapUsd |
number | null |
Sum of market caps in USD |
avgDrawdown52w |
number | null |
Average 52-week drawdown |
avgRelStrengthCapped3M / avgRelStrengthCapped12M |
number | null |
Average capped relative strength |
Errors
| Status | When |
|---|---|
400 |
macro in the universe position — the macro dataset is served at /api/macro |
400 |
format=csv: this response holds one table per dimension. Dimension Groups and Group History do offer CSV — see Where csv is available |
404 |
Unknown universe slug |
An empty universe is not an error: GET /api/universes/<slug> on a universe with no members returns { "universe": "<slug>", "count": 0, "data": {}, "smallOmitted": 0 }. The universe statuses apply on Dimension Groups and Group History too, where a :dimension that isn’t one of the five also returns 400.