Read-only JSON for insider trades, politician trades (Congress), 13F fund moves, federal contracts, lobbying, prices and a screener. Every row carries source_url, the official record, and oqro_url, the matching OQRO page. It is the same data as the MCP server, for your own code.
Base URL https://oqro.io/api/v1. The API is part of OQRO Pro. This page is public; every request needs a key from a member account with an active subscription.
Send the key as Authorization: Bearer oqro_..., or in an X-API-Key header. If both are present, Authorization is used. Keys are personal: they act for your account, and the API stops answering if your subscription ends. OQRO stores only a one-way hash of a key, so a lost key cannot be recovered: revoke it and create another. You can hold 5 active keys.
Call the API from your servers or notebooks. Do not put a key in a web page or an app you distribute: the API does not send CORS headers, on purpose.
Endpoints
All endpoints are GET. Responses are JSON and are never cached. The same endpoints are described in an OpenAPI file you can import into Postman or a code generator.
GET /api/v1/companies/search
Find covered companies by ticker or part of a name. Up to 20 matches, ticker matches first. Use it to resolve a name to a ticker.
qstring, required
Ticker or part of a company name, up to 60 characters.
One company: profile, latest close and 12-month change next to the S&P 500, annual revenue and net income from SEC filings, latest FINRA short interest, and counts of recent disclosures.
What has been happening at one company, in one answer: its latest weekly note written from OQRO's own facts, its recent Form 8-K reports (executive changes, results, auditor and listing notices, deals) with the company's own opening sentence, mergers and acquisitions it is part of, and its 30 and 90 day price moves. Descriptive only: it never says why anyone traded.
daysint
How far back the Form 8-K reports and deals go, 7 to 365 (default 120).
Stock transactions disclosed by members of Congress in periodic transaction reports (House Clerk and Senate eFD), newest disclosure first. Amounts are the official ranges.
tickerstring
A covered ticker, for example AAPL. Omit for all companies.
memberstring
Part of the member's name, for example Pelosi.
sidestring
buy or sell (sell includes partial sales). Omit for all, exchanges included.
daysinteger
Look back this many days by disclosure date. 1 to 730, default 180.
limitinteger
Rows per page, 1 to 100. Default 25.
cursorstring
The pagination.next_cursor of the previous page, unchanged. Keep the same filters.
Federal lobbying spending for one company from Lobbying Disclosure Act reports (lda.gov). The rows are the individual reports, newest first; the quarter totals are in meta.quarter_totals.
tickerstring, required
A covered ticker, for example AAPL.
limitinteger
Rows per page, 1 to 100. Default 25.
cursorstring
The pagination.next_cursor of the previous page, unchanged. Keep the same filters.
Daily, weekly or monthly closing prices for one company next to the S&P 500 (SPY). The rows are the points; meta holds the period's change, high, low and drawdown. About two years of history are stored. Not paginated.
daysinteger
Look back this many calendar days. 5 to 750, default 365.
intervalstring
daily, weekly or monthly. Default: daily up to 120 days, weekly up to 400, monthly beyond.
include_sp500boolean
Add the S&P 500 close to each point and its change over the period. Default true.
Filter and sort every covered company (about 850) on published numbers. All filters combine with AND; a company with no figure for a filtered number is left out, never counted as zero.
sectorstring
GICS sector, for example Health Care or Energy.
min_market_value / max_market_valuenumber
Market value in US dollars (latest close times shares outstanding).
min_change_12m / max_change_12mnumber
Price change over 12 months, in percent (negative allowed).
min_vs_sp500_12m / max_vs_sp500_12mnumber
Percentage points ahead of (+) or behind (-) the S&P 500 over 12 months.
within_pct_of_12m_highnumber
At most this many percent below the 12-month high.
at_least_pct_below_12m_highnumber
At least this many percent below the 12-month high.
min_insider_purchases_90dinteger
At least this many open-market insider purchases of $10K or more in the last 90 days.
min_congress_purchases_90dinteger
At least this many Congress purchases disclosed in the last 90 days.
min_fund_adds_180dinteger
At least this many 13F new or increased positions disclosed in the last 180 days.
has_federal_contracts_90dboolean
true: at least one federal contract award in the last 90 days.
profitableboolean
true: positive net income in the last fiscal year.
positive_free_cash_flowboolean
true: operating cash flow minus capital expenditure above zero in the last fiscal year (not returned for banks and insurers).
net_cashboolean
true: more cash than debt at the latest report (not for banks and insurers).
min_days_to_covernumber
Minimum FINRA short-interest days to cover.
sort_bystring
One of market_value, change_12m, vs_sp500_12m, change_90d, vs_12m_high, insider_purchase_value_90d, insider_purchases_90d, congress_purchases_90d, fund_adds_180d, revenue, net_margin, free_cash_flow, days_to_cover, ticker. Default market_value.
directionstring
desc (default) or asc.
limitinteger
Rows per page, 1 to 100. Default 25.
cursorstring
The pagination.next_cursor of the previous page, unchanged. Keep the same filters.
Members of Congress or insiders ranked by how their disclosed purchases did against the S&P 500 (SPY) after they were reported: median relative return at 30, 90 and 180 days, share ahead of the index at 90 days, and the equal-weight $1,000 Mirror. At least 5 purchases measured at 90 days. meta.caveats holds the method and limits; past results describe the past.
kindstring
politician (default) or insider.
sortstring
best (default), worst (both by median 90-day relative return) or active (by number of purchases).
chamberstring
house or senate (politicians only).
limitinteger
Rows per page, 1 to 100. Default 25.
cursorstring
The pagination.next_cursor of the previous page, unchanged. Keep the same filters.
Disclosure baskets: companies that insiders, members of Congress and funds reported buying, held under a written rule, equal-weighted and measured against the S&P 500. Without slug, every basket with its return since start. With slug, the rule, risk figures, monthly returns and the member companies.
slugstring
A basket slug, for example insider-buys or congress-buys. Omit to list all baskets.
membersinteger
Member companies to return with a slug, 1 to 60. Default 25.
Insider buying statistics from SEC Form 4 since 2006: purchases, sales, values, buyers and median purchase per year. With year, also who bought, the ten largest purchases and the ten most-bought companies. With sector, that sector's purchases per year.
yearinteger
One year from 2006, for example 2024. Omit for every year.
sectorstring
A sector, for example Energy. Not combined with year.
Stock trades reported by members of Congress per year from 2021: trades, purchases, sales, members trading, the typical reporting delay and the share filed after 45 days. With year, also the most-traded stocks and most active members. Counts of trades, never dollars.
yearinteger
One year from 2021, for example 2025. Omit for every year.
GET https://oqro.io/api/v1/export returns events as a CSV file (UTF-8 with a byte order mark, a header row, ISO dates). Every row has source_url and oqro_url; official Congress amount bands stay as amount_min_usd and amount_max_usd. A page holds up to 1,000 rows; while the X-Next-Cursor response header is present, send it back as cursor. One query exports at most 10,000 rows. It needs OQRO Pro and counts against the same rate limits.
whatstring
events (default), person (needs person) or company (needs ticker).
modulestring
insider, institution, political or contract.
typestring
Comma-separated event types, for example insider_open_market_purchase.
ticker / person / member / institution / agency / chamberstring
Filters: a covered ticker, a person id, part of a member's name, a fund id, an agency name, house or senate.
min_amount / range / sortnumber
Minimum amount in US dollars, look-back in days (1 to 3650), latest or relevance.
limit / cursorinteger
Rows per page (1 to 1,000) and the cursor from X-Next-Cursor.
Without OQRO Pro the answer is 402 subscription_required.
Response shape
A list endpoint returns data (an array of rows), pagination and sometimes meta (the filters applied, or totals). /companies/{ticker} returns one object in data. Money is in US dollars, dates are ISO (YYYY-MM-DD), and a missing figure is null, never zero.
Every row of the event endpoints (insider-trades, congress-trades, fund-moves, contracts) and of lobbying has source_url and oqro_url: cite them. Rows that summarize a company (companies, screen) use the SEC filing list as source_url. Price points are a time series: the links are in meta.
Abridged: rows carry more fields, which are described in the data caveats below and may gain new ones. Ignore fields you do not know.
Pagination
Pass limit (1 to 100, default 25). While pagination.has_more is true, send pagination.next_cursor back as cursor with the same filters. A cursor is opaque and valid for the first 10,000 rows of a query. Because new filings arrive all the time, a row can shift between pages if you page slowly: de-duplicate on oqro_url when you need to be exact.
Every error has the same body and the matching HTTP status:
HTTP/1.1 402 Payment Required
{ "error": { "code": "subscription_required", "message": "The OQRO API is part of OQRO Pro and this key's account has no active subscription. Subscribe at https://oqro.io/app/unlock" } }
param names the offending parameter when there is one.
400invalid_parameter
A parameter is unknown, malformed or out of range. The message and param say which. Undocumented parameters are refused so a typo cannot silently widen a query.
401missing_api_key
No key was sent.
401invalid_api_key
The key is malformed, unknown or revoked.
402subscription_required
The key is valid but its account has no active OQRO Pro subscription. Nothing is returned until it does.
404ticker_not_covered
The ticker is well formed but OQRO does not cover it. Use /companies/search.
429rate_limited
Over the per-key limit. The Retry-After header says how many seconds to wait.
503data_unavailable
The data source did not answer. Retry after a few seconds.
503service_unavailable
The key could not be checked right now. Retry.
Rate limits
Each key may make 60 requests per minute and 5,000 requests per day (UTC windows), whatever the endpoint, with at most 100 rows per request. Over a limit you get 429 and a Retry-After header in seconds; requests that were refused still count. Every response reports where you stand:
RateLimit-Limit: 60
RateLimit-Remaining: 57
RateLimit-Reset: 38 # seconds until the minute window restarts
RateLimit-Policy: 60;w=60, 5000;w=86400
X-RateLimit-Limit: 60 # the same numbers under the older names
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 38
X-RateLimit-Day-Limit: 5000
X-RateLimit-Day-Remaining: 4876
Descriptive public data, not advice. OQRO reports what was disclosed. It infers no motive, gives no personalized advice and recommends no transaction. Do not present a row as a buy or sell signal.
A 13F is a quarter-end snapshot. It is filed up to 45 days after the quarter and has no trade date. fund-moves rows say so in trade_date.
Congress amounts are ranges. Members report an official band such as "$15,001 - $50,000", never an exact value, and the disclosure comes after the transaction. amount_min and amount_max are the band's ends: do not add them up as if they were values.
A contract's potential value is a ceiling. potential_value_usd includes every option and is not revenue. obligated_usd is what has been committed to date.
A Form 144 is a notice of a planned sale, not a completed one. A sale under a Rule 10b5-1 plan is flagged as planned_flag; other routine causes appear as automatic_reason.
Prices are adjusted daily closes, split- and dividend-adjusted and end of day, not intraday. A recently added company can have a shorter history; meta.window says so.
Coverage. US-listed companies from the S&P 500 down to small caps, with a curated set of 13F managers. Rows flagged for review are left out. Look-back windows reach up to about two years.
How it is built. Sources, update frequency and how each disclosure is classified are in the methodology. Open the source_url before you rely on a figure.
OQRO Pro
One subscription covers the API, the MCP connector and the OQRO site: insider trades, fund moves, politician trades (Congress), federal contracts, the screener, alerts and Ask OQRO.
OQRO is a research tool. It describes public disclosures and context calculated from them. It is not investment advice, does not give personalized advice and does not recommend any transaction.
Follow OQRO:
Cookies
With your OK we use cookies from Microsoft Clarity and PostHog to see how people move through the site, so we can improve it. What you type is hidden, and nothing is used for ads. Privacy Policy