sifting/io
GET/v1/last/most-active/:venue

Most active

Get the most actively traded US stocks and crypto assets today, ranked by volume, highest first, including symbol, current price, day volume, previous day volume, previous close, change, and percent change.

Format
JSON

Example

request · shell
curl -H "X-API-Key: $KEY" \
  "https://api.sifting.io/v1/last/most-active/stocks?limit=3"
200OKapplication/json
{  "data": [    {      "symbol": "AAPL",      "price": "190",      "day_volume": 30000000,      "prev_day_volume": 28000000,      "prev_close": "188.2",      "change": "1.8",      "change_pct": 0.9564    },    {      "symbol": "NVDA",      "price": "148.32",      "day_volume": 18452310,      "prev_day_volume": 21980400,      "prev_close": "139.1",      "change": "9.22",      "change_pct": 6.6283    },    {      "symbol": "TSLA",      "price": "271.4",      "day_volume": 9120455,      "prev_day_volume": 10234100,      "prev_close": "256.85",      "change": "14.55",      "change_pct": 5.6648    }  ],  "meta": {    "as_of": "2026-10-06T15:42:10Z",    "venue": "stocks",    "limit": 3,    "ranked_by": "volume"  }}
Loading runner…
First load only

Parameters

Parameter
venuerequiredenum · path
stocks | crypto.
limitinteger · query
Rows to return. 1–100, default 20. Any other value returns 400.

Response fields

Field
data[]array
Ranked rows, most active first.
data[].symbolstring
Symbol.
data[].pricestring
Current price.
data[].day_volumefloat
Volume so far today: the regular session for US stocks, the UTC day for crypto. Always raw volume, in shares or coin units.
data[].prev_day_volumefloat
Full volume of the previous trading day. Omitted when unavailable.
data[].prev_closestring
Previous close, the same value /v1/last/close returns. Omitted for a symbol with no stored close.
data[].changestring
price minus prev_close. Omitted when prev_close is omitted.
data[].change_pctfloat
Percentage change against prev_close, rounded to 4 decimals. Omitted when prev_close is omitted.
meta.as_ofstring
When the response was produced. RFC 3339, UTC.
meta.venuestring
The venue you queried.
meta.limitinteger
Row limit applied to this response.
meta.ranked_bystring
How the list is ranked: volume (stocks) or volume_usd (crypto).

Reference

How the ranking works
US stocks
Ranked by raw trading volume (share count), regular session only. meta.ranked_by is volume.
Crypto
Ranked by estimated dollar volume: day volume × current price, across USD-quoted pairs. Coins trade in very different units, so raw volume would put cheap coins on top. day_volume still shows the raw volume. meta.ranked_by is volume_usd.
Ties
Equal volumes are ordered by symbol, so rows never reshuffle between calls.
What today means
Crypto
The UTC day, from 00:00 UTC. Not a rolling 24 hours, so volume resets at midnight UTC.
US stocks
The regular session, 09:30–16:00 ET.
Between days
Before the open, on weekends, and on holidays, the list still shows the last session's totals until the next session's first trades.
Freshness & behavior
Refresh
Rankings refresh about once a minute: near real-time, not tick by tick. For tick-level prices use /v1/last/trade or the WebSocket.
Volume source
Our own aggregated volume, the same figure that feeds our OHLCV bars.
What's listed
Symbols with volume recorded today and a current price. A symbol without a live price at that moment is skipped, so the list can be slightly shorter than limit.
Empty list
On a fresh day, or before any volume is recorded, data is an empty array with 200, not an error.
Change fields
prev_close, change, and change_pct work as in /v1/last/movers and are omitted together for a symbol with no stored close.
Access
Follows the live-data access for the market: live stocks includes stock most active, live crypto includes crypto most active.
Prices are strings, cast before math
Why
price, prev_close, and change come back as JSON strings to preserve exact precision. day_volume, prev_day_volume, and change_pct are plain numbers.
The trap
Math on the raw string fields breaks: Python raises TypeError, JavaScript + silently joins the strings instead of adding.
Python
top = data["data"][0]; price = float(top["price"])
JavaScript
const top = data.data[0]; const price = Number(top.price);
cURL / jq
Cast in jq too: jq '.data[] | { symbol, price: (.price|tonumber), day_volume }'

Error responses

  • 400invalid_limit

    limit is not an integer between 1 and 100.

    { "error": "limit must be an integer between 1 and 100" }
  • 403not_entitled

    Your subscription doesn't include live data for this market, the same gate as /v1/last/trade.

    {  "error": "no active subscription for this market",  "market_id": "crypto",  "feature": "live_crypto"}
  • 404unknown_venue

    Venue path segment isn't a known venue.

    { "error": "unknown venue" }
  • 404venue_not_supported

    forex, commodities, and dex are valid venues but have no most-active list.

    { "error": "most active not available for this venue" }
  • 503market_data_unavailable

    Live data for this market is temporarily unavailable. Retry shortly.

    { "error": "market data unavailable" }

More in Live market data

See all