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/{ticker}/short-volume

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.

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/short-volume?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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/{ticker}/short-interest

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.

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/short-interest?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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/{ticker}/off-exchange-volume

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.

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/off-exchange-volume?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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/{ticker}/fails-to-deliver

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).

```bash
curl "https://api.equibles.com/v1/stocks/NVDA/fails-to-deliver?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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.

```bash
curl "https://api.equibles.com/v1/short-interest/snapshot?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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.

```bash
curl "https://api.equibles.com/v1/short-volume/largest?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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).

```bash
curl "https://api.equibles.com/v1/short-squeeze-scores?minMarketCap=1000000000&limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
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())
```

```javascript
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());
```

```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
}
```