---
title: "Daily short volume for a stock"
method: GET
path: "/api/v1/short-interest/daily-volume/{symbol}"
tags: ["Finance"]
---

# Daily short volume for a stock

`GET /api/v1/short-interest/daily-volume/{symbol}`

Daily short volume history for a specific stock. Track short selling activity day by day.

## Path parameters

- `symbol` string, required — Security ticker symbol.

## Query parameters

- `limit` integer — How many of the MOST RECENT rows to return.

## Response `200`

Volume data.

- EnvelopeShortInterestDailyVolumeSymbolData
  - `data` ShortInterestDailyVolumeSymbolData, required
    - `symbol` string, required — Security ticker symbol.
    - `recency` HistoryRecency — Whether these rows are proven to be the most recent. The upstream archive answers oldest-first and stops at its own page size, so "the latest N" has to be established rather than asked for. It is established by covering a date window whole. For a symbol producing more rows than a page in the narrowest window tried, that cannot be done, and this block says so rather than letting a full page of older rows pass for recent history. Absent means the rows ARE proven to be the most recent, which is the ordinary case.
      - `proven_most_recent` boolean, required — False when the window could not be covered whole; the block is absent otherwise.
      - `reason` string, nullable — Which obstacle stopped the search, because each calls for a different action. `density` - the symbol reports more rows in a day than the archive returns at once, so a smaller request cannot help. `reach` - no window within the searched span could be read whole, which naming an explicit date range answers. `unreadable` - the upstream stopped answering partway through, which is transient and the same request again is the remedy.
      - `note` string, required — What that means for the caller, and how to close the window.
      - `qualifies` string[] — Which parts of this response the block applies to. The response keeps its ordinary shape when recency is unproven - fields do not appear and disappear with upstream conditions - so this names the affirmative claims that are not proven rather than leaving a client to guess which ones the note covers.
    - `history` HistoryCompleteness — Whether the search reached everything it was asked for. A different question from `HistoryRecency` and deliberately a separate block. Recency asks whether these rows are the newest; this asks whether they are all of them. A search ended by its own deadline, or by an upstream that stopped answering, can establish the first and not the second - the rows it did read ARE the most recent, and older ones it never reached may exist. Absent means the answer is as long as it was asked to be, or as long as the symbol has, which is the ordinary case.
      - `complete` boolean, required — False when the search stopped before finishing; the block is absent otherwise.
      - `reason` string, required — Why it stopped. `timed_out` - the search ran long and was cut off. `unreadable` - the upstream stopped answering partway through. Both are transient and about the moment rather than the symbol, so the same request again may simply succeed.
      - `note` string, required — What that means for the caller, in words.
    - `issuer` IssuerAttribution — Whose numbers these are. An archive keyed on a ticker holds every issuer that ever carried the string, and nothing about a row says which one it belongs to. Without this block a caller cannot tell a company's own history from the history of whoever held the ticker before it, and a clean 200 reads as the former.
      - `attribution` string, required — 'known' when the ticker feed answered the ownership question. 'unavailable' when it could not be consulted - which is NOT the same as no reassignment, and the rows are then unattributed.
      - `current_name` string, nullable — The issuer this ticker identifies today.
      - `current_company_id` string, nullable — Stable identifier of that issuer.
      - `reassigned_on` string, nullable — ISO date the ticker changed issuer, when the feed recorded one.
      - `excluded_predating` integer, nullable — Rows dropped because they predate the handover and belong to a different company.
      - `name_mismatch` string[], nullable — Archived issuer names that share no significant token with the current one. A weaker, independent signal, reported and never enforced: a company that renames itself looks exactly like this.
      - `note` string, nullable — What the caller should do about the above.
    - `count` integer, required — Number of items in this result set.
    - `records` ShortInterestRecord[], required — Array of record rows.
      - `symbol` string, required — Security ticker symbol.
      - `date` string, required — Observation date (YYYY-MM-DD).
      - `short_volume` integer, required
      - `total_volume` integer, required
      - `short_exempt_volume` integer, required
      - `short_pct` number, required
      - `market` string, required — Market identifier.
      - `facility` string, required
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/revisions/914af3d38c7c/schema)
