GET /api/universes Universes
A universe is a named list of assets — bytetrend, for example, or bytefolio, the holdings of a ByteTree portfolio. Use one to narrow other requests to its members, or to see group figures for just those assets. This endpoint lists every universe and how many assets each contains.
Membership is explicit and carried on the asset: every asset record lists the universes it belongs to under universes[] (see List Assets), and ?universe=<slug> on the asset and metric endpoints filters to that membership. The group metric routes aggregate a universe’s members across the five global dimensions.
Universes and dimensions are independent: dimensions are defined once, globally, and apply identically to every universe. The whole tracked set — every asset regardless of universe — is aggregated separately as the Macro Dataset. macro is not a universe slug.
Every api+mcp key reaches every universe; there is no per-key universe scope. See Authentication.
“Screens” is a subscription tier, not a universe. On your ByteTrend.io account, Screens names a subscription tier — in-product viewing only, the
viewcapability — and does not by itself grant API or MCP access. Elsewhere in this documentation screen is an unrelated technical term for a ranked selection of assets. The tier that reaches this API and the ByteTree MCP is API + MCP (theapi+mcpcapability described in Authentication).
The roster
| Slug | Label | source |
|---|---|---|
bytetrend | ByteTrend | rule |
bold | BOLD | manual |
whisky | Whisky | portfolio |
soda | Soda | portfolio |
quality | Quality | portfolio |
global-opportunities | Global Opportunities | portfolio |
bytefolio | ByteFolio | portfolio |
The roster is extensible — read it from GET /api/universes rather than hard-coding it. Universe slugs are the values path segments and universe parameters take; an unknown slug returns 404 on a path and 400 on a parameter, each naming the valid slugs.
List Universes
curl https://api.bytetree.io/api/universes
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
limit | number | No | Maximum number of universes to return per page. Default 500, capped at 1000 |
offset | number | No | Number of universes to skip. Default 0 |
The roster is small enough that the defaults return everything in one call; the parameters exist for envelope consistency with the rest of the API.
Response
This endpoint uses the paginated list envelope:
| Field | Type | Description |
|---|---|---|
count | number | Number of universes in this page |
total | number | Total universes, before paging |
limit | number | Page size applied |
offset | number | Page offset applied |
data | array | Array of universe objects, in sortOrder |
Each universe object:
| Field | Type | Description |
|---|---|---|
universe | string | Universe slug (e.g. bytetrend, bytefolio) |
label | string | Display name (e.g. ByteTrend, ByteFolio) |
source | string | How membership is determined: rule, portfolio, or manual — see Membership |
rule | object | null | For source: "rule", the rule that selects members (today { "assetTypes": [...] }); null otherwise |
enabled | boolean | Whether the universe is live |
sortOrder | number | Display order |
memberCount | number | Assets currently in this universe |
{
"count": 7,
"total": 7,
"limit": 500,
"offset": 0,
"data": [
{
"universe": "bytetrend",
"label": "ByteTrend",
"source": "rule",
"rule": { "assetTypes": ["stock", "etf", "crypto", "commodity"] },
"enabled": true,
"sortOrder": 10,
"memberCount": 316
},
{
"universe": "bold",
"label": "BOLD",
"source": "manual",
"rule": null,
"enabled": true,
"sortOrder": 20,
"memberCount": 0
},
{
"universe": "bytefolio",
"label": "ByteFolio",
"source": "portfolio",
"rule": null,
"enabled": true,
"sortOrder": 70,
"memberCount": 2
}
]
}
Membership
source names how a universe’s membership is determined:
rule— members are selected by a rule over asset attributes, recomputed as the registry changes.bytetrendis every tracked asset of the types in itsrule.assetTypes.portfolio— members are the holdings of a ByteTree portfolio. Assets join and leave as the portfolio changes.manual— a curated list.
Treat source as a string you switch on, not a closed enum — branch on the values you know and fall through gracefully on anything else. rule is populated only for source: "rule".
A memberCount of 0 is a valid state: a universe is listed as soon as it exists, and its members follow. GET /api/universes/<slug> on an empty universe returns { "universe": "<slug>", "count": 0, "data": {} } — a valid, empty aggregation, not an error.
Errors
| Status | When |
|---|---|
400 | macro used as a universe slug — the macro dataset is at /api/macro |
404 | Unknown universe slug on a /api/universes/<slug>… path |