Documentation Index Fetch the complete documentation index at: https://docs.generalmarket.io/llms.txt
Use this file to discover all available pages before exploring further.
DTF Endpoints
A Dex Traded Fund (DTF) is a basket of assets with a price. These endpoints tell you what that price is, what it was, and what the basket contains. The rest is your decision.
Get DTF Price / NAV
The on-chain DTF identifier (hex address, e.g., 0x...).
Returns the current NAV per share, priced asset count, and AUM. Tries the data node first; falls back to on-chain if needed.
curl "https://generalmarket.io/api/itp-price?itp_id=0x1234abcd..."
{
"itp_id" : "0x1234abcd..." ,
"nav" : "1045000000000000000" ,
"nav_display" : 1.045 ,
"assets_priced" : 98 ,
"assets_total" : 100 ,
"aum_usd" : 52340.75 ,
"total_supply" : "50000000000000000000000"
}
Field Type Description itp_idstring DTF identifier navstring NAV per share in wei (18 decimals) nav_displaynumber Human-readable NAV per share in USD assets_pricednumber Number of assets with available price data assets_totalnumber Total number of assets in the DTF basket aum_usdnumber Total assets under management in USD total_supplystring Total DTF shares outstanding in wei
NAV is computed as sum(qty[i] * price[i]) / 1e18 where quantities are the fixed per-share amounts stored on-chain. See the pricing model documentation for details.
Dual-source resolution — the API trusts no single source:
Request: GET /api/itp-price?itp_id=0x...
1. Try data-node first (has live API prices, more accurate NAV)
GET DATA_NODE:8200/itp-price?itp_id=0x...
|
+-- success + nav != 0 --> return { source: "data-node", ... }
|
+-- fail / nav == 0 ----> fall through
2. Fallback: read NAV from on-chain Index contract
eth_call to Index.getITPState(bytes32)
|
+-- decode ABI: skip creator, read totalSupply, NAV
+-- count assets from dynamic array
+-- return { source: "onchain", ... }
The "source" field in the response indicates which path was used.
Get NAV Time Series
The on-chain DTF identifier.
Time range for the series. One of: 1d, 7d, 30d, 90d, 1y.
NAV over time. The chart tells the story. The numbers are the evidence.
curl "https://generalmarket.io/api/nav-series?itp_id=0x1234abcd...&range=7d"
[
{ "timestamp" : 1708000000 , "nav" : 1.012 },
{ "timestamp" : 1708086400 , "nav" : 1.018 },
{ "timestamp" : 1708172800 , "nav" : 1.025 },
{ "timestamp" : 1708259200 , "nav" : 1.031 },
{ "timestamp" : 1708345600 , "nav" : 1.038 },
{ "timestamp" : 1708432000 , "nav" : 1.042 },
{ "timestamp" : 1708518400 , "nav" : 1.045 }
]
Field Type Description timestampnumber Unix timestamp of the data point navnumber NAV per share at that point in time
Get AUM Ranking
All DTFs, ranked by AUM. The market votes with capital.
curl "https://generalmarket.io/api/aum-ranking"
[
{
"itp_id" : "0xabc123..." ,
"name" : "Top 100 Crypto Index" ,
"symbol" : "T100" ,
"nav_per_share" : 1.045 ,
"aum_usd" : 523400.75 ,
"total_supply" : "500000000000000000000000" ,
"asset_count" : 100
},
{
"itp_id" : "0xdef456..." ,
"name" : "DeFi Blue Chips" ,
"symbol" : "DEFI" ,
"nav_per_share" : 1.128 ,
"aum_usd" : 187200.50 ,
"total_supply" : "165000000000000000000000" ,
"asset_count" : 20
}
]
Field Type Description itp_idstring DTF identifier namestring Human-readable DTF name symbolstring DTF ticker symbol nav_per_sharenumber Current NAV per share in USD aum_usdnumber Total assets under management in USD total_supplystring Total shares outstanding in wei asset_countnumber Number of assets in the basket
Get Snapshot
The current state of a DTF — or all of them. Weights, quantities, NAV, supply.
Optional. When provided, the endpoint returns the snapshot for only the specified DTF.
# All DTFs
curl "https://generalmarket.io/api/snapshot"
# Specific DTF
curl "https://generalmarket.io/api/snapshot?itp_id=0x1234abcd..."
{
"itp_id" : "0x1234abcd..." ,
"name" : "Top 100 Crypto Index" ,
"symbol" : "T100" ,
"nav" : 1.045 ,
"aum_usd" : 523400.75 ,
"total_supply" : "500000000000000000000000" ,
"assets" : [
{ "symbol" : "BTC" , "weight" : 0.25 , "qty" : "0.0000025" , "price" : 97432.15 },
{ "symbol" : "ETH" , "weight" : 0.15 , "qty" : "0.0000462" , "price" : 3245.80 }
]
}
Get DTF Enrichment
Beyond prices: who founded the projects in this basket, how much venture money they raised, what their TVL looks like, and how the market values them. Four upstream sources, aggregated into one response.
GET /api/itp-enrichment?itp_id={itp_id}
The on-chain DTF identifier (66-character hex string: 0x + 64 hex chars).
Data aggregation pipeline:
+-------------------+ +------------------+ +------------------+
| Data Node | | CoinGecko API | | DeFiLlama API |
| /snapshot?itp_id= | | /simple/price | | /protocols |
+--------+----------+ +--------+---------+ | /raises |
| | +--------+---------+
v v |
raw holdings market data v
(symbol, weight, (price, mcap, TVL + funding
price, name) 24h change) round data
| | |
+------------+------------+-------------------------+
|
v
+---------+----------+
| Founders Lookup |
| (local JSON file) |
| age, gender, |
| nationality, uni |
+--------+-----------+
|
v
Combined enrichment response
curl "https://generalmarket.io/api/itp-enrichment?itp_id=0x1234abcd..."
{
"itpId" : "0x1234abcd..." ,
"holdings" : [
{
"symbol" : "BTC" ,
"weight" : 0.25 ,
"price" : 97432.15 ,
"name" : "Bitcoin" ,
"image" : "https://assets.coingecko.com/.../bitcoin.png" ,
"coingecko_id" : "bitcoin" ,
"market_cap" : 1920000000000 ,
"change_24h" : 2.45
}
],
"founders" : {
"total_founders" : 142 ,
"total_companies_matched" : 85 ,
"age_distribution" : [
{ "bucket" : "20-29" , "count" : 12 },
{ "bucket" : "30-39" , "count" : 68 },
{ "bucket" : "40-49" , "count" : 45 },
{ "bucket" : "50-59" , "count" : 14 },
{ "bucket" : "60+" , "count" : 3 }
],
"gender_split" : [
{ "label" : "Male" , "count" : 130 },
{ "label" : "Female" , "count" : 12 }
],
"top_nationalities" : [
{ "label" : "United States" , "count" : 42 },
{ "label" : "Russia" , "count" : 15 },
{ "label" : "China" , "count" : 12 }
],
"top_universities" : [
{ "label" : "Stanford University" , "count" : 8 },
{ "label" : "MIT" , "count" : 6 }
]
},
"defi" : {
"total_tvl" : 45200000000 ,
"avg_tvl_change_7d" : 3.2 ,
"protocols_with_data" : 22 ,
"total_holdings" : 100 ,
"top_by_tvl" : [
{ "symbol" : "AAVE" , "name" : "Aave" , "tvl" : 12400000000 , "change_7d" : 2.1 }
]
},
"funding" : {
"total_raised_m" : 8420.5 ,
"avg_valuation_m" : 2150.0 ,
"total_rounds" : 312 ,
"top_investors" : [
{ "name" : "a16z" , "count" : 18 },
{ "name" : "Paradigm" , "count" : 12 }
],
"recent_raises" : [
{
"project" : "LayerZero" ,
"round" : "Series B" ,
"amount_m" : 120.0 ,
"lead" : "a16z" ,
"date" : "2025-11-15"
}
]
}
}
Holdings fields:
Field Type Description symbolstring Asset ticker weightnumber Portfolio weight (0-1) pricenumber Latest price in USD namestring Human-readable name imagestring CoinGecko image URL coingecko_idstring CoinGecko identifier market_capnumber Market capitalization in USD change_24hnumber 24-hour price change (%)
Founders aggregate (present when founder data exists for holdings):
Field Type Description total_foundersnumber Total founders matched total_companies_matchednumber Holdings with founder data age_distributionarray Age buckets: 20-29, 30-39, 40-49, 50-59, 60+ gender_splitarray Gender distribution top_nationalitiesarray Top 12 nationalities by count top_universitiesarray Top 10 universities by count
DeFi aggregate (present when holdings have DeFiLlama protocol data):
Field Type Description total_tvlnumber Combined TVL of matched protocols avg_tvl_change_7dnumber Average 7-day TVL change (%) protocols_with_datanumber Holdings with DeFiLlama data top_by_tvlarray Top 10 protocols by TVL
Funding aggregate (present when holdings have DeFiLlama raise data):
Field Type Description total_raised_mnumber Total raised in millions USD avg_valuation_mnumber Average valuation in millions USD total_roundsnumber Total funding rounds top_investorsarray Top 10 investors by deal count recent_raisesarray 10 most recent raises
Status Meaning 200Enrichment data returned (cached 5 min when holdings present) 400Invalid itp_id format 500Enrichment computation failed
Enrichment results are cached at the CDN for 5 minutes when meaningful data is available. Empty results (no holdings found) are not cached.