ByteTree API documentation

List 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 headline trend score and regime (Weekly CAPR, taken from the latest computed metrics).

Request

curl https://api.bytetree.io/api/assets

# Filter by type
curl "https://api.bytetree.io/api/assets?type=stock"

# FX pairs (synthesised from rate data — see Polymorphic FX rows below)
curl "https://api.bytetree.io/api/assets?type=fx"

# Members of a universe
curl "https://api.bytetree.io/api/assets?universe=bytetrend"

# Members of a universe within one dimension group
curl "https://api.bytetree.io/api/assets?universe=bytetrend&dimension=region&group=Europe"

# Text search
curl "https://api.bytetree.io/api/assets?q=apple"

# Paginate (advance offset until offset + count >= total)
curl "https://api.bytetree.io/api/assets?limit=100&offset=200"

Query Parameters

NameTypeRequiredDescription
typestringNoAsset type: stock, crypto, etf, index, commodity, or fx (synthesised — see Polymorphic FX rows)
statusstringNoAsset status: active, pending, or inactive
sectorstringNoSector name (e.g. Technology, Financial Services)
universestringNoUniverse 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
dimensionstringNoOne of the five global dimensions: region, sector, industry, type, or country. Must be paired with group; works with or without universe
groupstringNoGroup label within dimension, exact match (e.g. Europe, Technology). Must be paired with dimension
qstringNoCase-insensitive text search on symbol and name
limitnumberNoMaximum number of assets to return per page. Default 500, capped at 1000.
offsetnumberNoNumber 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 — the same set memberCount on GET /api/universes counts. 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"

# Technology members of the ByteTrend universe
curl "https://api.bytetree.io/api/assets?universe=bytetrend&dimension=sector&group=Technology"

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.

RequestStatusBody
?universe=<unknown>400unknown universe 'zzz'. Valid: bold, bytefolio, bytetrend, …
?universe=macro400'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=x400unknown 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 expose the same shape as standard assets so polymorphic consumers can iterate without branching, but several asset-only fields (isin, sector, industry, country, region, mktCap, mktCapUsd) are null because FX pairs aren’t issuer-domiciled instruments. name spells 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 known. FX rows also carry base and quote currency codes, with baseName / quoteName where known.

/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:

FieldTypeDescription
countnumberLength of the returned data array (records on this page)
totalnumberFull match count for the same filter, ignoring limit and offset
limitnumberEchoed input limit
offsetnumberEchoed input offset
dataarrayArray of asset objects

Each asset object:

FieldTypeDescription
_idstringMongoDB document ID
symbolstringTicker symbol (e.g. AAPL, BTCUSD)
namestringDisplay name
isinstring | nullISIN code (e.g. US0378331005)
typestringAsset type: stock, crypto, etf, index, or commodity
statusstringactive, pending, or inactive
sectorstring | nullSector name (e.g. Technology)
industrystring | nullIndustry name (e.g. Consumer Electronics)
countrystring | nullISO 3166-1 alpha-2 country code (e.g. US, GB)
regionstring | nullGeographic region derived from country (e.g. North America, Europe)
universesstring[]Universes this asset belongs to (e.g. ["bytetrend"]), always present — empty for an asset in no universe. Slugs as listed on Universes
dimensionsobjectRaw and override layers behind the resolved sector / industry / country / region above — see Dimensions on Get Asset
currencystringTrading currency (e.g. USD, GBP)
mktCapnumber | nullMarket cap in local currency (provider-reported)
mktCapUsdnumber | nullMarket cap in USD (from computed metrics)
byteTrendCapr200wnumber | nullLatest Weekly CAPR ByteTrend score (0–5), denormalised from latest metrics
trendRegimeCapr200wstring | nullLatest Weekly CAPR trend regime: Leading Trend, Emerging Trend, Weakening Trend, Bear Trend, or Neutral
changeCapr200wnumber | nullDay-over-day change in the Weekly CAPR score (−5 to +5)
{
  "count": 3,
  "total": 317,
  "limit": 500,
  "offset": 0,
  "data": [
    {
      "_id": "66f1a2b3c4d5e6f7a8b9c0d1",
      "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",
      "mktCap": 3900000000000,
      "mktCapUsd": 3900000000000,
      "byteTrendCapr200w": 4,
      "trendRegimeCapr200w": "Emerging Trend",
      "changeCapr200w": 1
    },
    {
      "_id": "66f1a2b3c4d5e6f7a8b9c0d2",
      "symbol": "BTCUSD",
      "name": "Bitcoin USD",
      "isin": null,
      "type": "crypto",
      "status": "active",
      "sector": "Cryptocurrency",
      "industry": null,
      "country": null,
      "region": null,
      "currency": "USD",
      "mktCap": null,
      "mktCapUsd": 1300000000000,
      "byteTrendCapr200w": 2,
      "trendRegimeCapr200w": "Weakening Trend",
      "changeCapr200w": -1
    },
    {
      "_id": "66f1a2b3c4d5e6f7a8b9c0d3",
      "symbol": "GCUSD",
      "name": "Gold",
      "isin": null,
      "type": "commodity",
      "status": "active",
      "sector": null,
      "industry": null,
      "country": null,
      "region": null,
      "currency": "USD",
      "mktCap": null,
      "mktCapUsd": null,
      "byteTrendCapr200w": 5,
      "trendRegimeCapr200w": "Leading Trend",
      "changeCapr200w": 0
    }
  ]
}

Notes