House Clerk
Filings filed between 2026-08-27 and 2026-09-27 · N 410 rows
- Median
- 50.7h
- P95
- 124.5h
- Maximum
- 724.5h
Veridion Disclosure API · live
Served corpus · measured, not estimated
86,635
disclosure rows served by the v1 API. Every one of them carries a link to the government filing it was parsed from. A row we cannot link to its source document is not served at all.
Coverage measured Oct 1 08:55 UTC
Congressional stock disclosures and executive-branch financial filings are public. They also live in different government systems, in different formats, with different ID schemes, and nothing joins them. We do that joining. Further down you can see what the API serves today next to what's still in the warehouse waiting to qualify.
Verify it before you contact anyone
curl "https://www.veridionmarkets.com/api/v1/disclosures\ ?within_statutory_window=false&min_delay_days=365&limit=1"
That pulls a trade that was disclosed more than a year after the 45-day deadline. You get the trade date, the filing date, the gap between them, the amount range as it was disclosed, and a link to the government filing we parsed it from. Open the PDF and check the two dates yourself.
To be clear about what that number is: it's the gap between two dates printed on a filing. It is not a finding that anyone did anything wrong. Broker delays, amended filings, and new members disclosing holdings they already had all show up in it, and none of those are violations. We report what was filed and when, attach the filing, and leave it there.
No key, no signup. 25 rows a request and 60 requests an hour, anonymously; the response tells you the same limits in its access block. Every row comes back with the government document it was parsed from.
Quickstart · Reference: /data-api/docs · Contract: /api/v1/openapi.json · Conformance: /api/v1/status · Fields and gaps: /data-api/dictionary
Rows served by the API
86,635
House Clerk rows served
49,852
Senate eFD rows served
7,056
Executive-branch rows served
29,727
Rows pending API qualification
46,210
Documents excluded after lossless reparse
0
Warehouse rows · Congress (including superseded)
226,614
As of Oct 1 08:55 UTC, recovery in progress. 8 documents remain retryable.
Warehouse provenance: /api/v1/coverage
The warehouse count includes superseded congressional rows and rows that do not yet satisfy the API's receipt-correspondence contract. Warehouse provenance categories: Retrieved from the official source by Veridion; Document reference held; not fetched by Veridion; No document reference. It is labelled separately and is not presented as API coverage.
Every other count on this page is a numerator. This is the denominator. House periodic transaction reports only, 2015 to date, measured against the House Clerk's own annual index. Held is what Veridion obtained; served is what this API returns. They are different numbers and the gap is ours to close, not to round away.
Published by the Clerk
7,673
Denominator · filing type P
Held by Veridion
7,613
99.2% of published
Served by this API
5,426
70.7% of published
Reconciliation run 54593556-3eab-4ff0-b494-62a4b09e4fcb, completed . Served measured . Served counts documents with a currently-valid version in the generation-pinned relation ordinary reads are served from, not the candidate view.
Held and served rates, including their numerator and denominator fields, are in /api/v1/coverage. The legacy rate remains held over published. Scope: House PTRs only. It says nothing about Senate eFD, nothing about the other filing types the Clerk's index carries, and nothing about whether that index is itself complete.
House, Senate and executive-branch queries share one retained-payload floor. It is set when complete payload history activates, not from a filing date or a source's configured observation start. Earlier source observations retained selected fields, not every enrichment and joined value in the served payload. Those records alone do not establish an earlier replay window.
Depth is elapsed retained time, not a count of filings or proof of uninterrupted collection. The window grows; it is not rolling. A chamber can have no rows at an accepted instant. Configured starts are not independently verified observation dates. No configured start is reported here for OGE, which is outside the observation-latency measurement. Replay measured at 2026-10-01T09:13:13.210291Z; observation metadata read at 2026-10-01T08:20:41.472394+00:00.
Requests before the floor return temporal_history_unavailable (400). The same floor and depth calculation is published in /api/v1/status under temporal_window. Compare measurement instants before comparing depths.
select public.resolve_disclosure_api_temporal_snapshot_0165(null, null); -- Floor = temporal_first_available_at rounded UP to the next millisecond. -- Depth = (resolved_at - floor) / 86400000 milliseconds, without rounding. select source_system, continuous_observation_started_on from public.disclosure_source_observation_starts where latency_statistics_eligible = true;
Decision recorded 2026-09-13: retain the activation floor. Migration 0165 requires complete payload versions; the earlier observation recorder in migration 0114 omits parsing and receipt-enrichment fields. An earlier timestamp or a stored subset cannot fill those values retrospectively. Extension requires a separately verified reconstruction, not a change to the advertised date.
We measure and publish our observation latency. We do not yet guarantee it. Continuous observation began 2026-07-08; a defensible distribution needs a longer record than we have. What we do commit to is receipt correspondence, point-in-time integrity, and disclosure of every restatement.
Filings filed between 2026-08-27 and 2026-09-27 · N 410 rows
Filings filed between 2026-08-27 and 2026-09-28 · N 92 rows
P95 withheld: fewer than 100 eligible rows.
OGE annual filings are excluded by source policy: one annual document is one event, not a latency distribution. Computed at 2026-10-01T08:20:41.472394+00:00.
This is not an SLA and not an uptime figure. It is a count of the responses this API actually returned, by UTC hour, from the observe-only recorder that has been writing since migration 0234. We publish it because a buyer should be able to check our reliability against something other than our word — and we publish what it cannot see, below, with the same prominence.
2026-09-15 22:00Z to 2026-10-01 09:00Z · 372 of 372 UTC hours observed · 0 hours with no request · retained 30 days · measured 2026-10-01 09:13:12Z
The four classes sum to 47,212, which is the recorder’s own request total of 47,212 exactly. Server errors were 0.189% of observed responses. A 4xx is the contract refusing a malformed request and a 429 is the quota enforcing itself; neither is counted as a failure.
| Day | Hours | Responses | Delivered | 4xx | 429 | 5xx |
|---|---|---|---|---|---|---|
| 2026-09-15 | 2 | 323 | 260 | 52 | 11 | 0 |
| 2026-09-16 | 24 | 3,083 | 2,511 | 520 | 49 | 3 |
| 2026-09-17 | 24 | 3,065 | 2,451 | 506 | 102 | 6 |
| 2026-09-18 | 24 | 2,996 | 2,412 | 497 | 85 | 2 |
| 2026-09-19 | 24 | 3,213 | 2,621 | 505 | 86 | 1 |
| 2026-09-20 | 24 | 3,287 | 2,676 | 514 | 94 | 3 |
| 2026-09-21 | 24 | 3,250 | 2,646 | 509 | 78 | 17 |
| 2026-09-22 | 24 | 3,643 | 2,946 | 611 | 80 | 6 |
| 2026-09-23 | 24 | 3,620 | 3,007 | 512 | 97 | 4 |
| 2026-09-24 | 24 | 3,467 | 2,921 | 478 | 62 | 6 |
| 2026-09-25 | 24 | 2,988 | 2,428 | 466 | 90 | 4 |
| 2026-09-26 | 24 | 2,600 | 2,255 | 257 | 88 | 0 |
| 2026-09-27 | 24 | 2,605 | 2,263 | 255 | 87 | 0 |
| 2026-09-28 | 24 | 2,557 | 2,208 | 260 | 83 | 6 |
| 2026-09-29 | 24 | 2,750 | 2,342 | 315 | 85 | 8 |
| 2026-09-30 | 24 | 2,732 | 2,361 | 266 | 90 | 15 |
| 2026-10-01 | 10 | 1,033 | 902 | 87 | 36 | 8 |
| Path | Hours | Responses | Delivered | 4xx | 429 | 5xx | 5xx share |
|---|---|---|---|---|---|---|---|
| /api/v1/disclosures | 372 | 34,408 | 28,617 | 4,456 | 1,303 | 32 | 0.093% |
| /api/v1/status | 370 | 4,589 | 4,491 | 43 | 0 | 55 | 1.199% |
| /api/v1/members | 363 | 2,024 | 1,997 | 25 | 0 | 2 | 0.099% |
| /api/v1/coverage | 364 | 2,004 | 1,363 | 641 | 0 | 0 | 0.000% |
| /api/v1/disclosures/{id} | 363 | 1,284 | 654 | 630 | 0 | 0 | 0.000% |
| /api/v1/openapi.json | 364 | 819 | 778 | 41 | 0 | 0 | 0.000% |
| /api/v1 | 363 | 710 | 704 | 6 | 0 | 0 | 0.000% |
| /api/v1/export | 361 | 633 | 0 | 633 | 0 | 0 | 0.000% |
| /api/v1/disclosures/{id}/history | 363 | 618 | 606 | 12 | 0 | 0 | 0.000% |
| (no such path) | 22 | 123 | 0 | 123 | 0 | 0 | 0.000% |
Who generated this traffic. 2,999 distinct one-way caller hashes — not a count of people or of licensees. The busiest single hash accounts for 23,534 responses (49.847% of the total), and 11,205 responses were to calls carrying a credential. Veridion’s own canary probes this API twice an hour and is inside this population; it is not excluded, because the hash is one-way and dropping traffic we merely believe is ours would be a worse defect than saying it is there.
Basis. Responses returned by the Disclosure API v1 origin, counted per UTC hour by the observe-only recorder added in migration 0234. Each response is classified once: delivered (status under 400), rate_limited (429), client_refused (any other 4xx), or server_error (5xx). The four sum to the recorder's own request total, and the measurement refuses to publish a rate when they do not. Hours are UTC and whole; an hour with no request produces no row and is counted as unobserved rather than as available.
Free and Developer access remains separate. The status reason first_party_provenance_not_proven is a release boundary, not a count of unverified rows. Enabling institutional delivery requires:
no_data instead of quietly counting it as coverage.{
"data": [
{
"disclosure_id": "congress-49775610",
"version_id": "congress-62882008:ccd5fdf5-2167-4790-ad96-39de1a74ed87",
"content_hash": "c062afb1a43b0ef302b4ffd963cfc509edcebf77485910c97650dacd19103649",
"identity_basis": "government_filing_facts",
"change": {
"type": "upsert",
"state": "active",
"observed_at": "2026-08-29T03:13:06.031Z",
"reason": null
},
"member": {
"member_id": "marjorie-taylor-greene",
"person_id": "G000596",
"full_name": "Marjorie Taylor Greene",
"chamber": "house",
"party": "Republican",
"state": "GA",
"district": "GA-14"
},
"asset": {
"ticker": "NVDA",
"name": "NVIDIA Corporation - Common Stock",
"asset_type": "equity",
"source_code": "ST",
"description": null
},
"transaction": {
"type": "buy",
"date": "2024-09-03"
},
"filing": {
"type": "periodic_transaction_report",
"filed_date": "2024-09-04",
"delay_days": 1,
"statutory_window_days": 45,
"within_statutory_window": true
},
"amount": {
"range_low": 1001,
"range_high": 15000,
"currency": "USD",
"midpoint": 8001,
"basis": "bounded_range_as_disclosed",
"verbatim_text": "$1,001 - $15,000"
},
"owner": {
"label": "not_specified_in_filing",
"determination": "receipt_verified_blank"
},
"receipt": {
"document_id": "20025777",
"url": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2024/20025777.pdf",
"access": "open",
"source_system": "house_clerk",
"content_type": "application/pdf",
"page": null,
"retrieved_at": "2026-07-18T15:33:51.743Z"
},
"provenance": {
"source_line_number": 63,
"parsed_at": "2026-08-28T13:30:53.141Z",
"parser_version": "house-ptr-line-v2",
"methodology_version": "receipt-or-drop-v1",
"source_ingested_at": "2026-07-18T15:33:51.743Z",
"first_observed_at": "2026-07-18T15:33:51.743Z"
}
}
],
"coverage": {
"rows_returned": 1,
"rows_dropped_failed_validation": 0,
"as_of": "2026-09-03T17:25:03.627Z",
"requested_as_of": null,
"point_in_time": false,
"point_in_time_floor": "2026-08-30T00:04:57.489Z",
"out_of_range": false,
"served_at": "2026-09-03T18:32:01.236Z",
"basis": "Rows Veridion retrieved from the official government source. Rows obtained from commercial providers are excluded at the database view, not filtered in application code."
},
"page": {
"limit": 1,
"has_more": true,
"next_cursor": "<signed cursor, about 590 characters; pass it back verbatim as ?cursor=. Readable base64url JSON plus a MAC, not encrypted -- see 1.3.21 and treat it as you would a URL carrying your query>",
"mode": "snapshot",
"requested_updated_since": null,
"snapshot_as_of": "2026-09-03T17:25:03.627Z",
"snapshot_generation": 613,
"next_updated_since": "2026-09-03T17:25:03.627Z"
},
"access": {
"tier": "free",
"max_rows_per_request": 25,
"requests_per_hour": 60,
"no_key_required": true,
"upgrade": {
"max_rows_per_request": 1000,
"request_a_key": "https://www.veridionmarkets.com/data-api"
}
},
"cache": {
"policy": "private-no-store",
"browser_max_age_seconds": 0,
"cdn_max_age_seconds": 0,
"declared_max_staleness_seconds": 0,
"age_header": null
},
"version": "1.14.0",
"notice": "Amounts are the bounded ranges as disclosed in the filings. Veridion infers no motive and makes no recommendation. Identification data, not investment advice. X-RateLimit-Limit is deprecated; use RateLimit-Limit. All X-RateLimit-* compatibility headers remain available; no removal date is scheduled."
}A production response to /api/v1/disclosures?limit=1, captured verbatim on 2026-09-03 under version 1.14.0, with the pagination cursor replaced by a description of itself. It is the same example the OpenAPI document publishes, and a test parses it with the schema that validates the live route, so this block cannot drift from what the API serves. Live, dataset-wide numbers: /api/v1/coverage.
The questions people actually ask of this data, each as a single request. No key needed, and every row in every answer has a receipt.url.
/api/v1/disclosures?within_statutory_window=falsemin_delay_days=N is the caller-chosen threshold instead./api/v1/disclosures/{disclosure_id}/historyrestated: true when content changed after first publication. Nothing is overwritten, nothing is inferred about why./api/v1/disclosures?as_of=2026-09-30T00:00:00Z&ticker=NVDAcoverage.point_in_time_floor the answer is a typed 400, not a guess./api/v1/members?name=pelosimember_id= takes the exact identifier a disclosure row carries./api/v1/disclosures?updated_since=2026-09-30T00:00:00ZLink: rel="next" or page.next_cursor to the end before advancing your watermark.It behaves like ordinary HTTP. Record and directory responses carry a weak ETag, and if you send it back as If-None-Match you get a 304. Free responses tell you your remaining budget in X-RateLimit-Policy. Every response says which version of the contract produced it (X-API-Version) and carries an X-Request-ID. Quote that id if you write to support@veridionmarkets.com.
Every row has a content_hash. You can recompute it from the published field list and keep it, which lets you prove later that the same version_id still serves the same content. The daily export rolls all of those hashes into one merkle_root, published on /api/v1/status, so anyone holding the export can check it offline.
When a request can't be answered, the error's type links to a page about that exact error. This is version 1.14.0. The changelog goes back to 1.0.0, ships inside the OpenAPI document, and is also at /data-api/changelog with an RSS feed; the newest entry is dated 2026-09-29. What you can do with the data (free use needs attribution) is at /data-api/license. A job checks this contract against live production rows twice an hour, and every run it has ever made, including the 89 that failed and what each one broke, is at /data-api/reliability.
What a client may rely on, in the same words the OpenAPI document carries in its description. Every clause names the mechanism behind it.
major.minor.patch, served on every response as X-API-Version and in this document's info.version. Minor and patch versions are additive: a field, parameter, enum value, endpoint or header may be added; nothing served is removed, renamed or retyped, and every response schema declares additionalProperties: false so an addition is visible in the document the day it ships. Every version has a changelog entry below, dated to the day it reached production./api/v2). /api/v1 is served, unchanged, for at least twelve months after the new major version is announced, and the announcement is a changelog entry on both versions.x-deprecated-headers and response notices, not resource-level headers. Only a deprecated resource sends Deprecation and Sunset (RFC 9745, RFC 8594), together with Link; rel="deprecation" pointing to its notice. No operation is deprecated today; a test refuses an operation marked deprecated without all three headers declared and refuses Deprecation or Sunset on an active operation. Existing X-RateLimit compatibility headers remain available; their removal was deferred in 1.9.0 and no removal date is scheduled.methodology_version on every row names the parsing and admission rules that produced it (currently receipt-or-drop-v1). A change to a derivation rule ships as a new methodology_version and a changelog entry. content_hash covers the government-filing facts and receipt coordinates only, so a methodology change never alters the hash of an unchanged filing; a change to the hash basis itself is a new basis label, never a silent edit.version_id; the prior version stays readable at /v1/disclosures/{id}/history, and as_of reads return what was served at that instant. The daily export's merkle_root commits to the corpus of the day.code from the catalog at /data-api/problems and a type URL that resolves to that code's page. Codes are added, never reused or removed within a major version./v1/status reports what was measured and degrades itself when its own arithmetic says so; every degraded state names each cause in degraded_reasons. Thresholds are operational alerting thresholds chosen by Veridion and are labelled as such in the response; they are not a service commitment. Commercial terms, where they exist, live in a license, never in this document.AI clients can connect to /api/mcp. search_disclosures queries receipt-linked rows and point-in-time history; get_disclosure_history returns every observed version of one filing, so an amendment never erases its predecessor; list_members resolves filers; get_coverage returns measured counts; and get_status returns source state.
Add this to your MCP client configuration, then ask it for a filer’s disclosures. Every answer it gives you carries the government document it came from.
{
"mcpServers": {
"veridion": {
"type": "http",
"url": "https://www.veridionmarkets.com/api/mcp"
}
}
}Machine-readable descriptor: /.well-known/mcp.json. The server negotiates protocol versions 2025-06-18, 2025-03-26 and 2024-11-05, and answers tools/list as the authority on what it exposes.
Verified against the pinned bulk snapshot. Missing evidence reads UNEVALUATED.
T1Point-in-time reads exclude later versions.
PASS · 236,825 rows · verified 2026-10-01
T2Pagination stays fixed while writes continue.
PASS · 86,606 rows · verified 2026-10-01
T3Incremental sync reconstructs the full set.
PASS · 213,832 rows · verified 2026-10-01
T4Restatements preserve permanent row identity.
PASS · 150,219 rows · verified 2026-10-01
Every tier here is one the API actually enforces, and every limit is the limit a key actually gets issued at. There's nothing on this list we haven't built.
What comes with the price (uptime, support, how we handle data, and the things we've decided not to offer) is written up at /data-api/commitments.
$0
No key and no account. It works right now.
Anyone checking a row against its filing, doing academic or newsroom work, or seeing whether the data is any good before talking to us.
Nothing to sign up for. The example request at the top of this page already uses it.
$49/mo
Or $490 a year, which works out to two months free. Same deal as the retail plans.
You're building something on this data and the free tier's hourly cap is in your way.
We set these up by hand right now; there's no self-serve yet. Use the form below and one of us will email you a key.
Not available
You can't buy this at any tier, and the API enforces that itself.
Anyone who wants to resell, republish or sublicense the corpus as a dataset.
Nothing to buy. institutional_delivery.available on /api/v1/status reads false, and it stays false until those things are done.
Quoted
We haven't put a list price on this. What you'd pull and what you need alongside it change the number a lot, so ask and we'll quote it.
You want the whole corpus in your own system rather than one page at a time: a warehouse load, a research panel, an internal review tool.
Ask below and say roughly how you'd use it. Keys with this scope are issued by hand, same as the others.
API billing requires 14 consecutive completed UTC days with 24 operational hourly observations each.
We went with that instead of a launch date because a date would just be a guess, and this is something you can check yourself, against the same endpoint we do. It said "degraded" when this page was built. The gate is shut, and it stays shut until the endpoint is clean. Open now: coverage_recovery.
Operational means ready with no degraded reasons. Missing hours break the streak; hourly samples are not an uptime SLA. Check it yourself: /api/v1/status, and the full conformance record at /data-api/reliability.
0 / 14 completed days. Measured . Counting since 2026-09-30T01:05:50.765Z. Last non-operational day: 2026-10-01; coverage_recovery, pipeline:/api/cron/full-congress-amount-ingest?backfill_docs=20&deadline_ms=270000&mode=completeness_backfill, pipeline:coverage, source:house_clerk:index_reconciliation.
You don't need this for the free tier; that's already working. This is for a Developer key or the daily snapshot add-on. We still set those up by hand, so tell us what you're building and roughly how much you'll pull, and we'll email you a key.
Rating changes, public disclosure activity, methodology notes, and product updates. One email per week. No advertising list resale.