Skip to content

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_reasons description 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_stablecoins histories, get_exchange_listings weekly and monthly, the get_global_overview sparklines, and the get_narratives, get_ecosystems and get_memecoins sparklines and series. Rows timed by snapshot_at, settled_at or timestamp already 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); borrowCostIncluded is 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.

  • delta7d and delta30d are re-measured on formula v3 and never compare across 2026-10-19, when the narratives' coin lists changed, so delta30d is null until 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_completeness none (and a null score) 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_usd and 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-snapshot and summary.oi_total_usd read 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 for chart=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 oi signal 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 funding signal is the coin's OI-weighted funding.asset_avg_8h, the funding grid's Avg Rate, not the equal-weight mean of every fresh venue.
  • forecasts[].lowPrice and highPrice are an 80% range: the 10th and 90th percentiles of a lognormal centred on expectedPrice at 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/coverage no longer lists cli_commands for each product, and the coverage tests lists drop cli.
  • /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 series that chart= 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://exchanges lists 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 estimate instead of inferred; 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/recent and /api/tracker/market-overview moved to their /api/v1 twins. /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_briefing and find_opportunities, and the matching CLI commands, now need SHARPE_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=accumulated on /api/v1/funding/rates and /api/funding/rates reports freshness_sla_seconds and x-freshness-sla-seconds 1800, 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.

  • summary stays in every news item, always null, so clients that read it keep working.
  • /news/feed.xml items 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=liquidations returns Binance, Bybit and Deribit rows only. exchanges=OKX is refused with 400 on /api/futures/data and dropped on /api/v1/futures/data, which answers 400 when no venue is left.
  • /v1/global/overview sums liquidations24hUsd (the headline and each coin), liquidationsLongUsd, liquidationsShortUsd, liquidationsChange24hPct and liquidationsSparkline over 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/preview answers 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}/runs and /scanners/{id}/test-alert are removed; they needed a signed-in session. Saved scanners are no longer served.
  • /arbitrage/dex-scanner redirects to /arbitrage and /docs/arbitrage-dex-scanner to /docs/arbitrage-cex-spot-transfer.
  • /api/v1/meta/coverage no longer lists the dex-scanner-arbitrage product, and dex_pools is no longer a dataset_id in 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.

  • category takes top10, top20, top30 and top50, the new default; the legacy top-100 stays an alias of top50 and answers the same coins. ex takes 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, fundingVenuesUsed and rsi on every dot; median and constituents on tiles; as_of, eligible, excluded, omitted and coverage.emptyCategories on the body. The new fields are rounded (percent and RVOL to 2 dp, RSI to 1 dp, weightCoverage to 3 dp, largest.marketCapShare to 4 dp). Every existing field keeps its name, nullability and full precision, and y.3y stays (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_heatmap and sharpe 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 and exchange filters (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 and exchange filters (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-perp sell-spot rows carry the borrow_limit reason when the venue's borrow limit for the coin is under the $10,000 notional. /global/overview drops 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=coinex and exchange=coinbase on 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 adds rate_kind: estimate (the next settlement's estimate, most venues), last_settled (Kraken, Crypto.com, Bitfinex) or trailing_8h (Deribit). edgeX rate is now its forecastFundingRate; it served the rate already settled. Settlement rate_source adds mixed, window=current is documented as the next 24 hours, and coin resolves an asset as /funding/rates does (bitcoin -> BTC; PEPE brings 1000PEPE and KPEPE).
  • RWA perps: Lighter rows are per hour (interval_hours 1) 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): quantity is USD notional (do not multiply by price, which is always null), meta.source is velo, and coverage counts four-hour buckets.
  • Futures (chart=cvd): candles with taker volume carry cvd_delta_usd ((2 × taker_buy_volume − volume) × close) and cvd_usd, the venue's running sum over the window, so the CVD no longer has to be computed client-side.
  • Futures: chart=cvd warns which venues report no taker volume; public chart=oi-snapshot returns each venue's latest row; chart=long-short-ratio no longer mixes in top-trader rows; funding charts no longer read partial when every venue is complete; annualized_basis is documented as the instantaneous premium in percent. /futures/coins serves marketCapRank: null for 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 own updated_at, so a coin that stopped qualifying reads stale with a warning. oi_change_24h sums 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-history marks points built on a cron estimate (series[].estimated, backtests[].estimatedSettlements); a positive minOiUsd floor on spot-perp and cross-exchange treats MEXC open interest (left out of the API's totals) as unknown, so those rows fail it; the free cross-exchange route sends X-Total-Count and X-Next-Cursor; spreadRate is 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=delisting returns delisting announcements (it returned none). News: total on a cursor page counts the stories above the cursor. Memecoin launches default to solana,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 optional covered_hours_1d … covered_hours_1y, the hours of funding the settlements in that window stand for (the sum of their interval_hours), null when unknown. A window's coverage_ratio is now capped at those hours, so a gap in the middle of a window reads as missing.
  • Funding (type=current&extremes=N): extremes.highest holds up to N rows with rate_8h ≥ 0 and extremes.lowest up to N rows with rate_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_h is now documented. It leaves out rows whose updated_at is 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 503 service_unavailable and 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 with Retry-After past 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_finder and get_arbitrage_spot_perp ask for a 25-row page when given no limit (it was 200 for funding and 100 for the other two). When the context cap cuts a page's rows, pagination.cursor now resumes at the first row cut, not past the whole page.
  • CLI (sharpe-terminal-mcp): new sharpe analyze <coin> and sharpe opportunities print the coin-analysis and opportunities reports. sharpe login and sharpe doctor check 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.

  • history90d sums 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 }: t is the UTC day in unix seconds, net the 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.

  • ageBasis is token when ageHours counts from the token's first DEX pair, or pair when 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 now null, 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 … change1y are 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 fields median1h … median1y (calculationMethod.medianReturns). A row cached before the change still says median_constituent_price_change_min_500k_mcap and has no median* 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. MCP get_arbitrage_cross_exchange takes it; CLI sharpe arb cross-exchange --sector.
  • Gem finder: new optional chain (e.g. solana, base) keeps assets deployed on that chain, matching every chain in chainSlugs; an unknown chain is a 400. The free route reads it too. MCP get_gem_finder takes it; CLI sharpe 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 × close priced the whole bucket at its last close.
  • Web traffic: sentimentUpPct and watchlistUsers are null when the source has no value, where they were 0.
  • Ecosystems: market cap counts each token once, on its home chain (marketCapMethod = home-chain-constituents; dominance is 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_unpriced reason.
  • 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: hourlyRate per hour and annualRate = 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.
  • venues reports 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 tool get_arbitrage_borrow_rates; CLI sharpe 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-perp takes venue (optional contract) and direction; mode=cross-exchange takes longVenue and shortVenue (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. backtests covers 1, 7, 14, 30 and 60 days where shorter than days, then days: 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; CLI sharpe 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: borrowApr comes 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 is indicative with the new indicativeReason borrow_unpriced and ranks after executable rows.
  • Spot-perp and cross-exchange: X-Data-Venues no longer offers a venue whose funding rows are all past the funding SLA (for example a halted venue); X-Data-Missing names it stale. The free spot-perp route takes view=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. realised7dApr and realised30dApr are acc × 365 / days from stored settlements; spread7dApr / spread30dApr = impliedApr − realised, gross of fees. Rows rank by spread30dApr.
  • 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 tool get_arbitrage_fixed_floating_funding; CLI sharpe 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; pairStatus gains unpriced. limit and cursor page the board (v1 answers a page with pagination only 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; cursor pages the board.
  • Both funding boards send X-Data-Missing (each venue that is not a quoted member, as Venue:reason) and X-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; indicativeReason explains the rest, snapshot_quote meaning 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: datedBasisPct is now measured against the perp at the trade's executable sides (it was against spot), and expectedFundingToExpiryPct projects 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. funding7dStabilityPct is a deprecated alias of funding7dCumulativePct.
  • 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, and meta.transferScan counts 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. meta carries the most cautious freshness of the inputs.
  • A read that fails leaves a Data gaps line in the report; only when every read fails does the endpoint answer 503 (and the MCP tool an error).
  • sharpe briefing now prints the market briefing report (market stats, narratives, funding extremes, next settlement); its arbitrage section is the find_opportunities report. sharpe briefing --json prints 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 equals meta.freshness_sla_seconds.
  • The CEX spot-transfer scanner is unchanged (3,600).
  • Free API object bodies document the freshness meta they 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.

  • data is the payload as the API served it (the /v1 route's data with a key, the free route's body without one); pagination carries the cursor of a paged answer; meta says which route answered (route), the data's freshness (as_of, stale_after, freshness_status, runtime_status) and warnings. data_freshness is gone.
  • An answer cut to fit the context window keeps its shape; meta.truncated_fields names each cut field by its path in data with total and showing (and kept: "latest" for a series). The items wrapper 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/settlementMeta on /v1, data/totals/meta on the free route) instead of a client-side {rows, totals, meta}, and takes offset, sort and expand.
  • Tightened parameters: integers where numbers were accepted (days, limit on several tools), string length bounds on coin/exchange/venue/address, enums on news category and cross-exchange assetClass, bounds on the scanner floors and notional.
  • 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), --json prints the same data the 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: isStale uses 20 minutes for the crypto spine and 1 hour for the RWA spine (were 25 and 45 minutes), the same bounds as X-Data-Stale.
  • RWA perps: X-Freshness-Sla-Seconds is 3600 (was 1800); rows, lagging venues and X-Data-Stale flag stale after 1 hour (was 90 minutes).
  • Data Ocean catalog: stablecoins_metrics advertises 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_price is 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/coins and /v1/market/derivatives-overview no longer list a 502 response: an upstream that is down answers 503 service_unavailable on both.
  • Funding settlement: price and price_change_24h_pct are described as always null, which they are.
  • Futures data: interval_hours on funding-rate rows is the hours that settlement covered, null when unreadable (never assumed to be 8). The term-structure chart 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.

  • openInterest on 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.
  • fundingRate on 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: fundingRate is the coin's funding across venues as a fraction per 8 hours (it was one venue's rate per its own interval), fundingApr is that × 1,095 in percent, and openInterest is 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' median24h moved from 1.44 to 1.04 on the 2026-09-27 coin lists.
  • Heatmap: a coin's openInterest is its asset's one-sided open interest across venues, lot contracts included (PEPE $138.9M to $257.8M on the same book), and openInterestChange24h compares 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_window and halted_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_ratio and complete are 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_interest and market_cap_rank, and accumulated rows list first_settled_at, last_settled_at, asset_class, margin_type, interval_hours and is_active. Each is sent on every row, null when unknown.
  • Cross-exchange arbitrage rows list spreadSource, volumeLong24hUsd, volumeShort24hUsd and assetClass. netApr, spreadRate, longAsk and shortBid are nullable.
  • /v1/global/overview lists 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, status and coverage, plus the ecosystems market-cap method fields.
  • Stablecoin items and details list pegQuality, volume24hUsd and priceUpdatedAt.
  • Types as served: memecoin returnCoverage is a percent from 0 to 100, not a count; mindshare watchlist_users is a number; gem-finder athDate can be an empty string; listings lastListingAt is a date (YYYY-MM-DD) and window_days can be null; listing source_url and exchange docsUrl are plain strings; a liquidation point's price can be null.
  • Insider-selling rows no longer list eight pump-dump sub-scores that the endpoint never returned.
  • Query rules the endpoints already enforce: coin on /v1/futures/data and the four arbitrage scanners, and address on /v1/rug-check/security, must not be empty. The scanners' notional accepts 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/data description, 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/preview answers only a signed-in Sharpe session and is marked "Session".
  • The v1 inventory in /llms-full.txt is 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, stats and summary; narratives sort, top and bottom; coin on pump-dump and insider selling; minOiUsd on spot-perp; limit on cross-exchange.
  • analyze_coin, market_briefing and find_opportunities no 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_8h is rate × 8 / interval_hours. apr is 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_interest or sort=-open_interest orders current rows by open interest. Rows with unknown open interest come last.
  • extremes=N (1–100, with an optional min_oi_usd floor), stats=1 and summary=1 (with coin) return an object holding the aggregates you asked for, not rows. Combining an aggregate with limit, cursor or sort returns 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.

  • complete is true when coverage_ratio is at least 0.9.
  • halted_within_window is 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_window is 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, fundingAsOf and pricesAsOf. minOiUsd (default 0) sets an open-interest floor on the perpetual leg.
  • Cross-exchange rows gain pairStatus, fundingAsOf and pricesAsOf. limit returns 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-snapshot gains summary.oi_total_usd, oi_venue_count, oi_as_of and oi_excluded_venues.
  • Answers carry the freshness meta fields and X-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=1 on 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.

  • meta gains dataset_id, as_of, stale_after, freshness_sla_seconds, freshness_status, runtime_status, served_from, generated_at, source, warnings and truncated, plus coverage when 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-Source and, when known, X-Data-Coverage.
  • Free endpoints that answer a JSON object gain the same meta, and keys the body's own meta already had keep their values. Endpoints that answer a bare array carry the headers only.
  • On /api/v1/global/overview, X-Freshness-Sla-Seconds is 600 for crypto and 3600 for the RWA tabs (were 1500 and 2700). On both global overview endpoints, X-Data-Source lists upstream source ids instead of supabase.
  • 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 502 upstream_error before.
  • 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=-change24h or sort=change24h (nulls last), top=N and bottom=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 returns score: null; an unknown id returns an empty list.
  • /api/v1/health lists each dataset's freshness under datasets. /api/v1/meta/coverage lists each product's datasets with cadence_seconds and freshness_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_settlement now describes the exchange filter 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) and checks[]: 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: true with dataAsOf and an X-Data-Fallback header), then, for Ethereum, BSC and Base, a partial record from Honeypot.is (partial: true), then 503 with Retry-After.
  • Upstream failures answer 503 (service_unavailable on 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 apr and basisRate, gets netApr: null and 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=PEPE returns every PEPE contract, including the 1000PEPE and KPEPE lot spellings. coin=1000PEPE returns the same set.
  • Current and accumulated rows carry asset_id, asset_symbol, lot_multiplier, instrument_status and is_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 openInterestExcludedVenues or oi_excluded_venues, and settlement venue rows carry excluded_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: Bearer or X-API-Key header, 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=trends is no longer accepted and returns 400.
  • Ranking rows no longer carry searchVolume, searchVolumeChange7d, searchVolumeLatest or searchVolumeWindowDays.

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/security and /api/dexscreener/security answer 404.
  • The MCP tools get_dexscreener_data and get_dexscreener_security and the CLI command sharpe dexscreener are 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/curated and /api/news/curated answer 404.
  • The MCP tool get_curated_news and the CLI command sharpe curated-news are 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_scam and coordination_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

Was this page helpful?