Congressional Trading API
The Disclosed Capitol API provides US congressional stock-trade disclosures (House and Senate STOCK Act periodic transaction reports) and executive-branch financial disclosures (OGE Form 278) as JSON: trades, politician portfolios, returns and alpha, committees, government contracts, lobbying, legislation, and insider-trading cross-references.
New filings are ingested at high frequency, typically available within the hour of publication, and can be pushed in real time via webhooks.
Authenticate with an API key in the DC-API-Key header. Keys are free to create at disclosedcapitol.com/data-files/api, and a new account comes with 750 free credits to try the API. After that, calls spend credits from a plan (Core has a 7-day free trial) or a pay-as-you-go top-up. Machine-readable OpenAPI 3.1 spec: api.disclosedcapitol.com/openapi.json. Open dataset: executive-branch-trades on GitHub.
New to the API? Start with the API quickstart, then get a member's trades as JSON (all guides).
Programmatic access to 316 endpoints covering congressional trades, portfolios, signals, financial disclosures, and more.
GET /v1/tools is public — paste this in a terminal and it works instantly, no key. For the other endpoints, get an API key. A new account comes with 750 free credits to try them; for more, start Core's 7-day free trial.
curl https://api.disclosedcapitol.com/v1/tools
{
"base_url": "https://api.disclosedcapitol.com",
"auth": { "header": "DC-API-Key", "billing": "pay-per-use, billed to your key" },
"routing": {
"lookup": { "method": "GET", "path": "/search" },
"query_trades": { "method": "GET", "path": "/trades" },
"semantic_search": { "method": "GET", "path": "/v1/semantic-search" },
"get_portfolio": { "method": "GET", "path": "/portfolio/{politician_id}", "path_params": ["politician_id"] },
"get_conflicts": { "method": "GET", "path": "/conflict/{politician_id}", "path_params": ["politician_id"] }
},
"anthropic": [
{ "name": "query_trades", "description": "Search congressional & executive stock trades...", "input_schema": { "type": "object", "properties": { "ticker": {"type": "string"}, "politician_id": {"type": "integer"}, "...": {} } } }
],
"openai": [
{ "type": "function", "function": { "name": "query_trades", "description": "...", "parameters": { "type": "object", "properties": { "...": {} } } } }
]
}Get new trades, filings, and contract awards pushed to your endpoint the moment they land. 6 event types. Included with Pro and Max.
Every request needs an API key, passed as a DC-API-Key header. Base URL is https://api.disclosedcapitol.com.
curl https://api.disclosedcapitol.com/trades?limit=5 \ -H "DC-API-Key: dc_your_key_here"
[
{
"id": 249075,
"politician_id": 7,
"politician_name": "Ed Case",
"party": "D",
"state": "HI",
"chamber": "House",
"ticker": "AAPL",
"trade_type": "Buy",
"asset_type": "Stock",
"amount_range": "$1,001 - $15,000",
"transaction_date": "2026-05-14",
"disclosure_date": "2026-05-31",
"days_to_disclose": 17,
"sector": "Technology",
"price_on_trade_date": 298.21,
"price_on_disclosure": 312.06,
"gain_7d": 2.27,
"source": "house.gov"
},
"... 4 more trades"
]Keep keys server-side. If a key is exposed, rotate it from Account → API Keys.
One REST API, every politician trade, every committee portfolio, every overlap. Below is a curated tour of 75 of the most-used endpoints across 8 categories. The full 316-endpoint catalog with base per-call credit costs comes back from GET /credits/endpoints or GET /openapi.json. Most data endpoints also charge per row: 1 credit, or 5 for an executive-branch (OGE) trade or disclosure row.
| GET | /tradesPaginated trade feed with filters (politician, ticker, date, type, party) | |
| GET | /trades/bulk-latestComposite latest trades with enrichment data | |
| GET | /politiciansPolitician list with stats and rankings | |
| GET | /politicians/{id}Politician profile with trading stats | |
| GET | /politicians/{id}/tradesAll trades for a politician | |
| GET | /tickers/{ticker}/tradesCongressional trades for a specific stock | |
| GET | /tickers/topMost-traded tickers in Congress | |
| GET | /feed/liveReal-time trade feed | |
| GET | /feed/recentRecent trades for display | |
| GET | /searchGlobal search across politicians, tickers, and bills | |
| GET | /stats/summaryPlatform summary: total trades, politicians, activity |
| PUSH | disclosure.detected Pro | |
| PUSH | trade.created Pro | |
| PUSH | insider.filed Pro | |
| PUSH | lobbying.filed Pro | |
| PUSH | contract.awarded Pro | |
| PUSH | whale.filed Pro |
| GET | /alerts/webhook-events Pro | |
| GET | /alerts/webhooks/guide Pro | |
| GET | /alerts/subscriptions Pro | |
| POST | /alerts/subscriptions Pro | |
| DELETE | /alerts/subscriptions/{id} Pro | |
| POST | /alerts/subscriptions/{id}/test Pro | |
| POST | /alerts/subscriptions/{id}/rotate-secret Pro |
Real-shaped JSON for four flagship endpoints — /trades is expanded below; click the others to expand them, or click any row in the catalog above to see the request and response for that endpoint inline.
Recent congressional trades with enrichment (price, return, alpha)
GET https://api.disclosedcapitol.com/trades?limit=2
[
{
"id": 249075,
"politician_id": 7,
"politician_name": "Ed Case",
"party": "D",
"state": "HI",
"chamber": "House",
"ticker": "AAPL",
"trade_type": "Buy",
"asset_type": "Stock",
"amount_range": "$1,001 - $15,000",
"amount_low": 1001.0,
"amount_high": 15000.0,
"transaction_date": "2026-05-14",
"disclosure_date": "2026-05-31",
"days_to_disclose": 17,
"sector": "Technology",
"industry": "Consumer Electronics",
"price_on_trade_date": 298.21,
"price_on_disclosure": 312.06,
"gain_7d": 2.27,
"current_return": null,
"days_held": 18,
"source": "house.gov"
},
{
"id": 249066,
"politician_id": 178,
"politician_name": "Marjorie Taylor Greene",
"party": "R",
"state": "GA",
"chamber": "House",
"ticker": "PLTR",
"trade_type": "Buy",
"asset_type": "Stock",
"amount_range": "$1,001 - $15,000",
"transaction_date": "2026-05-12",
"disclosure_date": "2026-05-30",
"days_to_disclose": 18,
"price_on_trade_date": 28.47,
"price_on_disclosure": 30.12,
"gain_7d": 5.79
}
]Politician stats: CAGR, Sharpe, alpha, conflict score, holdings
Coordinated trading clusters — 3+ politicians, same ticker, same week
Live portfolio: open positions with unrealized P&L and weight
Hand-picked high-value endpoints to get started
Every error returns a JSON body of the form { "detail": "..." } with an appropriate HTTP status. Build retry logic against these codes — most are recoverable without manual intervention.
| Code | What it means · How to recover |
|---|---|
| 400 | Bad Request. Malformed parameters or missing required fields. Check parameter names + types against the endpoint spec; do not retry as-is. |
| 401 | Unauthorized. Missing or invalid DC-API-Key header. Verify the key is active in Account → API Keys. If recently rotated, update your client. |
| 402 | Payment Required. Credit balance is zero — request would deduct below zero. Top up at /account?tab=billing or wait for your plan's next monthly allowance. |
| 403 | Forbidden. Your tier does not include this endpoint. Upgrade or use an equivalent lower-tier endpoint listed below. |
| 404 | Not Found. Endpoint path or resource ID does not exist. Check the politician_id / ticker / committee_code against /search before retrying. |
| 422 | Unprocessable Entity. Parameter values failed validation (e.g. malformed date, out-of-range limit). Inspect the response body for the field name. Fix and retry. |
| 429 | Too Many Requests. Per-minute rate limit exceeded for your plan. Back off for the seconds in the Retry-After header (default 60), then retry. Higher plans have higher limits, and credit top-ups can raise yours. |
| 500 | Internal Server Error. Unexpected server failure — we log + alert on these. Retry with exponential backoff. If persistent, email support@disclosedcapitol.com. |
| 502 | Bad Gateway. Upstream data source (e.g. SEC, House clerk) is temporarily unreachable. Retry after 30–60s. The data layer falls back to cached values when possible. |
Tip: never deduct credits on the client. Always read the actual balance from GET /credits/balance after a request — it reflects retries, partial deductions, and refunds.
Two independent guards: a per-minute burst limit on request rate, and your credit balance as a hard ceiling on volume. Both fail closed with a clear retry signal.
| Credits only | 60 req/min |
| Core | 120 req/min |
| Pro | 240 req/min |
| Max | 600 req/min |
Credit top-ups can raise your limit, never lower it: $25+ of top-ups in the last 30 days lifts you to at least 240 req/min, and $100+ to 600 req/min.
On 429: response includes a Retry-After: 60 header. Back off, then retry.
Each request deducts credits. When balance hits zero, the API returns 402 Payment Required until you top up.
Check remaining balance any time: GET /credits/balance
Tip: track the balance returned in /credits/balance and alert your own system below 20%.