Skip to content
ActionDesk is open: the whole SEC universe, free, with an event timeline for every issuerLearn more
API

Read the graph, citations included.

Everything the public surfaces render is available as JSON over the same routes they read from. No key, no versioning surprises: one version prefix, camelCase throughout, and provenance on anything derived from a filing.

Try it

curl -s localhost:3000/api/v1/health
curl -s 'localhost:3000/api/v1/situations?status=live'
curl -s 'localhost:3000/api/v1/tender-offers?price=41.80'
curl -s 'localhost:3000/api/v1/companies?exchange=NYSE'

Every response carries its provenance

Anything derived from a filing goes out with the accession, the exact document URL, the sentence it was read from, how it was extracted and how confident that extraction is. A figure nobody can trace back to a document is a rumour with a decimal point.

Confidence is not decoration

Structured XML fields — Forms 3/4/5, newer Schedule 13D/G — are read at high confidence. Tender-offer terms live in prose and are extracted heuristically, at a confidence that says so. Treat anything below 0.6 as a prompt to open the filing, not as a fact.

Prices come from you

EDGAR publishes no quotes. Spreads are computed against a price passed in the request, and the annualised figure additionally assumes the deal closes on the stated date and pays in full. Both assumptions fail regularly and both are printed beside the number.

The SEC’s limits are the client’s problem

Automated access to EDGAR is capped at ten requests a second and requires a User-Agent carrying a real contact address. The ingester runs below that ceiling, archives the exact bytes it was served, and re-parses from that archive rather than re-fetching — so a parser fix costs the SEC nothing.

Situations

Situations

A situation is the unit of work: one deal, campaign or voluntary action, with the filings that built it, the terms as of the most recent one, and every change between them.

GET/api/v1/situations

Live mergers, tender and exchange offers, going-private deals, spin-offs, buybacks and activist campaigns.

kind
tender_offer · merger · exchange_offer · going_private · spinoff · buyback · activist_campaign
status
live (default) · pending_close · completed · terminated · any
entity
ticker, CIK or internal id
expiringBefore
ISO date
/api/v1/situations?kind=tender_offer&status=live
GET/api/v1/situations/{uid}

One situation in full — conditions, deadlines, the whole filing chain, the change log and every citation.

/api/v1/situations/tender%3A0001900001%3Ameridian
GET/api/v1/tender-offers

Tender and exchange offers with economics. Pass a market price and the gross and annualised spread are computed against it — never against an invented quote.

price
the market price to price the spread against; EDGAR publishes none
expiringBefore
ISO date
/api/v1/tender-offers?price=41.80
GET/api/v1/calendar

Every live deadline in date order, each naming the filing it was read from.

days
window, 1–365, default 45
/api/v1/calendar?days=45
Events and filings

Events and filings

The normalised timeline, and the documents underneath it.

GET/api/v1/events

The unified timeline — material events, insider transactions, ownership crossings and situation stages.

kind
material_event · insider_transaction · ownership_stake · situation_event · periodic_report
entity
ticker, CIK or internal id
materiality
high · normal · low
since / until
ISO dates
/api/v1/events?materiality=high&limit=25
GET/api/v1/filings

Discovered filings, filterable by form, family and date.

form
exact form type, e.g. SC TO-T
group
family: TENDER · 13D/G · OWNERSHIP · 8-K · PERIODIC
/api/v1/filings?group=TENDER
GET/api/v1/filings/{accession}

One filing, its documents, the events parsed from it, and optionally its extracted text.

text
true to include the plain text, capped at 200,000 characters
/api/v1/filings/0001140361-26-033928
Ownership

Ownership

Who owns what, who is buying, and who has said what they intend to do about it.

GET/api/v1/insiders

Forms 3, 4 and 5. Open-market purchases and sales only by default — grants, exercises and tax withholding are most of the volume and almost never the question.

issuer / owner
ticker, CIK or internal id
openMarketOnly
false to include every transaction code
minValue
minimum transaction value in dollars
/api/v1/insiders?openMarketOnly=true&minValue=1000000
GET/api/v1/activists

Schedule 13D and 13G positions, with the Item 4 intent flag.

activist
true for 13Ds stating an intent to engage
schedule
13D · 13G
minPercent
minimum percentage of class
/api/v1/activists?activist=true
Entities

Entities

The graph node everything else hangs off. Around eight thousand companies are loaded before a single filing is parsed, so search and the directory work on a first run.

GET/api/v1/search

Ticker match first, then name prefix, then contains.

q
required
/api/v1/search?q=AAPL
GET/api/v1/companies

The directory: every listing, filterable by exchange and first letter, with filing and event counts.

q
ticker, name or CIK
exchange
Nasdaq · NYSE · OTC · CBOE · Unlisted
letter
a–z, or # for names starting with a digit
withFilings
true to show only filers with filings ingested
/api/v1/companies?exchange=NYSE&letter=a
GET/api/v1/companies/{id}

One company: identity, live situations, timeline, recent filings, insiders and ownership.

/api/v1/companies/AAPL
GET/api/v1/companies/{id}/timeline

Everything that happened to one company, grouped by day.

/api/v1/companies/AAPL/timeline
GET/api/v1/companies/{id}/insiders

Insider activity with a ninety-day open-market net.

/api/v1/companies/AAPL/insiders
Watches

Watches

Following a deal is the hinge of the whole funnel, so it is modelled server-side from the start — and then deliberately switched off. Ownership here is an opaque key the caller supplies, which is a place to put a watch rather than an identity: anyone holding a key can read or delete that owner’s watches. Every route below therefore answers 503 until sign-in exists. The shape is documented because it is what sign-in will be bolted to, not because it is callable today.

POST/api/v1/watches

Watch a situation, company or query, with the conditions that should raise an alert.

x-owner-key
header — the opaque owner key
targetKind
situation · entity · security · query
target
a situation uid, a ticker, a CIK, or a query string
conditions
free-form JSON: the agent’s job description
POST /api/v1/watches  {"targetKind":"situation","target":"tender:0001900001:meridian"}
GET/api/v1/watches

List the watches for an owner key.

/api/v1/watches
DELETE/api/v1/watches?id=

Deactivate a watch.

/api/v1/watches?id=1
Operations

Operations

Is the graph there, and how much of it.

GET/api/v1/health

Row counts per table, or the commands to build the graph if it does not exist yet.

/api/v1/health
Open Securities Event SchemaNot yet published

The event shape this API already returns is the draft. The intention is to publish it as an open schema with SDKs, validation tooling and evaluation datasets, so brokers, custodians, agents, funds and AI systems can describe a securities event the same way. What stays closed is the normalised database behind it, the workflow history, the custodian mappings and the decision and reconciliation data — none of which is in any public source.

If other systems start describing a securities event with these identifiers, that is worth considerably more than any amount of traffic — which is the argument for opening the schema and keeping the graph.

Terms

Derived from public SEC EDGAR filings. Extraction from prose is heuristic and carries a confidence; every figure links to the document it was read from. Not investment, legal or tax advice.