MCP 서버

Veridion Disclosures

com.veridionmarkets/disclosures
금융 및 투자 검색 및 리서치 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Searches and tracks official financial disclosure filings from members of Congress and executive-branch officials, including filing history and source documents.

get_coverage
Live coverage counts (rows, filers, per-source totals) measured from the serving views. Prefer these numbers over any cached figure.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['dataset', 'version', 'generated_at', 'cache', 'description', 'serving', 'congress', 'provenance', 'provenance_field_coverage', 'house_clerk_ptr_completeness', 'provenance_reconciliation', 'sources_of_record', 'exclusions', 'notice', 'request_access'], 'properties': {'cache': {'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header'], 'properties': {'policy': {'type': 'string', 'const': 'no-store', 'description': 'The cache contract this response was served under; always no-store for a measurement. Rendered as Cache-Control: no-store, max-age=0 with CDN-Cache-Control and Vercel-CDN-Cache-Control: no-store, and echoed in X-Veridion-Cache-Policy.'}, 'age_header': {'type': 'null', 'description': 'The name of the response header that reports how long a cache held this body, or null when no cache is permitted to hold it, as here. Public record responses name the Age header.'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 0, 'description': 'Seconds the CDN may reuse this body; 0, because CDN-Cache-Control is no-store. Public record responses declare a nonzero value here; measurements never do.'}, 'browser_max_age_seconds': {'type': 'number', 'const': 0, 'description': 'Seconds a browser or client cache may reuse this body without revalidating; 0, the max-age the Cache-Control header carries.'}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 0, 'description': 'The upper bound on how old this body can be when it reaches a client, counted from generated_at; 0 for a measurement, and the same number the X-Veridion-Cache-Max-Staleness header carries.'}}, 'additionalProperties': False}, 'notice': {'type': 'string', 'minLength': 1}, 'dataset': {'type': 'string', 'const': 'veridion-disclosure-api'}, 'serving': {'type': 'object', 'required': ['state', 'measured_at', 'basis', 'total_rows', 'by_source_system', 'by_chamber'], 'properties': {'basis': {'type': 'string', 'minLength': 1}, 'state': {'enum': ['measured', 'unavailable'], 'type': 'string'}, 'by_chamber': {'type': 'object', 'required': ['house', 'senate', 'executive'], 'properties': {'house': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Active serving versions whose chamber is house; closed versions excluded, separate exact-count read, null if unavailable.'}, 'senate': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Active serving versions whose chamber is senate; closed versions excluded, separate exact-count read, null if unavailable.'}, 'executive': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Active serving versions whose chamber is executive; closed versions excluded, separate exact-count read, null if unavailable.'}}, 'additionalProperties': False}, 'total_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Exact count of active serving versions (valid_to is null), excluding closed versions. Separate read from the source and chamber counts, not a generation-pinned census; null if unavailable.'}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'by_source_system': {'type': 'object', 'required': ['house_clerk', 'senate_efd', 'oge'], 'properties': {'oge': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Active serving versions whose source_system is oge; closed versions excluded, separate exact-count read, null if unavailable.'}, 'senate_efd': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Active serving versions whose source_system is senate_efd; closed versions excluded, separate exact-count read, null if unavailable.'}, 'house_clerk': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Active serving versions whose source_system is house_clerk; closed versions excluded, separate exact-count read, null if unavailable.'}}, 'additionalProperties': False}}, 'description': 'Rows /v1/disclosures returns right now, counted from the serving view at read time after every exclusion. Not the count of rows that qualify. Every count is nullable because the measurement reports unavailable rather than guessing when it cannot reach the view.', 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'v1-preview'}, 'congress': {'anyOf': [{'type': 'object', 'required': ['population_basis', 'measured_at', 'as_of', 'age_seconds', 'expected_max_age_seconds', 'threshold_basis', 'detail', 'state', 'warehouse_rows', 'unique_members', 'unique_tickers', 'unique_filings', 'first_party_verified_rows_including_superseded', 'first_party_verified_rows', 'licensed_feed_document_reference_rows', 'licensed_feed_rows', 'no_document_reference_rows', 'document_reference_definitions', 'receipt_linked_rows', 'deprecated_fields', 'field_successors', 'amount_disclosed_rows', 'amount_disclosed_pct', 'by_chamber', 'last_90_days'], 'properties': {'as_of': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'state': {'type': 'string', 'const': 'ready'}, 'detail': {'type': ['string', 'null']}, 'by_chamber': {'type': 'object', 'required': ['house', 'senate'], 'properties': {'house': {'type': 'object', 'required': ['rows', 'amount_disclosed_rows'], 'properties': {'rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows with warehouse chamber exactly House. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'amount_disclosed_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'House rows with amount_mid or both amount bounds; subset of by_chamber.house.rows. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}}, 'additionalProperties': False}, 'senate': {'type': 'object', 'required': ['rows', 'amount_disclosed_rows'], 'properties': {'rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows with warehouse chamber exactly Senate. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'amount_disclosed_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Senate rows with amount_mid or both amount bounds; subset of by_chamber.senate.rows. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'Nonnegative whole seconds from summary measured_at to response generation; null without a valid summary timestamp.'}, 'measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'last_90_days': {'type': 'object', 'required': ['rows', 'unique_filings', 'unique_members'], 'properties': {'rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Rows passing the summary's publishable-date predicate with transaction_date or filing_date on or after the summary date minus 90 days. Includes superseded warehouse rows at the summary measurement, not only live or served rows."}, 'unique_filings': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct valid trimmed HTTPS document URL strings among last_90_days.rows; not distinct document IDs or live URLs. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'unique_members': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Distinct nonempty canonical member identifiers among last_90_days.rows, using member_slug or the summary's normalized name fallback. Includes superseded warehouse rows at the summary measurement, not only live or served rows."}}, 'additionalProperties': False}, 'unique_filings': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct trimmed HTTPS document URL strings, not distinct document IDs and not a URL-resolution test. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'unique_members': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Distinct nonempty member identifiers, using member_slug or the summary's normalized member-name fallback. Includes superseded warehouse rows at the summary measurement, not only live or served rows."}, 'unique_tickers': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct nonempty ticker strings after trimming and uppercasing; not a count of resolved issuers. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'warehouse_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'All retained congressional warehouse rows across all collection channels. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'threshold_basis': {'type': 'string', 'minLength': 1}, 'field_successors': {'type': 'object', 'required': ['first_party_verified_rows', 'licensed_feed_rows'], 'properties': {'licensed_feed_rows': {'type': 'string', 'const': 'licensed_feed_document_reference_rows'}, 'first_party_verified_rows': {'type': 'string', 'const': 'first_party_verified_rows_including_superseded', 'description': 'Replacement field for the deprecated first_party_verified_rows alias; both names return the same retained count, not a newly measured live count.'}}, 'additionalProperties': False}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': "All retained congressional warehouse rows, including superseded rows and all collection channels, counted by the persisted summary at measured_at; not currently live rows or rows served by the API. last_90_days additionally requires publishable dates and a transaction or filing date within the summary's 90-day lookback; it still includes superseded rows. This block excludes OGE and SEC."}, 'deprecated_fields': {'type': 'array', 'items': {'type': 'string'}}, 'licensed_feed_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'deprecated': True, 'description': 'Deprecated compatibility alias for licensed_feed_document_reference_rows: retained rows without a first-party receipt-link marker but with a valid HTTPS URL, including superseded rows. Not the total licensed-feed population.', 'x-veridion-successor': 'licensed_feed_document_reference_rows'}, 'receipt_linked_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'deprecated': True, 'description': 'Deprecated count of retained rows with a valid trimmed HTTPS document URL, including superseded rows. Not evidence of a first-party retrieval or a resolved URL.'}, 'amount_disclosed_pct': {'type': ['number', 'null'], 'description': '100 times amount_disclosed_rows divided by warehouse_rows, rounded to one decimal place; null for zero warehouse rows. Both counts include superseded rows.'}, 'amount_disclosed_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows with amount_mid, or both amount_low and amount_high from which the summary derives a midpoint; not a count of exact transaction values. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'expected_max_age_seconds': {'type': 'number', 'minimum': 0, 'description': 'Configured six-hour operational budget for the four-hour summary job, in seconds; not a measured count or contractual service commitment.'}, 'first_party_verified_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'deprecated': True, 'description': 'Deprecated compatibility alias for first_party_verified_rows_including_superseded. Retained receipt-linked congressional warehouse rows including superseded rows, not live or served rows; the value is unchanged.', 'x-veridion-successor': 'first_party_verified_rows_including_superseded'}, 'no_document_reference_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows with neither a first-party receipt-link marker nor a valid trimmed HTTPS document URL. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'document_reference_definitions': {'type': 'object', 'required': ['first_party_verified_rows', 'first_party_verified_rows_including_superseded', 'licensed_feed_document_reference_rows', 'licensed_feed_rows', 'no_document_reference_rows'], 'properties': {'licensed_feed_rows': {'type': 'string', 'minLength': 1}, 'first_party_verified_rows': {'type': 'string', 'minLength': 1}, 'no_document_reference_rows': {'type': 'string', 'minLength': 1}, 'licensed_feed_document_reference_rows': {'type': 'string', 'minLength': 1}, 'first_party_verified_rows_including_superseded': {'type': 'string', 'minLength': 1, 'description': 'Definition of the retained receipt-marker count, explicitly including superseded rows; carried in the payload so its population does not depend on consulting external documentation.'}}, 'additionalProperties': False}, 'licensed_feed_document_reference_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Retained congressional warehouse rows without a first-party receipt-link marker but with a trimmed valid HTTPS document URL. Includes superseded rows; the name does not establish collection-channel identity or URL liveness.'}, 'first_party_verified_rows_including_superseded': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Retained congressional warehouse rows marked receipt-linked by Veridion, including superseded rows. The summary asserts equality to the first-party collection-channel count; this is not a live-row or served-row count.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['population_basis', 'measured_at', 'as_of', 'age_seconds', 'expected_max_age_seconds', 'threshold_basis', 'detail', 'state'], 'properties': {'as_of': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'state': {'type': 'string', 'const': 'stale'}, 'detail': {'type': ['string', 'null']}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'Nonnegative whole seconds from summary measured_at to response generation; null without a valid summary timestamp.'}, 'measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'threshold_basis': {'type': 'string', 'minLength': 1}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': "All retained congressional warehouse rows, including superseded rows and all collection channels, counted by the persisted summary at measured_at; not currently live rows or rows served by the API. last_90_days additionally requires publishable dates and a transaction or filing date within the summary's 90-day lookback; it still includes superseded rows. This block excludes OGE and SEC."}, 'expected_max_age_seconds': {'type': 'number', 'minimum': 0, 'description': 'Configured six-hour operational budget for the four-hour summary job, in seconds; not a measured count or contractual service commitment.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['population_basis', 'measured_at', 'as_of', 'age_seconds', 'expected_max_age_seconds', 'threshold_basis', 'detail', 'state'], 'properties': {'as_of': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'state': {'type': 'string', 'const': 'unavailable'}, 'detail': {'type': ['string', 'null']}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'Nonnegative whole seconds from summary measured_at to response generation; null without a valid summary timestamp.'}, 'measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'threshold_basis': {'type': 'string', 'minLength': 1}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': "All retained congressional warehouse rows, including superseded rows and all collection channels, counted by the persisted summary at measured_at; not currently live rows or rows served by the API. last_90_days additionally requires publishable dates and a transaction or filing date within the summary's 90-day lookback; it still includes superseded rows. This block excludes OGE and SEC."}, 'expected_max_age_seconds': {'type': 'number', 'minimum': 0, 'description': 'Configured six-hour operational budget for the four-hour summary job, in seconds; not a measured count or contractual service commitment.'}}, 'additionalProperties': False}]}, 'exclusions': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'provenance': {'type': 'object', 'required': ['state', 'population_basis', 'total_rows', 'measured_at', 'by_collection_channel', 'self_collected_rows', 'licensed_feed_rows_total', 'third_party_rows', 'unattributed_rows', 'deprecated_fields', 'field_successors', 'by_receipt_office'], 'properties': {'state': {'enum': ['measured', 'unavailable'], 'type': 'string'}, 'total_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'All retained congressional warehouse rows across all collection channels. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'field_successors': {'type': 'object', 'required': ['third_party_rows'], 'properties': {'third_party_rows': {'type': 'string', 'const': 'licensed_feed_rows_total'}}, 'additionalProperties': False}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': 'All retained congressional warehouse rows, including superseded rows, counted by current collection labels and URL substrings in separate reads at measured_at. These are not live-row or served-row counts, not an atomic snapshot, and not a receipt-resolution test. OGE and SEC are outside this population.'}, 'third_party_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'deprecated': True, 'description': 'Deprecated compatibility alias for licensed_feed_rows_total: sum of the licensed-provider collection-label counts, including superseded rows; null if either read failed. Not a served count.', 'x-veridion-successor': 'licensed_feed_rows_total'}, 'by_receipt_office': {'type': 'object', 'required': ['us_house_clerk', 'us_senate_efd'], 'properties': {'us_senate_efd': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows whose pdf_url contains senate.gov, case-insensitive. Substring test only, not validated hostname, first-party retrieval or URL resolution. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}, 'us_house_clerk': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows whose pdf_url contains disclosures-clerk.house.gov, case-insensitive. Substring test only, not validated hostname, first-party retrieval or URL resolution. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}}, 'additionalProperties': False}, 'deprecated_fields': {'type': 'array', 'items': {'type': 'string'}}, 'unattributed_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Maximum of zero and total_rows minus self_collected_rows minus licensed_feed_rows_total; null if any input is unavailable. Arithmetic remainder, not a separate label census. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}, 'self_collected_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Sum of House parser and Senate eFD collection-label counts; null if either read failed. This is collection provenance, not serving admission. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}, 'by_collection_channel': {'type': 'object', 'required': ['house_clerk_direct_ocr', 'senate_efd_direct', 'licensed_bulk_feed'], 'properties': {'senate_efd_direct': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows carrying the first-party Senate eFD collection label. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}, 'licensed_bulk_feed': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Sum of the two licensed-provider collection-label counts; null if either read failed. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}, 'house_clerk_direct_ocr': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows carrying the first-party House parser collection label. Includes superseded congressional warehouse rows; separate exact-count read, null on read failure. Not a served count.'}}, 'additionalProperties': False}, 'licensed_feed_rows_total': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Sum of the two licensed-provider collection-label counts, including superseded rows and rows without a document URL. Separate retained-warehouse reads, not a served count; null if either read failed.'}}, 'additionalProperties': False}, 'description': {'type': 'string', 'minLength': 1}, 'generated_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'request_access': {'type': 'string', 'format': 'uri'}, 'sources_of_record': {'type': 'array', 'items': {'type': 'object', 'required': ['office', 'url', 'publishing'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'office': {'type': 'string', 'minLength': 1}, 'publishing': {'type': 'boolean', 'description': 'Whether this office publishes rows into v1 today. sec_edgar is listed and false: it is the declared scope boundary, not an omission. A reader should learn the boundary from the response rather than infer it from a query that returns nothing.'}}, 'additionalProperties': False}}, 'provenance_field_coverage': {'anyOf': [{'type': 'object', 'required': ['state', 'population_basis', 'measured_at', 'rows_examined', 'fields', 'house_clerk_gap_classes', 'house_clerk_gap_register', 'detail'], 'properties': {'state': {'type': 'string', 'const': 'measured'}, 'detail': {'type': 'null'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['source_system', 'field', 'populated', 'examined', 'rate', 'null_interpretation', 'rate_basis', 'reason'], 'properties': {'rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'populated divided by examined. The integer denominator and numerator remain authoritative.'}, 'field': {'type': 'string', 'const': 'source_line_number'}, 'reason': {'type': 'string', 'minLength': 1}, 'examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'All active serving versions for this source with valid_to unset. The rate denominator; separate from warehouse history including superseded rows.'}, 'populated': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Active serving versions for this source with source_line_number non-null. Closed versions are excluded; counts a field, not a resolved receipt URL.'}, 'rate_basis': {'type': 'object', 'required': ['rate'], 'properties': {'rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'populated', 'description': "The populated sibling count supplies this rate's numerator."}, 'denominator': {'type': 'string', 'const': 'examined', 'description': "The examined sibling count supplies this rate's denominator."}}, 'description': 'Machine-readable division rule for the sibling rate.', 'additionalProperties': False}}, 'description': 'Names the counts behind each published field-coverage rate in this same object.', 'additionalProperties': False}, 'source_system': {'enum': ['house_clerk', 'senate_efd'], 'type': 'string'}, 'null_interpretation': {'enum': ['gap', 'not_applicable'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 2, 'minItems': 2}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Sum of the House and Senate active-version examined counts. OGE, SEC and closed temporal versions are excluded; not independent document count.'}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': 'Active House Clerk and Senate eFD serving versions with valid_to unset; closed versions are excluded. Counts are separate reads, not a generation-pinned snapshot. The bounded parser-gap register must contain every counted parser gap or rates are withheld. These counts do not test URL resolution.'}, 'house_clerk_gap_classes': {'type': 'array', 'items': {'type': 'object', 'required': ['reason', 'affected_rows', 'classification'], 'properties': {'reason': {'enum': ['warehouse_fallback_without_line_provenance', 'parser_output_without_line_provenance'], 'type': 'string'}, 'affected_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Active House serving rows with null source_line_number in this reason class: fallback parser or named parser output. Closed versions excluded; both classes must sum to the House field gap.'}, 'classification': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 2, 'minItems': 2}, 'house_clerk_gap_register': {'type': 'array', 'items': {'type': 'object', 'required': ['document_id', 'affected_rows', 'parser_versions', 'reason'], 'properties': {'reason': {'type': 'string', 'const': 'parser_output_without_line_provenance'}, 'document_id': {'type': 'string', 'minLength': 1}, 'affected_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Active House serving rows in the complete bounded parser-gap read for this document, with a named non-fallback parser but null source_line_number; closed versions excluded.'}, 'parser_versions': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}}, 'additionalProperties': False}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['state', 'population_basis', 'measured_at', 'rows_examined', 'fields', 'house_clerk_gap_classes', 'house_clerk_gap_register', 'detail'], 'properties': {'state': {'type': 'string', 'const': 'unavailable'}, 'detail': {'type': 'string', 'minLength': 1}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['source_system', 'field', 'populated', 'examined', 'rate', 'null_interpretation', 'rate_basis', 'reason'], 'properties': {'rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'populated divided by examined. The integer denominator and numerator remain authoritative.'}, 'field': {'type': 'string', 'const': 'source_line_number'}, 'reason': {'type': 'string', 'minLength': 1}, 'examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'All active serving versions for this source with valid_to unset. The rate denominator; separate from warehouse history including superseded rows.'}, 'populated': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Active serving versions for this source with source_line_number non-null. Closed versions are excluded; counts a field, not a resolved receipt URL.'}, 'rate_basis': {'type': 'object', 'required': ['rate'], 'properties': {'rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'populated', 'description': "The populated sibling count supplies this rate's numerator."}, 'denominator': {'type': 'string', 'const': 'examined', 'description': "The examined sibling count supplies this rate's denominator."}}, 'description': 'Machine-readable division rule for the sibling rate.', 'additionalProperties': False}}, 'description': 'Names the counts behind each published field-coverage rate in this same object.', 'additionalProperties': False}, 'source_system': {'enum': ['house_clerk', 'senate_efd'], 'type': 'string'}, 'null_interpretation': {'enum': ['gap', 'not_applicable'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 0, 'minItems': 0}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Active House plus Senate row counts when both were measured before a later validation failed; zero is also the legacy no-examination sentinel, not evidence of an empty corpus. Rates are withheld.'}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': 'Active House Clerk and Senate eFD serving versions with valid_to unset; closed versions are excluded. Counts are separate reads, not a generation-pinned snapshot. The bounded parser-gap register must contain every counted parser gap or rates are withheld. These counts do not test URL resolution.'}, 'house_clerk_gap_classes': {'type': 'array', 'items': {'type': 'object', 'required': ['reason', 'affected_rows', 'classification'], 'properties': {'reason': {'enum': ['warehouse_fallback_without_line_provenance', 'parser_output_without_line_provenance'], 'type': 'string'}, 'affected_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Active House serving rows with null source_line_number in this reason class: fallback parser or named parser output. Closed versions excluded; both classes must sum to the House field gap.'}, 'classification': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 0, 'minItems': 0}, 'house_clerk_gap_register': {'type': 'array', 'items': {'type': 'object', 'required': ['document_id', 'affected_rows', 'parser_versions', 'reason'], 'properties': {'reason': {'type': 'string', 'const': 'parser_output_without_line_provenance'}, 'document_id': {'type': 'string', 'minLength': 1}, 'affected_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Active House serving rows in the complete bounded parser-gap read for this document, with a named non-fallback parser but null source_line_number; closed versions excluded.'}, 'parser_versions': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}}, 'additionalProperties': False}, 'maxItems': 0, 'minItems': 0}}, 'additionalProperties': False}]}, 'provenance_reconciliation': {'anyOf': [{'type': 'object', 'required': ['state', 'population_basis', 'rows_examined', 'measurement_timestamps', 'licensed_feed_rows_total', 'licensed_feed_document_reference_rows', 'licensed_feed_rows_without_document_reference', 'licensed_feed_rows_without_document_reference_pct_of_licensed_feed', 'licensed_feed_rows_without_document_reference_pct_of_warehouse', 'reason', 'relationships', 'detail'], 'properties': {'state': {'type': 'string', 'const': 'reconciled'}, 'detail': {'type': 'null'}, 'reason': {'type': 'string', 'minLength': 1}, 'relationships': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 2}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Retained congressional warehouse rows in the collection-channel total, including superseded rows, after arithmetic agreement with the separately timed summary; not a row-level join.'}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': 'Arithmetic reconciliation of the two retained congressional warehouse partitions, both including superseded rows, at their separately reported measurement timestamps. Matching totals are not proof of row-level identity or an explanation of the warehouse-to-serving gap. Unavailable bridge counts are withheld.'}, 'measurement_timestamps': {'type': 'object', 'required': ['receipt_reference', 'collection_ownership'], 'properties': {'receipt_reference': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'collection_ownership': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}}, 'additionalProperties': False}, 'licensed_feed_rows_total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Collection-channel licensed total carried from provenance after the two partitions reconcile; independently timed measurement. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'licensed_feed_document_reference_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Summary count without a first-party receipt-link marker but with a valid HTTPS URL, carried after arithmetic reconciliation; not a row-level collection-channel match. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'licensed_feed_rows_without_document_reference': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'licensed_feed_rows_total minus licensed_feed_document_reference_rows after partition checks; an arithmetic bridge, not a joined row census. Includes superseded warehouse rows at the summary measurement, not only live or served rows.'}, 'licensed_feed_rows_without_document_reference_pct_of_warehouse': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}], 'description': '100 times licensed_feed_rows_without_document_reference divided by rows_examined, rounded to one decimal place; null for zero denominator. Both include superseded rows.'}, 'licensed_feed_rows_without_document_reference_pct_of_licensed_feed': {'anyOf': [{'type': 'number', 'maximum': 100, 'minimum': 0}, {'type': 'null'}], 'description': '100 times licensed_feed_rows_without_document_reference divided by licensed_feed_rows_total, rounded to one decimal place; null for zero denominator. Both include superseded rows.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['state', 'population_basis', 'rows_examined', 'measurement_timestamps', 'detail'], 'properties': {'state': {'type': 'string', 'const': 'unavailable'}, 'detail': {'type': 'string', 'minLength': 1}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Available retained collection total, else available summary warehouse total, else the legacy zero sentinel for an unmeasured population. Includes superseded rows when measured; zero here does not establish an empty warehouse.'}, 'population_basis': {'type': 'string', 'minLength': 1, 'description': 'Arithmetic reconciliation of the two retained congressional warehouse partitions, both including superseded rows, at their separately reported measurement timestamps. Matching totals are not proof of row-level identity or an explanation of the warehouse-to-serving gap. Unavailable bridge counts are withheld.'}, 'measurement_timestamps': {'type': 'object', 'required': ['receipt_reference', 'collection_ownership'], 'properties': {'receipt_reference': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'collection_ownership': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}}, 'additionalProperties': False}}, 'additionalProperties': False}]}, 'house_clerk_ptr_completeness': {'anyOf': [{'type': 'object', 'required': ['series', 'run_id', 'served_measured_at', 'clerk_published_documents', 'documents_held', 'documents_served', 'held_rate', 'served_rate', 'rate_basis', 'state', 'measured_at', 'age_seconds', 'expected_max_age_seconds', 'rows_examined', 'source_year_start', 'source_year_end', 'source_years', 'measurement_definition', 'missing_document_ids_retained', 'years', 'detail'], 'properties': {'state': {'type': 'string', 'const': 'measured'}, 'years': {'type': 'array', 'items': {'type': 'object', 'required': ['year', 'state', 'rows_examined', 'clerk_published_documents', 'documents_held', 'documents_missing', 'documents_served', 'held_rate', 'served_rate', 'rate_basis', 'rate', 'missing_by_classification', 'detail'], 'properties': {'rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'documents_held divided by clerk_published_documents for this archive year. Counts are authoritative; a value of 1 is emitted only when documents_missing is exactly zero.'}, 'year': {'type': 'integer', 'maximum': 2026, 'minimum': 2015, 'description': 'Annual Clerk archive year selected in the completed reconciliation, not the transaction year or filing-date bucket.'}, 'state': {'type': 'string', 'const': 'measured'}, 'detail': {'type': 'null'}, 'held_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_held divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Acquisition coverage, not what disclosures returns. Null when the complete funnel cannot be measured.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate', 'rate'], 'properties': {'rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}, 'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}}, 'description': 'The legacy rate is a held-rate alias, not a served rate; every divisor and dividend is named here.', 'additionalProperties': False}, 'served_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_served divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Measures API document coverage, not held coverage. Null when the complete funnel cannot be measured.'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Indexed PTR DocIDs examined for this archive year in the selected completed run; asserted equal to clerk_published_documents, not parsed transaction rows.'}, 'documents_held': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Indexed PTR DocIDs matched to held documents in this archive year and run, regardless of whether any transaction row is served.'}, 'documents_served': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Distinct indexed House PTR DocIDs with an active house_clerk version at served_measured_at, restricted to this reconciliation run and, for a yearly entry, its archive year. Null when any stage cannot be verified.'}, 'documents_missing': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'clerk_published_documents minus documents_held in this archive year and run, reconciled to the missing-reason document counts.'}, 'clerk_published_documents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': "PTR DocIDs on this archive year's official index in the selected completed run. Denominator is filed documents, not warehouse rows or all historical index runs."}, 'missing_by_classification': {'type': 'object', 'required': ['never_attempted', 'attempted_failed', 'present_under_different_identifier'], 'properties': {'never_attempted': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Missing indexed PTR DocIDs with no recorded retrieval attempt in the selected reconciliation year. Document count, not warehouse row count; no superseded-row filter applies.'}, 'attempted_failed': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Missing indexed PTR DocIDs with recorded retrieval attempts and no held match in the selected reconciliation year. Document count; no superseded-row filter applies.'}, 'present_under_different_identifier': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Missing indexed PTR DocIDs classified by the reconciliation as held under another identifier for this archive year. Document count, not admitted rows; no superseded-row filter applies.'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 12}, 'detail': {'type': 'null'}, 'run_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'The completed reconciliation selected by the shared funnel RPC; every archive-year count uses this run, never a union of runs.'}, 'series': {'type': 'object', 'required': ['state', 'entries', 'reason'], 'properties': {'state': {'enum': ['measured', 'unavailable'], 'type': 'string', 'description': 'Whether the series reader succeeded, not whether the live funnel is fresh or every historical run has a point.'}, 'reason': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Series-level read or validation refusal; null for a successful read, even if some historical entries are absent.'}, 'entries': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['run_id', 'completed_at', 'rate_basis', 'state', 'computed_at', 'snapshot_generation', 'basis', 'clerk_published_documents', 'documents_held', 'documents_served', 'held_rate', 'served_rate', 'served_of_held_rate', 'reason'], 'properties': {'basis': {'enum': ['completion_capture', 'retained_generation_replay'], 'type': 'string', 'description': 'completion_capture pins the visible generation in the finalization transaction; retained_generation_replay derives a past point from the greatest retained generation activated by completed_at, not from current active rows.'}, 'state': {'type': 'string', 'const': 'measured', 'description': 'All three counts were derived and stored together; not a partial historical estimate.'}, 'reason': {'type': 'null', 'description': 'Null because all counts were derived; absent entries carry an explanation instead.'}, 'run_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Completed twelve-year reconciliation run identified by its immutable finalization event.'}, 'held_rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'documents_held / clerk_published_documents, to twelve fractional places; the integer counts are authoritative.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate', 'served_of_held_rate'], 'properties': {'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_of_held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}}, 'description': 'Three distinct ratios: held/published, served/published and served/held. Each references counts in this same entry.', 'additionalProperties': False}, 'computed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{6}(?:Z))$', 'description': "Actual instant the private ledger point was computed, including today's instant for a historical replay; never backdated to completion."}, 'served_rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'documents_served / clerk_published_documents, to twelve fractional places; the integer counts are authoritative.'}, 'completed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{6}(?:Z))$', 'description': "The run's first succeeded finalization event timestamp; the series is ordered by this instant, then run_id."}, 'documents_held': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Sum of that run's immutable annual held-document counts, not today's acquisition count."}, 'documents_served': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct indexed House DocIDs whose row-version interval contains snapshot_generation; repeated rows for one document count once.'}, 'served_of_held_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_served / documents_held, to twelve fractional places; null when no documents were held.'}, 'snapshot_generation': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Retained temporal generation used for the served-document intersection. Later generations do not change this point.', 'exclusiveMinimum': 0}, 'clerk_published_documents': {'type': 'integer', 'maximum': 9007199254740991, 'description': "Distinct type-P DocIDs across this completed run's twelve annual Clerk indexes, verified equal to the summed annual counts.", 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['run_id', 'completed_at', 'rate_basis', 'state', 'computed_at', 'snapshot_generation', 'basis', 'clerk_published_documents', 'documents_held', 'documents_served', 'held_rate', 'served_rate', 'served_of_held_rate', 'reason'], 'properties': {'basis': {'type': 'null', 'description': 'No measurement or replay basis was established.'}, 'state': {'type': 'string', 'const': 'absent', 'description': 'The run completed, but no complete point is derivable or recorded; never plotted as zero.'}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'Why the completed run has no complete, derivable ledger point.'}, 'run_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Completed twelve-year reconciliation run identified by its immutable finalization event.'}, 'held_rate': {'type': 'null', 'description': 'No rate is emitted for an absent point.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate', 'served_of_held_rate'], 'properties': {'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_of_held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}}, 'description': 'Three distinct ratios: held/published, served/published and served/held. Each references counts in this same entry.', 'additionalProperties': False}, 'computed_at': {'type': 'null', 'description': 'No computation instant is invented for an absent point.'}, 'served_rate': {'type': 'null', 'description': 'No rate is emitted for an absent point.'}, 'completed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{6}(?:Z))$', 'description': "The run's first succeeded finalization event timestamp; the series is ordered by this instant, then run_id."}, 'documents_held': {'type': 'null', 'description': 'Withheld with the other stages rather than presenting a partial funnel.'}, 'documents_served': {'type': 'null', 'description': 'Not derivable; current active versions are never substituted for past served counts.'}, 'served_of_held_rate': {'type': 'null', 'description': 'No rate is emitted for an absent point.'}, 'snapshot_generation': {'type': 'null', 'description': 'No retained serving generation was established for this point.'}, 'clerk_published_documents': {'type': 'null', 'description': 'Withheld with the other stages rather than presenting a partial funnel.'}}, 'additionalProperties': False}]}, 'description': 'One entry per completed run, oldest first. Absent entries mark gaps explicitly; no interpolation or silent zero filling.'}}, 'description': 'Private append-only reconciliation-run history exposed as document counts and explicit gaps. Historical replays are labeled separately from contemporaneous captures.', 'additionalProperties': False}, 'held_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_held divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Acquisition coverage, not what disclosures returns. Null when the complete funnel cannot be measured.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate'], 'properties': {'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}}, 'description': 'Both rates divide their named document count by the published count in this object; ratios are 0 to 1, not percentages.', 'additionalProperties': False}, 'age_seconds': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Elapsed nonnegative seconds since completion of the selected index reconciliation, not since response generation or the serving read.'}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'served_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_served divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Measures API document coverage, not held coverage. Null when the complete funnel cannot be measured.'}, 'source_years': {'type': 'number', 'const': 12, 'description': 'Configured number of required archive years, source_year_end minus source_year_start plus one; all must reconcile before counts publish.'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': "Sum of indexed PTR DocIDs examined across the selected run's archive years, asserted to match the published-document total; not transaction rows."}, 'documents_held': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "Sum of the selected run's held-document counts. A held PDF need not yield a row the API admits; use documents_served for that stage."}, 'source_year_end': {'type': 'number', 'const': 2026, 'description': 'Last configured Clerk archive year included in this complete-run measurement.'}, 'documents_served': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Distinct indexed House PTR DocIDs with an active house_clerk version at served_measured_at, restricted to this reconciliation run and, for a yearly entry, its archive year. Null when any stage cannot be verified.'}, 'source_year_start': {'type': 'number', 'const': 2015, 'description': 'First configured Clerk archive year included in this complete-run measurement.'}, 'served_measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'Database statement instant for the active-version count. measured_at separately records when the held/index reconciliation completed; these instants are not interchangeable.'}, 'measurement_definition': {'type': 'string', 'minLength': 1}, 'expected_max_age_seconds': {'type': 'number', 'const': 172800, 'description': 'Configured maximum reconciliation age in seconds before document counts are withheld.'}, 'clerk_published_documents': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Sum of published PTR DocIDs across the twelve archive years in the selected completed run, emitted only after equality with its distinct indexed DocID count is verified.'}, 'missing_document_ids_retained': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['series', 'run_id', 'served_measured_at', 'clerk_published_documents', 'documents_held', 'documents_served', 'held_rate', 'served_rate', 'rate_basis', 'state', 'measured_at', 'age_seconds', 'expected_max_age_seconds', 'rows_examined', 'source_year_start', 'source_year_end', 'source_years', 'measurement_definition', 'missing_document_ids_retained', 'years', 'detail'], 'properties': {'state': {'type': 'string', 'const': 'unevaluated'}, 'years': {'type': 'array', 'items': {'type': 'object', 'required': ['year', 'state', 'rows_examined', 'clerk_published_documents', 'documents_held', 'documents_missing', 'documents_served', 'held_rate', 'served_rate', 'rate_basis', 'rate', 'missing_by_classification', 'detail'], 'properties': {'rate': {'type': 'null'}, 'year': {'type': 'integer', 'maximum': 2026, 'minimum': 2015, 'description': 'Configured Clerk archive year awaiting measurement, not an observed transaction or filing year.'}, 'state': {'type': 'string', 'const': 'unevaluated'}, 'detail': {'type': 'string', 'minLength': 1}, 'held_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_held divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Acquisition coverage, not what disclosures returns. Null when the complete funnel cannot be measured.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate', 'rate'], 'properties': {'rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}, 'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}}, 'description': 'The legacy rate is a held-rate alias, not a served rate; every divisor and dividend is named here.', 'additionalProperties': False}, 'served_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_served divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Measures API document coverage, not held coverage. Null when the complete funnel cannot be measured.'}, 'rows_examined': {'type': 'number', 'const': 0, 'description': 'No verified document examination for this archive year; sentinel zero is not a measured empty index. Document counts are null.'}, 'documents_held': {'type': 'null'}, 'documents_served': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Distinct indexed House PTR DocIDs with an active house_clerk version at served_measured_at, restricted to this reconciliation run and, for a yearly entry, its archive year. Null when any stage cannot be verified.'}, 'documents_missing': {'type': 'null'}, 'clerk_published_documents': {'type': 'null'}, 'missing_by_classification': {'type': 'null'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 12}, 'detail': {'type': 'string', 'minLength': 1}, 'run_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'The completed reconciliation selected by the shared funnel RPC; every archive-year count uses this run, never a union of runs.'}, 'series': {'type': 'object', 'required': ['state', 'entries', 'reason'], 'properties': {'state': {'enum': ['measured', 'unavailable'], 'type': 'string', 'description': 'Whether the series reader succeeded, not whether the live funnel is fresh or every historical run has a point.'}, 'reason': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Series-level read or validation refusal; null for a successful read, even if some historical entries are absent.'}, 'entries': {'type': 'array', 'items': {'anyOf': [{'type': 'object', 'required': ['run_id', 'completed_at', 'rate_basis', 'state', 'computed_at', 'snapshot_generation', 'basis', 'clerk_published_documents', 'documents_held', 'documents_served', 'held_rate', 'served_rate', 'served_of_held_rate', 'reason'], 'properties': {'basis': {'enum': ['completion_capture', 'retained_generation_replay'], 'type': 'string', 'description': 'completion_capture pins the visible generation in the finalization transaction; retained_generation_replay derives a past point from the greatest retained generation activated by completed_at, not from current active rows.'}, 'state': {'type': 'string', 'const': 'measured', 'description': 'All three counts were derived and stored together; not a partial historical estimate.'}, 'reason': {'type': 'null', 'description': 'Null because all counts were derived; absent entries carry an explanation instead.'}, 'run_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Completed twelve-year reconciliation run identified by its immutable finalization event.'}, 'held_rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'documents_held / clerk_published_documents, to twelve fractional places; the integer counts are authoritative.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate', 'served_of_held_rate'], 'properties': {'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_of_held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}}, 'description': 'Three distinct ratios: held/published, served/published and served/held. Each references counts in this same entry.', 'additionalProperties': False}, 'computed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{6}(?:Z))$', 'description': "Actual instant the private ledger point was computed, including today's instant for a historical replay; never backdated to completion."}, 'served_rate': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': 'documents_served / clerk_published_documents, to twelve fractional places; the integer counts are authoritative.'}, 'completed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{6}(?:Z))$', 'description': "The run's first succeeded finalization event timestamp; the series is ordered by this instant, then run_id."}, 'documents_held': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Sum of that run's immutable annual held-document counts, not today's acquisition count."}, 'documents_served': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct indexed House DocIDs whose row-version interval contains snapshot_generation; repeated rows for one document count once.'}, 'served_of_held_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_served / documents_held, to twelve fractional places; null when no documents were held.'}, 'snapshot_generation': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Retained temporal generation used for the served-document intersection. Later generations do not change this point.', 'exclusiveMinimum': 0}, 'clerk_published_documents': {'type': 'integer', 'maximum': 9007199254740991, 'description': "Distinct type-P DocIDs across this completed run's twelve annual Clerk indexes, verified equal to the summed annual counts.", 'exclusiveMinimum': 0}}, 'additionalProperties': False}, {'type': 'object', 'required': ['run_id', 'completed_at', 'rate_basis', 'state', 'computed_at', 'snapshot_generation', 'basis', 'clerk_published_documents', 'documents_held', 'documents_served', 'held_rate', 'served_rate', 'served_of_held_rate', 'reason'], 'properties': {'basis': {'type': 'null', 'description': 'No measurement or replay basis was established.'}, 'state': {'type': 'string', 'const': 'absent', 'description': 'The run completed, but no complete point is derivable or recorded; never plotted as zero.'}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'Why the completed run has no complete, derivable ledger point.'}, 'run_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Completed twelve-year reconciliation run identified by its immutable finalization event.'}, 'held_rate': {'type': 'null', 'description': 'No rate is emitted for an absent point.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate', 'served_of_held_rate'], 'properties': {'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}, 'served_of_held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling integer document count used as dividend.'}, 'denominator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling integer document count used as divisor; zero withholds the rate.'}}, 'description': 'Division rule for this series entry, not a different run or the current corpus.', 'additionalProperties': False}}, 'description': 'Three distinct ratios: held/published, served/published and served/held. Each references counts in this same entry.', 'additionalProperties': False}, 'computed_at': {'type': 'null', 'description': 'No computation instant is invented for an absent point.'}, 'served_rate': {'type': 'null', 'description': 'No rate is emitted for an absent point.'}, 'completed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{6}(?:Z))$', 'description': "The run's first succeeded finalization event timestamp; the series is ordered by this instant, then run_id."}, 'documents_held': {'type': 'null', 'description': 'Withheld with the other stages rather than presenting a partial funnel.'}, 'documents_served': {'type': 'null', 'description': 'Not derivable; current active versions are never substituted for past served counts.'}, 'served_of_held_rate': {'type': 'null', 'description': 'No rate is emitted for an absent point.'}, 'snapshot_generation': {'type': 'null', 'description': 'No retained serving generation was established for this point.'}, 'clerk_published_documents': {'type': 'null', 'description': 'Withheld with the other stages rather than presenting a partial funnel.'}}, 'additionalProperties': False}]}, 'description': 'One entry per completed run, oldest first. Absent entries mark gaps explicitly; no interpolation or silent zero filling.'}}, 'description': 'Private append-only reconciliation-run history exposed as document counts and explicit gaps. Historical replays are labeled separately from contemporaneous captures.', 'additionalProperties': False}, 'held_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_held divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Acquisition coverage, not what disclosures returns. Null when the complete funnel cannot be measured.'}, 'rate_basis': {'type': 'object', 'required': ['held_rate', 'served_rate'], 'properties': {'held_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_held', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}, 'served_rate': {'type': 'object', 'required': ['numerator', 'denominator'], 'properties': {'numerator': {'type': 'string', 'const': 'documents_served', 'description': 'Name of the sibling document count divided to produce this rate.'}, 'denominator': {'type': 'string', 'const': 'clerk_published_documents', 'description': 'Name of the sibling Clerk-index document count used as the denominator, never the held count.'}}, 'description': 'Machine-readable division rule; both referenced fields occur in this same coverage object.', 'additionalProperties': False}}, 'description': 'Both rates divide their named document count by the published count in this object; ratios are 0 to 1, not percentages.', 'additionalProperties': False}, 'age_seconds': {'type': 'null'}, 'measured_at': {'type': 'null'}, 'served_rate': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'documents_served divided by clerk_published_documents, to twelve fractional places; the integer counts are authoritative. Measures API document coverage, not held coverage. Null when the complete funnel cannot be measured.'}, 'source_years': {'type': 'number', 'const': 12, 'description': 'Configured required archive-year count, source_year_end minus source_year_start plus one; not successfully measured years.'}, 'rows_examined': {'type': 'number', 'const': 0, 'description': 'No complete verified reconciliation examination; sentinel zero is not a measured empty index. Funnel counts and rates are null.'}, 'documents_held': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "Sum of the selected run's held-document counts. A held PDF need not yield a row the API admits; use documents_served for that stage."}, 'source_year_end': {'type': 'number', 'const': 2026, 'description': 'Last configured archive year required for a complete reconciliation, not proof that its index was fetched.'}, 'documents_served': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Distinct indexed House PTR DocIDs with an active house_clerk version at served_measured_at, restricted to this reconciliation run and, for a yearly entry, its archive year. Null when any stage cannot be verified.'}, 'source_year_start': {'type': 'number', 'const': 2015, 'description': 'First configured archive year required for a complete reconciliation, not proof that its index was fetched.'}, 'served_measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'Database statement instant for the active-version count. measured_at separately records when the held/index reconciliation completed; these instants are not interchangeable.'}, 'measurement_definition': {'type': 'string', 'minLength': 1}, 'expected_max_age_seconds': {'type': 'number', 'const': 172800, 'description': 'Configured maximum reconciliation age in seconds, even when no eligible measurement is available.'}, 'clerk_published_documents': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Sum of published PTR DocIDs across the twelve archive years in the selected completed run, emitted only after equality with its distinct indexed DocID count is verified.'}, 'missing_document_ids_retained': {'type': 'null'}}, 'additionalProperties': False}], 'description': "Held and served coverage from one completed House Clerk PTR index run, both read through the same funnel helper as /data-api. Aggregate rates are withheld if archive-year totals disagree with distinct indexed documents. These are archive-year scopes, not filing-date buckets. Every rate names its sibling numerator and denominator in rate_basis. House PTR type P only, for the stated archive years; not Senate eFD, other filing types, or a claim that the Clerk's index is complete. measurement_definition carries this boundary even when counts are unavailable."}}, 'additionalProperties': False}
get_disclosure_history
Every observed version of one disclosure, oldest first. The change stream is append-only, so an amendment supersedes rather than overwrites -- the before and after of a restated filing are both here, each with its own change block and receipt.url. restated=true states that content changed after first publication; report what changed and when, never why.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['disclosure_id'], 'properties': {'disclosure_id': {'type': 'string', 'description': 'Permanent disclosure_id from search_disclosures. Identifiers survive restatement and are never reused.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['data', 'history', 'access', 'cache', 'version', 'notice'], 'properties': {'data': {'type': 'array', 'items': {'type': 'object', 'required': ['disclosure_id', 'version_id', 'content_hash', 'identity_basis', 'change', 'member', 'asset', 'transaction', 'filing', 'amount', 'owner', 'receipt', 'provenance'], 'properties': {'asset': {'type': 'object', 'required': ['ticker', 'name', 'asset_type', 'source_code', 'description'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'The asset as named on the filing, whitespace collapsed. If the filing names nothing but gives a ticker, the ticker; if it gives neither, the literal "Disclosed asset" so the row is not silently dropped.'}, 'ticker': {'type': ['string', 'null'], 'description': 'The ticker as it appears on the filing, upper-cased; null when the filing states none (most OGE lines, bonds, funds without a symbol, and paper filings whose ticker column is blank). Not looked up or inferred from the asset name.'}, 'asset_type': {'enum': ['equity', 'etf', 'municipal_bond', 'corporate_bond', 'government_security', 'option', 'fund', 'partnership', 'crypto', 'other'], 'type': 'string', 'description': "Classified from the office's own asset code on congressional filings: ST equity, OP option, MF and EF fund, GS government_security, PS partnership, CT crypto, anything else other. OGE lines carry equity, fund or other. etf, municipal_bond and corporate_bond are reserved in the enum and produced by no current source."}, 'description': {'type': ['string', 'null'], 'description': "Free-text description from the filing's asset line when the office publishes one separately from the name; null otherwise. Never composed by Veridion."}, 'source_code': {'type': ['string', 'null'], 'description': 'The asset code exactly as the office recorded it (ST, OP, MF, EF, GS, PS, CT and others), upper-cased; the input to asset_type. Null when the source carries none.'}}, 'description': "The instrument as the filing names it, classified from the office's own asset code. Nothing is resolved against a securities master; a ticker is served only when the filing states one.", 'additionalProperties': False}, 'owner': {'type': 'object', 'required': ['label', 'determination'], 'properties': {'label': {'enum': ['self', 'spouse', 'joint', 'dependent_child', 'not_specified_in_filing', 'undetermined'], 'type': 'string', 'description': "The filing's Owner column: self, spouse, joint or dependent_child as marked; not_specified_in_filing when the official receipt was checked and the column is blank; undetermined when the row was located but the column could not be read with confidence. See determination for how the value was established."}, 'determination': {'enum': ['parsed_from_filing', 'receipt_verified_blank', 'owner_column_undetermined', 'not_applicable_for_form'], 'type': 'string', 'description': 'How the owner value was established. owner_column_undetermined means the filing row was located but the extracted text did not positively establish whether its Owner column was blank.'}}, 'description': "Whose holding the transaction concerns, from the filing's Owner column, and how that value was established.", 'additionalProperties': False}, 'amount': {'type': 'object', 'required': ['range_low', 'range_high', 'currency', 'basis', 'verbatim_text'], 'properties': {'basis': {'type': 'string', 'const': 'bounded_range_as_disclosed', 'description': 'States what the amount fields are: the bounded range as the filing disclosed it. The only basis served today; a future exact-amount source would carry its own.'}, 'currency': {'type': 'string', 'const': 'USD', 'description': 'Always USD. Every disclosure form Veridion serves reports in dollars.'}, 'midpoint': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Veridion\'s arithmetic midpoint of range_low and range_high, rounded to the dollar. It is a convenience, not a disclosed value: the filer reported a band, never a figure. Absent when the band is open-ended ("over", "more than", "less than" and their variants) because a midpoint of an unbounded range is invented. Use it only with the range shown beside it.'}, 'range_low': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Lower bound of the band the filing discloses, in whole USD, as printed on the form ($1,001 to $15,000 serves 1001).'}, 'range_high': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Upper bound of the disclosed band, in whole USD. For an open-ended band such as "over $50,000,000" this is the stated threshold, and midpoint is absent.'}, 'verbatim_text': {'type': 'string', 'minLength': 1, 'description': 'The amount text exactly as it appears on the filing, before any parsing. When range_low and range_high disagree with this text, this text is the filing.'}}, 'description': 'The bounded range exactly as disclosed. A missing amount is never estimated.', 'additionalProperties': False}, 'change': {'type': 'object', 'required': ['type', 'state', 'observed_at', 'reason'], 'properties': {'type': {'enum': ['upsert', 'supersede'], 'type': 'string', 'description': 'upsert: this version is the one to hold. supersede: a version you may hold has been replaced, and is only emitted on updated_since reads.'}, 'state': {'enum': ['active', 'withdrawn'], 'type': 'string', 'description': 'active: served in snapshot reads. withdrawn: no longer served in snapshots but still directly retrievable by disclosure_id, with reason set.'}, 'reason': {'type': ['string', 'null'], 'description': 'Why a row was withdrawn or superseded, when the pipeline recorded one; null for an ordinary upsert. States the mechanism, never a motive.'}, 'observed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "When Veridion observed the event this row reports (the version's first observation for an upsert; the supersession instant for a supersede)."}}, 'description': 'Full pulls contain upserts. updated_since also emits supersede events; remove the row only when version_id matches the version held locally. A withdrawn stable identifier remains directly retrievable with its reason.', 'additionalProperties': False}, 'filing': {'type': 'object', 'required': ['type', 'filed_date', 'delay_days', 'statutory_window_days'], 'properties': {'type': {'anyOf': [{'enum': ['periodic_transaction_report', 'annual_report'], 'type': 'string'}, {'type': 'null'}], 'description': "periodic_transaction_report for House Clerk and Senate eFD PTRs and OGE Form 278-T; annual_report for OGE Form 278e; null when the receipt URL matches no known form pattern. Determined from the office and receipt, not from the row's text."}, 'delay_days': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'filed_date minus transaction.date, in whole days, as the two dates appear on the filing. Null when either is absent. Not clamped: a filing that predates its own transaction would serve a negative value rather than a corrected one.'}, 'filed_date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$', 'description': 'The date the office records the report as filed. The STOCK Act window and delay_days are measured to this date.'}, 'statutory_window_days': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': "45 for a periodic transaction report, the STOCK Act's transaction-level reporting window; null for annual reports and unknown forms, which carry no per-transaction deadline. A constant of the form, not a per-row judgement. Note that 45 days from the transaction is only one of the two clocks: a report is due by the EARLIER of 45 days from the transaction or 30 days from the filer being notified of it. The House PTR form includes a notification-date column; this dataset does not capture it, so the 30-day clock is not represented here."}, 'within_statutory_window': {'type': 'boolean', 'description': 'Present only when the filing type has an applicable transaction-level window and delay_days is known. True means delay_days <= statutory_window_days -- that is, within the 45-day transaction clock. It does NOT mean the filing was timely: the 30-day notification clock may have expired first, and we do not measure it. Do not treat this field as a compliance determination.'}}, 'description': "The report this row was parsed from and its timing against the STOCK Act's 45-day transaction window, computed from the two dates on the filing.", 'additionalProperties': False}, 'member': {'type': 'object', 'required': ['member_id', 'person_id', 'full_name', 'chamber', 'party', 'state', 'district'], 'properties': {'party': {'type': ['string', 'null'], 'description': "Democrat, Republican or Independent, from the congressional directory's D, R or I; null when the directory records none and for every executive-branch filer."}, 'state': {'type': ['string', 'null'], 'description': 'Two-letter state of the seat, as recorded in the congressional directory; null for executive-branch filers.'}, 'chamber': {'enum': ['house', 'senate', 'executive'], 'type': 'string', 'description': 'house or senate from the office that published the receipt; executive for Office of Government Ethics filers.'}, 'district': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{2}-\\d+$'}, {'type': 'null'}], 'description': 'House district as `STATE-N` with N an integer and 0 an at-large seat (`GA-14`, `AK-0`); null for senators, executive-branch filers, and rows whose filing does not state one. The same form the /v1/members directory uses.'}, 'full_name': {'type': 'string', 'minLength': 1, 'description': "The filer's name from the official directory where matched; otherwise the name as it appears on the filing with honorifics (Hon., Sen., Rep.) removed."}, 'member_id': {'type': 'string', 'minLength': 1, 'description': "Veridion's stable identifier for the filer, the same value /v1/members/{member_id} resolves and the member_id= filter takes. Derived from the name as filed; it does not change across filings or restatements."}, 'person_id': {'type': ['string', 'null'], 'description': "The filer's official Bioguide ID (for example G000596) where the congressional directory has one; null for executive-branch filers and for congressional filers the directory could not match. Never invented."}}, 'description': 'The filer, resolved against the congressional directory where a match exists. Identity fields only; what the filing itself says is in the receipt.', 'additionalProperties': False}, 'receipt': {'type': 'object', 'required': ['document_id', 'url', 'access', 'source_system', 'content_type', 'page', 'retrieved_at'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': "The government's URL for the document this row was parsed from, on the office's own domain. Never a Veridion-hosted copy. Cite it beside any claim built on the row."}, 'page': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Page of the document the row was parsed from, where the source is paginated and the parser recorded it (OGE filings); null for congressional rows, whose position is given by provenance.source_line_number instead.'}, 'access': {'enum': ['open', 'gated'], 'type': 'string', 'description': '`gated` means the official Senate eFD URL requires acknowledging its access agreement before the filing is displayed; other supported sources are `open`.'}, 'document_id': {'type': 'string', 'minLength': 1, 'description': "The office's own identifier for the document: the House Clerk's numeric document id, the Senate eFD report id, or the OGE document id. Resolves at /v1/receipts/{document_id}."}, 'content_type': {'type': 'string', 'minLength': 1, 'description': 'MIME type of the document at receipt.url: application/pdf for House Clerk and OGE documents, text/html for Senate eFD filings, which the Senate publishes as pages.'}, 'retrieved_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "When Veridion's warehouse first recorded the source document this row comes from. Independent of provenance.parsed_at, which belongs to the parser generation and may be earlier when a later retrieval re-attached an existing parse."}, 'source_system': {'enum': ['house_clerk', 'senate_efd', 'sec_edgar', 'oge'], 'type': 'string', 'description': 'The office that published the receipt: house_clerk, senate_efd or oge. sec_edgar is declared in the enum and serves no rows; /v1/status reports it as no_data.'}}, 'description': 'The government receipt this row was parsed from. Preserve the access label.', 'additionalProperties': False}, 'provenance': {'type': 'object', 'required': ['source_line_number', 'parsed_at', 'parser_version', 'methodology_version', 'source_ingested_at', 'first_observed_at'], 'properties': {'parsed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'When the parser generation named in parser_version produced this version of the row. A reparse under a new parser writes a new version with its own parsed_at; the earlier version stays in /history.'}, 'parser_version': {'type': 'string', 'minLength': 1, 'description': 'The parser generation that produced this version (for example house-ptr-line-v2). Not part of content_hash, so a reparse that changes no filing fact changes no hash.'}, 'first_observed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'When Veridion first observed this row. Immutable and used by the as_of filter.'}, 'source_ingested_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "When the source record entered Veridion's warehouse. first_observed_at is never later than this; the two differ when identity resolution carried an earlier observation forward."}, 'source_line_number': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'House Clerk PTR rows carry a PDF source-line coordinate when the parser recorded one; null rows are reconciled by reason, and parser-output gaps are enumerated in house_clerk_gap_register. Senate eFD records are parsed as filing transactions rather than House PTR PDF lines, so source_line_number is null by design.'}, 'methodology_version': {'type': 'string', 'minLength': 1, 'description': 'The admission and derivation rules this row was served under, currently receipt-or-drop-v1. A rule change ships as a new label and a changelog entry; see the stability policy.'}, 'transcription_method': {'enum': ['pdf_text_layer', 'verified_transcription'], 'type': 'string', 'description': 'Present only for OGE rows. pdf_text_layer means the official PDF text was parsed; verified_transcription means the row was read from a checked transcription whose SHA-256 matched the official scanned PDF at ingestion.'}}, 'description': 'How and when this version of the row was produced, and when the row was first observed, which is the instant as_of reads against. None of these fields is in content_hash.', 'additionalProperties': False}, 'version_id': {'type': 'string', 'minLength': 1, 'description': 'Immutable parse-generation identifier. Use disclosure_id, not version_id, for downstream identity across a restatement.'}, 'transaction': {'type': 'object', 'required': ['type', 'date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$', 'description': 'The transaction date as stated on the filing. Not the filing date, and not adjusted for weekends or holidays.'}, 'type': {'enum': ['buy', 'sell', 'exchange', 'other'], 'type': 'string', 'description': "buy from a P code or a purchase/buy label; sell from an S code or a sale/sell label; exchange from an E code or an exchange label; other for anything the filing marks differently. Partial versus full sale is not distinguished here; the filing's own wording is in amount.verbatim_text and the receipt."}}, 'description': 'What was done and on what date, as stated on the filing.', 'additionalProperties': False}, 'content_hash': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256, hex, of the canonical JSON array ["veridion-disclosure-content-v1", disclosure_id, version_id, member.member_id, member.full_name, member.chamber, asset.ticker, asset.name, asset.asset_type, asset.source_code, asset.description, transaction.type, transaction.date, filing.type, filing.filed_date, amount.range_low, amount.range_high, amount.verbatim_text, owner.label, owner.determination, receipt.document_id, receipt.url, receipt.source_system, receipt.page, provenance.source_line_number] using the served values exactly (null where null). Recompute it from this row to check the calculation; store it to check later that the same version_id still serves the same content. Derived fields (delay_days, statutory window, midpoint), timestamps, parser and methodology versions, and the change block are excluded, so a corrected derivation rule does not change the hash of an unchanged filing. The basis label changes if the field list ever changes.'}, 'disclosure_id': {'type': 'string', 'minLength': 1, 'description': 'Permanent identifier for the filing-derived transaction. It is never reused; parser versions and restatements retain this identifier.'}, 'identity_basis': {'enum': ['government_filing_facts'], 'type': 'string', 'description': 'Identity uses only filer, document, filed instrument, transaction date and type, amount range, and owner. Parser line, span, version, and run identifiers are excluded.'}}, 'additionalProperties': False}, 'description': 'Every observed version of this disclosure_id, oldest first. Each entry carries its own change block (upsert or supersede, active or withdrawn) and version_id. The last entry is the current state.'}, 'cache': {'anyOf': [{'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header', 'freshness_reference'], 'properties': {'policy': {'type': 'string', 'const': 'public'}, 'age_header': {'type': 'string', 'const': 'Age'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 300}, 'freshness_reference': {'type': 'object', 'required': ['source', 'source_expected_max_age_seconds', 'delivery_max_staleness_seconds', 'delivery_to_source_threshold_ratio', 'basis'], 'properties': {'basis': {'type': 'string', 'minLength': 1}, 'source': {'type': 'string', 'const': 'congress'}, 'delivery_max_staleness_seconds': {'type': 'number', 'const': 300}, 'source_expected_max_age_seconds': {'type': 'number', 'const': 21600}, 'delivery_to_source_threshold_ratio': {'type': 'string', 'const': '1/72'}}, 'additionalProperties': False}, 'browser_max_age_seconds': {'type': 'number', 'const': 0}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 300}}, 'additionalProperties': False}, {'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header'], 'properties': {'policy': {'type': 'string', 'const': 'private-no-store'}, 'age_header': {'type': 'null'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 0}, 'browser_max_age_seconds': {'type': 'number', 'const': 0}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 0}}, 'additionalProperties': False}]}, 'access': {'anyOf': [{'type': 'object', 'required': ['tier', 'max_rows_per_request', 'requests_per_hour', 'no_key_required', 'upgrade'], 'properties': {'tier': {'type': 'string', 'const': 'free'}, 'upgrade': {'type': 'object', 'required': ['max_rows_per_request', 'request_a_key'], 'properties': {'request_a_key': {'type': 'string', 'format': 'uri'}, 'max_rows_per_request': {'type': 'number', 'const': 1000}}, 'additionalProperties': False}, 'no_key_required': {'type': 'boolean', 'const': True}, 'requests_per_hour': {'type': 'number', 'const': 60}, 'max_rows_per_request': {'type': 'number', 'const': 25}}, 'additionalProperties': False}, {'type': 'object', 'required': ['tier', 'max_rows_per_request'], 'properties': {'tier': {'enum': ['free', 'developer', 'evaluator'], 'type': 'string'}, 'max_rows_per_request': {'type': 'number', 'const': 1000}}, 'additionalProperties': False}]}, 'notice': {'type': 'string', 'minLength': 1}, 'history': {'type': 'object', 'required': ['disclosure_id', 'event_count', 'first_observed_at', 'latest_observed_at', 'current_state', 'restated', 'events_truncated'], 'properties': {'restated': {'type': 'boolean', 'description': "True when more than one version has been observed. States that the row's content changed after first publication; the reason, if the source gave one, is on each event's change block. No motive is inferred."}, 'event_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'current_state': {'enum': ['active', 'withdrawn'], 'type': 'string'}, 'disclosure_id': {'type': 'string', 'minLength': 1}, 'events_truncated': {'type': 'boolean', 'description': 'True when the version count exceeded the response cap and the oldest events were withheld rather than silently dropped mid-sequence. event_count still reports the full number observed.'}, 'first_observed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'latest_observed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': '1.14.0'}}, 'additionalProperties': False}
get_status
Source freshness and bulk-snapshot health. This endpoint downgrades itself when its own arithmetic says stale — it never guesses green. When state is 'degraded', degraded_reasons names each cause with its measurement; sources[].index_reconciliation says whether the government's own index lists filings not yet served; bulk_export.merkle_root is the day's commitment over every row's content_hash. Check it before trusting a large pull.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['billing_gate', 'version', 'generated_at', 'cache', 'state', 'temporal_window', 'degraded_reasons', 'sources', 'institutional_delivery'], 'properties': {'cache': {'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header'], 'properties': {'policy': {'type': 'string', 'const': 'no-store', 'description': 'The cache contract this response was served under; always no-store for a measurement. Rendered as Cache-Control: no-store, max-age=0 with CDN-Cache-Control and Vercel-CDN-Cache-Control: no-store, and echoed in X-Veridion-Cache-Policy.'}, 'age_header': {'type': 'null', 'description': 'The name of the response header that reports how long a cache held this body, or null when no cache is permitted to hold it, as here. Public record responses name the Age header.'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 0, 'description': 'Seconds the CDN may reuse this body; 0, because CDN-Cache-Control is no-store. Public record responses declare a nonzero value here; measurements never do.'}, 'browser_max_age_seconds': {'type': 'number', 'const': 0, 'description': 'Seconds a browser or client cache may reuse this body without revalidating; 0, the max-age the Cache-Control header carries.'}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 0, 'description': 'The upper bound on how old this body can be when it reaches a client, counted from generated_at; 0 for a measurement, and the same number the X-Veridion-Cache-Max-Staleness header carries.'}}, 'description': 'Always no-store with zero max-age at every layer: a status page that could be served stale would defeat itself. age_header is null because no cache is permitted to add one.', 'additionalProperties': False}, 'state': {'enum': ['ready', 'degraded', 'unavailable'], 'type': 'string', 'description': "ready when no check below is failing. degraded when any source is stale or unavailable, the export is stale, unavailable or missing its merkle_root, coverage recovery is stale or unavailable, the Congress summary is stale, unavailable or unattested, a temporal-conformance contract fails, the temporal window is unreadable, the House index lists unaccounted filings, or a pipeline job is not delivering. unavailable when the status itself could not be measured. The endpoint never reports a state more optimistic than its own arithmetic: a stored 'ready' older than its threshold is reported stale."}, 'detail': {'type': 'string', 'description': 'Present only on the unavailable body, naming what could not be read.'}, 'notice': {'type': 'string', 'description': 'Standing guidance on reading this block: what no_data means, what degraded does and does not imply, and how to verify a download.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['source_system', 'state', 'last_success_at', 'failure_since', 'age_seconds', 'expected_max_age_seconds', 'threshold_basis', 'detail', 'index_reconciliation'], 'properties': {'state': {'type': 'string', 'minLength': 1, 'description': 'ready: the source observation is within expected_max_age_seconds. For OGE this is a successful producer completion, including zero-row polls; two consecutive failed completions instead report degraded. unknown means attendance or a successful completion is unavailable. stale: the stored state says ready but last_success_at is older than the threshold; the worse of the two is reported. source_unavailable: the most recent poll failed. no_data: the source publishes no rows into v1 by policy. unknown: the stored state was unreadable.'}, 'detail': {'type': ['string', 'null'], 'description': 'OGE: producer, verdict, last completion, measured age, threshold and current failure or uncertainty, computed from the same evidence as the verdict. Other sources retain their stored explanation; sec_edgar states its no_data boundary.'}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus last_success_at, in whole seconds; null when there is no success to measure from.'}, 'failure_since': {'type': ['string', 'null'], 'description': 'OGE: start of the first failed run after the last successful completion, ordered by (finished_at, run_id) over the whole attendance ledger, not its 24-hour row window. Null when no failed streak exists or attendance is unavailable. Senate uses the failed index-run streak; House does not measure this field.'}, 'source_system': {'type': ['string', 'null'], 'description': 'house_clerk, senate_efd, oge or sec_edgar. sec_edgar is listed in no_data state as a declared scope boundary, so a reader learns it from the response rather than from a query that returns nothing.'}, 'last_success_at': {'type': ['string', 'null'], 'description': 'OGE: last successful terminal completion in cron attendance, not a filing date. Senate: latest completed index run. House: latest qualified receipt row observation. Null when unavailable or never observed; these bases are distinct.'}, 'threshold_basis': {'type': ['string', 'null'], 'description': 'Operational alerting rule, not a service commitment. OGE names its producing job, consecutive-failure threshold, configured UTC schedules, maximum schedule gap, late-start allowance and run ceiling; the age budget is computed from those values.'}, 'index_reconciliation': {'anyOf': [{'type': 'object', 'required': ['state', 'checked_at', 'age_seconds', 'expected_max_age_seconds', 'cutoff_date', 'documents_on_index', 'parsed_documents', 'terminal_without_rows', 'unaccounted_documents', 'latest_index_filing_date', 'latest_served_filing_date', 'unaccounted_sample'], 'properties': {'state': {'enum': ['current', 'unaccounted', 'index_unavailable', 'unmeasured'], 'type': 'string', 'description': 'current: every document on the index since cutoff_date is accounted for (parsed, or terminal without qualifying rows). unaccounted: at least one is not. index_unavailable: the government index could not be read at the last check. unmeasured: no reconciliation newer than expected_max_age_seconds.'}, 'checked_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': "When the hourly ingest run last reconciled the House Clerk's searchable PTR index against the warehouse; null when no reconciliation has been stored."}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus checked_at, in whole seconds, floored at zero; null when checked_at is null.'}, 'cutoff_date': {'anyOf': [{'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, {'type': 'null'}], 'description': 'The earliest filing date the reconciliation examined: the check date minus 14 days. Documents filed before it are outside this measurement.'}, 'parsed_documents': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Of documents_on_index, those the parser finished with qualifying rows that are served.'}, 'documents_on_index': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "Documents the Clerk's index listed with a filing date on or after cutoff_date at the last check; null when the index could not be read."}, 'unaccounted_sample': {'type': 'array', 'items': {'type': 'object', 'required': ['doc_id', 'filing_date', 'reason'], 'properties': {'doc_id': {'type': 'string', 'minLength': 1, 'description': 'The House Clerk DocID of the unaccounted filing.'}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'The recorded overlay status and reason, as status:reason, or overlay_row_missing when the document was never attempted, truncated to 200 characters.'}, 'filing_date': {'anyOf': [{'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, {'type': 'null'}], 'description': 'The filing date the index lists for it; null when the index gave none.'}}, 'additionalProperties': False}, 'description': 'Up to five unaccounted documents with the recorded reason.'}, 'terminal_without_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents the parser finished and found no qualifying transaction rows in; accounted for, not served.'}, 'unaccounted_documents': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents on the index since cutoff_date that are neither served nor terminal without rows, plus any document the discovery pass could not fetch. Any value above zero degrades the endpoint.'}, 'expected_max_age_seconds': {'type': 'number', 'minimum': 0, 'description': 'The age past which the reconciliation is reported unmeasured: 21600 (6 h), the same threshold as the Congress summary, because the same hourly ingest cadence refreshes both. An operational alerting threshold, not a service commitment.'}, 'latest_index_filing_date': {'anyOf': [{'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, {'type': 'null'}], 'description': 'The newest filing date among documents_on_index; null when there are none.'}, 'latest_served_filing_date': {'anyOf': [{'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, {'type': 'null'}], 'description': 'The newest filing date among parsed_documents; the gap to latest_index_filing_date is the visible lag of the served corpus behind the government index.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': "The government's own index reconciled against what this API serves, when a source publishes an index we can read (House Clerk PTR search). Age says when we last succeeded; this says whether the index lists filings we do not yet account for. Null for sources without a readable index."}, 'expected_max_age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'The age past which the source reads stale: 86400 for House Clerk and Senate eFD. OGE uses two maximum daily schedule gaps from vercel.json plus the late-start allowance and run ceiling; it ages successful producer completions, not annual filings. Null for sec_edgar which has no poll to age.'}}, 'additionalProperties': False}, 'description': 'Freshness of every source Veridion polls, measured from the same table the serving views read. One entry per source system, including the ones that publish nothing.'}, 'version': {'type': 'string', 'const': '1.14.0', 'description': 'The contract version this response was produced under; the same value as X-API-Version.'}, 'pipeline': {'type': 'object', 'required': ['state', 'measured_at', 'observation_started_at', 'instrumented_jobs', 'unwrapped_jobs', 'scheduled_jobs', 'instrumented_invocations', 'unwrapped_invocations', 'scheduled_invocations', 'instrumented_routes', 'unwrapped_routes', 'scheduled_routes', 'schedule_entries', 'deprecated_fields', 'field_successors', 'basis', 'detail', 'jobs'], 'properties': {'jobs': {'type': 'array', 'items': {'type': 'object', 'required': ['cron_name', 'schedules', 'scheduled_job', 'state', 'expected_slots_24h', 'observed_slots_24h', 'missed_count_24h', 'unattributed_runs_24h', 'died_count', 'last_ok', 'latest_run'], 'properties': {'state': {'enum': ['unwrapped', 'unevaluated', 'never_ran', 'missed', 'running', 'died', 'failed', 'wrote_zero', 'write_count_unavailable', 'succeeded'], 'type': 'string', 'description': 'The job now, not the last 24 hours. missed: a due slot with no run attributed. died: the latest attempt started and never finished within its ceiling. failed: the latest run returned an error. wrote_zero: the latest run succeeded and wrote no rows. write_count_unavailable: succeeded, count unreadable. running: the latest run has not finished and is within its ceiling. never_ran: no run recorded although slots were due. unevaluated: attendance could not be read, or no run and no due slot yet. unwrapped: the route records no attendance. Precedence in that order when several apply.'}, 'last_ok': {'type': ['string', 'null'], 'description': 'When the job last completed successfully; null if never.'}, 'cron_name': {'type': 'string', 'minLength': 1, 'description': 'The invocation as scheduled: pathname plus query string, exactly as vercel.json lists it.'}, 'schedules': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every cron expression vercel.json schedules this invocation under; empty when it appears in none.'}, 'died_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Runs in the window that started and never finished within their ceiling, including ones a later run has since superseded. History; the state field describes now.'}, 'latest_run': {'anyOf': [{'type': 'object', 'required': ['started_at', 'finished_at', 'ok', 'rows_written', 'rows_written_basis', 'http_status', 'error'], 'properties': {'ok': {'type': ['boolean', 'null'], 'description': 'Whether the latest run reported success; null until it finishes.'}, 'error': {'type': ['string', 'null'], 'description': "The run's own error text, with credentials and URLs redacted; null on success."}, 'started_at': {'type': 'string', 'description': 'When the latest run started.'}, 'finished_at': {'type': ['string', 'null'], 'description': 'When the latest run finished; null while running or after it died.'}, 'http_status': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'The HTTP status the run returned; null while running.'}, 'rows_written': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows the latest run wrote, in the unit rows_written_basis names; null when the run did not report one.'}, 'rows_written_basis': {'type': 'string', 'description': 'What rows_written counts, named per route, because a row means different things to different jobs.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The most recent run of this invocation; null when it has never run.'}, 'scheduled_job': {'type': 'boolean', 'description': 'false for an invocation shape that appears in no vercel.json entry. It has no due slots and cannot miss one; it is listed rather than hidden.'}, 'missed_count_24h': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'expected_slots_24h minus observed_slots_24h.'}, 'expected_slots_24h': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Due slots in the window, from the schedules, counted only after observation_started_at.'}, 'observed_slots_24h': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Due slots in the window that a run was attributed to.'}, 'unattributed_runs_24h': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Runs that started in the window and attribute to no due slot, counted rather than dropped, because they ran.'}}, 'additionalProperties': False}, 'description': "The jobs that produce this API's data, one entry per invocation shape observed or scheduled."}, 'basis': {'type': 'string', 'minLength': 1, 'description': 'The full statement of how attendance is measured: the store, the two units, slot attribution and its tolerance, and what each job state means. Carried on every response so the numbers never travel without their rules.'}, 'state': {'enum': ['ready', 'partial', 'degraded', 'unavailable'], 'type': 'string', 'description': 'degraded when any listed job is not delivering: no successful completion since its most recent due slot, its latest run died, it has never run, or (export job only) its latest run failed. unavailable when the attendance store could not be read, which also degrades the endpoint. Otherwise partial when any required invocation or route is unwrapped; ready requires complete required instrumentation and no listed delivery failure. Named attendance_exemptions remain in scheduled and unwrapped totals. Partial also degrades the overall endpoint with pipeline:coverage.'}, 'detail': {'type': ['string', 'null'], 'description': 'When instrumentation is partial or exemptions apply, total and required coverage from the same attendance report. Otherwise the unavailable or empty-job explanation, or null when fully instrumented and readable.'}, 'measured_at': {'type': 'string', 'description': 'When attendance was evaluated; the 24-hour window ends here.'}, 'exempt_routes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of named uninstrumented route exemptions in this response.'}, 'scheduled_jobs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Deprecated in 1.3.14; the same value as scheduled_invocations.'}, 'unwrapped_jobs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Deprecated in 1.3.14; the same value as unwrapped_invocations.'}, 'required_routes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'scheduled_routes minus exempt_routes; instrumentation must cover every required route.'}, 'field_successors': {'type': 'object', 'description': 'For each deprecated field, the field that carries the same value under its correct name.', 'propertyNames': {'type': 'string', 'minLength': 1}, 'additionalProperties': {'type': 'string', 'minLength': 1}}, 'schedule_entries': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Lines in vercel.json's cron list. Exceeds scheduled_invocations when one URL carries more than one schedule."}, 'scheduled_routes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'instrumented_routes plus unwrapped_routes: every distinct cron pathname in vercel.json.'}, 'unwrapped_routes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct cron pathnames that record no attendance.'}, 'deprecated_fields': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'description': 'Fields in this block that are kept for compatibility and should not be read for new work.'}, 'instrumented_jobs': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Deprecated in 1.3.14; the same value as instrumented_invocations. Kept for additive compatibility.'}, 'exempt_invocations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct scheduled invocations belonging to the named uninstrumented route exemptions.'}, 'instrumented_routes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct cron pathnames that record attendance. This is the coverage figure: read it, not the invocation pair, when asking how much of the cron surface is watched.'}, 'required_invocations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'scheduled_invocations minus exempt_invocations; an exemption never manufactures attendance.'}, 'attendance_exemptions': {'type': 'array', 'items': {'type': 'object', 'required': ['route', 'reason', 'approved_on', 'decision'], 'properties': {'route': {'type': 'string', 'minLength': 1, 'description': 'Exact scheduled pathname exempt from attendance admission.'}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'Why this route must remain outside attendance admission.'}, 'decision': {'type': 'string', 'minLength': 1, 'description': 'Work-order reference approving this named exemption.'}, 'approved_on': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$', 'description': 'Date of the recorded exemption ruling.'}}, 'additionalProperties': False}, 'description': 'Named reviewed bootstrap exemptions, not measured successes. Included in scheduled and unwrapped totals, excluded only from required coverage.'}, 'scheduled_invocations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'instrumented_invocations plus unwrapped_invocations: every distinct invocation in vercel.json.'}, 'unwrapped_invocations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct scheduled invocations whose route records no attendance.'}, 'observation_started_at': {'type': ['string', 'null'], 'description': 'When the attendance instrument was installed. Due slots are counted only after this instant.'}, 'instrumented_invocations': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Distinct scheduled invocations (pathname plus query) whose route records attendance. One route scheduled under several query shapes counts once per shape, because a due slot belongs to one invocation.'}}, 'description': "Attendance of the jobs that produce this API's data, from the cron attendance store. Absent only on the fail-closed 503 body. A missed, died or never-run job, a failed export run, or an unreadable store degrades the endpoint by name.", 'additionalProperties': False}, 'universe': {'type': 'object', 'required': ['state', 'measured_at', 'measurement_age_seconds', 'measurement_max_age_seconds', 'symbols', 'scored', 'scored_qualified_count', 'qualified_count', 'coverage_share', 'census_trading_day', 'census_measured_at', 'last_scored_at', 'last_scored_age_seconds', 'median_scored_at', 'oldest_scored_at', 'oldest_scored_age_seconds', 'scored_within_24h', 'scored_within_24h_share', 'older_than_7d', 'latest_trading_day', 'methodology_version', 'methodology_versions', 'population_basis', 'detail'], 'properties': {'state': {'enum': ['measured', 'measurement_stale', 'unmeasured', 'unavailable'], 'type': 'string', 'description': 'measured when a current measurement was read. measurement_stale when the measurement itself is older than measurement_max_age_seconds, in which case every figure below describes the universe as of measured_at, not as of now. unmeasured when no measurement has been recorded yet. unavailable when the stored measurement could not be read. The last two are different facts and are reported as different states.'}, 'detail': {'type': 'string', 'description': 'What the state and the spread mean, in words, so the block is readable without this schema.'}, 'scored': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Equal to symbols by construction and unable to differ from it: both count the same rows. This is an identity, not a coverage measurement, and scored/symbols is not a coverage ratio. Every freshness figure below IS measured over these rows.'}, 'symbols': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Symbols carrying a score under the CURRENT methodology_version. Item 364: this field previously read "including any not yet scored", which was false -- the coverage view is built from score_snapshots, so an unscored symbol is not a row. Read population_basis before dividing this by anything.'}, 'measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': "When the universe was measured, not when this response was generated. The aggregate is taken on a cron because measuring it live costs roughly 624 ms, past this endpoint's read deadline."}, 'older_than_7d': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Scored symbols whose score is more than seven days old at measured_at. Published rather than hidden.'}, 'coverage_share': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'scored_qualified_count divided by qualified_count, without display rounding. Both counts belong to this measured_at and this census identity. Null for missing or invalid evidence or a zero denominator; zero only for a measured empty intersection with a nonempty qualified set.'}, 'last_scored_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'The NEWEST score in the universe. Read it with oldest_scored_at: on 2026-09-19 the newest was seven minutes old and the oldest was thirty-one days old, so this field alone would describe the universe as fresher than it is.'}, 'qualified_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Exact denominator: cardinality of the unique qualified symbol set captured with this intersection. Null without valid paired evidence, including historical count-only census rows.'}, 'median_scored_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'The middle of the distribution: half the universe was scored no earlier than this.'}, 'oldest_scored_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'The FLOOR of the universe: the least recently scored symbol. This is the field that makes last_scored_at honest, and the reason this block publishes a distribution rather than a headline.'}, 'population_basis': {'type': 'string', 'description': 'What symbols and scored actually count, and which figures in this block are identities rather than measurements. Published because a reader who divides scored by symbols gets 100% on every call and would reasonably read that as full coverage.'}, 'scored_within_24h': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Scored symbols whose score was computed inside the twenty-four hours before measured_at.'}, 'census_measured_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'Instant of the census captured with this intersection, in millisecond ISO-8601 Z form. The enclosing measured_at dates the intersection. Never taken from an independently newer census; null without valid paired evidence.'}, 'census_trading_day': {'anyOf': [{'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, {'type': 'null'}], 'description': 'Trading day of the qualified census captured with this intersection, not the latest census or latest scored trading day at request time. Null without valid paired evidence.'}, 'latest_trading_day': {'type': ['string', 'null'], 'description': 'The most recent trading day any symbol in the universe was scored for.'}, 'methodology_version': {'type': ['string', 'null'], 'description': 'The scoring methodology version the universe view selected as current.'}, 'methodology_versions': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Distinct methodology versions present in the universe. Item 364: this is 1 by construction, because the view filters to the single current version, so it cannot signal a mid-migration universe. It previously claimed it could.'}, 'scored_qualified_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Exact numerator: current-methodology scored symbols intersected with the stored qualified set at measured_at. Excludes scored names outside that set; null without valid paired evidence.'}, 'last_scored_age_seconds': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus last_scored_at. The age of the freshest score, not of the universe.'}, 'measurement_age_seconds': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus measured_at. How old the measurement is, not how old the scores are.'}, 'scored_within_24h_share': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}], 'description': 'scored_within_24h divided by scored, rounded to four places. Below four in five, the detail says so rather than leaving the reader to divide.'}, 'oldest_scored_age_seconds': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus oldest_scored_at. The worst case a consumer of the scores can meet.'}, 'measurement_max_age_seconds': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'The age past which the measurement is called stale and the endpoint degrades. A bound this response was checked against, not a service commitment.'}}, 'description': "How fresh the scored universe is. A buyer's first question about a score is how old it is, and the answer is a distribution: newest, median, oldest, and the share scored inside a day. Measured on a cron and read as one stored row; the block reports the age of its own measurement so a stale measurement cannot masquerade as a current one. Absent only on the unavailable body, where no read was attempted at all: this endpoint does not publish a block it did not measure.", 'additionalProperties': False}, 'bulk_export': {'type': 'object', 'required': ['state', 'latest_snapshot_day', 'generated_at', 'snapshot_generation', 'row_count', 'rows_dropped_failed_validation', 'byte_size', 'sha256', 'merkle_root', 'content_hash_basis', 'age_seconds', 'expected_max_age_seconds', 'threshold_basis', 'detail'], 'properties': {'state': {'type': 'string', 'minLength': 1, 'description': 'ready: the latest daily snapshot manifest is readable and younger than expected_max_age_seconds. stale: older. unavailable: the manifest could not be read. no_snapshot_yet: none has been written.'}, 'detail': {'type': ['string', 'null'], 'description': 'Why the export is not ready, when it is not; null when ready.'}, 'sha256': {'type': ['string', 'null'], 'description': 'sha256, hex, of the stored snapshot file. Verify a download against it before reading.'}, 'byte_size': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Size in bytes of the stored snapshot file, as verified after writing.'}, 'row_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows in the snapshot file after validation; the leaves the merkle_root commits to.'}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': "generated_at minus the snapshot's generated_at, in whole seconds."}, 'merkle_root': {'anyOf': [{'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, {'type': 'null'}], 'description': "Merkle root over every row's content_hash in the export: leaves in disclosure_id order, sha256 over the concatenated 32-byte child digests, an odd node paired with itself. Recomputed from the stored bytes before the manifest was written. Null for a snapshot generated before 1.3.6. scripts/verify-disclosure-export.mjs recomputes it from a downloaded export with no network and compares it with this value."}, 'generated_at': {'type': ['string', 'null'], 'description': 'When the newest snapshot finished writing and its manifest was recorded.'}, 'threshold_basis': {'type': 'string', 'minLength': 1, 'description': 'An operational alerting threshold chosen by Veridion. Not a service commitment; commercial terms live in a license.'}, 'content_hash_basis': {'type': ['string', 'null'], 'description': 'The content_hash basis the leaves were hashed under (veridion-disclosure-content-v1). Set exactly when merkle_root is set.'}, 'latest_snapshot_day': {'type': ['string', 'null'], 'description': 'The UTC day the newest snapshot was pinned to, the same day /v1/export names.'}, 'snapshot_generation': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1}, {'type': 'null'}], 'description': 'The temporal generation the snapshot was pinned to; the same value as_of reads and /v1/export report for that day.'}, 'expected_max_age_seconds': {'type': 'number', 'minimum': 0, 'description': '108000 (30 hours): the snapshot runs daily at 07:40 UTC, so one slow run passes and a fully missed day is flagged before a second day of silence.'}, 'rows_dropped_failed_validation': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows the serving view returned that failed the contract schema and were left out of the file rather than written broken. Zero is the expected value; a positive count is published, never hidden.'}}, 'description': 'The daily bulk snapshot: its day, generation, size, file hash and Merkle commitment. Absent only on the unavailable body.', 'additionalProperties': False}, 'billing_gate': {'type': 'object', 'required': ['state', 'required_days', 'consecutive_operational_days', 'counting_since', 'last_non_operational_day', 'reasons_on_last_non_operational_day', 'measured_at', 'definition', 'detail'], 'properties': {'state': {'enum': ['accruing', 'eligible', 'unavailable'], 'type': 'string', 'description': 'Stored samples qualify the streak, are still accruing, or could not be read. This item does not activate checkout.'}, 'detail': {'type': ['string', 'null'], 'description': 'Why no observations or no measurement are available; otherwise null.'}, 'definition': {'type': 'string', 'const': "A completed UTC day qualifies only when all 24 distinct hourly observations are present and operational. Operational means the public status evaluator returned ready with no degraded reasons. Missing hours break the streak; today's incomplete hour is not missing until it ends. A recorded non-operational sample today resets the streak immediately. Missing completed hours are recorded as observation_missing failures, with no invented observation timestamp. No operational history is backfilled. Hourly samples do not establish continuous availability or a service-level guarantee.", 'description': 'Pre-registered day, gap and incomplete-day rules used by the stored counter.'}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'Database computation instant, or the instant the read was declared unavailable. Not a deployment date.'}, 'required_days': {'type': 'number', 'const': 14, 'description': 'Required consecutive completed operational UTC days.'}, 'counting_since': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'First stored observation instant. No history is inferred from deployment or backfilled; null when none exists or unreadable.'}, 'last_non_operational_day': {'anyOf': [{'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, {'type': 'null'}], 'description': 'Latest UTC date with a failed sample or missing completed hour since collection began. Null if none exists or unreadable.'}, 'consecutive_operational_days': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Completed qualifying UTC days since the latest failed or missing hourly sample. Null means unavailable, not zero.'}, 'reasons_on_last_non_operational_day': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'description': 'Distinct failure codes for the last non-operational day. observation_missing is a persisted closed-hour gap; missing_hour is an absent hour not yet recorded. Both break the streak.'}}, 'description': "A completed UTC day qualifies only when all 24 distinct hourly observations are present and operational. Operational means the public status evaluator returned ready with no degraded reasons. Missing hours break the streak; today's incomplete hour is not missing until it ends. A recorded non-operational sample today resets the streak immediately. Missing completed hours are recorded as observation_missing failures, with no invented observation timestamp. No operational history is backfilled. Hourly samples do not establish continuous availability or a service-level guarantee.", 'additionalProperties': False}, 'generated_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'When this response was computed. Every age_seconds below is measured from this instant, so the block is internally consistent even when read from a cache.'}, 'track_record': {'type': 'object', 'required': ['state', 'published_at', 'published_age_seconds', 'last_attempt_status', 'last_attempt_at', 'last_attempt_age_seconds', 'attempt_newer_than_publication', 'detail'], 'properties': {'state': {'enum': ['live', 'stale', 'unavailable'], 'type': 'string', 'description': 'Freshness of the published track record itself: live when the last successful publication is inside its expected cadence, stale when it is not, unavailable when the publication record could not be read. The same state the /track-record page renders, from the same reading.'}, 'detail': {'type': 'string', 'description': 'What the state and the attempt mean, in words, so the block is readable without this schema.'}, 'published_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'When the cells currently served were computed. This is the last SUCCESSFUL publication, not the last run: a failed run does not move it.'}, 'last_attempt_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'When the most recent run was recorded, whatever its outcome.'}, 'last_attempt_status': {'enum': ['completed', 'insufficient_history', 'failed', 'unavailable'], 'type': 'string', 'description': 'Outcome of the most recent recorded run. insufficient_history means the run completed and honestly declined to publish for want of matured history — an outcome, not a failure, and it does not degrade this endpoint.'}, 'published_age_seconds': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus published_at. How old the served track-record figures are.'}, 'last_attempt_age_seconds': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus last_attempt_at. How long ago the pipeline last tried.'}, 'attempt_newer_than_publication': {'type': 'boolean', 'description': 'True when a run is recorded after the last successful publication. Paired with a failed last_attempt_status this is the case a publication instant alone hides: the served cells are real and correctly dated, and the pipeline has since tried to replace them and could not. Measured on production 2026-09-19, 356 of 547 recorded runs are failures, so this is a normal condition rather than an edge case.'}}, 'description': 'When the published track record was last successfully computed, and whether the latest run succeeded. The figures a buyer reads on /track-record are dated by published_at; this block lets a pipeline learn that date, and learn that a later run failed, without scraping the page. Read live from two indexed single-row lookups, so unlike universe it carries no measurement age of its own. Absent only on the unavailable body, where no read was attempted.', 'additionalProperties': False}, 'temporal_window': {'type': 'object', 'required': ['state', 'point_in_time_floor', 'depth_days', 'measured_at', 'retention_regime', 'basis', 'detail'], 'properties': {'basis': {'type': 'string', 'minLength': 1, 'description': 'The sentence stating how the floor and depth are measured, carried on every response.'}, 'state': {'enum': ['available', 'unavailable'], 'type': 'string', 'description': 'available when the temporal dataset-state resolver answered; unavailable when it did not, which degrades the endpoint with the reason in detail.'}, 'detail': {'type': ['string', 'null'], 'description': 'Why the window is unavailable, when it is; null when available.'}, 'depth_days': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'Unrounded (measured_at - point_in_time_floor) / 86400000 milliseconds. Temporal depth is not filing completeness; null means unmeasured.'}, 'measured_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'The instant depth_days was measured against; equals generated_at.'}, 'retention_regime': {'type': 'string', 'const': 'growing', 'description': 'Retained versions are close-only and generations append-only; the current mechanism has no age-based rolling prune.'}, 'point_in_time_floor': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'Inclusive millisecond boundary from the same temporal dataset-state resolver used by disclosure queries; null if unreadable.'}}, 'description': 'How far back as_of reads can go. The floor is the activation instant of retained payload history; depth is the time since. Neither says anything about filing completeness before the floor, which is what /v1/coverage measures.', 'additionalProperties': False}, 'degraded_reasons': {'type': 'array', 'items': {'type': 'object', 'required': ['check', 'measured'], 'properties': {'check': {'type': 'string', 'minLength': 1, 'description': 'The check that failed, named as the block it lives in: source:<system>, source:<system>:index_reconciliation, bulk_export, bulk_export:merkle_root, coverage_recovery, congress_public_summary, temporal_conformance, temporal_window, pipeline:attendance, or pipeline:<cron>.'}, 'state': {'enum': ['timed_out', 'read_failed'], 'type': 'string', 'description': 'Present for an independently bounded status read that timed out or threw; no source freshness threshold is changed.'}, 'measured': {'type': 'string', 'minLength': 1, 'description': 'The measurement behind the failure, quoted with its numbers and timestamps, so a caller can act on it without diffing the block it came from.'}, 'deadline_ms': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'Per-read request budget in milliseconds; 500, independently applied to each status dependency.', 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'description': 'Which checks pulled state down, and their measurements. Empty when ready. An unavailable response carries any observed read failures, including named timed_out deadlines; missing configuration has no measured read outcomes.'}, 'coverage_recovery': {'type': 'object', 'required': ['state', 'computed_at', 'is_stale', 'documents_total', 'pending', 'in_progress', 'failed', 'failed_terminal', 'parser_reparse_row_loss', 'refresh_outcome', 'detail'], 'properties': {'state': {'enum': ['ready', 'recovery_in_progress', 'complete_with_terminal_gaps', 'stale', 'unavailable'], 'type': 'string', 'description': 'ready: every House document is parsed or terminal and the stamped measurement is current. recovery_in_progress: documents remain pending or in progress. complete_with_terminal_gaps: nothing pending, but some documents ended in a terminal failure. stale: the stamped measurement is older than its budget. unavailable: it could not be read. recovery_in_progress, stale and unavailable degrade the endpoint with the measurement quoted, as does a refresh_outcome other than succeeded. complete_with_terminal_gaps does not degrade it: the terminal count is published beside the state, and a permanent, disclosed property of the corpus is not a degradation of the service.'}, 'detail': {'type': ['string', 'null'], 'description': 'Why the block is stale or unavailable, when it is; null otherwise.'}, 'failed': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents whose latest attempt failed and will be retried.'}, 'pending': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents queued for a parse or reparse and not yet attempted.'}, 'is_stale': {'type': 'boolean', 'description': "true when computed_at is older than the measurement's own stale_after budget."}, 'computed_at': {'type': ['string', 'null'], 'description': 'When the stamped coverage measurement was computed.'}, 'in_progress': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents with an attempt under way.'}, 'documents_total': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'House Clerk PTR documents known to the recovery ledger.'}, 'failed_terminal': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents whose attempts are exhausted; no further retry is scheduled and no rows are served from them.'}, 'refresh_outcome': {'type': 'object', 'required': ['state', 'stage', 'attempted_at', 'completed_at', 'age_seconds', 'rows_examined', 'parser_state_duration_ms', 'coverage_refresh_duration_ms', 'route_duration_ms', 'error_code', 'detail'], 'properties': {'stage': {'anyOf': [{'enum': ['parser_state', 'coverage_snapshot', 'complete'], 'type': 'string'}, {'type': 'null'}], 'description': 'The stage the latest refresh reached: parser_state, then coverage_snapshot, then complete.'}, 'state': {'enum': ['succeeded', 'failed', 'unevaluated', 'unavailable'], 'type': 'string', 'description': 'The recorded outcome of the latest coverage refresh; unevaluated when none has been recorded; unavailable when the record could not be read.'}, 'detail': {'type': ['string', 'null'], 'description': "The failure's own text, or why no outcome could be read; null on success."}, 'error_code': {'type': ['string', 'null'], 'description': 'The stable code of the failure, when the refresh failed; null otherwise.'}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus completed_at, in whole seconds.'}, 'attempted_at': {'type': ['string', 'null'], 'description': 'When the latest refresh started.'}, 'completed_at': {'type': ['string', 'null'], 'description': 'When the latest refresh finished; null if it did not.'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Documents the refresh examined to produce the counts above.'}, 'route_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds for the whole refresh route invocation.'}, 'parser_state_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds spent in the parser_state stage.'}, 'coverage_refresh_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds spent in the coverage_snapshot stage.'}}, 'description': 'The latest recorded refresh of the coverage measurement, so a reader can tell a fresh number from a stale one.', 'additionalProperties': False}, 'parser_reparse_row_loss': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Documents where a reparse produced fewer rows than were served before and the lossless check rejected the replacement. Those documents are absent from the API rather than served with a lossy replacement.'}}, 'description': 'Where House Clerk document recovery stands: how many documents are parsed, queued, failing, terminally failed, or withheld by the lossless-reparse check. Absent only on the unavailable body.', 'additionalProperties': False}, 'observation_delay': {'type': 'object', 'required': ['methodology_version', 'state', 'computed_at', 'basis', 'sources'], 'properties': {'basis': {'type': 'string', 'minLength': 1, 'description': 'precomputed: reads a saved poll-time report, with no live aggregate fallback. Before 1.9.0 this carried the prose now in measurement_basis.'}, 'state': {'enum': ['measured', 'partial', 'unavailable'], 'type': 'string', 'description': 'measured when every eligible source has a published distribution; partial when some do; unavailable when none does. Never degrades the endpoint: an unpublished distribution is a disclosed limit, not a failure of served rows.'}, 'sources': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['state', 'source_system', 'observation_started_on', 'window_start', 'window_end', 'measured_rows', 'median_hours', 'p95_hours', 'max_hours', 'percentile_state', 'population', 'continuity'], 'properties': {'state': {'type': 'string', 'const': 'measured', 'description': 'A distribution is published for this source.'}, 'max_hours': {'type': 'number', 'minimum': 0, 'description': 'The largest observation delay in the distribution, in hours.'}, 'p95_hours': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': '95th percentile in hours; null when withheld under 100 rows.'}, 'continuity': {'type': 'object', 'required': ['telemetry_first_day', 'telemetry_last_day', 'telemetry_days', 'days_poll_succeeded', 'configured_start_precedes_telemetry'], 'properties': {'telemetry_days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Count of recorded source-days, not elapsed calendar days; missing days are not counted.'}, 'telemetry_last_day': {'type': 'string', 'description': "Maximum observation_date in the source's daily poll ledger."}, 'days_poll_succeeded': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Recorded source-days with at least one successful poll; each measured row also requires success on every day from filing through observation.'}, 'telemetry_first_day': {'type': 'string', 'description': "Minimum observation_date in the source's daily poll ledger."}, 'configured_start_precedes_telemetry': {'type': 'boolean', 'description': 'True when the configured source start precedes the earliest recorded poll day; that unsupported interval is excluded from measurements.'}}, 'description': "Recorded poll window counted in the distribution's statement; the configured start is not substituted for evidence.", 'additionalProperties': False}, 'population': {'type': 'object', 'required': ['served_rows', 'excluded_rows', 'exclusions'], 'properties': {'exclusions': {'type': 'array', 'items': {'type': 'object', 'required': ['reason', 'rows'], 'properties': {'rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Active served source rows assigned this exclusion reason in the distribution's statement."}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'Stored eligibility refusal or a missing daily-poll proof at read time; rows receive exactly one reason, never a guessed assessment.'}}, 'additionalProperties': False}, 'description': 'Disjoint exclusion counts by reason, sorted by reason; an empty list means no served rows were excluded.'}, 'served_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Count of active retained row versions for this source in the statement computing the distribution; includes ineligible rows.'}, 'excluded_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Served source rows excluded from the distribution; equals the sum of named exclusion counts and served_rows minus measured_rows.'}}, 'description': 'Served denominator and named exclusions, computed with the measured distribution.', 'additionalProperties': False}, 'window_end': {'type': 'string', 'description': 'Latest filed_date of a row in the distribution.'}, 'median_hours': {'type': 'number', 'minimum': 0, 'description': 'Median of first_observed_at minus filed_date, in hours, over measured_rows.'}, 'window_start': {'type': 'string', 'description': 'Earliest filed_date of a row in the distribution.'}, 'measured_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows in the distribution: served rows whose source has verified daily continuity for every day between filed_date and first observation.'}, 'source_system': {'enum': ['house_clerk', 'senate_efd'], 'type': 'string', 'description': 'The source measured. OGE is excluded by policy: one annual document is one event, not a distribution.'}, 'percentile_state': {'enum': ['measured', 'withheld_small_n'], 'type': 'string', 'description': 'withheld_small_n when measured_rows is under 100, in which case p95_hours is null.'}, 'observation_started_on': {'type': 'string', 'description': 'The configured day continuous observation of this source began.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['state', 'source_system', 'observation_started_on', 'reason', 'population', 'continuity'], 'properties': {'state': {'type': 'string', 'const': 'unevaluated', 'description': 'No distribution is published for this source; reason and continuity carry the record behind the refusal.'}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'Why the distribution refused to publish, quoted from the measurement: for example the count of served rows without a current eligibility assessment.'}, 'continuity': {'anyOf': [{'type': 'object', 'required': ['telemetry_first_day', 'telemetry_last_day', 'telemetry_days', 'days_poll_succeeded', 'configured_start_precedes_telemetry'], 'properties': {'telemetry_days': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Count of recorded source-days, not elapsed calendar days; missing days are not counted.'}, 'telemetry_last_day': {'type': 'string', 'description': 'Most recent day of poll telemetry.'}, 'days_poll_succeeded': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Of telemetry_days, the days on which the poll succeeded.'}, 'telemetry_first_day': {'type': 'string', 'description': 'First day for which per-day poll telemetry exists for this source.'}, 'configured_start_precedes_telemetry': {'type': 'boolean', 'description': 'true when observation_started_on is earlier than telemetry_first_day, so filings before the telemetry have no verified continuity and are not counted toward a distribution.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The continuity telemetry the eligibility rule reads; null when none exists.'}, 'population': {'anyOf': [{'type': 'object', 'required': ['served_rows', 'excluded_rows', 'exclusions'], 'properties': {'exclusions': {'type': 'array', 'items': {'type': 'object', 'required': ['reason', 'rows'], 'properties': {'rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Active served source rows assigned this exclusion reason in the distribution's statement."}, 'reason': {'type': 'string', 'minLength': 1, 'description': 'Stored eligibility refusal or a missing daily-poll proof at read time; rows receive exactly one reason, never a guessed assessment.'}}, 'additionalProperties': False}, 'description': 'Disjoint exclusion counts by reason, sorted by reason; an empty list means no served rows were excluded.'}, 'served_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Count of active retained row versions for this source in the statement computing the distribution; includes ineligible rows.'}, 'excluded_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Served source rows excluded from the distribution; equals the sum of named exclusion counts and served_rows minus measured_rows.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Measured served denominator and exclusions when the statement succeeds with no eligible rows; null when the distribution refuses or cannot be read.'}, 'source_system': {'enum': ['house_clerk', 'senate_efd'], 'type': 'string', 'description': 'The source that was not measured.'}, 'observation_started_on': {'type': ['string', 'null'], 'description': 'The configured day continuous observation began; null if none is configured.'}}, 'additionalProperties': False}]}, 'description': 'One entry per eligible source, measured or unevaluated with its record.'}, 'age_seconds': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Whole seconds since computed_at at this read; null when the saved computation is unavailable.'}, 'computed_at': {'type': ['string', 'null'], 'description': 'Start of the saved poll-time computation, never the request time. Null when no valid saved computation exists; stale reports retain their original instant with unavailable state.'}, 'measurement_basis': {'type': 'string', 'minLength': 1, 'description': 'The measurement and eligibility rule, previously carried in basis; present on 1.9.0 responses.'}, 'methodology_version': {'type': 'string', 'minLength': 1, 'description': 'Eligibility revision requiring active served versions, matching assessment facts and daily poll evidence from filing through first observation; prior decisions remain in the append-only ledger.'}, 'expected_max_age_seconds': {'type': 'integer', 'maximum': 9007199254740991, 'description': '86400: one daily producer cycle. A stale saved report withholds its distribution; an operational measurement freshness budget, not a service commitment.', 'exclusiveMinimum': 0}}, 'description': "Hours from a filing's filed_date to Veridion's first observation, per source. Published only over rows with verified continuity; withheld with the reason otherwise. Absent only on the unavailable body.", 'additionalProperties': False}, 'temporal_conformance': {'type': 'object', 'required': ['state', 'computed_at', 'contracts'], 'properties': {'state': {'enum': ['ready', 'degraded', 'unavailable'], 'type': 'string', 'description': 'ready when every contract passed on the pinned snapshot; degraded when any failed; unavailable when the snapshot could not be read.'}, 'contracts': {'type': 'array', 'items': {'type': 'object', 'required': ['contract', 'state', 'violations', 'rows_examined', 'verified_on'], 'properties': {'state': {'enum': ['pass', 'fail', 'unevaluated'], 'type': 'string', 'description': 'pass with zero violations; fail with the count; unevaluated when the evidence is missing.'}, 'contract': {'enum': ['T1', 'T2', 'T3', 'T4'], 'type': 'string', 'description': 'T1: point-in-time reads exclude later versions. T2: pagination stays fixed while writes continue. T3: incremental sync reconstructs the full set. T4: restatements preserve permanent row identity.'}, 'violations': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Rows that broke the contract; null when unevaluated.'}, 'verified_on': {'type': ['string', 'null'], 'description': 'The UTC day the contract was last verified.'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows the contract was checked over.'}}, 'additionalProperties': False}, 'description': 'One entry per contract, T1 through T4.'}, 'computed_at': {'type': ['string', 'null'], 'description': 'When the contracts were last verified, against the pinned bulk snapshot.'}}, 'description': 'The four temporal contracts, verified against the pinned bulk snapshot. A failing contract degrades the endpoint by name. Absent only on the unavailable body.', 'additionalProperties': False}, 'institutional_delivery': {'type': 'object', 'required': ['available', 'reason'], 'properties': {'reason': {'type': 'string', 'const': 'first_party_provenance_not_proven', 'description': 'Institutional delivery remains a compile-time product boundary, not a live provenance measurement or the authorization check for the existing Free/Developer API. 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. 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. 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. 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. The clearing requirements are published at https://www.veridionmarkets.com/data-api#institutional-delivery.'}, 'available': {'type': 'boolean', 'const': False, 'description': 'Always false in v1: no institutional delivery channel is offered through this endpoint.'}}, 'description': 'A declared boundary, stated rather than discovered.', 'additionalProperties': False}, 'congress_public_summary': {'type': 'object', 'required': ['state', 'refreshed_at', 'age_seconds', 'expected_max_age_seconds', 'threshold_basis', 'warehouse_rows', 'refresh_outcome', 'detail'], 'properties': {'state': {'enum': ['ready', 'stale', 'unavailable', 'unattested', 'succeeded', 'failed', 'unevaluated', 'running', 'stalled'], 'type': 'string', 'description': "ready: the newest successful refresh outcome attests to the served summary. unattested: the summary's refreshed_at is newer than any recorded outcome, so the served figures were written by a path that did not record its outcome. stale/unavailable: age or read failure. The remaining values echo refresh_outcome.state when no better word applies; 'succeeded' is no longer emitted."}, 'detail': {'type': ['string', 'null'], 'description': 'Why the summary is not ready, when it is not; null when ready.'}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus refreshed_at, in whole seconds.'}, 'refreshed_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, {'type': 'null'}], 'description': "When the served Congress summary was last rewritten, in the warehouse's own timestamp form."}, 'warehouse_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Congressional warehouse rows the summary was computed over, including rows not yet qualified for the API.'}, 'refresh_outcome': {'type': 'object', 'required': ['state', 'attempt_id', 'stage', 'started_at', 'observed_at', 'age_seconds', 'rows_examined', 'warehouse_rows', 'summary_refreshed_at', 'amount_coverage_duration_ms', 'public_summary_duration_ms', 'disclosure_aggregates_duration_ms', 'total_duration_ms', 'error_code', 'detail'], 'properties': {'stage': {'anyOf': [{'enum': ['preflight', 'amount_coverage', 'public_summary', 'disclosure_aggregates', 'verification', 'complete'], 'type': 'string'}, {'type': 'null'}], 'description': 'The stage the attempt reached, in order: preflight, amount_coverage, public_summary, disclosure_aggregates, verification, complete.'}, 'state': {'enum': ['succeeded', 'failed', 'unevaluated', 'running', 'stalled', 'unavailable'], 'type': 'string', 'description': "The newest recorded outcome of the summary's owner: succeeded or failed at a stage, running while an attempt is open, stalled when an open attempt has outlived its ceiling, unevaluated when none is recorded, unavailable when the ledger could not be read."}, 'detail': {'type': ['string', 'null'], 'description': "The failure's own text; null on success."}, 'attempt_id': {'type': ['string', 'null'], 'description': 'The owner attempt this outcome belongs to. Every refresh of the summary records one; a summary refreshed without one reads unattested.'}, 'error_code': {'type': ['string', 'null'], 'description': 'The stable code of the failure, when the attempt failed; null otherwise.'}, 'started_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, {'type': 'null'}], 'description': 'When the attempt started.'}, 'age_seconds': {'anyOf': [{'type': 'number', 'minimum': 0}, {'type': 'null'}], 'description': 'generated_at minus observed_at, in whole seconds.'}, 'observed_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, {'type': 'null'}], 'description': 'When the terminal event was recorded.'}, 'rows_examined': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Warehouse rows the attempt examined; zero on a failure before the summary stage.'}, 'warehouse_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Warehouse rows at the time of the attempt, as the owner counted them.'}, 'total_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds for the whole attempt.'}, 'summary_refreshed_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, {'type': 'null'}], 'description': "The refreshed_at the attempt stamped on the summary. When this equals the block's refreshed_at, the served summary is attested by this outcome."}, 'public_summary_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds in the public_summary stage.'}, 'amount_coverage_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds in the amount_coverage stage.'}, 'disclosure_aggregates_duration_ms': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Milliseconds in the disclosure_aggregates stage.'}}, 'description': "The newest outcome recorded by the summary's owner, which is what attests the served figures.", 'additionalProperties': False}, 'threshold_basis': {'type': 'string', 'minLength': 1, 'description': 'An operational alerting threshold chosen by Veridion. Not a service commitment; commercial terms live in a license.'}, 'expected_max_age_seconds': {'type': 'number', 'minimum': 0, 'description': "21600 (6 hours): the summary's independently scheduled owner runs every four hours."}}, 'description': 'The Congress public summary that /api/congress/summary serves, its age, and whether the newest owner outcome attests to it. Absent only on the unavailable body.', 'additionalProperties': False}}, 'additionalProperties': False}
list_members
List filers with official identity (congressional filers carry their Bioguide ID; executive-branch filers return null with an explanation — identifiers are never invented). Filter by bioguide, by the exact member_id a disclosure row carries, or by a substring of the name as filed. Resolve a person with name first, then confirm with the returned member_id or bioguide.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': "Case-insensitive substring of the filer's full name, e.g. pelosi"}, 'bioguide': {'type': 'string', 'description': 'Official Bioguide ID, e.g. P000197'}, 'member_id': {'type': 'string', 'description': 'Exact filer identifier from a disclosure row, e.g. nancy-pelosi'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['data', 'count', 'identity_join', 'served_at', 'directory', 'cache', 'version', 'notice'], 'properties': {'data': {'type': 'array', 'items': {'type': 'object', 'required': ['member_id', 'identity', 'full_name', 'chamber', 'party', 'state', 'district', 'coverage'], 'properties': {'party': {'type': ['string', 'null'], 'description': 'Directory party label, or null without a mapping.'}, 'state': {'type': ['string', 'null'], 'description': 'Directory state code, or null when unavailable or inapplicable.'}, 'chamber': {'type': ['string', 'null'], 'description': 'House, Senate or executive-branch filer class from the directory; null when unavailable.'}, 'coverage': {'type': 'object', 'required': ['disclosures_available', 'filings_pending_receipt', 'filings_pending_qualification', 'latest_filed_date', 'average_filing_delay_days'], 'properties': {'latest_filed_date': {'type': ['string', 'null'], 'description': "Maximum filing date among this member's directory candidate rows; null without one."}, 'disclosures_available': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Rows counted by the existing directory's candidate-view aggregate for this member, not a separately pinned API-version count."}, 'filings_pending_receipt': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': "Pending-receipt rows reported by the directory's latest member coverage observation, or its executive-branch receipt predicate; not distinct document count."}, 'average_filing_delay_days': {'type': ['number', 'null'], 'description': 'Directory aggregate of transaction-to-filing days, rounded by the existing SQL view; null without measured intervals. Not a timeliness verdict.'}, 'filings_pending_qualification': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Nonnegative difference between directory total held rows and candidate aggregate rows; not a per-reason exclusion census.'}}, 'description': 'Existing directory coverage semantics retained. In the paginated response, read at coverage.served_at in the same statement as identity.', 'additionalProperties': False}, 'district': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{2}-\\d+$'}, {'type': 'null'}], 'description': "House district as `STATE-N`, 0 for an at-large seat; null for senators and executive-branch filers. The same form every disclosure row's member.district uses."}, 'identity': {'type': 'object', 'required': ['bioguide', 'system', 'note'], 'properties': {'note': {'type': ['string', 'null'], 'description': 'Explanation of a missing identity mapping; null when an identifier is present.'}, 'system': {'type': 'string', 'const': 'us_congress_bioguide', 'description': 'Identifier namespace, not a statement that every filer has an identifier in it.'}, 'bioguide': {'type': ['string', 'null'], 'description': 'Mapped official congressional Bioguide ID, or null when unmapped or inapplicable.'}}, 'description': 'Directory identity join, independent of financial disclosure counts.', 'additionalProperties': False}, 'full_name': {'type': ['string', 'null'], 'description': 'Name carried by the existing directory; null when unavailable.'}, 'member_id': {'type': 'string', 'description': 'Filer identifier from the directory; the ascending key for opt-in pagination.'}}, 'additionalProperties': False}}, 'cache': {'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header'], 'properties': {'policy': {'type': 'string', 'const': 'private-no-store'}, 'age_header': {'type': 'null'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 0}, 'browser_max_age_seconds': {'type': 'number', 'const': 0}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 0}}, 'additionalProperties': False}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'notice': {'type': 'string', 'minLength': 1}, 'version': {'type': 'string', 'const': '1.14.0'}, 'directory': {'type': 'object', 'required': ['source', 'refreshed_at', 'max_age_seconds', 'fallback_reason'], 'properties': {'source': {'enum': ['snapshot', 'live_view'], 'type': 'string', 'description': 'Which relation answered. `snapshot` is the four-hourly copy of the directory view; `live_view` is the view itself, used whenever the snapshot cannot be trusted. Both carry identical rows by construction: the snapshot has no predicate of its own.'}, 'refreshed_at': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'When the snapshot rows in this response were copied from the view. Null when the live view answered, because a live read has no refresh instant to report.'}, 'fallback_reason': {'anyOf': [{'enum': ['snapshot_unreadable', 'snapshot_unstamped', 'snapshot_older_than_declared_bound'], 'type': 'string'}, {'type': 'null'}], 'description': 'Why the live view answered, or null when the snapshot did. Published rather than hidden: a directory served from an unexpected source is a fact about this response.'}, 'max_age_seconds': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'The age past which the snapshot is refused and the live view answers instead. A bound this response was checked against, not a service commitment.'}}, 'description': 'Which relation answered and how old it is. Present on every directory response so a reader never has to assume the age of what they were served.', 'additionalProperties': False}, 'served_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'identity_join': {'enum': ['measured', 'unavailable'], 'type': 'string'}}, 'additionalProperties': False}
search_disclosures
Search receipt-linked US government financial disclosures. Both chambers of Congress under the STOCK Act, plus executive-branch OGE filings -- filter chamber='executive' for those, which is where the President's disclosures are. Every row resolves to the government's own PDF via receipt.url — cite it. Supports point-in-time reconstruction via as_of (rows observed on or before that timestamp; no look-ahead bias) and change polling via updated_since. Paginate with the returned page.next_cursor.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'as_of': {'type': 'string', 'description': 'ISO timestamp: only rows first observed on/before this instant'}, 'limit': {'type': 'number', 'description': 'Rows per page (free tier caps at 25; licensed 1000)'}, 'cursor': {'type': 'string', 'description': 'Opaque page.next_cursor from a previous call'}, 'ticker': {'type': 'string', 'description': 'Filter by ticker symbol, e.g. NVDA'}, 'chamber': {'enum': ['house', 'senate', 'executive'], 'type': 'string', 'description': "Filter by filing body. 'house' and 'senate' are STOCK Act periodic transaction reports; 'executive' is executive-branch OGE filings, which is where the President's disclosures are. Omit to search all."}, 'member_id': {'type': 'string', 'description': 'Filter to one filer by slug, e.g. donald-trump or nancy-pelosi. Use list_members to resolve a name to its identifier.'}, 'updated_since': {'type': 'string', 'description': 'ISO timestamp: only rows first observed after this instant'}, 'min_delay_days': {'type': 'number', 'description': 'Only rows filed at least this many days after the transaction. The STOCK Act window is 45 days, so 46 returns filings outside it. Rows without a computed delay are excluded, not guessed at.'}, 'within_statutory_window': {'type': 'boolean', 'description': "false returns only filings made outside the statutory window that applies to that row (served as statutory_window_days); true returns only filings inside it. Prefer this over min_delay_days when the question is 'was it late', because the boundary is the row's own window, not a number you supply. Annual reports have no window and are excluded by either value."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'required': ['data', 'coverage', 'page', 'access', 'cache', 'version', 'notice'], 'properties': {'data': {'type': 'array', 'items': {'type': 'object', 'required': ['disclosure_id', 'version_id', 'content_hash', 'identity_basis', 'change', 'member', 'asset', 'transaction', 'filing', 'amount', 'owner', 'receipt', 'provenance'], 'properties': {'asset': {'type': 'object', 'required': ['ticker', 'name', 'asset_type', 'source_code', 'description'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'The asset as named on the filing, whitespace collapsed. If the filing names nothing but gives a ticker, the ticker; if it gives neither, the literal "Disclosed asset" so the row is not silently dropped.'}, 'ticker': {'type': ['string', 'null'], 'description': 'The ticker as it appears on the filing, upper-cased; null when the filing states none (most OGE lines, bonds, funds without a symbol, and paper filings whose ticker column is blank). Not looked up or inferred from the asset name.'}, 'asset_type': {'enum': ['equity', 'etf', 'municipal_bond', 'corporate_bond', 'government_security', 'option', 'fund', 'partnership', 'crypto', 'other'], 'type': 'string', 'description': "Classified from the office's own asset code on congressional filings: ST equity, OP option, MF and EF fund, GS government_security, PS partnership, CT crypto, anything else other. OGE lines carry equity, fund or other. etf, municipal_bond and corporate_bond are reserved in the enum and produced by no current source."}, 'description': {'type': ['string', 'null'], 'description': "Free-text description from the filing's asset line when the office publishes one separately from the name; null otherwise. Never composed by Veridion."}, 'source_code': {'type': ['string', 'null'], 'description': 'The asset code exactly as the office recorded it (ST, OP, MF, EF, GS, PS, CT and others), upper-cased; the input to asset_type. Null when the source carries none.'}}, 'description': "The instrument as the filing names it, classified from the office's own asset code. Nothing is resolved against a securities master; a ticker is served only when the filing states one.", 'additionalProperties': False}, 'owner': {'type': 'object', 'required': ['label', 'determination'], 'properties': {'label': {'enum': ['self', 'spouse', 'joint', 'dependent_child', 'not_specified_in_filing', 'undetermined'], 'type': 'string', 'description': "The filing's Owner column: self, spouse, joint or dependent_child as marked; not_specified_in_filing when the official receipt was checked and the column is blank; undetermined when the row was located but the column could not be read with confidence. See determination for how the value was established."}, 'determination': {'enum': ['parsed_from_filing', 'receipt_verified_blank', 'owner_column_undetermined', 'not_applicable_for_form'], 'type': 'string', 'description': 'How the owner value was established. owner_column_undetermined means the filing row was located but the extracted text did not positively establish whether its Owner column was blank.'}}, 'description': "Whose holding the transaction concerns, from the filing's Owner column, and how that value was established.", 'additionalProperties': False}, 'amount': {'type': 'object', 'required': ['range_low', 'range_high', 'currency', 'basis', 'verbatim_text'], 'properties': {'basis': {'type': 'string', 'const': 'bounded_range_as_disclosed', 'description': 'States what the amount fields are: the bounded range as the filing disclosed it. The only basis served today; a future exact-amount source would carry its own.'}, 'currency': {'type': 'string', 'const': 'USD', 'description': 'Always USD. Every disclosure form Veridion serves reports in dollars.'}, 'midpoint': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Veridion\'s arithmetic midpoint of range_low and range_high, rounded to the dollar. It is a convenience, not a disclosed value: the filer reported a band, never a figure. Absent when the band is open-ended ("over", "more than", "less than" and their variants) because a midpoint of an unbounded range is invented. Use it only with the range shown beside it.'}, 'range_low': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Lower bound of the band the filing discloses, in whole USD, as printed on the form ($1,001 to $15,000 serves 1001).'}, 'range_high': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Upper bound of the disclosed band, in whole USD. For an open-ended band such as "over $50,000,000" this is the stated threshold, and midpoint is absent.'}, 'verbatim_text': {'type': 'string', 'minLength': 1, 'description': 'The amount text exactly as it appears on the filing, before any parsing. When range_low and range_high disagree with this text, this text is the filing.'}}, 'description': 'The bounded range exactly as disclosed. A missing amount is never estimated.', 'additionalProperties': False}, 'change': {'type': 'object', 'required': ['type', 'state', 'observed_at', 'reason'], 'properties': {'type': {'enum': ['upsert', 'supersede'], 'type': 'string', 'description': 'upsert: this version is the one to hold. supersede: a version you may hold has been replaced, and is only emitted on updated_since reads.'}, 'state': {'enum': ['active', 'withdrawn'], 'type': 'string', 'description': 'active: served in snapshot reads. withdrawn: no longer served in snapshots but still directly retrievable by disclosure_id, with reason set.'}, 'reason': {'type': ['string', 'null'], 'description': 'Why a row was withdrawn or superseded, when the pipeline recorded one; null for an ordinary upsert. States the mechanism, never a motive.'}, 'observed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "When Veridion observed the event this row reports (the version's first observation for an upsert; the supersession instant for a supersede)."}}, 'description': 'Full pulls contain upserts. updated_since also emits supersede events; remove the row only when version_id matches the version held locally. A withdrawn stable identifier remains directly retrievable with its reason.', 'additionalProperties': False}, 'filing': {'type': 'object', 'required': ['type', 'filed_date', 'delay_days', 'statutory_window_days'], 'properties': {'type': {'anyOf': [{'enum': ['periodic_transaction_report', 'annual_report'], 'type': 'string'}, {'type': 'null'}], 'description': "periodic_transaction_report for House Clerk and Senate eFD PTRs and OGE Form 278-T; annual_report for OGE Form 278e; null when the receipt URL matches no known form pattern. Determined from the office and receipt, not from the row's text."}, 'delay_days': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'filed_date minus transaction.date, in whole days, as the two dates appear on the filing. Null when either is absent. Not clamped: a filing that predates its own transaction would serve a negative value rather than a corrected one.'}, 'filed_date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$', 'description': 'The date the office records the report as filed. The STOCK Act window and delay_days are measured to this date.'}, 'statutory_window_days': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': "45 for a periodic transaction report, the STOCK Act's transaction-level reporting window; null for annual reports and unknown forms, which carry no per-transaction deadline. A constant of the form, not a per-row judgement. Note that 45 days from the transaction is only one of the two clocks: a report is due by the EARLIER of 45 days from the transaction or 30 days from the filer being notified of it. The House PTR form includes a notification-date column; this dataset does not capture it, so the 30-day clock is not represented here."}, 'within_statutory_window': {'type': 'boolean', 'description': 'Present only when the filing type has an applicable transaction-level window and delay_days is known. True means delay_days <= statutory_window_days -- that is, within the 45-day transaction clock. It does NOT mean the filing was timely: the 30-day notification clock may have expired first, and we do not measure it. Do not treat this field as a compliance determination.'}}, 'description': "The report this row was parsed from and its timing against the STOCK Act's 45-day transaction window, computed from the two dates on the filing.", 'additionalProperties': False}, 'member': {'type': 'object', 'required': ['member_id', 'person_id', 'full_name', 'chamber', 'party', 'state', 'district'], 'properties': {'party': {'type': ['string', 'null'], 'description': "Democrat, Republican or Independent, from the congressional directory's D, R or I; null when the directory records none and for every executive-branch filer."}, 'state': {'type': ['string', 'null'], 'description': 'Two-letter state of the seat, as recorded in the congressional directory; null for executive-branch filers.'}, 'chamber': {'enum': ['house', 'senate', 'executive'], 'type': 'string', 'description': 'house or senate from the office that published the receipt; executive for Office of Government Ethics filers.'}, 'district': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{2}-\\d+$'}, {'type': 'null'}], 'description': 'House district as `STATE-N` with N an integer and 0 an at-large seat (`GA-14`, `AK-0`); null for senators, executive-branch filers, and rows whose filing does not state one. The same form the /v1/members directory uses.'}, 'full_name': {'type': 'string', 'minLength': 1, 'description': "The filer's name from the official directory where matched; otherwise the name as it appears on the filing with honorifics (Hon., Sen., Rep.) removed."}, 'member_id': {'type': 'string', 'minLength': 1, 'description': "Veridion's stable identifier for the filer, the same value /v1/members/{member_id} resolves and the member_id= filter takes. Derived from the name as filed; it does not change across filings or restatements."}, 'person_id': {'type': ['string', 'null'], 'description': "The filer's official Bioguide ID (for example G000596) where the congressional directory has one; null for executive-branch filers and for congressional filers the directory could not match. Never invented."}}, 'description': 'The filer, resolved against the congressional directory where a match exists. Identity fields only; what the filing itself says is in the receipt.', 'additionalProperties': False}, 'receipt': {'type': 'object', 'required': ['document_id', 'url', 'access', 'source_system', 'content_type', 'page', 'retrieved_at'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': "The government's URL for the document this row was parsed from, on the office's own domain. Never a Veridion-hosted copy. Cite it beside any claim built on the row."}, 'page': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Page of the document the row was parsed from, where the source is paginated and the parser recorded it (OGE filings); null for congressional rows, whose position is given by provenance.source_line_number instead.'}, 'access': {'enum': ['open', 'gated'], 'type': 'string', 'description': '`gated` means the official Senate eFD URL requires acknowledging its access agreement before the filing is displayed; other supported sources are `open`.'}, 'document_id': {'type': 'string', 'minLength': 1, 'description': "The office's own identifier for the document: the House Clerk's numeric document id, the Senate eFD report id, or the OGE document id. Resolves at /v1/receipts/{document_id}."}, 'content_type': {'type': 'string', 'minLength': 1, 'description': 'MIME type of the document at receipt.url: application/pdf for House Clerk and OGE documents, text/html for Senate eFD filings, which the Senate publishes as pages.'}, 'retrieved_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "When Veridion's warehouse first recorded the source document this row comes from. Independent of provenance.parsed_at, which belongs to the parser generation and may be earlier when a later retrieval re-attached an existing parse."}, 'source_system': {'enum': ['house_clerk', 'senate_efd', 'sec_edgar', 'oge'], 'type': 'string', 'description': 'The office that published the receipt: house_clerk, senate_efd or oge. sec_edgar is declared in the enum and serves no rows; /v1/status reports it as no_data.'}}, 'description': 'The government receipt this row was parsed from. Preserve the access label.', 'additionalProperties': False}, 'provenance': {'type': 'object', 'required': ['source_line_number', 'parsed_at', 'parser_version', 'methodology_version', 'source_ingested_at', 'first_observed_at'], 'properties': {'parsed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'When the parser generation named in parser_version produced this version of the row. A reparse under a new parser writes a new version with its own parsed_at; the earlier version stays in /history.'}, 'parser_version': {'type': 'string', 'minLength': 1, 'description': 'The parser generation that produced this version (for example house-ptr-line-v2). Not part of content_hash, so a reparse that changes no filing fact changes no hash.'}, 'first_observed_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'When Veridion first observed this row. Immutable and used by the as_of filter.'}, 'source_ingested_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "When the source record entered Veridion's warehouse. first_observed_at is never later than this; the two differ when identity resolution carried an earlier observation forward."}, 'source_line_number': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'House Clerk PTR rows carry a PDF source-line coordinate when the parser recorded one; null rows are reconciled by reason, and parser-output gaps are enumerated in house_clerk_gap_register. Senate eFD records are parsed as filing transactions rather than House PTR PDF lines, so source_line_number is null by design.'}, 'methodology_version': {'type': 'string', 'minLength': 1, 'description': 'The admission and derivation rules this row was served under, currently receipt-or-drop-v1. A rule change ships as a new label and a changelog entry; see the stability policy.'}, 'transcription_method': {'enum': ['pdf_text_layer', 'verified_transcription'], 'type': 'string', 'description': 'Present only for OGE rows. pdf_text_layer means the official PDF text was parsed; verified_transcription means the row was read from a checked transcription whose SHA-256 matched the official scanned PDF at ingestion.'}}, 'description': 'How and when this version of the row was produced, and when the row was first observed, which is the instant as_of reads against. None of these fields is in content_hash.', 'additionalProperties': False}, 'version_id': {'type': 'string', 'minLength': 1, 'description': 'Immutable parse-generation identifier. Use disclosure_id, not version_id, for downstream identity across a restatement.'}, 'transaction': {'type': 'object', 'required': ['type', 'date'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$', 'description': 'The transaction date as stated on the filing. Not the filing date, and not adjusted for weekends or holidays.'}, 'type': {'enum': ['buy', 'sell', 'exchange', 'other'], 'type': 'string', 'description': "buy from a P code or a purchase/buy label; sell from an S code or a sale/sell label; exchange from an E code or an exchange label; other for anything the filing marks differently. Partial versus full sale is not distinguished here; the filing's own wording is in amount.verbatim_text and the receipt."}}, 'description': 'What was done and on what date, as stated on the filing.', 'additionalProperties': False}, 'content_hash': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256, hex, of the canonical JSON array ["veridion-disclosure-content-v1", disclosure_id, version_id, member.member_id, member.full_name, member.chamber, asset.ticker, asset.name, asset.asset_type, asset.source_code, asset.description, transaction.type, transaction.date, filing.type, filing.filed_date, amount.range_low, amount.range_high, amount.verbatim_text, owner.label, owner.determination, receipt.document_id, receipt.url, receipt.source_system, receipt.page, provenance.source_line_number] using the served values exactly (null where null). Recompute it from this row to check the calculation; store it to check later that the same version_id still serves the same content. Derived fields (delay_days, statutory window, midpoint), timestamps, parser and methodology versions, and the change block are excluded, so a corrected derivation rule does not change the hash of an unchanged filing. The basis label changes if the field list ever changes.'}, 'disclosure_id': {'type': 'string', 'minLength': 1, 'description': 'Permanent identifier for the filing-derived transaction. It is never reused; parser versions and restatements retain this identifier.'}, 'identity_basis': {'enum': ['government_filing_facts'], 'type': 'string', 'description': 'Identity uses only filer, document, filed instrument, transaction date and type, amount range, and owner. Parser line, span, version, and run identifiers are excluded.'}}, 'additionalProperties': False}}, 'page': {'type': 'object', 'required': ['limit', 'has_more', 'next_cursor', 'mode', 'requested_updated_since', 'snapshot_as_of', 'snapshot_generation', 'next_updated_since'], 'properties': {'mode': {'enum': ['snapshot', 'changes'], 'type': 'string'}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1}, 'has_more': {'type': 'boolean'}, 'next_cursor': {'type': ['string', 'null'], 'description': "Token generated from the last fetched row's position, before response validation, when another page exists and that position is valid; null otherwise. 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."}, 'snapshot_as_of': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'Pinned on page one and carried inside every cursor. Later writes cannot shift the result set during pagination.'}, 'next_updated_since': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': "The watermark to pass as `updated_since` on the next incremental call, after walking this result set to its last page. It equals this response's pinned snapshot_as_of, so a caller that stores it receives everything changed after this response and nothing twice. It is always at or after the retained-history floor, so it is always a value this API accepts. Do NOT derive a watermark from a row's change.observed_at: rows observed before retained history began are served with their true observation instant, and that instant predates the floor. Added at 1.3.23 after a measured 98.7% of served rows carried such an instant."}, 'snapshot_generation': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Atomic dataset generation pinned on page one. A value of zero means the requested as_of predates retained exact payload history, or the current-row fallback is active while temporal history is unavailable.'}, 'requested_updated_since': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}], 'description': 'The normalized updated_since filter applied to this incremental page. Null for a full snapshot pull.'}}, 'additionalProperties': False}, 'cache': {'anyOf': [{'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header', 'freshness_reference'], 'properties': {'policy': {'type': 'string', 'const': 'public'}, 'age_header': {'type': 'string', 'const': 'Age'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 300}, 'freshness_reference': {'type': 'object', 'required': ['source', 'source_expected_max_age_seconds', 'delivery_max_staleness_seconds', 'delivery_to_source_threshold_ratio', 'basis'], 'properties': {'basis': {'type': 'string', 'minLength': 1}, 'source': {'type': 'string', 'const': 'congress'}, 'delivery_max_staleness_seconds': {'type': 'number', 'const': 300}, 'source_expected_max_age_seconds': {'type': 'number', 'const': 21600}, 'delivery_to_source_threshold_ratio': {'type': 'string', 'const': '1/72'}}, 'additionalProperties': False}, 'browser_max_age_seconds': {'type': 'number', 'const': 0}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 300}}, 'additionalProperties': False}, {'type': 'object', 'required': ['policy', 'browser_max_age_seconds', 'cdn_max_age_seconds', 'declared_max_staleness_seconds', 'age_header'], 'properties': {'policy': {'type': 'string', 'const': 'private-no-store'}, 'age_header': {'type': 'null'}, 'cdn_max_age_seconds': {'type': 'number', 'const': 0}, 'browser_max_age_seconds': {'type': 'number', 'const': 0}, 'declared_max_staleness_seconds': {'type': 'number', 'const': 0}}, 'additionalProperties': False}]}, 'access': {'anyOf': [{'type': 'object', 'required': ['tier', 'max_rows_per_request', 'requests_per_hour', 'no_key_required', 'upgrade'], 'properties': {'tier': {'type': 'string', 'const': 'free'}, 'upgrade': {'type': 'object', 'required': ['max_rows_per_request', 'request_a_key'], 'properties': {'request_a_key': {'type': 'string', 'format': 'uri'}, 'max_rows_per_request': {'type': 'number', 'const': 1000}}, 'additionalProperties': False}, 'no_key_required': {'type': 'boolean', 'const': True}, 'requests_per_hour': {'type': 'number', 'const': 60}, 'max_rows_per_request': {'type': 'number', 'const': 25}}, 'additionalProperties': False}, {'type': 'object', 'required': ['tier', 'max_rows_per_request'], 'properties': {'tier': {'enum': ['free', 'developer', 'evaluator'], 'type': 'string'}, 'max_rows_per_request': {'type': 'number', 'const': 1000}}, 'additionalProperties': False}]}, 'notice': {'type': 'string', 'minLength': 1}, 'version': {'type': 'string', 'const': '1.14.0'}, 'coverage': {'type': 'object', 'required': ['as_of', 'requested_as_of', 'point_in_time', 'point_in_time_floor', 'out_of_range', 'rows_returned', 'rows_dropped_failed_validation', 'served_at', 'basis'], 'properties': {'as_of': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'basis': {'type': 'string', 'minLength': 1}, 'served_at': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, 'out_of_range': {'type': 'boolean', 'description': 'True when requested_as_of predates retained point-in-time history. This is distinct from a genuine empty result.'}, 'point_in_time': {'type': 'boolean'}, 'rows_returned': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'requested_as_of': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$'}, {'type': 'null'}]}, 'point_in_time_floor': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$', 'description': 'Inclusive lower bound for as_of and updated_since. Requests one millisecond before this instant are refused rather than returned as an empty result.'}, 'rows_dropped_failed_validation': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows withheld because the serving view and executable response contract disagreed. Any value above zero means the page is partial.'}}, 'additionalProperties': False}}, 'additionalProperties': False}
추가됨
get_status
2026년 10월 4일 2:40 AM
추가됨
get_coverage
2026년 10월 4일 2:40 AM
추가됨
list_members
2026년 10월 4일 2:40 AM
추가됨
get_disclosure_history
2026년 10월 4일 2:40 AM
추가됨
search_disclosures
2026년 10월 4일 2:40 AM

The Stall

ai.intuitek.the-stall/the-stall

Provides pay-per-call tools for YouTube keyword research and research on stocks, crypto, DeFi, options, and macroeconomic data.

AI 代理人任務中樞

com.penguindriver/hub

Aggregates Taiwan-focused tools for AI service comparisons, cryptocurrency data, game information, health guidance, and other con…

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

io.github.valuein/mcp-sec-edgar

Provides point-in-time SEC EDGAR fundamentals, filings, ownership signals, financial analysis, valuation models, research reports…

equibles

io.github.daniel3303/equibles

Provides equity and market research tools covering SEC filings, company financials, portfolios, prices, options, macroeconomic da…

tollbooth

io.github.huwhitememes/tollbooth

Provides paid OSINT, web intelligence, security threat and vulnerability lookups, prediction-market analysis, financial data, leg…

World Monitor

app.worldmonitor/mcp

Delivers live geopolitical, conflict, country-risk, market, energy, climate, aviation, supply-chain, and macroeconomic intelligen…

EventTrader Research (read-only)

com.cymetica/event-trader-research

Offers read-only research on funds, event markets, order books, arena markets, crypto pools, backtests, and related financial ana…

Slacking.biz — SEC Financial Data + US Economics + Demographics + FX

io.github.Th3Slack3r/slacking-biz

Provides financial, economic, demographic, foreign-exchange, regulatory, and company research data from public sources.