Two APIs: a structured REST API at /api/v1/ for queries, and open S3 JSON data for bulk access.
Structured endpoints for bills, lawmakers, and session coverage. Pagination, filtering, JSON responses with freshness metadata. Machine-readable spec at /api/v1/openapi.json.
# List Virginia bills (anonymous; 30/min IP limit)
curl -s "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/api/v1/bills?state=VA&limit=5" | jq .
# Authenticated: include an API key for 100/min per key
curl -s -H "X-API-Key: ila_..." "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/api/v1/bills?state=VA&q=tax"
# Single bill detail
curl -s "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/api/v1/bills/VA/HB1234"
# Lawmakers by state + party
curl -s "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/api/v1/lawmakers?state=VA&party=GOP"
# Session coverage
curl -s "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/api/v1/states"Sign in to create API keys. Anonymous requests are rate-limited by IP (30/min); keys raise your limit to 100+ requests per minute per key.
// 1. Fetch the manifest
const BASE_URL = "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com";
const manifest = await fetch(`${BASE_URL}/manifest.json`).then(r => r.json());
// 2. Get session statistics for Virginia
const stats = await fetch(`${BASE_URL}/va/2025/dashboards/session_statistics.json`)
.then(r => r.json());
console.log(`${stats.overview.total_bills} bills in session`);
console.log(`Pass rate: ${stats.rates.pass_rate_pct}%`);import requests
BASE_URL = "https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com"
manifest = requests.get(f"{BASE_URL}/manifest.json").json()
stats = requests.get(f"{BASE_URL}/va/2025/dashboards/session_statistics.json").json()
print(f"{stats['overview']['total_bills']} bills in session")curl -s https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/manifest.json | jq .
curl -s https://amzn-s3-legislative-docs.s3.us-east-2.amazonaws.com/va/2025/dashboards/session_statistics.json | jq .overview| File | Description | Size |
|---|---|---|
| session_statistics.json | Bill counts, pass rates, weekly trends | — |
| vote_analysis.json | Roll call votes, party-line analysis, contested bills | — |
| legislator_profiles.json | Per-legislator stats, rankings, party breakdown | — |
| committee_activity.json | Committee kill rates, bill flow | — |
| fiscal_impact.json | Fiscal impact statement coverage | — |
| session_comparison.json | Cross-session deltas | — |
| alert_candidates.json | Recent governor actions, floor votes | — |
| data_quality.json | Source file inventory and freshness |
Current state of the data pipeline. Schema version 1.0.0
2026 Session
Every JSON file includes a schema_version field. We follow semver:
| Change Type | Version Bump | Example |
|---|---|---|
| New optional fields | Patch (1.0.x) | Added emergency_bills to funnel |
| New files or sections | Minor (1.x.0) | Added topic_analysis.json |
| Renamed/removed fields | Major (x.0.0) | Restructured legislator profiles |
Check the major version on startup. If it doesn't match, some features may break.
| — |
| combined_dashboard.json | All dashboards merged | — |