Skip to main content
Press ⌘K to search

Short data

Short-selling data — daily short volume, bi-monthly short interest, off-exchange volume, fails-to-deliver, and composite squeeze scores. Stock-scoped history is restated onto today's split basis so a series stays continuous across a split; the market-wide boards reflect the latest available settlement or trading day.

/v1/stocks/

Daily FINRA short-volume tape for one stock, newest first — reported short volume, short-exempt volume, total FINRA-facility volume, and the same-day short-volume percentage. Volumes cover off-exchange trades reported to FINRA facilities only (roughly 40% of consolidated tape volume), so a 40–50% short percentage is the normal baseline. Daily coverage begins 2026-04-06 — earlier dates return an empty page.

Parameters: {ticker} (path, required — e.g. NVDA); startDate, endDate (yyyy-MM-dd; default the trailing 3 months); limit (default 90, max 500) and offset for paging.

curl "https://api.equibles.com/v1/stocks/NVDA/short-volume?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/short-volume?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/short-volume?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    {
      "date": "2026-07-13",
      "shortVolume": 16289793,
      "shortExemptVolume": 12647,
      "totalVolume": 48733456,
      "shortVolumePercent": 33.42630368755296
    },
    {
      "date": "2026-07-10",
      "shortVolume": 26602058,
      "shortExemptVolume": 178353,
      "totalVolume": 66211891,
      "shortVolumePercent": 40.1771609271815
    }
  ],
  "meta": {
    "limit": 2,
    "offset": 0,
    "count": 2,
    "hasMore": true
  }
}

/v1/stocks/

Bi-monthly FINRA short-interest settlements for one stock, newest first — the current short position, its change since the prior settlement, average daily volume, and days to cover. FINRA caps daysToCover at 999.99: a returned 999.99 is a genuine reading meaning "999.99 or more", while the 999.99 placeholder FINRA files for a settlement with zero average daily volume is returned as null — the ratio is undefined there, not a measurement.

Parameters: {ticker} (path, required — e.g. NVDA); startDate, endDate (yyyy-MM-dd settlement dates; default the trailing 12 months); limit (default 24, max 500) and offset for paging.

curl "https://api.equibles.com/v1/stocks/NVDA/short-interest?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/short-interest?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/short-interest?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    {
      "settlementDate": "2026-06-30",
      "shortPosition": 310126785,
      "changeInShortPosition": 10460476,
      "averageDailyVolume": 155989510,
      "daysToCover": 1.99
    },
    {
      "settlementDate": "2026-06-15",
      "shortPosition": 299666309,
      "changeInShortPosition": 14943593,
      "averageDailyVolume": 167960279,
      "daysToCover": 1.78
    }
  ],
  "meta": {
    "limit": 2,
    "offset": 0,
    "count": 2,
    "hasMore": true
  }
}

/v1/stocks/

Weekly off-exchange (dark-pool / OTC) volume for one stock from FINRA's OTC/ATS Transparency data, newest first — split into ATS and non-ATS OTC share and trade counts. Each row carries mayIncludeCaseFoldedSiblingVolume; it is true before 2025-08-11 because those weeks may include a case-variant sibling security's volume and have aged out of FINRA's rolling source window.

Parameters: {ticker} (path, required — e.g. NVDA); startDate, endDate (yyyy-MM-dd week starts; default the trailing 6 months); limit (default 26, max 500) and offset for paging.

curl "https://api.equibles.com/v1/stocks/NVDA/off-exchange-volume?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/off-exchange-volume?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/off-exchange-volume?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    {
      "weekStartDate": "2026-06-22",
      "atsVolume": 80942287,
      "atsTradeCount": 1256234,
      "nonAtsOtcVolume": 263394397,
      "nonAtsOtcTradeCount": 6122784,
      "totalOffExchangeVolume": 344336684,
      "mayIncludeCaseFoldedSiblingVolume": false
    },
    {
      "weekStartDate": "2026-06-15",
      "atsVolume": 55489159,
      "atsTradeCount": 848691,
      "nonAtsOtcVolume": 219576379,
      "nonAtsOtcTradeCount": 4605721,
      "totalOffExchangeVolume": 275065538,
      "mayIncludeCaseFoldedSiblingVolume": false
    }
  ],
  "meta": {
    "limit": 2,
    "offset": 0,
    "count": 2,
    "hasMore": true
  }
}

/v1/stocks/

Lists SEC fails-to-deliver records for a stock — settlement date, share quantity, reference price, and dollar value — newest first. Each row's quantity is the aggregate outstanding fail position on its settlement date (a balance, not a daily flow — don't sum it across dates), and price is the prior trading day's closing price per the SEC file convention. The SEC publishes FTD data in half-month batches with a roughly two-week lag. The response's coverageStartDate says when full coverage begins (the earliest settlement date with full-universe ingestion, across all stocks): from it onward, an absent date means no reported fails; earlier dates are only partially covered, so their absence is not evidence of no fails.

Parameters: {ticker} (path) · optional startDate, endDate (yyyy-MM-dd settlement dates; default last 3 months) · limit, offset (paging).

curl "https://api.equibles.com/v1/stocks/NVDA/fails-to-deliver?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/fails-to-deliver?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/fails-to-deliver?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "data": [
    { "settlementDate": "2026-06-11", "quantity": 2, "price": 200.42, "value": 400.84 },
    { "settlementDate": "2026-06-10", "quantity": 3, "price": 208.19, "value": 624.57 }
  ],
  "meta": { "limit": 2, "offset": 0, "count": 2, "hasMore": true },
  "coverageStartDate": "2026-03-02"
}

/v1/short-interest/snapshot

Latest market-wide short-interest snapshot — one row per stock for the most recent settlement date, sorted by days to cover descending. Rows at FINRA's 999.99 days-to-cover cap are a sentinel tier (almost always illiquid names with a tiny volume denominator) and rank after real readings; pass minAverageDailyVolume to drop illiquid names entirely.

Parameters: minDaysToCover (default 0 = no filter); minAverageDailyVolume (minimum average daily share volume, e.g. 100000; default 0 = no floor — also accepted as minAvgDailyVolume); sortBy (daysToCover, shortPosition, or change; default daysToCover); limit (default 50, max 500) and offset for paging down the ranking (ties break on ticker, so pages never repeat or skip rows). The top-level settlementDate names the settlement the board is drawn from.

curl "https://api.equibles.com/v1/short-interest/snapshot?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/short-interest/snapshot?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/short-interest/snapshot?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "settlementDate": "2026-06-30",
  "data": [
    {
      "ticker": "SAXPF",
      "name": "Sampo OYJ",
      "shortPosition": 5506396,
      "changeInShortPosition": -88225,
      "averageDailyVolume": 6114,
      "daysToCover": 900.62
    },
    {
      "ticker": "CODGF",
      "name": "Compagnie De Saint Gobain",
      "shortPosition": 805997,
      "changeInShortPosition": -85002,
      "averageDailyVolume": 900,
      "daysToCover": 895.55
    }
  ]
}

/v1/short-volume/largest

Stocks with the largest daily short volume for a single trading day, sorted by short volume descending. Volumes cover FINRA-reported off-exchange facility trades only, so a 40–50% short percentage is the normal baseline.

Parameters: date (yyyy-MM-dd; default the latest available trading day); minShortVolume (default 0 = no filter); minTotalVolume (minimum total reported volume, default 0 = no floor — use it before sorting by percent so thin tapes don't top the board); sortBy (shortVolume or shortPercent; default shortVolume); limit (default 50, max 500) and offset for paging down the ranking (ties break on ticker, so pages never repeat or skip rows). The top-level date names the trading day the board covers.

curl "https://api.equibles.com/v1/short-volume/largest?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/short-volume/largest?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/short-volume/largest?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "date": "2026-07-13",
  "data": [
    {
      "ticker": "SOBR",
      "name": "SOBR Safe, Inc.",
      "shortVolume": 97258226,
      "shortExemptVolume": 22093363,
      "totalVolume": 161936624,
      "shortVolumePercent": 60.05943782056368
    },
    {
      "ticker": "AAL",
      "name": "American Airlines Group Inc.",
      "shortVolume": 67876880,
      "shortExemptVolume": 68577,
      "totalVolume": 128483694,
      "shortVolumePercent": 52.82917846368894
    }
  ]
}

/v1/short-squeeze-scores

Highest composite short-squeeze scores — a peer-relative 0–100 rank blending six short-pressure factors (short interest % of shares, days to cover, price vs trailing VWAP, short-volume trend, short-interest change, fails-to-deliver pressure) with catalyst boosts for a price spike, volume surge, or a near-term earnings call, highest first. Percentage fields come over the wire as fractions (0.112 = 11.2%). Pass a liquidity floor so untradeable micro-caps don't dominate the board.

Each row also carries the working behind its score: rank (position in the whole scored universe, stamped before your liquidity filters — so a filtered board keeps each row's real standing instead of renumbering from 1, and matches what a single-ticker lookup reports), baseScore and catalystBoost (score is their sum clamped to 100, so the split says whether a name rests on standing short pressure or a transient event), and the peer-relative factor percentiles — shortInterestPercentile, daysToCoverPercentile, shortVolumeTrendPercentile, shortInterestChangePercentile, failsToDeliverPercentile, priceAboveVwapPercentile. A percentile is absent when its factor is missing and drops out of the weighted mean. scoredCount on the response is the size of the scored universe the percentiles are relative to; total is how many rows survive your liquidity filters.

Parameters: ticker (one exact listed symbol — a single-stock lookup that returns only that row, with its board-wide rank also echoed at the top level and no total; limit, offset, and both liquidity floors are ignored, and a stock outside the scored universe returns 404 naming why); minMarketCap (USD, default 0 = no floor; unknown-cap stocks are excluded when set); minDollarVolume (USD average daily dollar volume, default 0 = no floor); limit (default 25, max 200) and offset for paging down the board (total reports the full filtered board size).

curl "https://api.equibles.com/v1/short-squeeze-scores?minMarketCap=1000000000&limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/short-squeeze-scores?minMarketCap=1000000000&limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/short-squeeze-scores?minMarketCap=1000000000&limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "settlementDate": "2026-07-15",
  "data": [
    {
      "ticker": "DNOW",
      "rank": 4,
      "score": 100.0,
      "shortInterestPercentOfShares": 0.09711299871293606,
      "daysToCover": 8.08,
      "shortVolumeShareTrend": 0.10830688766709835,
      "shortInterestChangePercent": 0.21658863934914815,
      "failsToDeliverPercentOfShares": 0.00019041308926037818,
      "priceAboveVwap": 0.22238909958215858,
      "hasPriceSpikeCatalyst": true,
      "hasVolumeSurgeCatalyst": false,
      "hasEarningsProximityCatalyst": true,
      "marketCapitalization": 3027259856.2080235,
      "averageDailyDollarVolume": 36401236.80468409,
      "baseScore": 82.91,
      "catalystBoost": 20.0,
      "shortInterestPercentile": 88.51654514862591,
      "daysToCoverPercentile": 84.97150997150997,
      "shortVolumeTrendPercentile": 78.31572769953051,
      "shortInterestChangePercentile": 83.19160997732426,
      "failsToDeliverPercentile": 52.636006730229944,
      "priceAboveVwapPercentile": 93.56386732533521
    },
    {
      "ticker": "FIGS",
      "rank": 6,
      "score": 100.0,
      "shortInterestPercentOfShares": 0.11988330918646428,
      "daysToCover": 6.71,
      "shortVolumeShareTrend": 0.06820869005617618,
      "shortInterestChangePercent": 0.13417834397806064,
      "failsToDeliverPercentOfShares": 0.0007231721740239189,
      "priceAboveVwap": 0.23829202237527236,
      "hasPriceSpikeCatalyst": true,
      "hasVolumeSurgeCatalyst": false,
      "hasEarningsProximityCatalyst": true,
      "marketCapitalization": 2384943104.0,
      "averageDailyDollarVolume": 42591226.331520475,
      "baseScore": 82.59,
      "catalystBoost": 20.0,
      "shortInterestPercentile": 92.37240605720696,
      "daysToCoverPercentile": 78.37606837606837,
      "shortVolumeTrendPercentile": 67.34154929577466,
      "shortInterestChangePercentile": 77.19671201814059,
      "failsToDeliverPercentile": 72.3780145821649,
      "priceAboveVwapPercentile": 94.3119266055046
    }
  ],
  "scoredCount": 7133,
  "total": 2939
}

Try it with a real key

Every example on this page runs against the live API. A free account includes an API key and MCP access — set up in under a minute.

Get your free API key