Products
Crypto
Crypto prices, the liquid trading universe, perpetual-futures positioning, options volatility, exchange announcements, on-chain flows, and crypto news, all behind the same API key as the rest of Wealthnow.
What's inside
- Quotes and universe. A live quote for one pair from the real-time market-data feed (439 pairs), and the full liquid universe ranked by 24-hour dollar volume, with stablecoins excluded.
- Derivatives positioning. Cross-venue perpetual funding normalised to an 8-hour rate, open interest in USD, perpetual basis in basis points, and the BTC or ETH options volatility surface.
- Exchange events and on-chain flows. Listing, delisting and trading-caution notices taken from seven exchanges' own announcement APIs, breaking crypto-native headlines classified by event type, and stablecoin supply and lending liquidations read from Ethereum logs.
- Market data (Pro). Coin profiles with supply and all-time highs and lows, daily history back to each coin's first day, the whole market's size and dominance, sector (category) performance, top movers with a volume floor, where each coin trades, exchanges, public-company treasuries and decentralised-exchange pools.
- Recorded history (Pro). The derivatives, events and on-chain readings above as history: funding, open interest and basis per asset and per venue, the BTC and ETH volatility surface, the exchange-announcement and headline archive, and on-chain flows, one row per 15-minute recording cycle.
- News, sentiment and whale flow. A crypto newswire with per-coin and market-wide sentiment rollups, trending headlines, clustered events, an evening digest, delayed prices, and large on-chain and exchange transactions.
The derivatives, events and on-chain routes are data context. Their responses carry not_a_score: true and not_a_forecast: true: they report what the venues and the chain published, not a trading view.
For historical crypto OHLCV bars, or a snapshot with an is_stale flag, pass asset_class=crypto to /api/v3/fundamentals/prices or /api/ on Market Data. Bars run on the UTC day, and a bar still forming (today's day bar, the open week's bar) carries partial: true, with as_of, as_of_basis, last_bar_partial, data_through and session_complete on the response; see Bars still forming. Without it, a symbol such as BTC or LINK returns the US-listed equity of the same ticker. No other Market Data route takes asset_class: prices/history, prices/corporate_ and intel/chart read BTC as the US-listed ticker.
Access
This page spans several products. Each row in the tables below states its plan and credit cost.
| Routes | Product | Credits/call | Plans |
|---|---|---|---|
/api/crypto/*, /api/v3/crypto/* (quotes, universe, derivatives, events, on-chain) | market_data | 1 | Free and up |
/api/v3/news_crypto/* (news, sentiment, whale flow) | news_sentiment | 2 | Starter and up |
/api/v3/crypto/market/* (market data: profiles, history, global, categories, movers, exchanges, treasuries, on-chain pools) | crypto_market | 2 | Pro and up |
/api/v3/crypto/history/* (recorded history: derivatives per asset and per venue, vol surface, events, on-chain) | crypto_history | 3 | Pro and up |
Failed requests are not billed. When no upstream source answers, the derivatives, events and on-chain routes return 503 with error: "upstream_, an error_code such as crypto_ and a Retry-After, instead of an empty 200. On the derivatives routes, a ticker the venues list as a security (such as NVDA) answers 422 not_a_crypto_asset, and a symbol no venue lists answers 404 symbol_not_listed. Neither is retryable. See Pricing & credits.
The universe, derivatives, events and on-chain routes also accept asset_class=crypto. It is optional and crypto is its only value.
Endpoints
Prices and universe
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/crypto/{ticker} | Free+ / 1 | crypto_quote | Live quote for one pair: last-trade price, 24h change and volume on a UTC-day basis, day and previous-day OHLC, and the last trade. Accepts BTC, BTCUSD or X:BTCUSD. vs (string, default USD): quote currency, such as EUR or BTC. series (boolean, default true): include the last 7 daily bars. An unknown symbol returns a structured 404. |
GET | /api/crypto/universe | Free+ / 1 | crypto_universe | Every priced pair that clears a liquidity floor, ranked by 24h dollar volume, stablecoins excluded. min_dollar_volume (number, default 1000000): the floor. limit (integer, 1 to 1000, optional): page size; omit it to get every pair above the floor. offset (integer, default 0). |
Market data (Pro)
Every answer states when its figures were fetched (fetched_at, age_s), whether they are older than their refresh window (stale) and the unit of each number (units). Nothing is served older than 24 hours. Tools that take a coin accept symbol or id: when several coins share a symbol, the one with the best market-cap rank is used and symbol_resolution names it and the other candidates. An unknown parameter answers 422 with the accepted list, and when the source cannot answer the route returns 503 with error: "upstream_ and a Retry-After.
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/v3/crypto/market/profile | Pro+ / 2 | crypto_market_profile | A coin's price, market cap, rank, supply or all-time high/low, for one coin or up to 50 at once (symbols=BTC,ETH,SOL or ids=). Each coin comes back with its id, name and symbol. Params: symbols, ids, vs_currency. |
GET | /api/v3/crypto/market/history | Pro+ / 2 | crypto_market_history | How a coin's price, market cap or volume moved over a year, five years or its whole life: one row per day. Params: symbol, id, days, interval, vs_currency. |
GET | /api/v3/crypto/market/coin | Pro+ / 2 | crypto_market_coin | What a coin is (links, categories, genesis, contract addresses), or every market figure for one coin in one answer. Params: symbol, id, localization, tickers, market_data, community_data, developer_data, sparkline, include_, dex_pair_format. |
GET | /api/v3/crypto/market/chart | Pro+ / 2 | crypto_market_chart | A coin's recent price, market cap and volume series (e.g. the last 1, 7, 30 or 90 days) to chart or compare. Params: symbol, id, days, interval, vs_currency, precision. |
GET | /api/ | Pro+ / 2 | crypto_ | A coin's price, market cap and volume between two exact dates. Params: symbol, id, from, to, interval, vs_currency, precision. |
GET | /api/v3/crypto/market/ohlc | Pro+ / 2 | crypto_market_ohlc | A coin's open-high-low-close candles. Params: symbol, id, days, interval, vs_currency, precision. |
GET | /api/v3/crypto/market/tickers | Pro+ / 2 | crypto_market_tickers | Where a coin trades: its trading pairs on every exchange, with price, 24 h volume, spread and liquidity grade (100 per page). Params: symbol, id, exchange_ids, include_exchange_logo, page, order, depth, dex_pair_format. |
GET | /api/v3/crypto/market/on_ | Pro+ / 2 | crypto_market_on_date | What a coin's price, market cap or volume was on a specific past date. Params: symbol, id, date, localization. |
GET | /api/ | Pro+ / 2 | crypto_market_contract | Given a token's contract address and chain: which coin it is and its market data. Params: platform, address. |
GET | /api/v3/crypto/market/coins | Pro+ / 2 | crypto_market_coins | A ranked table of coins (by market cap, volume or name), optionally filtered to ids, symbols or a category, with price and percentage changes. Params: vs_currency, ids, symbols, include_tokens, category, order, per_page, page, sparkline, price_change_percentage, precision. |
GET | /api/ | Pro+ / 2 | crypto_ | Every coin's id, symbol and name (about 17,000 rows), e.g. to map symbols to ids in bulk. Large: prefer crypto_market_search or a symbol on the other tools. Params: include_platform, status. |
GET | /api/ | Pro+ / 2 | crypto_market_coins_new | Which coins were listed most recently. |
GET | /api/v3/crypto/market/movers | Pro+ / 2 | crypto_market_movers | Which coins rose or fell the most (top gainers and losers) over 1h to 1y, filtered to coins with real trading volume, plus what is trending in searches. Params: duration, min_volume_usd, top_coins, include_trending. |
GET | /api/ | Pro+ / 2 | crypto_market_trending | What coins, categories or NFTs are trending in searches right now. Params: show_max. |
GET | /api/ | Pro+ / 2 | crypto_ | How crypto sectors are doing (DeFi, layer 1, memes, AI ...): market cap and 24 h change per category; with category= the top coins inside one category. Params: limit, order, category, vs_currency. |
GET | /api/ | Pro+ / 2 | crypto_ | Every category id and name (to pass as category= elsewhere). |
GET | /api/v3/crypto/market/global | Pro+ / 2 | crypto_market_global | The whole crypto market: total market cap, 24 h volume and their change, Bitcoin and Ether dominance, and DeFi's share. Params: vs_currency. |
GET | /api/ | Pro+ / 2 | crypto_ | The total crypto market cap and volume over time. Params: days, vs_currency. |
GET | /api/v3/crypto/market/search | Pro+ / 2 | crypto_market_search | Find a coin, exchange, category or NFT by name or symbol when you do not know its id. Params: query. |
GET | /api/v3/crypto/market/price | Pro+ / 2 | crypto_market_price | The current price of one or more coins (up to 50 symbols or 250 ids), with market cap, 24 h volume and 24 h change. Params: symbols, ids, vs_currencies, include_market_cap, include_24hr_vol, include_24hr_change, include_last_updated_at, precision. |
GET | /api/ | Pro+ / 2 | crypto_market_exchanges | Which crypto exchanges are the largest or most trusted. Params: per_page, page. |
GET | /api/ | Pro+ / 2 | crypto_ | Every exchange id and name (to pass as id= elsewhere). Params: status. |
GET | /api/ | Pro+ / 2 | crypto_market_exchange | One exchange: its volume, trust score, country and top pairs. Params: id, dex_pair_format. |
GET | /api/ | Pro+ / 2 | crypto_ | Every trading pair on one exchange, optionally for given coins (100 per page). Params: id, coin_ids, include_exchange_logo, page, depth, order, dex_pair_format. |
GET | /api/ | Pro+ / 2 | crypto_ | How an exchange's trading volume changed over time. Params: id, days. |
GET | /api/ | Pro+ / 2 | crypto_ | Which derivatives exchanges have the most open interest or volume. Params: order, per_page, page. |
GET | /api/ | Pro+ / 2 | crypto_ | Every derivatives exchange id and name. |
GET | /api/ | Pro+ / 2 | crypto_ | One derivatives exchange: open interest, volume and, with include_tickers, its contracts. Params: id, include_tickers. |
GET | /api/ | Pro+ / 2 | crypto_ | Every blockchain (asset platform) id, e.g. to look a token up by contract address. Params: filter. |
GET | /api/ | Pro+ / 2 | crypto_ | Bitcoin's exchange rate against fiat currencies, commodities and other coins. |
GET | /api/ | Pro+ / 2 | crypto_ | Which public companies hold Bitcoin or Ether and how much. Params: coin. |
GET | /api/ | Pro+ / 2 | crypto_ | Which decentralised-exchange pools are trending on a chain. Params: network, include, page, duration. |
GET | /api/ | Pro+ / 2 | crypto_ | The on-chain USD price of tokens by contract address (up to 30 on one chain). Params: network, addresses, include_market_cap, mcap_fdv_fallback, include_24hr_vol, include_, include_. |
GET | /api/ | Pro+ / 2 | crypto_ | A token on a decentralised exchange: its price, liquidity, volume and top pools. Params: network, address, include. |
GET | /api/ | Pro+ / 2 | crypto_ | One decentralised-exchange pool: its prices, liquidity, volume and trades. Params: network, address, include. |
Derivatives positioning
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Free+ / 1 | crypto_ | Is a coin's perpetual market crowded? Cross-venue funding per base asset from first-party venues, each rate normalised to 8 hours from the venue's own settlement interval: the open-interest-weighted rate across verified venues (the headline), the plain mean, dispersion across venues in bps, APR, and a 30-day z-score once 60 settlements exist. symbols (string, optional): comma list of base assets such as BTC,ETH, at most 20; default is the top 20 by open interest. detail (auto, full or summary, default auto): auto keeps the response under about 15,000 characters (flat per-venue rows for one coin, compact {venue: value} maps for several); full returns every field, for one coin; summary leaves out the flat rows. |
GET | /api/ | Free+ / 1 | crypto_ | Leverage in the system: perpetual open interest per base asset in USD across the reachable venues, the total, and the dominant venue. symbols (string, optional, at most 20). detail (auto, full or summary, default auto): auto keeps the response under about 15,000 characters (flat per-venue rows for one coin, compact {venue: value} maps for several); full returns every field, for one coin; summary leaves out the flat rows. |
GET | /api/ | Free+ / 1 | crypto_ | Carry: perpetual premium (mark against index) in bps per venue and the cross-venue mean. Positive means perps trade rich to spot. symbols (string, optional, at most 20). detail (auto, full or summary, default auto): auto keeps the response under about 15,000 characters (flat per-venue rows for one coin, compact {venue: value} maps for several); full returns every field, for one coin; summary leaves out the flat rows. |
GET | /api/ | Free+ / 1 | crypto_ | The options market's view from one full-chain read: at-the-money IV at 7, 30 and 90 days, 10%-OTM put-call skew at 30 days, put/call open-interest ratio, max pain per expiry, and the 30-day implied-vol index against realised vol. symbol (string, default BTC): BTC or ETH have deep chains; other currencies report thin expiries as missing. |
Exchange events and on-chain flows
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Free+ / 1 | crypto_ | What an exchange announced and when: listings, delistings and trading-caution notices from seven venues' own announcement APIs, each with the venue's origin timestamp and how late it was seen (lag_ms). The same event on several venues is collapsed into one row that keeps the earliest origin and lists every venue. hours (integer, 1 to 168, default 24). event_type (listing, delisting, caution or other, optional). symbols (string, optional): comma list of base assets. |
GET | /api/ | Free+ / 1 | crypto_events_headlines | What is breaking on crypto-native social posts and blogs, mapped to coins, with each post's own timestamp. Every item is classified by event type and tagged tier 1 when the account is a known breaking source, tier 2 otherwise. Retweets and replies are dropped. limit (integer, 1 to 200, default 50). event_type (exploit, halt, depeg, regulatory, listing, delisting, etf, unlock, liquidation or headline, optional). symbols (string, optional). tier1_only (boolean, default false). |
GET | /api/v3/crypto/onchain/flows | Free+ / 1 | crypto_onchain_flows | Stablecoin issuance and lending liquidations read from chain logs: USDC and USDT mint and burn totals with the net supply change, and liquidation counts from the Aave v3 pool, all on Ethereum. hours (integer, 1 to 72, default 24). |
Recorded history (Pro)
The live derivatives, events and on-chain routes answer only for the present. These five read the recording Wealthnow keeps of them, one row per 15-minute cycle, newest first. Every route requires date or start (with optional end): at most 31 days per call, 7 on derivatives_venues, and a window before the recording began is a 422. Each answer carries as_of (the newest observation), gaps (stretches of more than an hour with no recording) and freshness (how old the newest row is). Like the live routes, they are data context, not a score.
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/ | Pro+ / 3 | crypto_ | How crowding or leverage built up over days: cross-venue perpetual funding, open interest and basis for one base asset per cycle. Units: funding_rate_8h is a fraction per 8 hours (funding_apr is that times 3 × 365, also a fraction), oi_usd_total and mark_px are USD, perp_premium_bps and dispersion_bps are basis points. Only rows of the current multi-venue method are served (multivenue_since); earlier rows are withheld and counted. licence_mode states the licensed tier's access in that cycle (commercial, unavailable, timeout or error). Params: symbol, date, start, end, limit, asset_class. |
GET | /api/ | Pro+ / 3 | crypto_ | Every venue row behind those aggregates, to rebuild one, audit a venue or compare venues over time: per venue and cycle, the native and 8-hour-normalised funding rate (fractions), settlement interval (hours), open interest (USD), mark, index and last price, premium (basis points), tier and source (first_party or aggregator), and whether a gate quarantined the row and why. venue filters to one venue. At most 7 days per call. Params: symbol, venue, date, start, end, limit, asset_class. |
GET | /api/ | Pro+ / 3 | crypto_ | How BTC or ETH implied vol and its term structure moved around an event, recorded since 2026-09-02: at-the-money implied vol at the expiries nearest 7, 30 and 90 days and the 90d-7d slope, the 10%-OTM put-minus-call implied-vol difference at 30 days, the put/call open-interest ratio, the 30-day implied-vol index, realised vol and their ratio. Every vol figure is annualised vol points (38.3 = 38.3%). Realised vol and the ratio are served only from realized_; earlier rows are null with the reason. Params: symbol, date, start, end, limit, asset_class. |
GET | /api/v3/crypto/history/events | Pro+ / 3 | crypto_history_events | What was listed, delisted or exploited last week, recorded since 2026-09-02: exchange announcements and the crypto headline feed (exploits, halts, depegs, regulatory, ETF, unlocks, liquidations), one row per item by publication time. Each row has its publication time (as_of_ts; when an item carried none, published_time_missing is true and as_of_ts is when it was first recorded), when it was detected and recorded, the delay (lag_ms), venue, the coins it names, title and link; headline rows carry tier 1 or 2 (1 = an account known to break events). event_type is a class, never a direction. Params: date, start, end, feed, event_type, symbol, venue, limit, asset_class. |
GET | /api/ | Pro+ / 3 | crypto_history_onchain | How stablecoin supply or liquidations trended over days, recorded since 2026-09-02, one row per metric per cycle: stablecoin_flows_24h (USDC and USDT minted and burned on Ethereum in USD, and their net) and aave_liquidations_24h (liquidations on the Aave v3 Ethereum pool, with the pool's total event count so a calm market is told apart from a dead feed). Each row covers the 24 hours ending at as_of_ts, so consecutive rows overlap: never add rows together. A reading where a mint or burn query did not answer has its totals withheld (null, with the reason). Params: metric, date, start, end, limit, asset_class. |
News, sentiment and whale flow
All routes in this table bill as news_sentiment: Starter and up, 2 credits per call.
| Method | Path | Plan / credits | MCP tool | Description |
|---|---|---|---|---|
GET | /api/v3/intel/news_ | Starter+ / 2 | intel_news_crypto | The newswire's cryptocurrency channel, live, newest first: title, teaser, url, published (UTC), channels, tags, tickers and coins; body=true adds the full HTML. tickers takes coins (BTC, ETH, SOL) or coin-stock proxies (COIN, MSTR): a major coin's symbol is read as the coin, and a symbol shared by a smaller coin and a listed stock (DASH, COMP, LIT) is read as the stock and flagged ambiguous, so send X:<COIN>USD for that coin. tickers_read_as says how each was read. date_from and date_to (UTC days, inclusive) read past windows back to 2018. An empty list is a real empty answer; a feed that did not answer is a 503. Params: tickers, limit, body, date_from, date_to, asset_class. |
GET | /api/ | Starter+ / 2 | news_crypto_summary | One call for "what is going on with BTC?": the last 24 hours of news, 7-day sentiment stats and trending headlines for one coin. |
GET | /api/v3/news_ | Starter+ / 2 | news_crypto_latest | Recent articles for one or more coins: title, source, sentiment label, date and topic tags. tickers (string, required): comma list such as BTC,ETH. items (integer, 1 to 50, default 20). date_range (today, yesterday, last7days or last30days, default today). |
GET | /api/ | Starter+ / 2 | news_crypto_ticker_only | Articles that mention only the requested coin, with no co-tagged altcoins. ticker (string, required). items (integer, 1 to 100, default 50). page (integer, 1 to 50, default 1). |
GET | /api/ | Starter+ / 2 | news_ | Articles in which every listed coin appears. tickers (string, required). items (integer, 1 to 100, default 50). page (integer, 1 to 50, default 1). |
GET | /api/ | Starter+ / 2 | news_crypto_by_category | Market-wide crypto news. section (general for overall crypto-market headlines, alltickers for cross-coin coverage; default general). items (integer, 1 to 50, default 20). date_range (string, default today). |
GET | /api/v3/news_ | Starter+ / 2 | news_crypto_trending | Trending crypto headlines, filtered down to top stories. ticker (string, optional): omit for market-wide. |
GET | /api/v3/news_ | Starter+ / 2 | news_crypto_events | Related stories clustered into discrete events. Omit every parameter for recent events. tickers (string, optional): events touching these coins. eventid (string, optional): every story in one event. page (integer, 1 to 20, default 1). |
GET | /api/v3/news_ | Starter+ / 2 | news_crypto_sundown | Evening crypto market recap, published Monday to Friday at 7pm ET. page (integer, 1 to 10, default 1). |
GET | /api/ | Starter+ / 2 | news_ | Daily sentiment rollup for one coin: positive, negative and neutral article counts and a sentiment score from -1.5 to +1.5. ticker (string, required). date_range (last7days, last30days or last60days, default last30days). |
GET | /api/ | Starter+ / 2 | news_ | Sentiment rollup across the whole crypto news feed, with no coin filter. date_range (string, default last7days). |
GET | /api/ | Starter+ / 2 | news_ | Sentiment leaderboard: every tracked coin's sentiment score over the window. date_range (string, default last7days). page (integer, 1 to 20, default 1). |
GET | /api/ | Starter+ / 2 | news_ | The 50 most-mentioned coins over the window, an attention measure. date_range (string, default last7days). |
GET | /api/ | Starter+ / 2 | news_ | Delayed prices (up to 15 minutes) with 24h volume and price changes. tickers (string, optional): one coin, a comma list, or omit for the top 50 by 24h volume. For a live price, use /api/crypto/{ticker}. |
GET | /api/ | Starter+ / 2 | news_ | Large transactions on the BTC, ETH, SOL and TRX networks plus major exchanges, updated about every 5 minutes. tickers (string, optional). date_range (string, default last24hours; also last1hour, last7days, last30days or MMDDYYYY-MMDDYYYY). min_amount (integer, USD, optional). items (integer, 1 to 100, default 50). page (integer, 1 to 20, default 1). |
GET | /api/ | Starter+ / 2 | news_ | Is large money moving onto or off exchanges? Total whale volume, net exchange flow (in against out) and the biggest single transaction over the window. tickers (string, optional). date_range (string, default last7days). |
A coin filter a news_crypto route does not take is refused, not dropped: a non-blank ticker, tickers, symbol, symbols, sector, sectors, industry, topic or topics that the route does not declare answers 422 with error: "unsupported_, not billed, and detail names the crypto parameter or route to use (for example news_, or news_ for articles about one coin alone). news_crypto/latest takes tickers, not ticker. Market-wide routes such as by_category, market_sentiment and top_mentions take no coin filter at all.
Reading the responses
Quotes
/api/crypto/{ticker} returns pair (the normalised X:<BASE><QUOTE> form), a quote block, day and prev_day OHLC bars with vwap, the last_trade, and series_daily when series=true.
quote.change_24handquote.change_pct_24hcompare the price with the previous UTC day's close (change_), not a rolling 24 hours.basis: "vs_ prev_ utc_ day_ close" quote.volume_24his the volume of the current UTC day so far (volume_basis: "utc_day"), the same figure asday.volume. Until the new UTC day's bar has data, just after midnight UTC, it is the previous UTC day's full volume instead:volume_basisisprev_utc_dayanddayisnull.quote.market_capis alwaysnull: the feed carries no supply data.as_ofandquote.as_of_tsare the feed's observation time.last_trade.tsis the time of the last print.
Universe
/api/crypto/universe reports the size of the book it ranked alongside the rows: priced (pairs the feed priced), excluded_quote, excluded_stable, below_floor, and liquid (pairs above the floor). Each row in universe has symbol, pair, price, dollar_volume_24h, change_pct_24h and rank. Ranks are assigned on the whole liquid book, so a page that starts at offset=50 begins at rank 51. Walk the book with has_more and next_offset.
This is a liquidity ranking: it tells you which pairs trade enough to be tradeable, not which will move.
Market data
Every /api/v3/crypto/market/* answer wraps its payload in the same fields:
okandtool, the tool that answered (for exampletengu_).v3_ crypto_ market_ profile source, always"market-data:crypto".as_ofandfetched_at: when the data was read from the source, in UTC.age_sis its age in seconds, andmax_age_s(86400) is the oldest it can be.cache:hit(a stored copy still fresh for this route),miss(read on this call) orstale.stale: truemeans the source could not be read and a copy under 24 hours old was served in its place.units: what each number indatais measured in. On the chart routes, for example,pricesare[timestamp ms epoch UTC, price in vs_.currency] data: the route's payload.parts, on an answer built from more than one read: each read'sfetched_at,age_s,staleandcache.as_ofis then the oldest read,age_sthe largest, andstaleistrueif any read was.
Reading the payloads:
- One coin, by symbol or id. The coin routes take
symbol(BTC) orid(bitcoin), exactly one of them: neither is422 missing_param, both is422 invalid_param. When several coins share a symbol, the one with the best market-cap rank is used. The answer names it incoin(id,name,symbol) and shows the choice insymbol_resolution:chosen_id, thebasis, up to 10candidateswith theirmarket_cap_rank, andcandidates_total. To get a different coin, pass itsid. - Several coins.
profile(up to 50 coins) andprice(up to 50 symbols or 250 ids) takesymbolsandidslists, andsymbol_resolutionis keyed by symbol.profilereturnsdata.coinsanddata.not_found. Each coin has its price, market cap and rank, fully diluted valuation, volume, circulating, total and max supply, all-time high and low with their dates, andprice_tochange_ percentage_ 1h price_.change_ percentage_ 1y pricereturnsdatakeyed by coin id, besidecoins(what each requested symbol or id resolved to, withpriced: falsewhere no price came back) andnot_found. Either call is404 coin_not_foundonly when none of the coins matched. - History.
historyreturns one row per UTC day indata.rows:date,t_ms,close,market_capandvolume_24h, with the window'sfromandtoin unix seconds.days=maxreaches back to the coin's first day.on_dateanswers for one past day (from 2009-01-03 to today), andchart/rangetakesfromandtoin unix seconds,fromfirst. - Ids. Ids are lowercase: coins (
bitcoin), exchanges (binance), derivatives exchanges (binance_futures) and categories (fromcategories/list). The on-chain routes name a chain by network id (eth,solana,base);contractnames it by platform id (ethereum,binance-smart-chain), whichasset_platformslists. - Errors. An unknown parameter is
422 unknown_param, with the route's parameters inaccepted. A malformed value is422 invalid_param. An id that is malformed or unknown is404with a typed code:coin_not_found,exchange_not_found,platform_not_found,category_not_found,network_not_foundoraddress_not_found. When the source cannot answer, the route returns503witherror: "upstream_, aunavailable" Retry-Afterheader and anerror_code:vendor_unavailable,rate_limited,budget_exhausted(today's allowance for all API customers is used up; it resets at 00:00 UTC),key_budget_exhausted(this key's share of that allowance is used up) ornot_enabled. Answers already cached are still served meanwhile. No refusal is billed.
Derivatives, events and on-chain
These routes share one envelope: kind, purpose: "data_context", not_a_score, not_a_forecast, asset_class, as_of, status, rows, count and a sources block that states each venue's status.
- Missing is typed, never zero. A symbol or venue with no data comes back with
status: "missing"and areason. A venue that cannot be reached from the API's region is reported asgeo_blocked, and a venue in back-off ascircuit_open. - Freshness. Funding, open interest and basis responses carry
freshness_secondsandstale_after_seconds(600), andstatusisstalewhen the newest row is older than that. Every venue row carries its ownas_of. - Funding. Each row has
funding_rate_8hwithfunding_rate_basis,funding_apr(the 8-hour rate × 3 × 365),oi_weighted_rate_8h,mean_rate_8h_verified,dispersion_bps,funding_z_30dwithfunding_z_status,coverageand avenuesmap. The venues are first-party: OKX, Deribit, Kraken, dYdX, Bitget, Gate and Coinbase International, each markedtier: "verified"insources.funding_rate_8his the open-interest-weighted rate across verified venues (funding_), or their median when a verified venue has no open interest; the plain mean israte_ basis: "oi_ weighted_ verified" mean_rate_8h_verified. Binance and Bybit reportstatus: "geo_blocked": their APIs are blocked from the API's region, and Wealthnow never reaches them another way. Deribit reportsnot_applicablewhen a request names neither BTC nor ETH, the only perpetuals it lists. The aggregator tier reportsunavailablewhile no licensed key is configured; fields ending_alladd aggregator rows that passed its quality gates. - Open interest. Each row has
oi_usd_total, per-venueoi_usd,n_venuesanddominant_venue. USD is the only unit summed across venues; contract counts are never served. - Basis. Each row has
perp_premium_bps(the cross-venue mean) and per-venuepremium_bps. - Vol surface. The single row has
spot, atermlist (per expiry:expiry,days,n_strikes,atm_iv,pc_oi_ratio,max_pain),atm_iv_7d,atm_iv_30d,atm_iv_90d,term_slope_90d_7d,skew_10pct_30d,pc_oi_ratio_total, anddvol,realized_volandvol_risk_premiumblocks. IV is in vol points (38.3 means 38.3%). The skew is a moneyness proxy, labelled as such inskew_method, not a delta-space skew. An expiry with fewer than 6 strikes is typed missing.vol_below 1 means the market is pricing less movement than it is realising.risk_ premium.iv_ rv_ ratio realized_volends at the last completed hour: the venue stamps the hour in progress with its end time, and that partial point is never served.vol_risk_premiumcarriesiv_as_ofandrv_as_of, the time of each leg, because the two come from different series and a premium is only as current as its older leg. - Announcements and headlines. Each row has
event_type,symbols,title,url,origin_ts(the venue's or post's own time),detected_tsandlag_ms. Announcement rows addvenuesandn_venues; headline rows addhandleandtier. The event type is a classification, never a direction. - On-chain flows.
rowsholds one block per metric.stablecoin_flowshasmint_usd,burn_usd,net_usd,net_statusand aper_eventbreakdown.net_usdisnullwithnet_status: "partial"unless every mint and burn query answered, because one failed leg would otherwise report a large false contraction.aave_liquidationshasliquidationsbesidepool_logsandfeed_live, so a quiet market (zero liquidations, live pool) can be told apart from a dead feed. Until 2026-09-25 this route answered503witherror_on every call, because the server could not compute the event hashes it filters the chain logs by; it now computes them itself and answers.code: "crypto_ onchain_ unavailable"
News and sentiment
The news routes wrap the news vendor's records: items holds article lists, stats the per-coin and leaderboard sentiment rollups, and market, mentions, digest, prices and summary the market sentiment, top mentions, sundown, ticker price and whale summary payloads. summary/{ticker} returns recent_news, sentiment_stats, trending and news_count_24h. Treat the per-article sentiment label as unverified. When the response includes a sentiment_label_policy note, the label is served as vendor_ and should not be used as a signal. For what an exchange or the chain actually did, use the events and on-chain routes above. When the crypto news feed fails and returns nothing, the news_crypto routes answer 503 with error: "upstream_, not billed, instead of a 200 with an empty list: error_code names the failure (for example upstream_, or upstream_not_configured when no feed is configured), upstream_error summarises it, and Retry-After says when to retry. The body has no data field. A feed that answered with nothing is still a 200, and a partial failure keeps its rows beside a vendor_error block. When the feed is out of quota and states when its quota resets, upstream_error adds quota_resets_at (UTC) and quota_resets_at_basis, and the body adds retry_: Retry-After is when Wealthnow next checks the feed, not when the quota returns.
Examples
Quote Bitcoin (1 credit)
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/crypto/BTC?series=false"Live response captured 2026-09-23, abbreviated:
{ "ok": true, "timestamp": "2026-09-23T05:00:17.284033+00:00", "ticker": "BTC", "pair": "X:BTCUSD", "vs": "USD", "quote": { "price": 87125.0, "as_of_ts": "2026-09-23T05:00:00+00:00", "change_pct_24h": 1.075372354711037, "change_24h": 926.9499999999971, "change_basis": "vs_prev_utc_day_close", "volume_24h": 2006.02328534, "volume_basis": "utc_day", "market_cap": null }, "day": { "open": 86201.35, "high": 87379.7, "low": 86108, "close": 87159.93, "volume": 2006.02328534, "vwap": 86697.8829 }, "prev_day": { "open": 86594.94, "high": 86752, "low": 85059.28, "close": 86198.05, "volume": 16565.86870454, "vwap": 86060.7417 }, "last_trade": { "price": 87125, "size": 3e-08, "exchange": 1, "ts": "2026-09-23T05:00:17.057000+00:00" }, "source": "vendor:market-data", "as_of": "2026-09-23T05:00:00+00:00"}import os, requests r = requests.get( "https://firm.wealthnow.io/api/crypto/BTC", params={"vs": "USD", "series": True}, headers={"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"}, timeout=30,)r.raise_for_status()data = r.json()quote = data["quote"]print(f"{data['pair']}: {quote['price']:,.2f} ({quote['change_pct_24h']:+.2f}% vs prior UTC close)")bars = data.get("series_daily") or []if bars: print(f"Lowest low in the last {len(bars)} daily bars: {min(b['low'] for b in bars):,.2f}")Is the BTC perp market crowded? (1 credit)
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/crypto/derivatives/funding?symbols=BTC,ETH"Live response captured 2026-09-26, abbreviated to one symbol, two venues and three sources. With several symbols and the default detail=auto, venues is a compact {venue: rate_8h} map, and detail reports the level auto resolved to:
{ "ok": true, "kind": "crypto_derivatives_funding", "purpose": "data_context", "not_a_score": true, "not_a_forecast": true, "asset_class": "crypto", "as_of": "2026-09-26T23:17:23.517000+00:00", "stale_after_seconds": 600.0, "status": "ok", "rows": [ { "symbol": "BTC", "funding_rate_8h": 1.1619e-06, "funding_rate_basis": "oi_weighted_verified", "funding_apr": 0.001272, "oi_weighted_rate_8h": 1.1619e-06, "mean_rate_8h_verified": 5.0381e-06, "dispersion_bps": 0.63, "funding_z_30d": -1.97, "funding_z_status": "ok", "venues": { "okx": -8.305e-06, "deribit": 1.21e-06 }, "n_venues": 7, "status": "ok" } ], "count": 2, "count_ok": 2, "sources": { "okx": { "status": "ok", "tier": "verified" }, "binance": { "status": "geo_blocked", "reason": "venue API is geo-blocked from the serving host; FIRM never routes around it", "funding": "unavailable", "oi": "unavailable" }, "coingecko": { "status": "unavailable", "tier": "aggregator", "mode": "disabled", "reason": "no licensed key" } }, "units": { "funding_rate_8h": "fraction per 8h, venue-interval normalised; headline = OI-weighted over VERIFIED (first-party) venues (funding_rate_basis names it)", "funding_apr": "fraction, rate_8h×3×365", "dispersion_bps": "(max−min venue rate_8h) × 1e4" }, "detail": "summary", "shape": "compact"}import os, requests r = requests.get( "https://firm.wealthnow.io/api/v3/crypto/derivatives/funding", params={"symbols": "BTC,ETH,SOL"}, headers={"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"}, timeout=30,)r.raise_for_status()for row in r.json()["rows"]: if row.get("status") != "ok": print(f"{row['symbol']}: {row.get('reason', 'missing')}") continue z = row["funding_z_30d"] if row.get("funding_z_status") == "ok" else None print(f"{row['symbol']}: {row['funding_apr']:.1%} APR across {row['n_venues']} venues, 30d z = {z}")What listed in the last 24 hours? (1 credit)
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/crypto/events/announcements?hours=24&event_type=listing"Read origin_ts for when the venue published and lag_ms for how late the API saw it. Check sources before concluding nothing was listed: a venue marked geo_blocked or missing did not answer.
Is stablecoin supply expanding? (1 credit)
import os, requests r = requests.get( "https://firm.wealthnow.io/api/v3/crypto/onchain/flows", params={"hours": 24}, headers={"Authorization": f"Bearer {os.environ['WEALTHNOW_API_KEY']}"}, timeout=30,)r.raise_for_status()blocks = {row["metric"]: row for row in r.json()["rows"]}flows = blocks.get("stablecoin_flows")if flows and flows.get("net_status") == "ok": print(f"Net stablecoin supply change: ${flows['net_usd']:,.0f}")else: print("Net supply withheld: not every mint and burn query answered.")liq = blocks.get("aave_liquidations")if liq: print(f"Liquidations: {liq['liquidations']} (pool logs: {liq['pool_logs']}, feed live: {liq['feed_live']})")Crypto news for one coin (2 credits, Starter and up)
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \ "https://firm.wealthnow.io/api/v3/news_crypto/summary/ETH"