OQRO for developers and agents
OQRO turns US public disclosures (SEC insider filings, 13F fund holdings, trades reported by members of Congress, federal contracts) into data you can read from code. Every row links the official filing it comes from.
Ways to connect
- REST API
Read-only JSON at https://oqro.io/api/v1: insider trades, Congress trades, 13F fund moves, contracts, lobbying, prices, a screener. One personal key.
- OpenAPI description
The same API as an OpenAPI 3.1 file, with the typed error schema and the rate-limit headers, for generators and agent frameworks.
- MCP server
Remote server over Streamable HTTP at https://oqro.io/api/mcp, with read-only tools and OAuth sign-in. Its card is at https://oqro.io/.well-known/mcp.
- Command-line tool
npm install -g oqro, then oqro insiders NVDA --side sell. JSON on stdout, for scripts and agents with a shell.
- llms.txt
What OQRO covers, when to use it, and the pages worth reading, written for AI assistants.
- Markdown for every page
Any public page returns Markdown when asked with Accept: text/markdown.
Quickstart
- Start the 3-day free trial of OQRO Pro (the API is part of it), or log in.
- Open API keys, name a key and copy it. It is shown once.
- Send it as a bearer token.
export OQRO_API_KEY=oqro_...
curl "https://oqro.io/api/v1/insider-trades?ticker=NVDA&side=sell&days=180&limit=5" \
-H "Authorization: Bearer $OQRO_API_KEY"
# or with the command-line tool
npx oqro insiders NVDA --side sell --days 180 --limit 5There is no separate sandbox: the API is read-only and returns the same public disclosures as production, so a test call cannot change or break anything. The free trial gives a working key.
Rate limits
Each key may make 60 requests a minute and 5,000 a day. Every answer, errors included, carries the standard RateLimit headers, so a client can throttle itself before it is refused; a refusal is HTTP 429 with Retry-After.
RateLimit-Limit: 60
RateLimit-Remaining: 57
RateLimit-Reset: 38 # seconds until the minute window restarts
RateLimit-Policy: 60;w=60, 5000;w=86400
Retry-After: 38 # on a 429 onlyThe older X-RateLimit-* names are sent as well. Tell us if you need a higher quota.
Errors
Every 4xx and 5xx answer has one JSON shape, described in the OpenAPI file as the Error schema. Branch on code; the message is for people and can change wording.
HTTP/1.1 429 Too Many Requests
Content-Type: application/json; charset=utf-8
Retry-After: 38
{ "error": { "code": "rate_limited", "message": "Rate limit reached (60 requests a minute per key). Retry in 38 seconds." } }- 401
missing_api_key- 401
invalid_api_key- 402
subscription_required- 429
rate_limited- 400
invalid_parameter- 404
ticker_not_covered- 404
not_found- 503
data_unavailable- 503
service_unavailable- 500
internal_error
Versioning and deprecation
- The version is in the address:
/api/v1. Every answer carriesAPI-Version: 1. - Inside a version we only add: new endpoints, new optional parameters, new fields in a response. A client must ignore fields it does not know.
- Removing or renaming anything, or changing what a field means, happens in a new version (
/api/v2), never in place. - A version is announced as deprecated at least 180 days before it is switched off. From the announcement its answers carry
DeprecationandSunsetheaders (RFC 9745 and RFC 8594) and aLinkheader withrel="deprecation"pointing here, and the change is posted on this page. - No version is deprecated today.
For AI agents
Read llms.txt first: it says what OQRO covers and when to reach for it. To call OQRO as tools, connect the MCP server; to call it from code, use the REST API or the command-line tool above.
Every public page can be read as Markdown. Ask for it with the Accept header; the same address still answers HTML to a browser.
curl -H "Accept: text/markdown" https://oqro.io/insiders
HTTP/2 200
content-type: text/markdown; charset=utf-8
vary: AcceptA page that does not exist answers 404 with a short Markdown body that points to llms.txt, the sitemap and this page.
OQRO describes public disclosures. It is not investment advice. Questions or a quota request: contact us.