---
title: "Share Buybacks"
method: GET
path: "/api/footnotes/buybacks"
tags: ["Footnotes"]
---

# Share Buybacks

`GET /api/footnotes/buybacks`

![Pro](https://img.shields.io/badge/Pro-8b5cf6)

Returns share-repurchase activity per period: cash spent on buybacks (from the cash-flow statement), shares and dollar value actually repurchased, the average price paid per share, and the program view (board-authorized amount, remaining headroom, and the derived amount consumed).

Filers report execution in one of three XBRL concept families; the response serves ONE per period and names it in `repurchased.style`:

| style | meaning |
|-------|---------|
| `retired` | Shares retired on repurchase (`StockRepurchasedAndRetired...`). |
| `treasury` | Shares moved into treasury at cost (`TreasuryStock...Acquired`). |
| `repurchased` | The generic during-period pair. |

**Average price per share.** The filer's tagged weighted average (`TreasuryStockAcquiredAverageCostPerShare`) always wins. When absent, it is derived as `value / shares` STRICTLY within the served family (cross-family ratios mismatch, e.g. a tax-withholding value against program shares) and flagged `avgPriceDerived: true`.

Monetary values default to **US dollars** (`currency` parameter as on the statements endpoints: flows at the period-average rate, balances at spot, `fx` audit block, `currency=original` for as-filed). Share counts are never converted.

**What this data can tell you:**
- Average price paid vs the current share price.
- Remaining authorization headroom.
- Repurchase value relative to market cap (buyback yield).
- Share-count effect net of stock-compensation issuance.

**Data honesty notes:**
- Quarterly series is first-class (repurchases are 10-Q facts). Annual flow lines never masquerade as a Q4 quarter.
- The per-month issuer-purchases table (10-Q Part II Item 2) is an HTML table, not XBRL; quarterly is the granularity the data supports.
- Program authorization figures are tagged by far fewer filers than execution figures; absent fields are omitted, not null.

## Query parameters

- `symbol` string
- `cik` integer
- `cusip` string
- `composite_figi` string
- `share_class_figi` string
- `currency` string
- `period` 'annual' | 'quarter' — Base reporting period: `annual` or `quarter` (the periods companies actually report, without the derived `ttm` rollup).
- `limit` integer

## Response `200`

Buyback execution and program headroom, organized by period

- object[]
  - `period` string, date — The fiscal period end date (YYYY-MM-DD)
  - `fiscalYear` integer — The company's fiscal year (handles non-December year-ends).
  - `fiscalPeriod` 'FY' | 'Q1' | 'Q2' | 'Q3' | 'Q4' — Fiscal period of a reported value: `FY` (annual) or `Q1`-`Q4` (quarterly).
  - `currency` string, nullable — Currency of the monetary values after conversion (the requested `currency` unless listed in `fx.unconverted`); null when values remain in mixed currencies.
  - `cashSpent` number — Cash paid for common-stock repurchases during the period (cash-flow statement, flow).
  - `repurchased` object — Execution block from ONE concept family per period. Absent when the filer tagged no repurchase activity.
    - `style` 'retired' | 'treasury' | 'repurchased' — Which concept family the filer used. Absent when only a tagged average price exists.
    - `shares` number — Shares repurchased during the period
    - `value` number — Dollar value of shares repurchased
    - `avgPricePerShare` number — Weighted-average price paid per share; tagged by the filer or derived (see avgPriceDerived)
    - `avgPriceDerived` boolean — Only present (as `true`) when avgPricePerShare was computed as value / shares within the served family rather than tagged.
  - `program` object — Board authorization view. Absent when nothing was tagged.
    - `authorized` number — Total repurchase amount authorized under the program
    - `remaining` number — Remaining authorized amount at period end
    - `authorizedShares` number — Shares authorized, for share-denominated programs
    - `remainingShares` number — Shares remaining, for share-denominated programs
    - `consumed` number — Derived authorized - remaining, when both are present in one currency
  - `asr` object — Accelerated-share-repurchase fields, when the filer ran an ASR.
    - `initialPricePaid` number — Initial price paid per share under the ASR agreement
  - `dateFiled` string, date, nullable — SEC filing acceptance date of the newest filing contributing to this period. Use this to gate point-in-time data and avoid lookahead bias.
  - `fx` FxConversion — Foreign-currency conversion audit for this period. Every monetary value in `facts` is in the requested `currency` (default **US dollars**). This block is absent when the period was already wholly in the target currency (e.g. a US filer with the default USD, nothing to convert). It is present when one or more line items were originally filed in a different currency and converted on the fly, and it records the exact rate(s) applied so the conversion can be reproduced. Rates come from the Frankfurter API (api.frankfurter.dev). Instant balance-sheet items use the spot rate at period end; flow income/cash-flow items use the day-weighted average rate over the period.
    - `targetCurrency` string, required — The currency (ISO 4217) every `facts` value was converted INTO, the value of the request `currency` parameter (default USD). The literal `original` here means no conversion was requested: each fact stays in its as-reported currency (see `unconverted` for the per-fact mapping).
    - `originalCurrencies` string[], required — Every source currency (ISO 4217) that appeared in this period, the union of converted, unconverted, and already-in-target. The target currency itself is listed when some facts were natively in it (e.g. a foreign filer reporting some lines in USD alongside its converted local currency), so a mixed period reflects its true composition rather than appearing wholly converted.
    - `rates` object[], required — One entry per (source currency, method) actually applied. `rate` is the multiplier: `target = original * rate`.
      - `from` string, required — ISO 4217 source currency that was converted.
      - `method` 'spot' | 'average', required — `spot` for instant balance-sheet items (rate at period end); `average` for flow income/cash-flow items (day-weighted mean over the period).
      - `rate` number, required — Multiply the original-currency amount by this to get the `targetCurrency` amount.
      - `effectiveDate` string, date — Spot only: the date (YYYY-MM-DD) the applied rate was published (≤ period end).
      - `start` string, date — Average only: period start (YYYY-MM-DD).
      - `end` string, date — Average only: period end (YYYY-MM-DD).
    - `unconverted` object — Facts that could NOT be converted (no published rate within tolerance, or an unsupported code/date), grouped by the currency they remain in: each key is a source ISO 4217 code, each value lists the curated fact names in `facts` still in that currency (NOT `targetCurrency`). Absent when everything converted. Use it to know exactly which figures to treat as native currency.

## Other responses

- `400` — Invalid parameters or symbol not found
- `403` — Feature not available on current plan

## Changes

- **2026-08-24** `5ab763e6f203` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/stockfit/apis/stockfit-api/changes/api/footnotes/buybacks/get.md)

---

[API](https://skmtc.dev/stockfit/apis/stockfit-api.md) · [All operations](https://skmtc.dev/stockfit/apis/stockfit-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/stockfit/stockfit-api/revisions/de5578af3c78/schema)
