Skip to main content
Press ⌘K to search

Capital, executives & screening

Capital-return and dilution programs, the people running a company, and the screen that finds companies by the numbers. Buyback figures are the filer's own XBRL facts plus verified extractions of the filings' narrative; ATM programs, executive changes, and executive pay come from the filings themselves. Nothing here is estimated — a figure the filing does not state is null.

/v1/stocks/

Returns a company's whole share-repurchase picture in one response: the latest authorization (authorizedAmount, remainingAuthorizedAmount, and the dates each was reported as of), every tracked program from the filing that established it, and the repurchase history split three ways — yearToDate for the fiscal year in progress, annualHistory newest fiscal year first, and quarterlyHistory newest quarter first. dollarsRepurchased is cash spent, in the period's unit (almost always USD); dollarsDerived is true when that figure was computed as the difference between two reported cumulative periods rather than reported for the span directly, and sharesFromFiling is true when the share count came from a filing rather than an XBRL fact. impliedAveragePrice is cash ÷ shares and reportedAveragePrice is the company's own stated average, so both are null when neither is available. A company with nothing on file returns null authorization figures and empty lists.

Parameters: {ticker} (path — e.g. NVDA). The endpoint takes no query parameters — an unsupported one is a 400 rather than being silently ignored.

curl "https://api.equibles.com/v1/stocks/NVDA/buyback-programs" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/buyback-programs",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/buyback-programs", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "ticker": "NVDA",
  "companyName": "Nvidia Corp",
  "dollarsAreCombinedEquity": false,
  "authorizedAmount": 80000000000.00,
  "authorizedUnit": "USD",
  "authorizedAsOf": "2026-05-18",
  "remainingAuthorizedAmount": null,
  "remainingAuthorizedUnit": null,
  "remainingAuthorizedAsOf": null,
  "programExpires": null,
  "programs": [
    {
      "announcedDate": "2026-05-18",
      "authorizedAmount": 80000000000.00,
      "currency": "USD",
      "expiresDate": null,
      "remainingAmount": 38500000000.00,
      "remainingAsOf": "2026-04-26",
      "lastObservedFiledDate": "2026-05-20",
      "latestForm": "8-K",
      "latestFilingUrl": "https://www.sec.gov/Archives/edgar/data/0001045810/0001045810-26-000051.txt"
    }
  ],
  "yearToDate": {
    "periodStart": "2026-01-26",
    "periodEnd": "2026-04-26",
    "dollarsRepurchased": 19312000000.0,
    "unit": "USD",
    "sharesRepurchased": 108000000.0,
    "impliedAveragePrice": null,
    "reportedAveragePrice": null,
    "form": "10-Q",
    "filedDate": "2026-05-20",
    "dollarsDerived": false,
    "sharesFromFiling": false
  },
  "annualHistory": [
    {
      "periodStart": "2025-01-27",
      "periodEnd": "2026-01-25",
      "dollarsRepurchased": 40086000000.0,
      "unit": "USD",
      "sharesRepurchased": 282000000.0,
      "impliedAveragePrice": null,
      "reportedAveragePrice": null,
      "form": "10-K",
      "filedDate": "2026-02-25",
      "dollarsDerived": false,
      "sharesFromFiling": false
    },
    {
      "periodStart": "2024-01-29",
      "periodEnd": "2025-01-26",
      "dollarsRepurchased": 33706000000.0,
      "unit": "USD",
      "sharesRepurchased": 310000000.0,
      "impliedAveragePrice": null,
      "reportedAveragePrice": null,
      "form": "10-K",
      "filedDate": "2026-02-25",
      "dollarsDerived": false,
      "sharesFromFiling": false
    }
  ],
  "quarterlyHistory": [
    {
      "periodStart": "2026-01-26",
      "periodEnd": "2026-04-26",
      "dollarsRepurchased": 19312000000.0,
      "unit": "USD",
      "sharesRepurchased": 108000000.0,
      "impliedAveragePrice": null,
      "reportedAveragePrice": null,
      "form": "10-Q",
      "filedDate": "2026-05-20",
      "dollarsDerived": false,
      "sharesFromFiling": false
    },
    {
      "periodStart": "2025-10-27",
      "periodEnd": "2026-01-25",
      "dollarsRepurchased": 3815000000.0,
      "unit": "USD",
      "sharesRepurchased": null,
      "impliedAveragePrice": null,
      "reportedAveragePrice": null,
      "form": "10-K",
      "filedDate": "2026-02-25",
      "dollarsDerived": true,
      "sharesFromFiling": false
    }
  ]
}

/v1/stocks/

Returns a company's at-the-market (ATM) equity programs — executed sales/distribution agreements to sell newly issued shares straight into the market, so the mirror image of a buyback — most recently announced first, with any program whose filings never stated an agreement date last. announcedDate is the original agreement date and announcedDatePrecision says whether the filing stated a day, month, or year; amendments stay on that program in lastAmendedDate rather than founding a duplicate. Money and share units remain separate across capacity, cumulative sales, and remaining availability, with independent as-of dates for each reported balance. Bare filing-table figures are normalized only from an exact grounded scale header. isFullyUtilized and isExpired compare only the company's own like-unit figures and dates rather than estimating. ATM programs have no tagged XBRL equivalent, so every figure comes from verified extractions of the company's 10-K/10-Q/8-K filings scanned over roughly the last 13 months: an empty programs array means nothing was captured in that window, not proof the company runs no ATM program. Most large caps return an empty array — NVDA does — so the example below uses a company that runs one.

Parameters: {ticker} (path — e.g. MARA). The endpoint takes no query parameters — an unsupported one is a 400 rather than being silently ignored.

curl "https://api.equibles.com/v1/stocks/MARA/atm-programs" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/MARA/atm-programs",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/MARA/atm-programs", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "ticker": "MARA",
  "companyName": "MARA Holdings, Inc.",
  "programs": [
    {
      "announcedDate": "2025-03-28",
      "announcedDatePrecision": "day",
      "lastAmendedDate": null,
      "lastAmendedDatePrecision": null,
      "capacity": 2000000000.00,
      "capacityShares": null,
      "currency": "USD",
      "expiresDate": null,
      "soldAmount": 571900000.00,
      "soldAsOf": "2025-09-30",
      "soldShares": null,
      "soldSharesAsOf": null,
      "remainingAmount": 1500000000.00,
      "remainingAsOf": "2026-06-30",
      "remainingShares": null,
      "remainingSharesAsOf": null,
      "lastObservedFiledDate": "2026-08-06",
      "latestForm": "10-Q",
      "latestFilingUrl": "https://www.sec.gov/Archives/edgar/data/0001507605/0001507605-26-000022.txt",
      "isFullyUtilized": false,
      "isExpired": false
    }
  ]
}

/v1/stocks/

Returns a company's executive and director changes — appointments, resignations, terminations, and retirements — extracted from its 8-K Item 5.02 filings and verified before publication, newest filing first. Each row carries the person, a normalized role (CEO, CFO, BoardMember, Other, …), the roleText exactly as filed when it differs, the action, the effectiveDate when the filing stated one, the verbatim disclosure, and a link to the source 8-K. coverage is reported separately from the rows and counts every 8-K the lane has read for this company, so an empty data array with processedFilingCount: 0 means the filings have not been processed yet — never that no changes happened. meta.hasMore signals a truncated timeline; page past it with offset.

Parameters: {ticker} (path — e.g. NVDA); action (Appointed, Resigned, Terminated, or Retired — an unknown value is a 400 listing the accepted ones); startDate / endDate (yyyy-MM-dd filed-date window); limit (default 25, max 100 — higher values are clamped, zero or negative is a 400); offset for paging.

curl "https://api.equibles.com/v1/stocks/NVDA/executive-changes?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/executive-changes?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/executive-changes?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "ticker": "NVDA",
  "companyName": "Nvidia Corp",
  "meta": {
    "limit": 2,
    "offset": 0,
    "count": 2,
    "hasMore": true
  },
  "data": [
    {
      "filedDate": "2026-07-02",
      "personName": "Nicholas Parker",
      "role": "Other",
      "roleText": "Executive Vice President, Worldwide Field Operations",
      "action": "Appointed",
      "effectiveDate": "2026-08-24",
      "disclosure": "On July 1, 2026, the Company appointed Nicholas Parker, age 55, as Executive Vice President, Worldwide Field Operations of the Company, effective upon the commencement of his employment with the Company, which is anticipated to be on August 24, 2026.",
      "form": "8-K",
      "filingUrl": "https://www.sec.gov/Archives/edgar/data/0001045810/0001045810-26-000060.txt"
    },
    {
      "filedDate": "2026-05-08",
      "personName": "Suzanne Nora Johnson",
      "role": "BoardMember",
      "roleText": "member of the Board",
      "action": "Appointed",
      "effectiveDate": "2026-07-13",
      "disclosure": "On May 7, 2026, the Board of Directors, or the Board, of NVIDIA Corporation appointed Suzanne Nora Johnson as a member of the Board and as a member of the Audit Committee of the Board and the number of directors constituting the full Board was increased from ten to eleven, in each case effective July 13, 2026.",
      "form": "8-K",
      "filingUrl": "https://www.sec.gov/Archives/edgar/data/0001045810/0001045810-26-000028.txt"
    }
  ],
  "coverage": {
    "processedFilingCount": 10,
    "coverageStartDate": "2023-07-24",
    "coverageEndDate": "2026-07-02"
  }
}

/v1/stocks/

Returns named-executive pay from a company's DEF 14A proxy Summary Compensation Tables — salary, bonus, stock and option awards, non-equity incentive, other, and the company-reported total per executive per fiscal year — newest fiscal year first, with the executives inside each year ordered by total, highest first. Amounts are nominal USD exactly as disclosed: a null component means the proxy omitted it, and total is the filer's own figure, never a recomputation. Proxy imports back-fill, so compare newestProxyOnFile with the newest fiscalYear in years[] before reading the top row as the company's latest disclosure — nothing else in the response would reveal a gap. newestProxyOnFile is omitted entirely when no proxy is on file, which for a foreign private issuer means pay is disclosed on Form 20-F and will never arrive here.

Parameters: {ticker} (path — e.g. NVDA); years (maximum fiscal years to return, newest first; default all on file, and a value below 1 is a 400).

curl "https://api.equibles.com/v1/stocks/NVDA/executive-compensation?years=1" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/stocks/NVDA/executive-compensation?years=1",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/executive-compensation?years=1", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "ticker": "NVDA",
  "companyName": "Nvidia Corp",
  "years": [
    {
      "fiscalYear": 2026,
      "executives": [
        {
          "personId": "7c1dbebc-49ae-441a-affa-3f3e9353e33d",
          "fullName": "Jen-Hsun Huang",
          "role": "CEO",
          "salary": 1497627.00,
          "bonus": null,
          "stockAwards": 24800511.00,
          "optionAwards": null,
          "nonEquityIncentive": 6000000.00,
          "otherCompensation": 4045691.00,
          "total": 36343830.00
        },
        {
          "personId": "356d5e92-0277-4ac4-bcee-be865949072e",
          "fullName": "Ajay K. Puri",
          "role": "Executive Vice President, Worldwide Field Operations",
          "salary": 948497.00,
          "bonus": null,
          "stockAwards": 12478989.00,
          "optionAwards": null,
          "nonEquityIncentive": 1300000.00,
          "otherCompensation": 49840.00,
          "total": 14777327.00
        }
      ]
    }
  ],
  "newestProxyOnFile": "2026-05-12"
}

/v1/screener/stocks

Screens the US stock universe by combining optional range filters across datasets — market cap and price, sector and industry, 13F filer count and its quarter-over-quarter change, short interest and days to cover, the composite squeeze and insider-sentiment scores, net insider buying over the trailing 90 days, the going-concern doubt flag, and the daily-refreshed fundamentals (trailing P/E, dividend yield, revenue growth YoY, gross margin, average daily dollar volume, and TTM net income). Every row carries the same fixed set of columns whatever you filter on — there is no column selection on REST — and rows are sorted by sortBy descending unless you pass sortAscending=true. A bound on a metric excludes stocks with no data on that axis, so filtering on a fundamental narrows the universe to companies that report it. The envelope is not the usual data/meta pair: totalCount is the whole match count, count the rows on this page, page the page actually served (a page past the end is clamped to the last real page, so compare it with what you asked for), totalPages is computed at the requested limit, and vintages dates the two mixed-cadence axes — the FINRA settlement date behind the short-interest and squeeze columns, and the completed 13F quarter behind the filer counts. Percent columns are percent numbers rather than fractions (6.4552… means 6.46 %), and only price (4 decimal places) and shortInterestPercent (2) are rounded — the other derived axes arrive at full decimal precision.

You do not have to memorise the vocabulary: the endpoint reports it. An unsupported query parameter returns a 400 listing every supported name, an unknown sortBy returns the full key list, and an unknown sector returns the accepted sectors. Industry names are exact taxonomy strings that the error deliberately does not enumerate — filter by sector and read the industry field off the returned rows to discover them.

Parameters: min/max pairs on MarketCap, Price, FilerCount, FilerDelta, ShortInterestPercent, DaysToCover, SqueezeScore, InsiderSentiment, NetInsiderBuy, Pe, DividendYield, RevenueGrowth, GrossMargin, DollarVolume, and NetIncome (so minMarketCap / maxMarketCap, minPe / maxPe, and so on); sector and industry (exact taxonomy names); index (keep only members of one covered index, by slug or name — sp-500, S&P 500, nasdaq-100, Russell 2000; an unknown name returns a 400 listing the covered indexes); hasGoingConcernDoubt (true keeps only companies with unalleviated doubt, false only those without); sortBy (marketcap, ticker, name, price, filers, filerdelta, sipct, dtc, squeeze, sentiment, insiderbuy, pe, divyield, revgrowth, grossmargin, dollarvol, netincome — default marketcap); sortAscending; limit (default 50, max 200 — higher values are clamped, zero or negative is a 400); page (1-based, default 1).

curl "https://api.equibles.com/v1/screener/stocks?minMarketCap=50000000000&maxPe=15&sortBy=divyield&limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
import requests
r = requests.get(
    "https://api.equibles.com/v1/screener/stocks?minMarketCap=50000000000&maxPe=15&sortBy=divyield&limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
const res = await fetch("https://api.equibles.com/v1/screener/stocks?minMarketCap=50000000000&maxPe=15&sortBy=divyield&limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
{
  "totalCount": 31,
  "count": 2,
  "page": 1,
  "totalPages": 16,
  "vintages": {
    "shortInterestSettlementDate": "2026-07-15",
    "thirteenFQuarterEnd": "2026-03-31"
  },
  "data": [
    {
      "ticker": "PGR",
      "name": "Progressive Corp/Oh/",
      "sector": "Financial Services",
      "industry": "Insurance - Property & Casualty",
      "marketCap": 125186785280.0,
      "price": 215.3300,
      "filerCount": 1769,
      "filerDelta": -65,
      "shortInterestPercent": 1.65,
      "daysToCover": 2.99,
      "squeezeScore": 56.45,
      "insiderSentimentScore": 34.27,
      "netInsiderBuy": -16117646.56,
      "hasGoingConcernDoubt": false,
      "priceToEarnings": 10.56,
      "dividendYieldPercent": 6.4552081794619273092655934400,
      "revenueGrowthYoYPercent": 7.2941283403017633157607707700,
      "grossMarginPercent": null,
      "averageDollarVolume3Month": 676667151.0,
      "netIncomeTtm": 11695000000.0
    },
    {
      "ticker": "MO",
      "name": "Altria Group, Inc.",
      "sector": "Consumer Defensive",
      "industry": "Tobacco",
      "marketCap": 114126987264.0,
      "price": 68.3500,
      "filerCount": 2498,
      "filerDelta": 103,
      "shortInterestPercent": 3.18,
      "daysToCover": 8.6,
      "squeezeScore": 53.25,
      "insiderSentimentScore": 46.78,
      "netInsiderBuy": -563435.657,
      "hasGoingConcernDoubt": false,
      "priceToEarnings": 14.30,
      "dividendYieldPercent": 6.2033655807132758765610378300,
      "revenueGrowthYoYPercent": 0.1474926253687315634218289100,
      "grossMarginPercent": 62.962015603018288783731935030,
      "averageDollarVolume3Month": 593999850.0,
      "netIncomeTtm": 7973000000.0
    }
  ]
}

Try it with a real key

Every example on this page runs against the live API. A free account includes an API key and MCP access — set up in under a minute.

Get your free API key