---
title: "Get float breakdown"
method: GET
path: "/companies/{ticker}/float"
tags: ["Companies"]
---

# Get float breakdown

`GET /companies/{ticker}/float`

## Request

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

Get float breakdown data for a company, including float shares,
definition, and as-of date — and, when the headline float is
withheld, the bounds and labelled fallbacks that stand in for it.

**The cardinal rule: `null` / absent / withheld means NOT MEASURED.**
It never means "no float", "no restricted shares" or zero. A numeric
`0` is a MEASURED zero and will pass a null check — so decide from
the accompanying reason/marker field (`floatWithheldReason`,
`restrictedBlockCount`, `provenance`, `direction`), never from the
value alone. Coercing an absence into a favourable statement about a
named issuer is the defect this contract exists to prevent.

**Which "float"?** `floatShares` values do not all share one
definition — read `floatDefinition` to know which you are getting:

- `tradeable` — shares outstanding minus affiliate holdings minus
  restricted/unregistered blocks (Regulation S, Rule 144, lock-ups).
  What can actually reach the tape. Used on tickers covered by a
  filing-derived dilution snapshot (`source: dilution-snapshot`).
- `non_affiliate` — the SEC I.B.6 / Rule 12b-2 "held by
  non-affiliates" figure, which INCLUDES restricted shares held by
  non-affiliates. Not what a trader means by float.
- `non_affiliate_estimate` — non-affiliate float approximated from
  Form 4 / 13D-G ownership filings.
- `free_float` — vendor-reported free float; methodology varies by
  provider and is not derived from filings.

⚠️ **Today `floatDefinition` and `source` are only reliably present on
filing-derived (`dilution-snapshot`) results.** A vendor-sourced float
arrives with NEITHER field (the response is as small as
`{ floatShares, asOfDate, floatEstimated }`), because the public API
does not disclose which vendor backs a figure. Read an ABSENT
`floatDefinition` as "not a filing-derived tradeable float" — treat
the figure as vendor free float and do not assume it is tradeable.

On snapshot-covered tickers `nonAffiliateFloatShares` carries the SEC
I.B.6 figure separately. It is the ONLY correct input to regulatory
calculations (baby-shelf / S-3 I.B.6 capacity); do not substitute the
tradeable float there, and do not present the non-affiliate figure as
tradeable supply.

**Withheld floats.** `floatShares` may be `null` with
`floatWithheldReason` set: the figure was deliberately withheld
because the filings do not support a single tradeable number, not
merely unavailable. Do not fall back to a vendor float of your own —
the withhold exists precisely because vendor figures are wrong on
those tickers. A withheld result may instead carry up to four
stand-ins, each of which says what it is IN the object. None of them
is a float, and none may be fed to a market capitalisation, a
percent-of-float, a short-interest ratio, a screen, a sort, or any
comparison with another ticker's float:

- `tradeableFloatCeiling` — an UPPER BOUND: the tradeable float is
  **at most** this many shares. Render it with `≤` and nothing else.
  `null` = no bound is stateable (an unsized block), never 0.
- `affiliateBasis.floatLowerBound` / `floatUpperBound` — a RANGE the
  float lies in: **between X and Y** shares. Each end is `null`
  independently when not measurable; state whichever ends exist as
  inequalities. This object is ALSO present on published floats,
  where both ends collapse onto `floatShares` — it is a bound only
  when `floatShares` is null.
- `floatEstimate` — a BADGED ESTIMATE with its working: `shares`,
  the `basis` sentence that itemises how it was reached, a
  `direction` saying which way it errs (`overstates` = the true
  float is at most this; `understates` = at least this; `unknown`),
  and a `confidence`. An estimate is an estimate. It is never
  promoted into `floatShares`, and `confidence` here describes the
  estimate, not a float. Today it is populated only on the
  `affiliate_basis_stale` reason and only when every input is
  measured; `null` is the ordinary outcome.
- `vendorFallback` — a third-party free-float figure offered beside
  the withhold, labelled `provenance: vendor` /
  `floatDefinition: free_float` inside the object so the label
  cannot be dropped. It is NOT our figure: it is not on the
  tradeable definition, and it has already been judged against every
  bound above (a vendor figure our filings refute is omitted, not
  shown). Present it as the vendor's free float with its own
  `asOfDate`, never in the "Float" slot.

`restrictedShares: null` means NOT MEASURED — a restricted block
exists whose size the filings do not state. Never treat it as 0.
`restrictedBlockCount: 0` IS an answer (no blocks found).

`affiliateBasisStale: true` is a LABEL, not a withhold: the affiliate
table subtracted to reach the float is materially older than the
share count. The number itself is unchanged.

**Two other shapes you will see** (measured on the live API):

A vendor free float — no `source`, no `floatDefinition`:

```json
{ "floatShares": 13521179933, "asOfDate": "2026-05-14", "floatEstimated": false }
```

A withheld float carrying a range and a vendor fallback, no headline:

```json
{ "floatShares": null, "source": "dilution-snapshot", "floatDefinition": "tradeable",
  "floatWithheldReason": "affiliate_basis_stale", "floatEstimate": null,
  "vendorFallback": { "floatShares": 303382, "provenance": "vendor",
                      "floatDefinition": "free_float", "asOfDate": "2026-05-13",
                      "splitAdjusted": false },
  "affiliateBasisStale": true,
  "affiliateBasis": { "floatLowerBound": 19960521, "floatUpperBound": 59419326,
                      "issuedSinceBasisShares": 39458805, "issuedSinceBasisPct": 66.4,
                      "anchorDate": "2026-01-21", "signal": "stated_basis" },
  "basisSharesOutstanding": 59419326, "affiliateShares": 0 }
```

Read the second as: "tradeable float withheld; between 19,960,521 and
59,419,326 shares; vendor free float 303,382 as of 2026-05-13" — and
compute nothing from any of the three numbers.

**Credit cost: 3**

## Path parameters

- `ticker` string, required

## Response `200`

Float breakdown

- object

## Other responses

- `400`: Invalid request parameters
- `401`: Missing or invalid API key
- `402`: Not enough credits for this request
- `404`: Resource not found
- `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)
