Analytics API
Aggregate numbers for dashboards, and the AE exchange rates every fiat figure in the API is built on. Most of these endpoints return bare arrays or scalars rather than the paginated envelope.
All paths are relative to https://api.superhero.com. Reads need no authentication.
Endpoints
| Method & path | Query | Returns |
|---|---|---|
GET /api/analytics/past-24-hours | address | Rolling 24-hour summary object |
GET /api/analytics/summary | start_date, end_date, address | total_unique_accounts over a range |
GET /api/analytics | start_date, end_date, force_pull, address | Array of daily summary objects |
GET /api/analytics/preview | None | An HTML dashboard, not JSON |
GET /api/analytics/daily-trade-volume | start_date, end_date, token_address, account_address | Daily volume series |
GET /api/analytics/daily-unique-active-users | start_date, end_date, token_address | Daily active-user series |
GET /api/analytics/daily-created-tokens-count | start_date, end_date | Daily token-creation series |
GET /api/analytics/daily-market-cap-sum | start_date, end_date | Daily market-cap series |
GET /api/analytics/total-market-cap | None | sum and sum_data, in aettos |
GET /api/analytics/total-created-tokens | None | A bare number |
GET /api/analytics/total-unique-users | token_sale_addresses | total_users |
GET /api/analytics/challenge | addresses, start_date, end_date | Per-account, per-day activity grid |
GET /api/analytics/challenge/preview | None | An HTML dashboard, not JSON |
GET /api/coins/aeternity/rates | None | Currency code to rate map |
GET /api/coins/aeternity/history | currency, interval, days | Array of [timestamp_ms, price] pairs |
GET /api/coins/aeternity/market-data | currency | Market data object |
Posting activity has its own set under /api/posts/analytics* and referral activity under
/api/bcl-affiliation/analytics*. See Posts and
Invitations & Affiliations.
Date parameters are snake_case start_date / end_date in YYYY-MM-DD format.
GET /api/analytics/past-24-hours
Returns one object with seven fields:
| Field | Type | Meaning |
|---|---|---|
date | string | YYYY-MM-DD of the start of the window, which is yesterday's date |
total_market_cap_sum | string | Sum of every token's last-traded market cap, in AE |
total_volume_sum | string | Sum of trade amount.ae inside the window, in AE |
total_tokens | number | Tokens created at any time before the window closes. A running total, not a 24-hour delta |
total_transactions | number | Trades inside the window |
total_created_tokens | number | Trades inside the window whose tx_type is create_community |
total_active_accounts | number | Distinct trader addresses inside the window |
curl -s "https://api.superhero.com/api/analytics/past-24-hours"An optional address scopes every field to one account: the transaction aggregates filter on
address, total_tokens counts tokens that account created, and the market-cap sum is
restricted to tokens with that creator_address.
total_tokens is cumulative; the 24-hour creation count is total_created_tokens.
total_market_cap_sum and GET /api/analytics/total-market-cap measure different quantities on
different scales:
past-24-hours.total_market_cap_sum | total-market-cap.sum | |
|---|---|---|
| Source | Last trade per token | The live-synced token market_cap |
| Unit | AE | aettos |
| Includes tokens never traded | No | Yes |
Includes unlisted tokens | Yes | No |
Both values arrive as JSON strings because they are decimal columns; total_market_cap_sum is
not a big integer.
Daily series
Four endpoints return a bare JSON array with one element per day.
GET /api/analytics/daily-trade-volume
| Field | Type | Meaning |
|---|---|---|
date | string | The day |
volume_ae | number | Volume in AE, so no 1e18 division |
transaction_count | number | Trades that day |
Filter with token_address for one market or account_address for one trader.
curl -s "https://api.superhero.com/api/analytics/daily-trade-volume?start_date=2026-08-01&end_date=2026-09-01"GET /api/analytics/daily-unique-active-users
date and active_users (number). Takes token_address to scope to one market.
GET /api/analytics/daily-created-tokens-count
date in YYYY-MM-DD and count (number).
GET /api/analytics/daily-market-cap-sum
date (YYYY-MM-DD) and sum, one element per day, ascending. sum is in AE, not
aettos. It is the last-trade-per-token sum described under past-24-hours, computed at each
day's end. Do not divide by 1e18.
- The range is clamped to 365 days; a wider
start_dateis moved forward, not rejected. - With neither date,
start_dateandend_dateboth default to today, so you get a single row. - Each day is an aggregate query; a full year is 365 of them. Cached for 20 seconds.
token_sale_addressesis accepted but the series is always platform-wide. For a per-token series useGET /api/tokens/{address}/history.
Totals
| Endpoint | Shape | Counts |
|---|---|---|
GET /api/analytics/total-market-cap | sum (string, aettos) and sum_data (a PriceDto, also in aettos) | Sum of token market_cap over unlisted = false tokens, from every factory |
GET /api/analytics/total-created-tokens | A bare JSON number | Tokens whose factory_address is the current factory |
GET /api/analytics/total-unique-users | total_users (number) | Distinct trader addresses, all time |
curl -s "https://api.superhero.com/api/analytics/total-created-tokens"total-market-cap is the one market-cap figure in the API in aettos. Divide by 1e18. sum_data
is the same aettos value multiplied through the AE fiat rates, so every currency key is on the
aettos scale too.
total-unique-users accepts token_sale_addresses (at most 100; more is a 400) to restrict the
count to traders of those tokens. Unknown addresses are dropped; if none resolves to a token the
answer is { "total_users": 0 }. Cached for 20 seconds.
total-created-tokens is scoped to the current factory, so it does not match total_tokens
from past-24-hours, which counts every token.
AE price and fiat rates
GET /api/coins/aeternity/rates returns a flat map of currency code to rate:
{ "usd": 0.0312, "eur": 0.0287, "aud": 0.0471, "brl": 0.1683,
"cad": 0.0428, "chf": 0.0249, "gbp": 0.0243, "xau": 0.0000094 }curl -s "https://api.superhero.com/api/coins/aeternity/rates"The map has exactly eight keys (usd, eur, aud, brl, cad, chf, gbp, xau), one for
each convertTo currency other than ae. A response either has all eight or is replaced by the
last known good snapshot. xau is troy ounces of gold.
GET /api/coins/aeternity/history gives the AE price series as [timestamp_ms, price] pairs:
| Parameter | Notes |
|---|---|
currency | Target currency code, default usd |
interval | daily or hourly. Hourly is only available for 1–90 days |
days | 1, 7, 14, 30, 90, 180, 365 or max. Default 365 |
curl -s "https://api.superhero.com/api/coins/aeternity/history?currency=usd&interval=daily&days=90"GET /api/coins/aeternity/market-data?currency=usd returns the broader market picture in
camelCase, the only camelCase response body in the API:
id · symbol · name · lastUpdated
currentPrice · high24h · low24h
priceChange24h · priceChangePercentage24h
marketCap · marketCapChange24h · marketCapChangePercentage24h
fullyDilutedValuation
circulatingSupply · totalSupply · maxSupply · totalVolume
ath · athChangePercentage · athDate
atl · atlChangePercentage · atlDate
roi
dataSource · isFallbackEvery figure is denominated in currency, default usd. dataSource is coingecko or
fallback, and isFallback says the server is serving the last known good snapshot because the
upstream was unreachable. Check them before treating the numbers as current.
GET /api/analytics and GET /api/analytics/summary
GET /api/analytics returns an array, one element per day, of the same seven fields as
past-24-hours. Rows read from the cached table carry an extra id; rows computed live (the
address-scoped path) do not. Do not key on id.
| Parameter | Default | Notes |
|---|---|---|
start_date | 10 days ago | YYYY-MM-DD |
end_date | tomorrow | A start_date after end_date is a 400 |
address | None | Scopes every figure to one account |
force_pull | false | Recompute and rewrite the cached rows for the range before answering |
Without address the rows come from the cached daily table. With address they are computed
live, so an address-scoped call is slower and always current.
GET /api/analytics/summary returns { "total_unique_accounts": <n> } for the range. This is a true
distinct count over the whole range, not a sum of per-day distincts. Both dates are optional;
omitting them makes it all-time.
Freshness
| Endpoint | Freshness |
|---|---|
past-24-hours, summary | Computed live on every request |
analytics without force_pull | Read from the daily table, rebuilt hourly (re-pulling the last 7 days each tick) |
analytics with force_pull=true | Recomputed synchronously for the whole requested range first, which is slow for a wide range |
analytics with address | Always live; force_pull irrelevant |
daily-market-cap-sum, total-unique-users | Live, cached 20 seconds |
daily-trade-volume, daily-unique-active-users, daily-created-tokens-count, total-market-cap, total-created-tokens | Live on every request, uncached |
coins/aeternity/* | From a snapshot refreshed from CoinGecko every 10 minutes |
GET /api/analytics/challenge
A per-account, per-day activity grid for comparing a small set of traders over a period.
| Parameter | Notes |
|---|---|
addresses | Required. Comma-separated ak_... list, at most 10. Empty, over-long or malformed lists are 400s. Duplicates are removed, order preserved |
start_date | Default 14 days ago |
end_date | Default today |
curl -s "https://api.superhero.com/api/analytics/challenge?addresses=ak_FIRST_ADDRESS,ak_SECOND_ADDRESS&start_date=2026-09-01&end_date=2026-09-14"Returns a flat array with one row per address per day, zero-filled: every address gets a row for every day in the range:
| Field | Type | Meaning |
|---|---|---|
address | string | |
date | string | YYYY-MM-DD |
total_posts | number | Posts that day |
total_trades | number | Trades that day |
total_volume_ae | number | Trade volume that day, in AE |
created_tokens | number | Tokens created that day |
pnl_ae | number | Realised PnL for the day, in AE |
pnl_usd | number | The same in USD |
GET /api/analytics/challenge/preview and GET /api/analytics/preview are server-rendered HTML
dashboards, not JSON.
Related
- API Conventions: the units rule and the non-envelope response shapes
- Tokens API: per-token history, the fine-grained counterpart to these aggregates
- Accounts API: per-account portfolio history and trading statistics
- Invitations & Affiliations: the referral analytics endpoints