API Reference
Analytics

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 & pathQueryReturns
GET /api/analytics/past-24-hoursaddressRolling 24-hour summary object
GET /api/analytics/summarystart_date, end_date, addresstotal_unique_accounts over a range
GET /api/analyticsstart_date, end_date, force_pull, addressArray of daily summary objects
GET /api/analytics/previewNoneAn HTML dashboard, not JSON
GET /api/analytics/daily-trade-volumestart_date, end_date, token_address, account_addressDaily volume series
GET /api/analytics/daily-unique-active-usersstart_date, end_date, token_addressDaily active-user series
GET /api/analytics/daily-created-tokens-countstart_date, end_dateDaily token-creation series
GET /api/analytics/daily-market-cap-sumstart_date, end_dateDaily market-cap series
GET /api/analytics/total-market-capNonesum and sum_data, in aettos
GET /api/analytics/total-created-tokensNoneA bare number
GET /api/analytics/total-unique-userstoken_sale_addressestotal_users
GET /api/analytics/challengeaddresses, start_date, end_datePer-account, per-day activity grid
GET /api/analytics/challenge/previewNoneAn HTML dashboard, not JSON
GET /api/coins/aeternity/ratesNoneCurrency code to rate map
GET /api/coins/aeternity/historycurrency, interval, daysArray of [timestamp_ms, price] pairs
GET /api/coins/aeternity/market-datacurrencyMarket 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:

FieldTypeMeaning
datestringYYYY-MM-DD of the start of the window, which is yesterday's date
total_market_cap_sumstringSum of every token's last-traded market cap, in AE
total_volume_sumstringSum of trade amount.ae inside the window, in AE
total_tokensnumberTokens created at any time before the window closes. A running total, not a 24-hour delta
total_transactionsnumberTrades inside the window
total_created_tokensnumberTrades inside the window whose tx_type is create_community
total_active_accountsnumberDistinct 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_sumtotal-market-cap.sum
SourceLast trade per tokenThe live-synced token market_cap
UnitAEaettos
Includes tokens never tradedNoYes
Includes unlisted tokensYesNo

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

FieldTypeMeaning
datestringThe day
volume_aenumberVolume in AE, so no 1e18 division
transaction_countnumberTrades 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_date is moved forward, not rejected.
  • With neither date, start_date and end_date both 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_addresses is accepted but the series is always platform-wide. For a per-token series use GET /api/tokens/{address}/history.

Totals

EndpointShapeCounts
GET /api/analytics/total-market-capsum (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-tokensA bare JSON numberTokens whose factory_address is the current factory
GET /api/analytics/total-unique-userstotal_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:

ParameterNotes
currencyTarget currency code, default usd
intervaldaily or hourly. Hourly is only available for 1–90 days
days1, 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 · isFallback

Every 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.

ParameterDefaultNotes
start_date10 days agoYYYY-MM-DD
end_datetomorrowA start_date after end_date is a 400
addressNoneScopes every figure to one account
force_pullfalseRecompute 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

EndpointFreshness
past-24-hours, summaryComputed live on every request
analytics without force_pullRead from the daily table, rebuilt hourly (re-pulling the last 7 days each tick)
analytics with force_pull=trueRecomputed synchronously for the whole requested range first, which is slow for a wide range
analytics with addressAlways live; force_pull irrelevant
daily-market-cap-sum, total-unique-usersLive, cached 20 seconds
daily-trade-volume, daily-unique-active-users, daily-created-tokens-count, total-market-cap, total-created-tokensLive 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.

ParameterNotes
addressesRequired. Comma-separated ak_... list, at most 10. Empty, over-long or malformed lists are 400s. Duplicates are removed, order preserved
start_dateDefault 14 days ago
end_dateDefault 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:

FieldTypeMeaning
addressstring
datestringYYYY-MM-DD
total_postsnumberPosts that day
total_tradesnumberTrades that day
total_volume_aenumberTrade volume that day, in AE
created_tokensnumberTokens created that day
pnl_aenumberRealised PnL for the day, in AE
pnl_usdnumberThe same in USD

GET /api/analytics/challenge/preview and GET /api/analytics/preview are server-rendered HTML dashboards, not JSON.

Related