{
  "openapi": "3.1.0",
  "info": {
    "title": "DataDawn OpenRegulations Database API",
    "description": "Free, open API for U.S. federal regulatory and legislative data. 994K Federal Register documents, 168K bills, 3.9M public comments, 1.9M lobbying filings, 61K stock trades, 8.3M voting records, and more. No authentication required.\n\nFor bulk download of the entire dataset (preferred for AI training and batch research), see https://dumps.datadawn.org/manifest.json — weekly gzipped SQLite snapshots with integrity hashes, hosted on Cloudflare R2 with zero-egress.",
    "version": "1.0.0",
    "contact": {
      "name": "DataDawn",
      "url": "https://datadawn.org",
      "email": "data@datadawn.org"
    },
    "license": {
      "name": "Public Domain (U.S. government data)",
      "url": "https://datadawn.org/terms.html"
    }
  },
  "servers": [
    {
      "url": "https://regs.datadawn.org",
      "description": "Production"
    }
  ],
  "paths": {
    "/api/member/{bioguide_id}": {
      "get": {
        "operationId": "getMember",
        "summary": "Look up a member of Congress by bioguide_id",
        "description": "Returns member profile including bio, trade count, speech count, and bills sponsored count.",
        "parameters": [
          {
            "name": "bioguide_id",
            "in": "path",
            "required": true,
            "schema": {"type": "string"},
            "description": "Bioguide ID (universal identifier for members of Congress)",
            "example": "W000817"
          }
        ],
        "responses": {
          "200": {
            "description": "Member profile with bio and activity counts"
          }
        }
      }
    },
    "/api/search/members": {
      "get": {
        "operationId": "searchMembers",
        "summary": "Search members of Congress by name",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Name to search", "example": "Warren"},
          {"name": "state", "in": "query", "schema": {"type": "string"}, "description": "Two-letter state code filter", "example": "MA"},
          {"name": "party", "in": "query", "schema": {"type": "string"}, "description": "Party filter (Republican, Democrat, Independent)"},
          {"name": "current", "in": "query", "schema": {"type": "integer", "enum": [0, 1]}, "description": "Filter to current (1) or historical (0) members"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}, "description": "Max results (1-100)"}
        ],
        "responses": {
          "200": {"description": "List of matching members"}
        }
      }
    },
    "/api/member/{bioguide_id}/trades": {
      "get": {
        "operationId": "getMemberTrades",
        "summary": "Get stock trades for a member of Congress",
        "parameters": [
          {"name": "bioguide_id", "in": "path", "required": true, "schema": {"type": "string"}, "example": "P000197"},
          {"name": "ticker", "in": "query", "schema": {"type": "string"}, "description": "Filter by ticker symbol"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 50}}
        ],
        "responses": {
          "200": {"description": "List of stock trades"}
        }
      }
    },
    "/api/member/{bioguide_id}/votes": {
      "get": {
        "operationId": "getMemberVotes",
        "summary": "Get recent voting record for a member",
        "parameters": [
          {"name": "bioguide_id", "in": "path", "required": true, "schema": {"type": "string"}, "example": "W000817"},
          {"name": "congress", "in": "query", "schema": {"type": "integer"}, "description": "Filter by congress number"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 50}}
        ],
        "responses": {
          "200": {"description": "List of votes with roll call details"}
        }
      }
    },
    "/api/search/legislation": {
      "get": {
        "operationId": "searchLegislation",
        "summary": "Search bills by keyword",
        "description": "Searches 168K congressional bills across Congresses 93-119.",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Keyword to search", "example": "artificial intelligence"},
          {"name": "congress", "in": "query", "schema": {"type": "integer"}, "description": "Congress number filter (93-119)"},
          {"name": "policy_area", "in": "query", "schema": {"type": "string"}, "description": "Policy area filter (e.g. Health, Education)"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}}
        ],
        "responses": {
          "200": {"description": "List of matching bills"}
        }
      }
    },
    "/api/search/lobbying": {
      "get": {
        "operationId": "searchLobbying",
        "summary": "Search lobbying activity by client or registrant",
        "description": "Searches 3.5M lobbying activity records. Uses issue_code and income_amount columns.",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Client or registrant name", "example": "Google"},
          {"name": "year", "in": "query", "schema": {"type": "integer"}, "description": "Filing year filter"},
          {"name": "issue_code", "in": "query", "schema": {"type": "string"}, "description": "Issue area code (e.g. ENV, TAX, HCR, DEF)"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}}
        ],
        "responses": {
          "200": {"description": "List of lobbying activity records"}
        }
      }
    },
    "/api/search/federal_register": {
      "get": {
        "operationId": "searchFederalRegister",
        "summary": "Search Federal Register documents",
        "description": "Searches 994K Federal Register documents (1994-present).",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Keyword to search", "example": "climate change"},
          {"name": "type", "in": "query", "schema": {"type": "string", "enum": ["Rule", "Proposed Rule", "Notice", "Presidential Document"]}, "description": "Document type filter"},
          {"name": "year", "in": "query", "schema": {"type": "integer"}, "description": "Publication year filter"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}}
        ],
        "responses": {
          "200": {"description": "List of matching Federal Register documents"}
        }
      }
    },
    "/api/search/comments": {
      "get": {
        "operationId": "searchComments",
        "summary": "Search public comments on regulations",
        "description": "Searches 3.9M public comments from regulations.gov.",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Keyword to search", "example": "clean energy"},
          {"name": "agency", "in": "query", "schema": {"type": "string"}, "description": "Agency code filter (e.g. EPA, FDA, FWS)"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}}
        ],
        "responses": {
          "200": {"description": "List of matching comments"}
        }
      }
    },
    "/api/search/spending": {
      "get": {
        "operationId": "searchSpending",
        "summary": "Search federal spending awards",
        "description": "Searches 864K federal grants and contracts from USAspending.gov (FY2017-2026).",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Recipient name or keyword", "example": "Lockheed Martin"},
          {"name": "agency", "in": "query", "schema": {"type": "string"}, "description": "Awarding agency filter"},
          {"name": "year", "in": "query", "schema": {"type": "integer"}, "description": "Fiscal year filter"},
          {"name": "category", "in": "query", "schema": {"type": "string", "enum": ["grants", "contracts"]}, "description": "Award category filter"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}}
        ],
        "responses": {
          "200": {"description": "List of matching spending awards"}
        }
      }
    },
    "/api/search/hearings": {
      "get": {
        "operationId": "searchHearings",
        "summary": "Search committee hearings",
        "description": "Searches 46K committee hearing transcripts from GovInfo (1993-present).",
        "parameters": [
          {"name": "q", "in": "query", "required": true, "schema": {"type": "string"}, "description": "Keyword to search", "example": "artificial intelligence"},
          {"name": "chamber", "in": "query", "schema": {"type": "string", "enum": ["HOUSE", "SENATE", "JOINT"]}, "description": "Chamber filter"},
          {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 20}}
        ],
        "responses": {
          "200": {"description": "List of matching hearings"}
        }
      }
    },
    "/api/docket/{docket_id}": {
      "get": {
        "operationId": "getDocket",
        "summary": "Look up a docket with document and comment counts",
        "parameters": [
          {
            "name": "docket_id",
            "in": "path",
            "required": true,
            "schema": {"type": "string"},
            "description": "Docket ID (e.g. EPA-HQ-OAR-2021-0208)",
            "example": "EPA-HQ-OAR-2021-0208"
          }
        ],
        "responses": {
          "200": {"description": "Docket details with aggregated stats and documents"}
        }
      }
    },
    "/api/sql": {
      "get": {
        "operationId": "runSQL",
        "summary": "Run arbitrary read-only SQL query",
        "description": "Power user endpoint. Datasette blocks all non-SELECT queries. Max 1000 rows. FEC employer keys (fec_employer_totals/_to_candidate/_to_party) are verbatim strings from FEC filings and may denote a sole proprietorship or eponymous business. Counts reflect contributions, not employees.",
        "parameters": [
          {"name": "sql", "in": "query", "required": true, "schema": {"type": "string"}, "description": "SQL query (SELECT only)"},
          {"name": "_shape", "in": "query", "schema": {"type": "string", "default": "objects"}}
        ],
        "responses": {
          "200": {"description": "Query results as JSON"}
        }
      }
    }
  }
}
