Track US House members' financial-disclosure filings — including Periodic Transaction Reports (PTRs), the STOCK Act filings where members must disclose their stock trades within 45 days. Defaults to PTRs; pass type=annual|candidate|amendment|all to see other disclosure kinds. Filter by member name (q), 2-letter state, filing year, or filing-date range (dateFrom/dateTo). Each result gives the member, state + district, filing type (with a readable label), the filing/disclosure date, and a direct link to the source document (docUrl). The envelope total is the full count matching your filter — so q=Pelosi or year=2026 answers 'how many PTRs did they file'. Covers 2008→present (~8,200 PTRs), refreshed daily so new filings appear within ~a day. Note: by law trades are disclosed up to 45 days after they happen — this is current-to-the-filing, not real-time. Data: US House Clerk (public domain).
/api/gov/congress-filingsPAYMENT-SIGNATURE.The congress filings API is a pay-per-call gov endpoint built for AI agents and autonomous software. Track US House members' financial-disclosure filings — including Periodic Transaction Reports (PTRs), the STOCK Act filings where members must disclose their stock trades within 45 days.
There is no signup and no API key. An agent (or any HTTP client) hits the endpoint, receives an x402 "402 Payment Required" challenge, signs a sub-cent USDC payment on Base or Solana, and retries — the data comes back on the paid request. That makes it a drop-in congress filings data source for an agent tool-use loop, an MCP host, or a backend that needs gov data on demand without onboarding to yet another vendor portal.
| Name | Type | Description |
|---|---|---|
q | string | min 1 chars · max 80 chars |
state | string | min 2 chars · max 2 chars |
type | string | min 1 chars · max 40 chars |
chamber | string | one of: house | senate |
year | integer | min 2008 · max 2100 |
dateFrom | string | match ^\d{4}-\d{2}-\d{2}$ |
dateTo | string | match ^\d{4}-\d{2}-\d{2}$ |
limit | integer | min 1 · max 100 |
offset | integer | min 0 · max 100000 |
# 1. Probe with no auth → 402 envelope with PaymentRequirements curl -sS 'https://2s.io/api/gov/congress-filings?q=example&state=xx&type=example&chamber=house&year=2008&dateFrom=2024-01-01&dateTo=2024-01-01&limit=25&offset=0' # 2. Sign + retry with PAYMENT-SIGNATURE: curl -sS 'https://2s.io/api/gov/congress-filings?q=example&state=xx&type=example&chamber=house&year=2008&dateFrom=2024-01-01&dateTo=2024-01-01&limit=25&offset=0' \ -H 'PAYMENT-SIGNATURE: <base64-json-payload>' # Or use the canonical runner (handles probe → sign → retry): # EVM_PRIVATE_KEY=0x... node --env-file=.env.local \ # --experimental-strip-types scripts/x402-pay.ts \ # 'https://2s.io/api/gov/congress-filings?q=example&state=xx&type=example&chamber=house&year=2008&dateFrom=2024-01-01&dateTo=2024-01-01&limit=25&offset=0'
import { TwoS } from '@2sio/sdk'
const client = new TwoS({
privateKey: process.env.EVM_PRIVATE_KEY as `0x${string}`,
})
const result = await client.gov.congressFilings({
"q": "example",
"state": "xx",
"type": "example",
"chamber": "house",
"year": 2008,
"dateFrom": "2024-01-01",
"dateTo": "2024-01-01",
"limit": 25,
"offset": 0
})
console.log('endpoint:', result.endpoint)
console.log('cost:', result.costUsd, 'USDC')
console.log('tx:', result.settlement?.txHash)
console.log('data:', result.data)import os
from twosio import TwoS
client = TwoS(private_key=os.environ["EVM_PRIVATE_KEY"])
result = client.gov.congress_filings(q="example", state="xx", type="example", chamber="house", year=2008, dateFrom="2024-01-01", dateTo="2024-01-01", limit=25, offset=0)
print("endpoint:", result.endpoint)
print("cost:", result.cost_usd, "USDC")
print("tx:", (result.settlement or {}).get("tx_hash"))
print("data:", result.data)// 1. Add @2sio/mcp to your MCP host config (Claude Desktop example below).
// EVM_PRIVATE_KEY funds x402 payments per call.
// claude_desktop_config.json
{
"mcpServers": {
"2sio": {
"command": "npx",
"args": ["-y", "@2sio/mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}
// 2. Once the server is running, agents call this tool via standard MCP:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "gov.congress-filings",
"arguments": {
"q": "example",
"state": "xx",
"type": "example",
"chamber": "house",
"year": 2008,
"dateFrom": "2024-01-01",
"dateTo": "2024-01-01",
"limit": 25,
"offset": 0
}
}
}| Field | Type | Description |
|---|---|---|
ok | boolean | one of: true |
items | array | |
total | integer | Total matching rows upstream; null when unknown. |
source | object |
{
"ok": true,
"items": [
{
"docId": "example",
"chamber": "example",
"memberName": "example",
"state": "example",
"district": "example",
"filingType": "example",
"filingTypeLabel": "example",
"filingYear": 1,
"filingDate": "example",
"docUrl": "example",
"tradesParsed": false
}
],
"total": 1,
"source": {
"provider": "example",
"url": "example",
"license": "example"
}
}