Changelog
Changes to the Sharpe API and the MCP server, each dated by the UTC day it went live: the production deploy, or the npm publish for a package release. The log starts on 2026-09-23; earlier changes are not listed. The same entries are in the RSS feed.
Versioning explains which changes count as breaking and how removals are announced.
November 2026
Listing events: official overlays come from an hourly capture
changed
/v1/listings/events and /v1/listings/recent now serve the official exchange overlays (venue instrument lists and announcement feeds) from a copy captured every hour at :11 UTC, instead of fetching the venues from the serving instance (which cached them for an hour). A copy older than 2 hours is never served: the request then fetches the venues itself. provider_coverage reports each overlay provider's status at capture, so a venue whose fetch failed reads error until the next capture.
- The
partial_reasonsdescription now gives the hourly spot-listings ingest's staleness bound as 2 hours, the bound the API applies; it said 3.
Affects: /api/v1/listings/events, /api/v1/listings/recent
MCP: a series cut to fit the context window keeps its newest rows
fixed
When an MCP tool's answer is cut to fit the agent's context window, an oldest-first series now keeps its newest rows. Series timed by at, t, time, bucket_date or bucketDate, and [time, value] pairs, kept their oldest rows instead: get_arbitrage_funding_spread_history answered the first month of a 90-day series, get_memecoins the oldest points of a year of coinPriceHistory. Such a cut now reads kept: "latest" in meta.truncated_fields.
- Also fixed: the
get_stablecoinshistories,get_exchange_listingsweeklyandmonthly, theget_global_overviewsparklines, and theget_narratives,get_ecosystemsandget_memecoinssparklines and series. Rows timed bysnapshot_at,settled_atortimestampalready kept their newest rows. - The hosted server (
/api/mcp) has served the fix since 2026-11-02; the npm package is 2.3.5.
Migration: npm users: update to @sharpe-terminal/mcp-server@2.3.5.
Affects: @sharpe-terminal/mcp-server, /api/mcp
October 2026
Fixed vs floating funding: rows serve the edge they are ranked by
changed
Fixed vs floating funding: rows serve the executable edge they are ranked by (edge7dApr, edge30dApr, edge30dSide) and Boros's taker and settlement fees (takerFeeApr, settleFeeApr); ranking is now by netEdge30dApr, the 30-day edge net of Boros fees. spread7dApr and spread30dApr stay gross valuations at the mark.
Affects: /api/v1/arbitrage/fixed-floating-funding, /api/arbitrage/fixed-floating-funding, @sharpe-terminal/mcp-server
Perp-dated carry: the funding7dStabilityPct alias is gone
removed
funding7dStabilityPct is no longer served on perp-dated carry rows. It equalled funding7dCumulativePct (the 7-day sum of funding) and was never a stability measure; it had been deprecated since 2026-09-30.
Migration: Read funding7dCumulativePct: same value.
Affects: /api/v1/arbitrage/perp-dated-carry, /api/arbitrage/perp-dated-carry, @sharpe-terminal/mcp-server
Funding spread history: a sold spot leg's borrow is charged
changed
A spot-perp direction=long backtest (sell spot, long the perp) now charges the venue's current spot-margin borrow APR pro rata, the same APR the spot-perp board nets: netReturn less borrowApr × coveredDays / 365, netApr less borrowApr, and breakEvenDays net of the borrow (null unless that is positive). grossApr stays funding only.
- New field
borrowApr(fraction a year, null when none is charged);borrowCostIncludedis true when it is charged. Binance, OKX, Bybit and Gate.io publish a rate; elsewhere, for a coin the venue does not price, or when the read fails, the borrow is left out and a warning says why. - Stored history keeps no borrow rates, so every window is charged today's rate.
Migration: A caller that subtracted borrow itself from a long backtest should stop when borrowCostIncluded is true.
Affects: /api/v1/arbitrage/funding-spread-history, /api/arbitrage/funding-spread-history, @sharpe-terminal/mcp-server
Cross-exchange leg settlements and borrow limits
added
Cross-exchange rows add longNextSettlement and shortNextSettlement, each leg's own next funding time (nextSettlement stays the sooner one), so the slower leg's print on a 4h/8h pair is visible. Borrow-rate quotes add limit ({ amount, unit: "coin" | "usd" }, null when the venue publishes none), the per-account borrow limit at the venue's entry tier.
Affects: /api/v1/arbitrage/cross-exchange, /api/arbitrage/cross-exchange, /api/v1/arbitrage/borrow-rates, /api/arbitrage/borrow-rates, @sharpe-terminal/mcp-server
Mindshare is watchlist users only; delta24h is always null
changed
mindsharePct is each narrative's share of CoinGecko watchlist users (formula v3); the up-vote term is gone, and sentimentPct is shown but no longer weighted. delta24h is now always null: per-coin watchlist counts are cached 5 to 8 days, so a 24-hour change measured which coins refetched.
delta7danddelta30dare re-measured on formula v3 and never compare across 2026-10-19, when the narratives' coin lists changed, sodelta30disnulluntil 2026-11-18.- A coin with no watchlist count is left out of its narrative and of
tokenCount; it was scored as 0 users.
Migration: Sort or filter on delta7d (or delta30d from 2026-11-18) instead of delta24h, which no longer carries a value.
Affects: /api/v1/mindshare/data, /api/mindshare/data, @sharpe-terminal/mcp-server
Rug Check serves the holders row and caps copycat and partial scores
changed
checks[] now includes the Top-10 holders row under a new pillar value, holders, between the contract rows and the health rows. A token that copies a major's ticker from another contract gets a Copycat danger row and a score capped at 49; a partial score is capped at 69.
data_completenessnone(and anullscore) now means no pillar had a scorable figure; it meant no provider answered. A holder count alone scores nothing.- The holder pillar reads GoPlus's live top-holder list without the token's own pools and burn addresses, and GeckoTerminal's snapshot only when GoPlus has none.
Migration: Accept holders as a checks[].pillar value; a parser that allows only contract and health rejects every answer that carries the holders row.
Affects: /api/v1/rug-check/security, /api/rug-check/security, @sharpe-terminal/mcp-server
Funding averages count Deribit's trailing 8h rate as stale
changed
In the summary aggregate, funding_avg_8h and funding_median_8h leave out a trailing_8h rate (Deribit: funding already realised over the last 8 hours) while any venue has a current rate, and funding_venues_stale counts it. It is used only when no venue is fresh, flagged by funding_all_stale. The market-wide means follow the same rule: funding_apr_mean on stats=1 and avg_funding_rate on /v1/market/derivatives-overview.
Affects: /api/v1/funding/rates, /api/funding/rates, /api/v1/market/derivatives-overview, @sharpe-terminal/mcp-server
Futures open interest sums every contract a venue holds through the window
changed
A venue's open interest on the futures routes is now the sum of the perpetual contracts it holds throughout the requested window (Binance USDT and coin-margined, OKX USDT and USD swaps, Deribit BTC and USDC perps, Bybit linear and inverse); it was one contract per venue and hour. BTC at 2026-10-31 05:00Z reads $30.26B, from $27.47B, as /global does; /global also counts a contract listed, or missing an hour, inside the window.
- Applies to the
oi-*charts,summary.oi_total_usdand get_futures_data. The payload shape is unchanged. - On the history charts (
oi-stacked,oi-change,oi-daily-change) a contract first stored inside the window is left out of the whole window, so a venue's series never steps on coverage: 3M and longer windows still read the USDT books alone. oi-snapshotandsummary.oi_total_usdread the last 24 hours on every timeframe, so they count the contracts a venue held through those 24 hours, whatever window is requested (a contract new or gapped inside the day is in /global only); /api/v1/futures/data pages those 24 hours' rows forchart=oi-snapshot.
Affects: /api/v1/futures/data, /api/futures/data, @sharpe-terminal/mcp-server
Price prediction: matched-contract OI, OI-weighted funding and an 80% range
changed
Three served values on the price prediction routes changed meaning or size.
- The
oisignal is the 24-hour open-interest change over matched contracts, each (exchange, symbol) paired with its own reading 24 hours earlier, as /global and the heatmap compute it. BTC moved from -10.3% to about -0.4% on the 2026-10-30 book. - The
fundingsignal is the coin's OI-weightedfunding.asset_avg_8h, the funding grid's Avg Rate, not the equal-weight mean of every fresh venue. forecasts[].lowPriceandhighPriceare an 80% range: the 10th and 90th percentiles of a lognormal centred onexpectedPriceat the coin's 30-day realized volatility. It is wider than before.
Affects: /api/v1/price-prediction/data, /api/price-prediction/data, @sharpe-terminal/mcp-server
Stablecoin peg deviation is signed
changed
pegDeviationPct on /api/v1/stablecoins/data (and get_stablecoins) is now negative below the peg and positive above it; it was the unsigned distance.
Migration: Filter depegs on the absolute value (abs(pegDeviationPct) >= 1); a filter on pegDeviationPct >= 1 now misses every below-peg depeg.
Affects: /api/v1/stablecoins/data, @sharpe-terminal/mcp-server
Gem finder's chain filter matches the home chain only
changed
chain keeps only assets whose home chain (chainSlug) is that chain; it matched every chain an asset is bridged to, so bridged copies of Chainlink, Ethena and Aave topped chain=solana.
Migration: To find assets deployed on a chain they are not native to, read chainSlugs without a chain filter.
Affects: /api/v1/gem-finder/data, /api/gem-finder/data, @sharpe-terminal/mcp-server
Memecoin launches mark PumpSwap migrations and copycat tickers
changed
migrationState can now be migrated (a pump.fun mint, address ending in pump, trading on PumpSwap), and launchedAt is null for those rows because their first pool is the migration, not the mint. A new copycat_ticker risk flag marks a launchpad token under a major's ticker.
Affects: /api/v1/memecoins/launches, /api/memecoins/launches, @sharpe-terminal/mcp-server
Insider Selling and Pump & Dump: full coverage means every signal group
changed
signal_coverage_status is full only when no signal group is incomplete (it was full from 80% coverage), partial from 50%, otherwise limited. A contract with under 50 holders or a best pool under $1,000 no longer feeds the on-chain features.
Affects: /api/v1/insider-selling/data, /api/insider-selling/data, /api/v1/pump-dump/data, /api/pump-dump/data, @sharpe-terminal/mcp-server
The Python MCP server and the sharpe CLI are retired
removed
The sharpe-terminal-mcp Python package, which held a Python build of the MCP server and the sharpe CLI, is retired before its first PyPI release. The MCP server stays: the npm package @sharpe-terminal/mcp-server and the hosted endpoint https://www.sharpe.ai/api/mcp serve the same tools.
/v1/meta/coverageno longer listscli_commandsfor each product, and the coveragetestslists dropcli.- /docs/cli now redirects to /docs/mcp-server, and /products/cli to /products/mcp-server.
Migration: Use the MCP server (npx -y @sharpe-terminal/mcp-server, or the hosted endpoint) or the REST API in place of the CLI, and stop reading cli_commands from the coverage response.
Affects: /api/v1/meta/coverage, @sharpe-terminal/mcp-server
Long narrative and ecosystem histories are thinned past the newest 30 days
changed
On the free narratives and ecosystems routes, a history window longer than 1M (historical=3M, 6M, YTD, 1Y or 3Y) keeps every hourly snapshot row of its newest 30 days and, before that, each narrative's or ecosystem's last row of every UTC 4-hour bucket at 3M and of every UTC day at 6M and longer. A 6M answer is about 5 MB instead of 26 MB, small enough for the CDN to cache.
- A kept row is served unchanged: no value is averaged, interpolated or moved. The terminal draws these ranges in the same buckets, so its charts are unchanged.
- Windows of 1M and shorter (MTD included) and the compact
seriesthatchart=metrics answer are unchanged.
Migration: A client that read hourly rows older than 30 days from a long window now gets one row per bucket there: read each row's snapshot_at instead of assuming an hourly step.
Affects: /api/narratives/data, /api/ecosystems/data
Sharpe no longer covers nine venues: funding now spans 35, RWA perps 13
removed
Sharpe stopped collecting and serving dYdX, Orderly, Kinetiq, Paragon, Coinbase Derivatives, QFEX and EntropyIO in the funding book, and Kinetiq, Paragon, Orderly, Ostium and Avantis on the RWA perps board. The venues still trade; Sharpe chose to stop covering them. Funding covers 35 venues and RWA perps 13.
?exchange=on the funding routes no longer accepts the seven funding venues: a call naming one answers 400 with the list of valid venues, as for any unknown venue.venue=on the RWA perps routes does the same for the five RWA venues.- Their current rows leave every board, total and venue list (funding rates, settlement, accumulated windows, cross-exchange arbitrage, RWA perps). Settlements Sharpe recorded before the change stay stored, and each funding venue's
/funding-rates/exchange/<venue>page now shows that recorded history read-only. - The MCP resource
sharpe://exchangeslists the 35 funding venues. The npm package is 2.3.2.
Migration: Drop the nine venues from any exchange or venue filter you send: those calls now answer 400.
Affects: /api/v1/funding/rates, /api/funding/rates, /api/v1/funding/settlement, /api/funding/settlement, /api/v1/rwa-perps/rates, /api/rwa-perps/rates, /api/v1/arbitrage/cross-exchange, /api/arbitrage/cross-exchange
Funding spread history: estimated legs on LBank and Variational are final
changed
LBank and Variational publish no settlement record, so the settlement Sharpe detects from their live rate is the only one there will be. Their legs still read estimated: true, and the field now says when such an estimate is final rather than awaiting the venue's record.
- Stored settlements on these two venues are labelled
estimateinstead ofinferred; nothing in a response changes shape or value. The npm package is 2.3.1.
Affects: /api/v1/arbitrage/funding-spread-history, /api/arbitrage/funding-spread-history
Nine keyless /api routes retired; the keyed /api/v1 twins stay
removed
Nine free routes that no page of the site called are gone. A call to an old path answers 401 and names the keyed path to use with an API key. Eight have a keyed twin under /api/v1 with the same data; the coin-list route had none.
/api/briefing,/api/opportunities,/api/coins/{coin}/analysis,/api/listings/data,/api/listings/events,/api/listings/exchanges,/api/listings/recentand/api/tracker/market-overviewmoved to their/api/v1twins./api/tracker/coins/{categoryId}was retired without a replacement.- The MCP tools
get_market_overview,get_exchange_listings,get_listing_events,get_listing_exchanges,get_recent_listings,analyze_coin,market_briefingandfind_opportunities, and the matching CLI commands, now needSHARPE_API_KEY. Without one they answer with the API's 401 and a hint. The npm package is 2.3.0.
Migration: Send your API key (Authorization: Bearer <key>) to the /api/v1 path named in the 401 message. Older MCP packages show the same 401 as a "needs an API key" error; update to 2.3.0.
Affects: /api/v1/briefing, /api/v1/opportunities, /api/v1/coins/{coin}/analysis, /api/v1/listings/data, /api/v1/listings/events, /api/v1/listings/exchanges, /api/v1/listings/recent, /api/v1/tracker/market-overview
Tracker, narrative, ecosystem, memecoin and heatmap data refresh less often
changed
Five datasets refresh on a slower schedule and their staleness windows moved with them. Payload shapes are unchanged; meta.stale_after and x-freshness-sla-seconds carry the new values.
- Sector and chain aggregates (
/api/v1/tracker/market-overview): every 3 hours (was hourly), stale after 6 hours. Category and chain coin lists refresh daily and go stale after 2 days (were every 6 hours, stale after 12 hours). - Narratives and ecosystems (
/api/v1/narratives/data,/api/v1/ecosystems/data): every 4 hours (was 2), stale after 8 hours. - Memecoins (
/api/v1/memecoins/data): every 6 hours (was 2), stale after 12 hours. The 24H and 7D charts keep their hourly resolution; the 1M chart and per-coin price history are 6 hours apart. - Heatmap and scatter (
/api/v1/heatmap/data): every 3 hours (was 2), stale after 6 hours.
Migration: Nothing to change. A client that polls faster than these cadences gets the same rows until the next refresh: read meta.stale_after instead of a fixed interval.
Affects: /api/v1/tracker/market-overview, /api/v1/narratives/data, /api/v1/ecosystems/data, /api/v1/memecoins/data, /api/v1/heatmap/data
Funding: accumulated windows are stale after 30 minutes
changed
The 7-day, 30-day, 90-day and 1-year funding windows are now rebuilt every 15 minutes, so their freshness target is 1,800 seconds (was 3,600, and 2,700 in the served headers). Answers are cached for up to 5 minutes (was 10).
type=accumulatedon/api/v1/funding/ratesand/api/funding/ratesreportsfreshness_sla_secondsandx-freshness-sla-seconds1800, and marks a window older than that stale.- The arbitrage boards judge their 7-day funding sums against the same 1,800 seconds; past it the realised figures are null, as before.
Migration: Nothing to change if you read meta.stale_after. A client that hard-coded 3,600 or 2,700 seconds should use 1,800.
Affects: /api/v1/funding/rates, /api/funding/rates, /api/v1/analytics/query, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
News: article summaries are no longer served
changed
News items carry the headline, link, source and time only. Publishers' terms bar reusing their article text, so Sharpe no longer stores or serves the excerpt their feeds include.
summarystays in every news item, alwaysnull, so clients that read it keep working./news/feed.xmlitems carry the title, link, source and date, with no description, author or category.
Migration: Nothing to change for the JSON feeds. For an excerpt, follow the item's link to the publisher.
Affects: /api/v1/news/feed, /api/news/feed, /news/feed.xml, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Liquidations: OKX is no longer served
removed
Every liquidation figure now leaves OKX out. The only OKX source was Velo's series, which files orders by when they arrived rather than when they happened, misses most of a cascade and counts some coins twice, so it is not OKX's total. The stored rows are kept.
chart=liquidationsreturns Binance, Bybit and Deribit rows only.exchanges=OKXis refused with 400 on/api/futures/dataand dropped on/api/v1/futures/data, which answers 400 when no venue is left./v1/global/overviewsumsliquidations24hUsd(the headline and each coin),liquidationsLongUsd,liquidationsShortUsd,liquidationsChange24hPctandliquidationsSparklineover Binance, Bybit and Deribit. On 2026-10-22 OKX was about 15% of the 24-hour headline.- The liquidation bias behind price prediction and pump-dump scores leaves OKX out too.
Migration: Nothing replaces OKX liquidations: no public OKX feed carries the total. Drop OKX from an exchanges filter on chart=liquidations, and do not compare an older OKX figure with today's.
Affects: /api/v1/futures/data, /api/futures/data, /api/v1/global/overview, /api/global/overview, /api/v1/price-prediction/data, /api/v1/pump-dump/data, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Heatmap: category RSI when its members hold half the market cap
changed
A narrative or ecosystem tile's rsi is now also published when the members that have an RSI hold at least half the category's market cap, as well as when 5 or more members have one. Ecosystem tiles with an RSI went from 3 of 19 to 14 of 19.
- Ecosystems count only their home-chain coins, and few chains have 5 coins with perp candles: the Bitcoin ecosystem's RSI was null although BTC carries almost all of its market cap. It is now BTC's RSI, the median of the members that have one.
Affects: /api/v1/heatmap/data, /api/heatmap/data, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
DEX Arbitrage Scanner removed
removed
The DEX Arbitrage Scanner is retired from every surface: its page, its docs page, its v1 preview endpoint and its free preview and saved-scanner endpoints. No MCP tool or CLI command ever served it.
/api/v1/arbitrage/dex-scanner/previewanswers 404 to a keyed request (401 without a key, like every v1 path). The free routes/api/arbitrage/dex-scanner/preview,/api/arbitrage/dex-scanner/scanners,/scanners/{id},/scanners/{id}/preview,/scanners/{id}/runsand/scanners/{id}/test-alertare removed; they needed a signed-in session. Saved scanners are no longer served./arbitrage/dex-scannerredirects to/arbitrageand/docs/arbitrage-dex-scannerto/docs/arbitrage-cex-spot-transfer./api/v1/meta/coverageno longer lists thedex-scanner-arbitrageproduct, anddex_poolsis no longer adataset_idin response metadata.
Migration: Nothing replaces the GeckoTerminal pool comparison. For spot routes between exchanges use /api/v1/arbitrage/cex-spot-transfer (get_arbitrage_cex_spot_transfer, sharpe arb spot-transfer).
Affects: /api/v1/arbitrage/dex-scanner/preview, /api/arbitrage/dex-scanner/preview, /api/arbitrage/dex-scanner/scanners, /api/arbitrage/dex-scanner/scanners/{id}, /api/arbitrage/dex-scanner/scanners/{id}/preview, /api/arbitrage/dex-scanner/scanners/{id}/runs, /api/arbitrage/dex-scanner/scanners/{id}/test-alert
Heatmap: Top N universes, exclusions, funding, RSI and basket tiles
changed
The heatmap adds top10 to top50 universes, the ex param, 1h and 4h price changes, funding APR, RSI(14) and per-metric times; narrative and ecosystem tiles are now weighted baskets of every eligible member.
categorytakestop10,top20,top30andtop50, the new default; the legacytop-100stays an alias oftop50and answers the same coins.extakes comma-separated CoinGecko coin ids to leave out in every mode: coins mode drops them after the Top N cut without refilling, and the aggregate modes rebuild every tile without them.- New optional fields:
kind,y.1h,y.4h,fundingApr,fundingMethod,fundingVenuesUsedandrsion every dot;medianandconstituentson tiles;as_of,eligible,excluded,omittedandcoverage.emptyCategorieson the body. The new fields are rounded (percent and RVOL to 2 dp, RSI to 1 dp,weightCoverageto 3 dp,largest.marketCapShareto 4 dp). Every existing field keeps its name, nullability and full precision, andy.3ystays (always null). - Only eligible coins count, in every mode: market cap at least $1M, plausible 24h volume at least $100K, CoinGecko data under 48 hours old, and no stablecoins, wrapped, bridged or staked copies, LP tokens, tokenized metals, funds, stocks, ETFs or pre-IPO tokens. An ecosystem's coins are the coins whose home chain it is.
get_heatmapandsharpe heatmap(new--ex) take the same parameters.
Migration: A tile's numbers changed meaning: it is now the basket of every eligible member (cap-weighted price change, OI-weighted funding, summed OI and volume ratios), where it was the median of the 50 largest; the median member moved to median. openInterestChange24h is a change in USD value, so it moves with price as well as positioning.
Affects: /api/v1/heatmap/data, /api/heatmap/data, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Narratives and ecosystems count only eligible coins
changed
Narrative and ecosystem constituents, and every aggregate, coin count and coin list built from them, now cover only eligible coins: market cap at least $1M, plausible 24h volume at least $100K, CoinGecko data under 48 hours old, and no stablecoins, wrapped, bridged or staked copies, or tokenized assets.
- The Stablecoins narrative keeps its stablecoins; the other conditions still apply to it.
- Ecosystems report
marketCapMethod: eligible-home-chain-constituents; rows kept from an earlier sync repeat their old method. - Market caps and coin counts step down once, on the first sync after the change (an ecosystem such as TON goes from about 157 coins to about 10).
Migration: A series that spans the change steps on that day: compare market caps and coin counts only within one marketCapMethod.
Affects: /api/v1/narratives/data, /api/narratives/data, /api/v1/ecosystems/data, /api/ecosystems/data
Seven more funding venues
added
Funding adds Arcus, QFEX, Ondo Perps, Antarctic, Polymarket Perps, Kalshi and EntropyIO, mostly stock, ETF, index and commodity perps beside crypto.
- New venues appear in
/funding/rates, venue lists andexchangefilters (arcus,qfex,ondo-perps,antarctic,polymarket-perps,kalshi,entropyio). Every rate is the venue's in-progress estimate (rate_kind: estimate), a fraction per the contract's own interval (hourly on six, 8h on Antarctic, 8h or 24h by market on Kalshi). - None has an open-interest or ticker fetcher yet: their contracts carry null open interest and their cross-exchange rows are unpriced (
no_ticker).
Affects: /api/v1/funding/rates, /api/v1/funding/settlement, /api/v1/arbitrage/cross-exchange, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Five funding venues, one row per instrument, split look-alike tokens
added
Funding adds Phemex, Coinbase Derivatives, Lighter Robinhood, Kinetiq and Paragon (plus ApeX stock contracts); a venue's lot and renamed listings of one instrument share one row; two different tokens under one ticker on different venues are served as separate rows.
- New venues appear in
/funding/rates, venue lists andexchangefilters (phemex,coinbase-derivatives,lighter-robinhood,kinetiq,paragon). Coinbase Derivatives publishes the last settled rate (rate_kind: last_settled). - Rates, history, carry and the API summary key a row by the instrument: PEPE, 1000PEPE and KPEPE are one row, and a venue's stock codes fold under the display ticker.
- When a venue lists a different token under a shared ticker (Aster MEME, Definitive EDGE, Lighter PRL), it is served as its own row keyed
<ticker>~<venue or asset>, so its rate and mark no longer blend into the other token's averages. - Arbitrage
spot-perpsell-spot rows carry theborrow_limitreason when the venue's borrow limit for the coin is under the $10,000 notional./global/overviewdrops crypto rows that are a different asset from the RWA row under the same ticker (QNT, STX, DASH) and warns how the OI sparkline's scope differs from the headline.
Migration: A client that grouped rows by bare ticker should read the row key: a ~ suffix marks a different token under the same ticker.
Affects: /api/v1/funding/rates, /api/v1/funding/coins, /api/v1/funding/settlement, /api/v1/arbitrage/spot-perp, /api/v1/global/overview, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
CoinEx and Coinbase International retired
removed
CoinEx stopped its futures on 2026-09-22 and is winding down; Coinbase International Exchange ended trading on 2026-10-01 and moved its perpetuals to Deribit.
- CoinEx and Coinbase (International Exchange) no longer appear in live funding, open-interest or arbitrage data, RWA-perp rates, venue lists or venue counts.
exchange=coinexandexchange=coinbaseon the funding routes answer 400 like any unknown venue. - Their recorded funding history stays readable on the history-only pages /funding-rates/exchange/coinex and /funding-rates/exchange/coinbase. Coinbase spot is a different venue and is unaffected.
Migration: Drop coinex, coinbase and coinbaseinternational from exchange filters; Coinbase International's perpetuals now trade on Deribit (exchange=deribit).
Affects: /api/v1/funding/rates, /api/v1/funding/coins, /api/v1/funding/settlement, /api/v1/futures/data, /api/v1/arbitrage/spot-perp, /api/v1/arbitrage/cross-exchange, /api/v1/arbitrage/cex-spot-transfer, /api/v1/rwa-perps/rates
Memecoin launches report the memecoin_launches dataset
changed
meta.dataset_id on the memecoin launch feed is now memecoin_launches, and the coverage and health endpoints list the dataset under that id.
Migration: A client that matches on the old dataset id should match memecoin_launches.
Affects: /api/v1/memecoins/launches, /api/memecoins/launches, /api/v1/meta/coverage, /api/v1/health, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Token Scanner retired
removed
Token Scanner is retired with its pages, API endpoints, MCP tool and CLI command. Its pages redirect to Rug Check.
Migration: For new launches use /api/v1/memecoins/launches (get_memecoin_launches, sharpe memecoin-launches); for a token's contract risk use /api/v1/rug-check/security (get_rug_check_security, sharpe rug-check security).
Affects: @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Data correctness: funding rate kinds, closed candles, liquidation units, stale signal rows
fixed
Funding rows say what rate is (rate_kind), futures candles are closed candles stamped at their bucket start, liquidation quantity is documented as USD notional, a dropped coin's insider-selling and pump-dump row reads stale, and edgeX funding is the next settlement's forecast.
- Funding (
type=current): each row addsrate_kind:estimate(the next settlement's estimate, most venues),last_settled(Kraken, Crypto.com, Bitfinex) ortrailing_8h(Deribit). edgeXrateis now itsforecastFundingRate; it served the rate already settled. Settlementrate_sourceaddsmixed,window=currentis documented as the next 24 hours, andcoinresolves an asset as /funding/rates does (bitcoin -> BTC; PEPE brings 1000PEPE and KPEPE). - RWA perps: Lighter rows are per hour (
interval_hours1) and Orderly rows carry the next settlement's estimate, matching /funding/rates. - Futures (
/futures/data): OHLCV rows are closed candles only, so the newest is the last full hour. Aggregated candles (4h, 1d) are stamped at their UTC bucket start, and coverage warns about a partial first bucket and the in-progress last one. Open-interest history warns that its newest hour is still filling; a row's value is the last sample in its hour. - Futures (
chart=liquidations):quantityis USD notional (do not multiply byprice, which is always null),meta.sourceisvelo, and coverage counts four-hour buckets. - Futures (
chart=cvd): candles with taker volume carrycvd_delta_usd((2 × taker_buy_volume − volume) × close) andcvd_usd, the venue's running sum over the window, so the CVD no longer has to be computed client-side. - Futures:
chart=cvdwarns which venues report no taker volume; publicchart=oi-snapshotreturns each venue's latest row;chart=long-short-rationo longer mixes in top-trader rows; funding charts no longer readpartialwhen every venue is complete;annualized_basisis documented as the instantaneous premium in percent./futures/coinsservesmarketCapRank: nullfor an unranked coin (was 9999) and an empty venue list for a coin with no venue. - Insider selling / pump-dump (
?coin=): the answer is dated by that coin's ownupdated_at, so a coin that stopped qualifying reads stale with a warning.oi_change_24hsums only venues read at both ends of the window, the on-chain history deltas are null on a run with no newer snapshot (were 0), and price prediction's long/short reads account ratios only. - Arbitrage:
funding-spread-historymarks points built on a cron estimate (series[].estimated,backtests[].estimatedSettlements); a positiveminOiUsdfloor onspot-perpandcross-exchangetreats MEXC open interest (left out of the API's totals) as unknown, so those rows fail it; the freecross-exchangeroute sendsX-Total-CountandX-Next-Cursor;spreadRateis documented as the entry price gap, not funding. - Global overview: a crypto row's price is the funding book's 5-minute mark first, then the last closed candle, then CoinGecko; coverage warns how many rows lack price, volume or market cap.
- Listings:
event_type=delistingreturns delisting announcements (it returned none). News:totalon a cursor page counts the stories above the cursor. Memecoin launches default tosolana,bsc. Rug check: an unreported tax side reads unknown, not 0%, and trade counts sum over the same pairs as volume. - Reports (
analyze_coin,market_briefing,find_opportunities): funding rows name their rate kind, open interest is labelled USD notional beside the price change, the opportunities row separates the funding spread from the entry gap, and MEXC open interest is marked unverified.
Migration: Read rate_kind before treating rate as paid. Treat liquidation quantity as USD. A client that read the newest futures candle as the current price should read /funding/rates mark_price instead.
Affects: /api/v1/funding/rates, /api/v1/funding/settlement, /api/v1/rwa-perps/rates, /api/v1/futures/data, /api/v1/futures/coins, /api/v1/insider-selling/data, /api/v1/pump-dump/data, /api/v1/arbitrage/funding-spread-history, /api/v1/arbitrage/cross-exchange, /api/v1/arbitrage/spot-perp, /api/v1/global/overview, /api/v1/listings/events, /api/v1/news/feed, /api/v1/memecoins/launches, /api/v1/rug-check/security
Funding window hours, sign-split extremes, stricter cursors, hosted MCP limits
changed
Accumulated funding rows add covered_hours_*; funding extremes list only rates at or above 0 as highest and below 0 as lowest; a malformed or oversized cursor answers 400; a revoked key answers 401; RWA perps history pages with a keyset cursor; the hosted MCP endpoint limits keyless tool calls and batch size, and endpoint tools ask for 25-row pages.
- Funding (
type=accumulated): each row adds optionalcovered_hours_1d…covered_hours_1y, the hours of funding the settlements in that window stand for (the sum of theirinterval_hours),nullwhen unknown. A window'scoverage_ratiois now capped at those hours, so a gap in the middle of a window reads as missing. - Funding (
type=current&extremes=N):extremes.highestholds up to N rows withrate_8h≥ 0 andextremes.lowestup to N rows withrate_8h< 0. Either list can be empty, where a one-signed book used to fill both with the same sign. - Funding (free route):
max_age_his now documented. It leaves out rows whoseupdated_atis more than that many hours old; v1 always applies 6. - Paged endpoints: a cursor that does not decode, or an offset above 10,000,000, answers 400
invalid_parameter. An out-of-range offset used to reach the database and answer 503, and a cursor rejected inside a route's read answered 500. - Auth: a key revoked between its lookup and the request's admission answers 401
invalid_api_key, where it answered 503service_unavailableand clients retried a dead key. - RWA perps (
type=history): the page cursor pins the first page's window start and resumes after the last settlement served, so a settlement leaving the window between two pages no longer shifts a row past the next page. An offset cursor from before this change still pages as it did. - Hosted MCP (
https://www.sharpe.ai/api/mcp): keyless callers get 60 calls a minute per IP (429 withRetry-Afterpast it; a key lifts it to the key's v1 limits), and a JSON-RPC batch carries at most 10 messages (400 otherwise). - MCP endpoint tools:
get_funding_rates,get_gem_finderandget_arbitrage_spot_perpask for a 25-row page when given nolimit(it was 200 for funding and 100 for the other two). When the context cap cuts a page's rows,pagination.cursornow resumes at the first row cut, not past the whole page. - CLI (
sharpe-terminal-mcp): newsharpe analyze <coin>andsharpe opportunitiesprint the coin-analysis and opportunities reports.sharpe loginandsharpe doctorcheck the key against a route that needs one (/api/v1/usage); they checked/api/v1/health, which answers 200 to any key. - Futures (
chart=cvd): the descriptions now state that the payload holds OHLCV candle rows plus open-interest rows for the normalised view, and give the CVD formula.
Migration: Treat an empty extremes.highest or extremes.lowest as no rate of that sign. Compare accumulated sums only where covered_hours_* is close to the window. A keyless agent that makes more than 60 calls a minute through the hosted endpoint should send an API key (the free tier works).
Affects: /v1/funding/rates, /api/funding/rates, /v1/rwa-perps/rates, /api/futures/data, /api/mcp, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Like-for-like daily stablecoin net issuance
added
The stablecoins overview adds an optional dailyNetIssuance90d: net issuance per UTC day that leaves out any stablecoin DeFi Llama starts or stops charting that day.
history90dsums whichever stablecoins DeFi Llama charts each day, so a gap in one coin's data or a new listing moves it with no mint or redemption behind it: between 2026-09-23 and 09-30 it rose $3.18B while supply of the coins charted on both days fell about $0.86B (USDY and Frax USD missing 09-23..09-26, USDD back on 09-28 after 82 days, Open USD first charted on 09-30).- Each point is
{ t, net }:tis the UTC day in unix seconds,netthe USD change. The field fills on the first hourly sync after the release.
Migration: Read dailyNetIssuance90d instead of differencing history90d for daily flows.
Affects: /v1/stablecoins/data, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Memecoin launches: nullable 1h/24h moves and an age basis; MCP server and CLI 1.11.0
changed
Memecoin launch rows report priceChangeH1 and priceChangeH24 as null when the window had no trades, and a new ageBasis says what ageHours measures. The MCP server and CLI move to 1.11.0 with the synced contract.
ageBasisistokenwhenageHourscounts from the token's first DEX pair, orpairwhen that lookup failed and it counts from this pair's creation.- A 1h or 24h move with no trades in the window was
0; it is nownull, so an idle pair no longer reads as flat. - The insider-selling and pump-dump endpoints are unchanged; in the web terminal they are now the two score tabs of Positioning Risk (
/positioning-risk).
Migration: Treat priceChangeH1 and priceChangeH24 as nullable; read ageBasis before comparing ageHours across rows.
Affects: /v1/memecoins/launches, /api/memecoins/launches, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
September 2026
Weighted memecoin returns, sector and chain filters, aggregated futures USD volume
changed
Memecoin narrative returns are now market-cap-weighted with the medians served beside them; cross-exchange arbitrage takes sector, the gem finder takes chain; aggregated free-route OHLCV rows carry volume_usd; web-traffic sentiment and watchlist fields are null when unknown; ecosystems count each token on its home chain and add Blast and Linea.
- Memecoins: a narrative's
change1h…change1yare now the market-cap-weighted constituent price change (calculationMethod.returns=market_cap_weighted_constituent_price_change_min_500k_mcap). The former medians move to new optional fieldsmedian1h…median1y(calculationMethod.medianReturns). A row cached before the change still saysmedian_constituent_price_change_min_500k_mcapand has nomedian*until the next 2-hourly sync. - Cross-exchange arbitrage: new optional
sector(all,memes,ai-agents,layer-1,defi) keeps only crypto coins in that narrative's CoinGecko category; RWA perps are left out when a sector is set. MCPget_arbitrage_cross_exchangetakes it; CLIsharpe arb cross-exchange --sector. - Gem finder: new optional
chain(e.g.solana,base) keeps assets deployed on that chain, matching every chain inchainSlugs; an unknown chain is a 400. The free route reads it too. MCPget_gem_findertakes it; CLIsharpe gems --chain. - Futures (free route): when a payload above 1,500 rows is aggregated into time buckets, OHLCV rows carry an optional
volume_usd, each source candle's volume × close summed;volume × closepriced the whole bucket at its last close. - Web traffic:
sentimentUpPctandwatchlistUsersarenullwhen the source has no value, where they were0. - Ecosystems: market cap counts each token once, on its home chain (
marketCapMethod=home-chain-constituents;dominanceis now a share of home-chain market caps), and the ecosystem and heatmap ecosystem lists add Blast and Linea (25 ecosystems; 36 heatmap category slugs).
Migration: A client that read memecoin change* as the median should read median*. Treat null web-traffic sentimentUpPct / watchlistUsers as unknown, not zero.
Affects: /v1/memecoins/data, /api/memecoins/data, /v1/arbitrage/cross-exchange, /api/arbitrage/cross-exchange, /v1/gem-finder/data, /api/gem-finder/data, /api/futures/data, /v1/web-traffic/data, /api/web-traffic/data, /v1/ecosystems/data, /api/ecosystems/data, /api/heatmap/data
MCP server and CLI 1.8.0: borrow rates, funding spread history, Boros
added
@sharpe-terminal/mcp-server 1.8.0 adds three endpoint tools (43 tools in all): get_arbitrage_borrow_rates, get_arbitrage_funding_spread_history and get_arbitrage_fixed_floating_funding. The sharpe CLI gains sharpe arb borrow, sharpe arb history and sharpe arb boros.
- The tools take their descriptions and parameters from the new endpoints' contracts, like every endpoint tool; the spot-perp tool documents the new
borrow_unpricedreason. - The hosted server at https://www.sharpe.ai/api/mcp runs the same code.
Affects: @sharpe-terminal/mcp-server, sharpe-terminal-mcp, https://www.sharpe.ai/api/mcp
Margin Borrow Rates
added
New endpoint: the spot-margin borrow rate of every coin Binance, OKX, Bybit and Gate.io price without an account, one row per coin with every venue's quote, cheapest first.
- Rates are fractions:
hourlyRateper hour andannualRate=hourlyRate× 8,760 (simple); the daily venue rates (Binance VIP 0 cross, OKX basic) are divided by 24. A venue that does not price a coin is absent, never 0. venuesreports each venue's status (ok,stale,failed,unsupported) with its fetch time. Each venue is cached 5 minutes; the answer is stale after 10 minutes. KuCoin, Bitget, MEXC, BingX, HTX and CoinEx publish no keyless borrow rate and are reported unsupported.- Filters:
coin,exchanges. MCP toolget_arbitrage_borrow_rates; CLIsharpe arb borrow.
Affects: /v1/arbitrage/borrow-rates, /api/arbitrage/borrow-rates
Funding Spread History & Backtest
added
New endpoint: a spot-perp or cross-exchange pair's historical funding spread at its legs' real settlement times, and a carry backtest over 1 to 90 days net of each venue's entry and exit taker fees.
mode=spot-perptakesvenue(optionalcontract) anddirection;mode=cross-exchangetakeslongVenueandshortVenue(optional contracts). Without a contract a leg uses the venue's contract for the coin with the largest open interest.- Legs are aligned by settlement time with each settlement's own interval, never an assumed 8h.
backtestscovers 1, 7, 14, 30 and 60 days where shorter thandays, thendays: net return, gross and net APR, negative-carry days, max drawdown, break-even days and coverage. Borrow interest for a short-spot leg is not included. - Read from stored settlements only (no exchange is called), stale after 10 minutes. MCP tool
get_arbitrage_funding_spread_history; CLIsharpe arb history. The spot-perp and cross-exchange boards link each row to its history.
Affects: /v1/arbitrage/funding-spread-history, /api/arbitrage/funding-spread-history
Arbitrage boards: public borrow rates, borrow_unpriced, 5-minute dated quotes, COIN-M and inverse delivery contracts
changed
Spot-perp sell-spot rows now subtract the public borrow rate of Binance, OKX, Bybit or Gate.io, and are indicative borrow_unpriced where none is published; the dated boards price from a 5-minute dated-quotes snapshot, so their rows can be executable all hour.
- Spot-perp:
borrowAprcomes from the Margin Borrow Rates module (Binance, OKX, Bybit, Gate.io; it was Bybit only). A sell-spot / long-perp row without a public rate isindicativewith the newindicativeReasonborrow_unpricedand ranks after executable rows. - Spot-perp and cross-exchange:
X-Data-Venuesno longer offers a venue whose funding rows are all past the funding SLA (for example a halted venue);X-Data-Missingnames itstale. The free spot-perp route takesview=grid, the terminal's column projection (~0.9 MB against ~2.6 MB of rows). - Cross-exchange: edgeX, ApeX, GRVT and dYdX legs now carry a top-of-book from bounded per-contract book reads (they publish no bulk book ticker).
- Dated basis, calendar spread and perp-dated carry: the arbitrage-boards cron writes a dated-quotes snapshot every 5 minutes (dataset
arbitrage_dated_quotes, top-20 book walks at the default notional). A venue whose quotes there are at most 10 minutes old is priced from it (the answer is then stale after 10 minutes and cached up to 100 s / 200 s); others still come from the hourly term structure (stale after 2 hours). - Binance COIN-M (dapi) and Bybit inverse delivery contracts are ingested into the term structure and the dated boards (
marginType: inverse).
Migration: Callers that treated every sell-spot row with a netApr as executable should filter on executionStatus: rows without a public borrow rate are now indicative.
Affects: /v1/arbitrage/spot-perp, /v1/arbitrage/cross-exchange, /v1/arbitrage/dated-futures-basis, /v1/arbitrage/futures-calendar-spread, /v1/arbitrage/perp-dated-carry, /api/arbitrage/spot-perp
Fixed vs Floating Funding (Pendle Boros)
added
New endpoint: every live Pendle Boros funding-rate market with its implied (fixed) APR, the floating APR Boros reports, and the funding the same venue contract paid over the last 7 and 30 days, with the spread implied − realised.
- Rates are fractions per year.
realised7dAprandrealised30dAprareacc × 365 / daysfrom stored settlements;spread7dApr/spread30dApr=impliedApr− realised, gross of fees. Rows rank byspread30dApr. - A market whose venue contract is not in the funding store, or whose stored history does not cover the window, keeps its Boros figures and serves the realised figure as null with
realised7dNullReason/realised30dNullReason, never 0. - Filters:
coin,venue. MCP toolget_arbitrage_fixed_floating_funding; CLIsharpe arb boros.
Affects: /v1/arbitrage/fixed-floating-funding, /api/arbitrage/fixed-floating-funding
Arbitrage boards: per-venue fees, no credited entry gap, explicit indicative reasons
changed
The six arbitrage boards now say why a row is not executable (indicativeReason), charge each venue's own taker fees, never credit a favourable entry price gap as income, and judge executability on quote age at the time of the request.
- Spot-perp:
netApr=apr− (2 spot + 2 perp taker fills + the adverse entry basis) × 365 / 30 − a known borrow APR on sell-spot rows. New fields:indicativeReason,entryBasisRate,roundTripFeeRate,breakEvenDays,requiresBorrow,borrowCostIncluded,borrowApr,apr7d,carrySignFlip7d,perpLotMultiplier,spotPriceAsOf,perpPriceAsOf;pairStatusgainsunpriced.limitandcursorpage the board (v1 answers a page withpaginationonly when either is given). - Cross-exchange: one row per asset (BONK, 1000BONK and KBONK are one), its best executable pair first. Executable needs a book spread, legs within 5%, top-of-book depth of at least $10,000 where both venues report it and fresh quotes. New fields:
indicativeReason,roundTripFeeRate,breakEvenDays,longSymbol,shortSymbol,longIntervalHours,shortIntervalHours,longPricesAsOf,shortPricesAsOf;cursorpages the board. - Both funding boards send
X-Data-Missing(each venue that is not a quoted member, asVenue:reason) andX-Data-Venues(the venues a filter may offer). - Dated basis, calendar and carry: rows under 3 days to expiry (calendar: near leg under 3 days or legs under 7 days apart) are flagged and ranked last;
indicativeReasonexplains the rest,snapshot_quotemeaning executable only on a live read (quotes older than 10 minutes). The calendar's direction and curve come from mark (else mid) prices, never the last trade. - Perp-dated carry:
datedBasisPctis now measured against the perp at the trade's executable sides (it was against spot), andexpectedFundingToExpiryPctprojects the 7-day realised funding average over the settlements left (the current print under 3 days). New fields:direction,crossVenue,nearExpiry,currentFundingAprPct,funding7dAprPct,funding7dCumulativePct,fundingProjection,fundingIntervalHours,fundingSettlementsToExpiry,datedLegPrice,perpLegPrice,feesPct.funding7dStabilityPctis a deprecated alias offunding7dCumulativePct. - CEX spot transfer: near-miss routes that do not clear fees are served as indicative (
below_fees), books are judged on 60 seconds and networks on 10 minutes, andmeta.transferScancounts what the scan evaluated. New fields:transferConfirmations,buyTakerFeePct,sellTakerFeePct,networkUpdatedAt,executionStatus,indicativeReason.
Migration: Filter on executionStatus rather than on netApr being present: indicative rows between 5% and 20% apart keep a net APR. Carry callers that read datedBasisPct as a basis against spot, or funding7dStabilityPct as a stability figure, should read the new fields. The MCP tool get_arbitrage_spot_perp asks for a 100-row page unless given limit or cursor.
Affects: /v1/arbitrage/spot-perp, /v1/arbitrage/cross-exchange, /v1/arbitrage/dated-futures-basis, /v1/arbitrage/futures-calendar-spread, /v1/arbitrage/perp-dated-carry, /v1/arbitrage/cex-spot-transfer
Reports are API endpoints: /v1/briefing, /v1/coins/{coin}/analysis, /v1/opportunities
added
The market briefing, the coin analysis and the arbitrage opportunities report are rendered on the server and served as endpoints (with keyless twins under /api). The MCP tools market_briefing, analyze_coin and find_opportunities and sharpe briefing print the endpoint's report_md as served, so every client prints the same report.
- Each endpoint answers
{ report, coin?, report_md, inputs[] }: the markdown report, ending with the freshness of every answer it read, and the reads it was composed from with their freshness.metacarries the most cautious freshness of the inputs. - A read that fails leaves a
Data gapsline in the report; only when every read fails does the endpoint answer 503 (and the MCP tool an error). sharpe briefingnow prints the market briefing report (market stats, narratives, funding extremes, next settlement); its arbitrage section is thefind_opportunitiesreport.sharpe briefing --jsonprints the endpoint's data.
Migration: Nothing to change for MCP callers: the tools keep their names, arguments and output. Scripts that parsed sharpe briefing or its --json sections should read the report or /v1/briefing instead.
Affects: /v1/briefing, /v1/coins/{coin}/analysis, /v1/opportunities, @sharpe-terminal/mcp-server, sharpe-terminal-mcp
Stablecoin FX pegs and live correlation windows use the right UTC day
fixed
Non-USD stablecoins (EUR, BRL and others) are now measured against the same day's FX close, and a coin fetched live for an on-demand correlation includes the first day of its window.
- During British Summer Time the peg history compared each day with the next day's FX close: Yahoo stamps currency bars at 23:00 UTC the evening before, and that was read as the UTC date.
- A 30-day on-demand correlation for a coin fetched live had 29 points; it now has the same 30 as a stored coin.
Affects: /api/v1/stablecoins/data, /api/correlation/on-demand
Dated-futures scanners use the two-hour term-structure SLA
changed
On the dated-futures basis, calendar-spread and perp-dated carry scanners, a row stays fresh (and can be executable) until its snapshot is 7,200 seconds old, the term-structure dataset's SLA (was 3,600). Rows no longer flip to stale and indicative for a few minutes each hour while the hourly snapshot lands.
meta.freshnessSlaSeconds(v1:data.scannerMeta.freshnessSlaSeconds) reads 7200, and the stale warnings quote 7,200 seconds. On the basis and calendar boards it now equalsmeta.freshness_sla_seconds.- The CEX spot-transfer scanner is unchanged (3,600).
- Free API object bodies document the freshness
metathey carry; /.well-known/agent-skills/index.json names npm and the hosted endpoint (the MCP server is not on PyPI); every /docs page carries a share image.
Affects: /api/arbitrage/dated-futures-basis, /api/arbitrage/futures-calendar-spread, /api/arbitrage/perp-dated-carry, /api/v1/arbitrage/dated-futures-basis, /api/v1/arbitrage/futures-calendar-spread, /api/v1/arbitrage/perp-dated-carry
MCP tools are generated from the API contracts and answer { data, meta }
changed
The 37 endpoint tools of the MCP server (npm @sharpe-terminal/mcp-server 1.6.0, the hosted https://www.sharpe.ai/api/mcp, and the Python sharpe-terminal-mcp) now take their descriptions and parameters from the API's contracts, and answer structuredContent of { data, pagination?, meta } instead of { result }. The sharpe CLI reads the same definitions.
datais the payload as the API served it (the /v1 route'sdatawith a key, the free route's body without one);paginationcarries the cursor of a paged answer;metasays which route answered (route), the data's freshness (as_of,stale_after,freshness_status,runtime_status) andwarnings.data_freshnessis gone.- An answer cut to fit the context window keeps its shape;
meta.truncated_fieldsnames each cut field by its path indatawithtotalandshowing(andkept: "latest"for a series). Theitemswrapper and the markers inside the payload are gone. - Arguments are checked against the API's own parameter schemas: an unknown argument, a wrong type, a value outside an enum or a bound is refused with every issue named. The Python server takes the same parameters in snake_case.
- get_funding_settlement answers the route's own shape (
rows/totals/settlementMetaon /v1,data/totals/metaon the free route) instead of a client-side{rows, totals, meta}, and takesoffset,sortandexpand. - Tightened parameters: integers where numbers were accepted (days, limit on several tools), string length bounds on coin/exchange/venue/address, enums on news
categoryand cross-exchangeassetClass, bounds on the scanner floors andnotional. - The CLI: every API parameter of a command's endpoint is an option (new: funding --exchange/--asset-class/--margin/--page-size/--cursor, settlement --offset/--sort/--expand, futures --limit/--cursor, and more),
--jsonprints the samedatathe MCP tools return, and accumulated funding shows each window's coverage.
Migration: Read results from structuredContent.data (was structuredContent.result) and freshness from structuredContent.meta (was data_freshness). Python callers pass snake_case names (min_oi_usd). Pass includeUnknownAge as "true"/"false".
Affects: @sharpe-terminal/mcp-server, sharpe-terminal-mcp, /api/mcp
Open interest includes inverse perps; OI-weighted funding is null without OI
changed
Open interest now covers Binance COIN-M and Bybit inverse perpetuals, so cross-venue OI totals and OI-weighted funding for coins such as BTC and ETH rise by that coverage. oi_weighted_funding_rate on the derivatives overview is null when no primary contract carries open interest; it used to fall back to the simple mean without saying so.
- Inverse contracts are counted in USD at the venue's contract size (Binance COIN-M: 100 USD for BTC, 10 USD for others; Bybit inverse: 1 USD).
- Deribit daily candles are built on the UTC day. They used to open at 08:00 UTC, a different day boundary from every other venue; older rows are being replaced.
Affects: /api/v1/market/derivatives-overview, /api/v1/futures/data, /api/futures/data
/global stock and RWA tabs no longer fail on a cold request
fixed
The stock, ETF, index, commodity, FX and pre-IPO tabs of /global are now precomposed with the crypto tab every five minutes, so they load from a stored board and, if a refresh fails, answer the last board flagged stale instead of a 503.
- Before, those tabs were composed on request; about one cold request in four hit the database's statement timeout and answered 503.
Affects: /api/global/overview, /api/v1/global/overview
Term-structure coverage and freshness flags match their SLAs
fixed
Futures term structure no longer reports a complete curve as partial, and the stale flags on /global, RWA perps and the Data Ocean catalog now use the same freshness SLA as their X-Freshness-Sla-Seconds and X-Data-Stale headers.
- Futures term structure: BTC and ETH curves reported
coverage.status: "partial"with a row-limit warning although every point was present. Each venue's latest snapshot is now read directly, so a venue whose last run is days old also stays on the curve, and the coverage block reports the 7-day window it reads. - /global:
isStaleuses 20 minutes for the crypto spine and 1 hour for the RWA spine (were 25 and 45 minutes), the same bounds asX-Data-Stale. - RWA perps:
X-Freshness-Sla-Secondsis 3600 (was 1800); rows, lagging venues andX-Data-Staleflag stale after 1 hour (was 90 minutes). - Data Ocean catalog:
stablecoins_metricsadvertises its 7,200-second freshness SLA (was 600).
Affects: /api/v1/futures/data, /api/futures/data, /api/v1/global/overview, /api/global/overview, /api/v1/rwa-perps/rates, /api/rwa-perps/rates
Error bodies name team@sharpe.ai
fixed
The suggested_action of upstream_error (502) and service_unavailable (503) errors now says to contact team@sharpe.ai, the one support address. It named another address, one nobody has confirmed is read.
- The OpenAPI error examples and SECURITY.md say the same.
Migration: If you match on the text of suggested_action, update the address.
Affects: /api/v1/*, /openapi.json
API descriptions corrected
fixed
Several field and error descriptions in /openapi.json and the docs said something the endpoints do not do. No response changed.
- Funding rates:
mark_priceis Binance's mark price for the base coin, attached to every venue's row for that coin. It is not the venue's own mark. It was described as the venue's mark price. /v1/futures/coinsand/v1/market/derivatives-overviewno longer list a 502 response: an upstream that is down answers 503service_unavailableon both.- Funding settlement:
priceandprice_change_24h_pctare described as always null, which they are. - Futures data:
interval_hoursonfunding-raterows is the hours that settlement covered, null when unreadable (never assumed to be 8). Theterm-structurechart is each venue's latest snapshot from the last 7 days, dated contracts at least 14 days to expiry, monthlies as well as quarterlies.
Affects: /api/v1/funding/rates, /api/v1/futures/coins, /api/v1/market/derivatives-overview, /api/v1/funding/settlement, /api/v1/futures/data, /openapi.json
Open interest history: what the one-sided repair did not cover
fixed
The 2026-09-27 entry said stored open-interest history was corrected when Bybit, Gate.io, Bitget, Pacifica, Backpack, ApeX and Extended moved to one-sided figures. The repair halved 3,037,660 stored rows for those venues, but two sets of rows were left as stored.
- Orderly published two-sided open interest until about 2026-08-19. Only 15 of its 131 series halve at that change, so the repair could not tell which rows were doubled and left them all. Orderly readings from 2026-08-08 to 2026-08-19 (about 32,000 rows) may read twice the one-sided figure for some contracts.
- RWA perp open-interest snapshots store one sum per symbol across venues, so the Bitget, Pacifica, ApeX and Extended legs before 2026-09-27 cannot be halved on their own. Only the 24-hour RWA leg of the global open-interest sparkline reads them, and the 30-day retention removes the last of them by 2026-10-27.
Affects: /api/v1/futures/data, /api/v1/global/overview
Category open interest and funding across every venue
changed
Narrative and ecosystem open interest and funding now cover every venue, counting each constituent asset once. They were read from Binance alone, by ticker. This records a change made on 2026-09-27 that had no entry.
openIntereston a narrative or ecosystem row is the one-sided open interest of its constituents across every venue, lot contracts such as 1000PEPE included and MEXC left out. On the 2026-09-27 captures, Layer 1 moved from $19.40B to $66.31B.fundingRateon those rows is the constituents' 8-hour funding weighted by that open interest, annualized as a fraction a year. Gaming moved from -0.1768 to +0.1031.- Coin rows:
fundingRateis the coin's funding across venues as a fraction per 8 hours (it was one venue's rate per its own interval),fundingApris that × 1,095 in percent, andopenInterestis one-sided across venues. - The median windows (
median1h…median1y) now skip constituents under $500K market cap, the floor the weighted changes already used. AI Agents'median24hmoved from 1.44 to 1.04 on the 2026-09-27 coin lists. - Heatmap: a coin's
openInterestis its asset's one-sided open interest across venues, lot contracts included (PEPE $138.9M to $257.8M on the same book), andopenInterestChange24hcompares the same contracts at both ends of the 24 hours.
Migration: Coin-row fundingRate is per 8 hours now: stop dividing it by the venue's interval.
Affects: /api/v1/narratives/data, /api/narratives/data, /api/v1/ecosystems/data, /api/ecosystems/data, /api/v1/heatmap/data, /api/heatmap/data
Accumulated funding: per-window coverage
added
Every type=accumulated row now carries coverage: for each window (1d, 7d, 30d, 90d, 1y), how much of the span the contract was expected to settle in its settlements cover.
- Each window has
coverage_ratio(0 to 1),complete(true when the ratio is at least 0.9),listed_within_windowandhalted_within_window. - The expected span starts at the contract's first settlement and ends at its halt: the time the instrument master recorded its status leaving trading, else its last settlement plus one interval once its current row stopped updating. With no known halt it runs to now, and missing settlements read as missing.
coverage_ratioandcompleteare null when the contract was not expected in the window at all (listed after it, or halted before it).- Compare
acc_*across contracts only on complete windows.
Affects: /api/v1/funding/rates, /api/funding/rates
OpenAPI document corrected to match the responses
fixed
/openapi.json and the Postman collection are now generated from the API's contracts, and the regeneration corrected every place where the document disagreed with what the endpoints return. No response changed: the fields below were already served.
- Funding rates: current rows list
margin_type,asset_class,mark_price,mark_price_updated_at,open_interestandmarket_cap_rank, and accumulated rows listfirst_settled_at,last_settled_at,asset_class,margin_type,interval_hoursandis_active. Each is sent on every row, null when unknown. - Cross-exchange arbitrage rows list
spreadSource,volumeLong24hUsd,volumeShort24hUsdandassetClass.netApr,spreadRate,longAskandshortBidare nullable. /v1/global/overviewlists the long and short split of the 24-hour liquidations (liquidationsLongUsd,liquidationsShortUsd) and says the RSI universe is the top 100 coins by market cap, not by open interest.- Narratives and ecosystems: every number is nullable (null means no observation, never 0), and the payloads list
basePrices,lastAttemptAt,statusandcoverage, plus the ecosystems market-cap method fields. - Stablecoin items and details list
pegQuality,volume24hUsdandpriceUpdatedAt. - Types as served: memecoin
returnCoverageis a percent from 0 to 100, not a count; mindsharewatchlist_usersis a number; gem-finderathDatecan be an empty string; listingslastListingAtis a date (YYYY-MM-DD) andwindow_dayscan be null; listingsource_urland exchangedocsUrlare plain strings; a liquidation point'spricecan be null. - Insider-selling rows no longer list eight pump-dump sub-scores that the endpoint never returned.
- Query rules the endpoints already enforce:
coinon/v1/futures/dataand the four arbitrage scanners, andaddresson/v1/rug-check/security, must not be empty. The scanners'notionalaccepts any positive amount up to 1,000,000,000; the document said the minimum was 1. - Each operation that serves a dataset names it and its freshness SLA in seconds (
x-dataset,x-freshness-sla-seconds), the same SLA the response's freshness metadata reports. - Seven schemas that no operation used are gone, the contact address is team@sharpe.ai, and the Postman collection's
/v1/futures/datadescription, which had fallen behind the document, is current.
Affects: /openapi.json, /sharpe-api.postman_collection.json, /api/v1/funding/rates, /api/v1/arbitrage/cross-exchange, /api/v1/global/overview, /api/v1/narratives/data, /api/v1/ecosystems/data, /api/v1/stablecoins/data, /api/v1/memecoins/data, /api/v1/mindshare/data, /api/v1/gem-finder/data, /api/v1/listings/data, /api/v1/listings/recent, /api/v1/listings/events, /api/v1/listings/exchanges, /api/v1/futures/data, /api/v1/insider-selling/data, /api/v1/rug-check/security
llms-full.txt lists every free route
added
/llms-full.txt has a table of all 52 free /api routes, and /llms.txt states how many v1 endpoints, keyless free routes and MCP endpoint tools there are. Both are generated from the same contracts as /openapi.json.
- 51 free routes answer without a key or a session.
POST /api/arbitrage/dex-scanner/previewanswers only a signed-in Sharpe session and is marked "Session". - The v1 inventory in
/llms-full.txtis sorted by path.
Affects: /llms-full.txt, /llms.txt
MCP server 1.5.0 on npm
added
@sharpe-terminal/mcp-server 1.5.0 is on npm. Tool results carry the API's freshness, the new API parameters are tool parameters, and the composite tools print the numbers the API serves.
- Every endpoint tool result carries
data_freshness(dataset,as_of,stale_after, freshness status, where the answer was served from, warnings) when the API reports it. - New tool parameters: funding
sort,extremes,min_oi_usd,statsandsummary; narrativessort,topandbottom;coinon pump-dump and insider selling;minOiUsdon spot-perp;limiton cross-exchange. analyze_coin,market_briefingandfind_opportunitiesno longer recompute averages, APRs or rankings on the client. The BTC funding line, for example, is the served 8-hour average and median.- The hosted server at https://www.sharpe.ai/api/mcp runs the same code.
Affects: @sharpe-terminal/mcp-server, https://www.sharpe.ai/api/mcp
Funding rates: 8-hour rate, APR and aggregates
added
Current funding rows carry rate_8h and apr, and the endpoint can answer with aggregates instead of rows.
rate_8his rate × 8 / interval_hours.apris rate × 8760 / interval_hours, a fraction (0.1 = 10%). Both are null when the row has no rate or an interval Sharpe does not recognise.sort=open_interestorsort=-open_interestorders current rows by open interest. Rows with unknown open interest come last.extremes=N(1–100, with an optionalmin_oi_usdfloor),stats=1andsummary=1(withcoin) return an object holding the aggregates you asked for, not rows. Combining an aggregate withlimit,cursororsortreturns 400.
Affects: /api/v1/funding/rates, /api/funding/rates
Funding settlement: window completeness flags
added
Every realised settlement window with a coverage_ratio now carries complete, halted_within_window and listed_within_window.
completeis true whencoverage_ratiois at least 0.9.halted_within_windowis true when a contract priced in the window stopped settling inside it. Its coverage is then measured up to the halt, so a halt does not read as missing history.listed_within_windowis always null on this endpoint: the settlement data carries no listing time.
Affects: /api/v1/funding/settlement, /api/funding/settlement
Spot-perp and cross-exchange boards: pair status and timestamps
added
Board rows say whether both legs are the same instrument and when their funding and prices were read.
- Spot-perp rows gain
perpSymbol,perpOpenInterestUsd,fundingIsStale,executionStatus,pairStatus,fundingAsOfandpricesAsOf.minOiUsd(default 0) sets an open-interest floor on the perpetual leg. - Cross-exchange rows gain
pairStatus,fundingAsOfandpricesAsOf.limitreturns the first N rows in board order.
Affects: /api/v1/arbitrage/spot-perp, /api/v1/arbitrage/cross-exchange, /api/arbitrage/spot-perp, /api/arbitrage/cross-exchange
Futures and the derivatives overview: freshness, open-interest summary, 503 on failure
changed
Futures data, futures coins and the derivatives overview now answer through the same serving layer as the other data endpoints.
chart=oi-snapshotgainssummary.oi_total_usd,oi_venue_count,oi_as_ofandoi_excluded_venues.- Answers carry the freshness
metafields andX-Data-*headers described in the 2026-09-28 entry. - A database failure answers 503 (was 500).
- Futures coins reads up to 5,000 coins (was capped at 1,000) and answers 503 instead of a fixed 20-coin list when the coin list cannot be read.
- Stored series are no longer patched with live venue data at request time.
- The derivatives overview's funding averages are computed the same way as
stats=1on the funding endpoint.
Affects: /api/v1/futures/data, /api/v1/futures/coins, /api/v1/market/derivatives-overview, /api/futures/data, /api/futures/coins
Freshness on every served answer
changed
Data endpoints report how fresh their answer is, in meta and in response headers. This covers every /api/v1 data endpoint and its free /api twin except futures, the derivatives overview (both joined on 2026-09-29), RWA perps rates and the analytics query.
metagainsdataset_id,as_of,stale_after,freshness_sla_seconds,freshness_status,runtime_status,served_from,generated_at,source,warningsandtruncated, pluscoveragewhen it is known.- Responses carry
X-Data-As-Of,X-Data-Stale-After,X-Data-Stale,X-Data-Status,X-Freshness-Sla-Seconds,X-Data-Sourceand, when known,X-Data-Coverage. - Free endpoints that answer a JSON object gain the same
meta, and keys the body's ownmetaalready had keep their values. Endpoints that answer a bare array carry the headers only. - On
/api/v1/global/overview,X-Freshness-Sla-Secondsis 600 for crypto and 3600 for the RWA tabs (were 1500 and 2700). On both global overview endpoints,X-Data-Sourcelists upstream source ids instead ofsupabase. - The hosted MCP server at /api/mcp passes the freshness to agents as
data_freshness.
Affects: /api/v1/*, /api/*, https://www.sharpe.ai/api/mcp
503 with Retry-After when an upstream is down
changed
When an upstream source is down or throttled and there is nothing to serve, served endpoints answer 503 with a Retry-After header.
- On v1 the error code is
service_unavailable. DEX-scanner preview, market-cap search and price prediction answered 502upstream_errorbefore. - 502 is no longer listed as a possible status on the v1 endpoints this rule covers.
Migration: Treat 503 as retryable: wait the Retry-After seconds, then repeat the request.
Affects: /api/v1/arbitrage/dex-scanner/preview, /api/v1/market-cap/search, /api/v1/price-prediction/data
Narrative sorting, BTC dominance, a coin filter on signals, dataset freshness in health
added
New parameters and fields on narratives, the market overview, the signal boards, health and coverage.
- Narratives:
sort=-change24horsort=change24h(nulls last),top=Nandbottom=N(1–50, list view only). - Market overview:
btc_dominance_pct. - Pump-dump and insider selling:
coin=returns that coin's row. A coin that no longer qualifies returnsscore: null; an unknown id returns an empty list. /api/v1/healthlists each dataset's freshness underdatasets./api/v1/meta/coveragelists each product's datasets withcadence_secondsandfreshness_sla_seconds.
Affects: /api/v1/narratives/data, /api/v1/tracker/market-overview, /api/v1/pump-dump/data, /api/v1/insider-selling/data, /api/v1/health, /api/v1/meta/coverage
MCP server 1.4.0: only live tools, and a correct settlement description
fixed
@sharpe-terminal/mcp-server 1.4.0 replaces 1.2.0 (June 2026) on npm. 1.2.0 still listed tools whose endpoints had been removed.
get_funding_settlementnow describes theexchangefilter correctly: it keeps a coin when any of its venues matches, each row's windows and open interest stay all-venue, and rows come in market-cap rank order. The old text said it filtered to one venue and sorted alphabetically.- The hosted server at /api/mcp has carried this text since its launch on 2026-09-26.
Affects: @sharpe-terminal/mcp-server
Rug Check: score and checks, fallback records, 503 on failure
changed
Security answers include the Rug Check score, and a GoPlus failure no longer fails the request while a fallback exists.
- Answers include
score(0–100, higher is safer, with verdict, note, data completeness and engine version) andchecks[]: the same score the scan page shows. The GoPlus fields are unchanged. - When GoPlus fails, the endpoint answers with the token's last good record (up to 7 days old, flagged
stale: truewithdataAsOfand anX-Data-Fallbackheader), then, for Ethereum, BSC and Base, a partial record from Honeypot.is (partial: true), then 503 withRetry-After. - Upstream failures answer 503 (
service_unavailableon v1) instead of 429, 502, 500 or 504.
Affects: /api/v1/rug-check/security, /api/rug-check/security
Arbitrage boards: one ranking rule and a spot-perp price check
changed
The spot-perp, cross-exchange and CEX spot-transfer boards rank rows by one rule, and spot-perp pairs whose prices disagree are no longer ranked as trades.
- Executable rows come first, then rows by net figure where they have one, else by gross figure, highest first.
- A spot-perp pair whose spot and perp prices are more than 20% apart keeps its gross
aprandbasisRate, getsnetApr: nulland ranks after every row with a net APR (6 of 3,065 rows at 2026-09-27 08:48 UTC). - CEX spot transfer ranks routes with stale inputs or too little depth below executable routes.
Affects: /api/v1/arbitrage/spot-perp, /api/v1/arbitrage/cross-exchange, /api/v1/arbitrage/cex-spot-transfer
Global and futures open interest grouped by asset
changed
The global overview and the futures data endpoints count each contract once under its asset.
- Lot contracts such as Binance 1000PEPEUSDT are no longer split from, or double-counted with, PEPE.
- Term structure and carry curve take each contract's type from Sharpe's instrument list.
Affects: /api/v1/global/overview, /api/v1/futures/data, /api/global/overview, /api/futures/data
Funding: coin names an asset
changed
coin matches every contract of an asset, whatever lot spelling the venue uses, and rows say which asset they belong to.
coin=PEPEreturns every PEPE contract, including the 1000PEPE and KPEPE lot spellings.coin=1000PEPEreturns the same set.- Current and accumulated rows carry
asset_id,asset_symbol,lot_multiplier,instrument_statusandis_live, null when a contract is not in Sharpe's instrument list yet. - Settlement windows read as partial below 0.9 coverage (was 0.8).
- The derivatives overview weights each venue's rate for an asset by that contract's own open interest.
Migration: If you relied on coin matching one lot spelling, filter the rows on symbol.
Affects: /api/v1/funding/rates, /api/funding/rates, /api/v1/funding/settlement, /api/v1/market/derivatives-overview
Open interest counted once per contract; MEXC left out of totals
changed
Open interest is one-sided USD notional on every venue: each contract is counted once.
- Bybit, Gate.io, Bitget, Pacifica, Backpack, ApeX and Extended publish both sides and were counted twice. They now read their one-sided figure, and their stored history was corrected.
- MEXC is still shown per venue but is left out of every cross-venue total. Payloads name it in
openInterestExcludedVenuesoroi_excluded_venues, and settlement venue rows carryexcluded_from_totals. - At the 2026-09-26 snapshot, global crypto open interest moved from about $97.7B to about $84.5B, and about $13B lower again without MEXC.
Migration: Totals no longer include MEXC. Read its per-venue row if you need it.
Affects: /api/v1/futures/data, /api/v1/global/overview, /api/v1/funding/settlement, /api/v1/market/derivatives-overview
Hosted MCP endpoint
added
The MCP server runs over Streamable HTTP at https://www.sharpe.ai/api/mcp, so a client can connect with a URL instead of starting a local process.
- Without a key, tools read the free /api endpoints. With an
Authorization: BearerorX-API-Keyheader, they call /api/v1 with that key, and each call is authenticated, rate limited and metered like a direct API call.
Affects: https://www.sharpe.ai/api/mcp
Web traffic: search interest removed
removed
Sharpe stopped using SerpAPI, the source of the Google search-interest data, so the search-interest mode and fields are gone.
mode=trendsis no longer accepted and returns 400.- Ranking rows no longer carry
searchVolume,searchVolumeChange7d,searchVolumeLatestorsearchVolumeWindowDays.
Migration: Use mode=rankings, mode=snapshots or mode=market.
Affects: /api/v1/web-traffic/data, /api/web-traffic/data
DEX Screener endpoints removed
removed
DEX Screener depended on Codex, a data source Sharpe no longer uses, and was answering with empty or month-old data. The product is removed from every surface.
/api/v1/dexscreener/data,/api/v1/dexscreener/securityand/api/dexscreener/securityanswer 404.- The MCP tools
get_dexscreener_dataandget_dexscreener_securityand the CLI commandsharpe dexscreenerare removed. - Memecoin rows no longer carry
dexScreenerPath.
Migration: Token security checks are available from /api/v1/rug-check/security. The /dexscreener pages redirect to Rug Check.
Affects: /api/v1/dexscreener/data, /api/v1/dexscreener/security, /api/dexscreener/security
Curated News removed
removed
The curated news feed had no producer and returned no stories, so it is removed.
/api/v1/news/curatedand/api/news/curatedanswer 404.- The MCP tool
get_curated_newsand the CLI commandsharpe curated-newsare removed.
Migration: Use /api/v1/news/feed.
Affects: /api/v1/news/curated, /api/news/curated
BitMEX retired
removed
BitMEX settled its last perpetuals on 2026-09-16 and closed on 2026-09-22.
- BitMEX no longer appears in live funding or open-interest data, venue lists or venue counts (33 → 32 funding venues).
Affects: /api/v1/funding/rates, /api/v1/funding/coins, /api/v1/futures/data
Fields whose source stopped are removed
removed
Fields that were null or zero on every row, because their upstream stopped publishing them, are removed.
- Mindshare, narratives, ecosystems and web traffic: the Telegram, Reddit, Twitter, GitHub, commit and developer or community score fields. CoinGecko stopped returning community and developer data on 2026-08-31.
- Pump-dump and insider selling:
dev_held_pct,sniper_held_pct,insider_held_pct,bundler_held_pct,wallet_age_std,old_wallet_swap_pct_1d,old_wallet_swap_pct_7d,unique_trader_imbalance_24h,is_scamandcoordination_risk. Their source, Codex, had resolved nothing since 2026-09-18. Both scores now leave missing inputs out and re-weight the rest instead of counting them as zero.
Affects: /api/v1/mindshare/data, /api/v1/narratives/data, /api/v1/ecosystems/data, /api/v1/web-traffic/data, /api/v1/pump-dump/data, /api/v1/insider-selling/data