---
title: "Get dilution coverage status"
method: GET
path: "/dilution/{ticker}/coverage"
tags: ["Dilution"]
---

# Get dilution coverage status

`GET /dilution/{ticker}/coverage`

## Request

- Base URL: `https://api.signal8.ai/api/v1/public`
- URL: `https://api.signal8.ai/api/v1/public/dilution/{ticker}/coverage`
- Auth: API key in header `X-Api-Key`

Whether Signal8 holds a dilution snapshot for this company, how fresh it
is, and — when there is none — why. Cheap enough to poll before spending
credits on `/snapshot`, `/instruments` or `/history`.

`status` is the customer-facing verdict:
- `verified` — a current snapshot exists
- `stale` — a snapshot exists but is older than the freshness window,
  OR a material filing / a delisting form has been filed since it
  (see `statusDetail`)
- `not_covered` — no snapshot is being served for this ticker

`statusDetail` (added 2026-10-11) refines it without changing the three
`status` values: `verified` | `stale` | `newer_filing_unread` (a
material filing — new or amended instrument, 424B5/B4/B1 pricing,
split, 10-K — routed after the snapshot that it did not read, with no
refresh job in flight) | `delisting_filed` (a Form 25 / 25-NSE /
15-12B / 15-12G / 15-15D filed after the snapshot) | `not_covered`.
`unreadFilings` / `delistingFiled` name those filings. A null
`unreadFilings` means NOT MEASURED, never "nothing unread".

`lastSuccessAt` for a snapshot copied between environments is the
snapshot's own generation time, not the copy time.

`extraction` is the pipeline state behind that verdict
(`never_extracted` | `running` | `failed` | `timeout` | `complete`).

🔴 `not_covered` means NOBODY HAS READ THIS COMPANY'S FILINGS. It is not
a statement that the company has no dilution, and must not be rendered
as one.

`outOfScope: true` is a PRODUCT-SHAPE fact, not a suppression: dilution
coverage is a small-cap product, and large caps are outside it. A null
market cap is NOT out of scope.

**Credit cost: 1**

## Path parameters

- `ticker` string, required

## Response `200`

Coverage contract for the ticker

- object

## Other responses

- `400`: Invalid request parameters
- `401`: Missing or invalid API key
- `402`: Not enough credits for this request
- `403`: The API key's owner does not hold the per-user add-on this endpoint is sold under. 🔴 This is NOT a tier problem — a Pro subscription does not confer an add-on. Route the user to add-on purchase (`addonType` names which one), not to a plan upgrade. The distinct `ADDON_REQUIRED` code exists so the two flows can be told apart; treating it as `TIER_INSUFFICIENT` sends a paying customer to a page that cannot sell them what they were denied.
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/signal8/apis/signal8-public-api.md) · [All operations](https://skmtc.dev/signal8/apis/signal8-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signal8/apis/signal8-public-api/revisions/5a18ae8d6d58?raw)
