Veridion Disclosure API · live

The public record, made usable.

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.

House Clerk
49,852
Senate eFD
7,056
Contract
v1.14.0
Paths documented
8/8

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

Coverage · stamped from the API serving view

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.

What we serve, against what the Clerk published

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.

Replayable history

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.

House

Configured observation start
2026-07-08
API replay floor (inclusive, UTC)
2026-08-30T00:04:57.489Z
Replayable depth (days, unrounded)
32.380737511574075

Senate

Configured observation start
2026-07-08
API replay floor (inclusive, UTC)
2026-08-30T00:04:57.489Z
Replayable depth (days, unrounded)
32.380737511574075

Executive branch

Configured observation start
Unavailable
API replay floor (inclusive, UTC)
2026-08-30T00:04:57.489Z
Replayable depth (days, unrounded)
32.380737511574075

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.

Measurement queries and decision
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.

Observation latency

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.

House Clerk

Filings filed between 2026-08-27 and 2026-09-27 · N 410 rows

Median
50.7h
P95
124.5h
Maximum
724.5h

Senate eFD

Filings filed between 2026-08-27 and 2026-09-28 · N 92 rows

Median
26.3h
Maximum
26.3h

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.

Origin response history

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

Responses
47,212
Delivered
39,210
Refused (4xx)
6,610
Rate limited (429)
1,303
Server error (5xx)
89

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.

By UTC day

DayHoursResponsesDelivered4xx4295xx
2026-09-15232326052110
2026-09-16243,0832,511520493
2026-09-17243,0652,4515061026
2026-09-18242,9962,412497852
2026-09-19243,2132,621505861
2026-09-20243,2872,676514943
2026-09-21243,2502,6465097817
2026-09-22243,6432,946611806
2026-09-23243,6203,007512974
2026-09-24243,4672,921478626
2026-09-25242,9882,428466904
2026-09-26242,6002,255257880
2026-09-27242,6052,263255870
2026-09-28242,5572,208260836
2026-09-29242,7502,342315858
2026-09-30242,7322,3612669015
2026-10-01101,03390287368

By path

PathHoursResponsesDelivered4xx4295xx5xx share
/api/v1/disclosures37234,40828,6174,4561,303320.093%
/api/v1/status3704,5894,491430551.199%
/api/v1/members3632,0241,99725020.099%
/api/v1/coverage3642,0041,363641000.000%
/api/v1/disclosures/{id}3631,284654630000.000%
/api/v1/openapi.json36481977841000.000%
/api/v13637107046000.000%
/api/v1/export3616330633000.000%
/api/v1/disclosures/{id}/history36361860612000.000%
(no such path)221230123000.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.

What this measurement cannot tell you

  • Only responses the origin returned are observed. A request the platform refused, queued or dropped before it reached the origin leaves no row here, so this measurement cannot see that class of failure at all.
  • Not an SLA and not an availability commitment. Veridion offers neither.
  • Not uptime. An hour in which no request arrived is unobserved, not proven available; hours_unobserved counts them rather than assuming them.
  • No request duration is recorded by this source, so no latency percentile is published from it. The observation-latency distribution on this page measures filing-to-observation delay and is a different quantity entirely.
  • A 4xx is the contract refusing a malformed request and a 429 is the quota enforcing itself. Neither is counted as a failure.
  • Veridion's own canary probes this API twice an hour and is inside this population, not excluded. busiest_subject_share reports how concentrated the population is.
  • Retained for 30 days by migration 0234. This is the retained window, not a service history.

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.

Institutional delivery unavailable

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:

  1. A dated, generation-pinned audit traces every served row to an allowlisted first-party collection channel through its source version. Missing links and unknown origins refuse the proof; a government receipt URL alone is not collection evidence.
  2. Retained history and the exact downloadable export are checked separately. The export is downloaded and verified against its published checksum, row hashes and Merkle root; its rows are reconciled to the pinned serving generation.
  3. Unattributed warehouse rows are reviewed individually and remain excluded unless original collection evidence supports attribution. A reviewed permanent exclusion records its reason and date. An unserved row with unresolved origin does not by itself prove contamination of the served corpus.
  4. Counsel reviews the applicable agreements and permitted uses in writing. A reviewed release then implements institutional authorization and delivery. Neither a successful technical audit nor an environment setting grants institutional rights.

What the dataset is

  • STOCK Act transactions. House and Senate periodic transaction reports: member, ticker, buy or sell, trade date, filing date, the amount range as disclosed, and who owned it. We've already worked out the filing delay for you.
  • Executive-branch disclosures. The President's annual financial disclosure from the Office of Government Ethics, parsed line by line from OGE's own system, with the source document attached to every row. Other covered filers get added the same way once their reports pass the same receipt check.
  • SEC ownership filings — roadmap. We parse Form 3/4, 13F and 13G/13D on the consumer product, but those rows are not yet in this API. The status endpoint reports that as no_data instead of quietly counting it as coverage.
  • A receipt on every row. Every record says which office it came from, which document, and links to the government's own copy of that document.
  • Coverage in every response. Every response tells you how many rows matched, how many have a parsed amount, and which documents we fetched ourselves.

What it deliberately is not

  • No market data. Quotes, price history and chart data are things we license for the consumer product, and we don't pass them on here.
  • No third-party datasets. We only license records we collected ourselves from the official government systems. Anything that came from a commercial data vendor is left out, and the coverage endpoint shows that split.
  • No recommendations. Amounts stay as the ranges the filings give. We don't guess at why anyone traded. This is identification data, and it isn't investment advice.

Response shape

{
  "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.

Ask the record

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.

Every filing made outside its statutory window
/api/v1/disclosures?within_statutory_window=false
Judged by each row's own window as served, not a number you supply. min_delay_days=N is the caller-chosen threshold instead.
What one filing said before it was amended
/api/v1/disclosures/{disclosure_id}/history
Every observed version, oldest first, restated: true when content changed after first publication. Nothing is overwritten, nothing is inferred about why.
What was knowable on a given date
/api/v1/disclosures?as_of=2026-09-30T00:00:00Z&ticker=NVDA
Rows first observed on or before that instant and nothing later. Below coverage.point_in_time_floor the answer is a typed 400, not a guess.
Who a filer is, from a name or a row
/api/v1/members?name=pelosi
Directory entry with the official Bioguide ID where one exists, row coverage, and latest filed date. member_id= takes the exact identifier a disclosure row carries.
What changed since you last looked
/api/v1/disclosures?updated_since=2026-09-30T00:00:00Z
Change events in observation order. Follow Link: 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.

Stability policy

What a client may rely on, in the same words the OpenAPI document carries in its description. Every clause names the mechanism behind it.

Versioning
The version is 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.
Breaking changes
A change that removes, renames or retypes anything served is a new major version under a new path prefix (/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.
Deprecation
Deprecations are announced in the changelog and marked on the affected element in the contract. Header-only deprecations are published in 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
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.
History
Served rows are never edited in place. A restatement is a new 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.
Errors
Every problem response carries a stable 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.
Licensed keys
A licensed key is shown once at issuance and stored only as a sha256 hash; Veridion cannot recover it. A key can be revoked at any moment and can carry an expiry. Rotation is a second active key issued for the same license with an expiry set on the first, so both are valid for the rotation window the licensee chooses. Usage records reference a key by its id, never by its value.
Disclosure cursors
A disclosure cursor is a position token, not a credential. It carries the read mode, a fingerprint of the normalized filters, time boundaries, the pinned snapshot generation and pagination position; it carries no API key, license, tier, scope or authorization grant. Every replay authenticates the current caller independently and applies that caller's permissions, row cap and rate budget, including the free tier's limits. API-key rotation or revocation does not invalidate the cursor for another permitted caller; a revoked key itself is still refused. Later dataset generations do not advance the pinned generation. Replay still requires matching filters, retained snapshot history and the server's cursor-signing key; changing that signing key is distinct from rotating a client's API key and invalidates existing tokens. The current format contains no expiry field, which is not a guarantee of indefinite availability. The payload is readable base64url JSON protected by an HMAC, not encryption: time boundaries and position are visible, and ordinary filters are an unkeyed SHA256 fingerprint against which guesses can be tested offline. Treat a cursor as you would a URL containing your query: do not publish it or put it in shared logs, and return it unchanged rather than depending on its internal encoding.
Status
/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.

Developer contracts

OpenAPI spec

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.

Connect an AI client

No key required

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.

Temporal conformance

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

What it costs

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.

Free

$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.

  • 25 rows per request
  • 60 requests an hour per IP (fixed UTC hour, counted per route family)
  • Credit us wherever the data is shown

Nothing to sign up for. The example request at the top of this page already uses it.

Developer

$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.

  • 1,000 rows per request
  • 60 requests per minute, 25,000 per day
  • Use in your own applications, individual or small business
  • The daily snapshot file is not included. It's quoted separately, below.

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.

Redistribution

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.

  • None of the tiers above include it
  • Four things have to clear first (they're listed further down this page), and counsel has to sign off in writing

Nothing to buy. institutional_delivery.available on /api/v1/status reads false, and it stays false until those things are done.

Add-on · Daily snapshot

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.

  • ·The same rows the paged endpoints serve, cut once a day as one gzipped NDJSON file
  • ·Delivered with the manifest's sha256 and Merkle root, so you can prove the file you hold is the file we generated
  • ·Added to a Developer key as a scope. It is not part of the $49.
  • ·Internal use. It carries no redistribution rights, and no plan does

Ask below and say roughly how you'd use it. Keys with this scope are issued by hand, same as the others.

Before we bill anyone

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.

Ask for a key

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.

Weekly Veridion brief

Rating changes, public disclosure activity, methodology notes, and product updates. One email per week. No advertising list resale.