{"files":{"SKILL.md":"---\nname: open-states-api-v3\ndescription: \"Open States API v3 API skill. Use when working with Open States API v3 for jurisdictions, people, people.geo. Covers 12 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Open States API v3\nAPI version: 2021.11.12\n\n## Auth\nApiKey apikey in query\n\n## Base URL\nNot specified.\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /jurisdictions -- jurisdiction list\n3. Explore available endpoints below\n\n## Endpoints\n12 endpoints across 7 groups. See references/api-spec.lap for full details.\n\n### Jurisdictions\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /jurisdictions | Jurisdiction List |\n| GET | /jurisdictions/{jurisdiction_id} | Jurisdiction Detail |\n\n### People\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /people | People Search |\n\n### People.geo\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /people.geo | People Geo |\n\n### Bills\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /bills | Bills Search |\n| GET | /bills/ocd-bill/{openstates_bill_id} | Bill Detail By Id |\n| GET | /bills/{jurisdiction}/{session}/{bill_id} | Bill Detail |\n\n### Committees\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /committees | Committee List |\n| GET | /committees/{committee_id} | Committee Detail |\n\n### Events\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /events | Event List |\n| GET | /events/{event_id} | Event Detail |\n\n### Metrics\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /metrics | Metrics |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all jurisdictions?\" -> GET /jurisdictions\n- \"Get jurisdiction details?\" -> GET /jurisdictions/{jurisdiction_id}\n- \"List all people?\" -> GET /people\n- \"List all people.geo?\" -> GET /people.geo\n- \"Search bills?\" -> GET /bills\n- \"Get ocd-bill details?\" -> GET /bills/ocd-bill/{openstates_bill_id}\n- \"Get bill details?\" -> GET /bills/{jurisdiction}/{session}/{bill_id}\n- \"List all committees?\" -> GET /committees\n- \"Get committee details?\" -> GET /committees/{committee_id}\n- \"List all events?\" -> GET /events\n- \"Get event details?\" -> GET /events/{event_id}\n- \"List all metrics?\" -> GET /metrics\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Open States API v3\n@version 2021.11.12\n@auth ApiKey apikey in query\n@endpoints 12\n@toc jurisdictions(2), people(1), people.geo(1), bills(3), committees(2), events(2), metrics(1)\n\n@group jurisdictions\n@endpoint GET /jurisdictions\n@desc Jurisdiction List\n@optional {classification: any # Filter returned jurisdictions by type., include: [str]= # Additional information to include in response., page: int=1, per_page: int=52, apikey: str, x-api-key: str}\n@returns(200) {results: [map], pagination: map{per_page: int, page: int, max_page: int, total_items: int}} # Successful Response\n@errors {422: Validation Error}\n\n@endpoint GET /jurisdictions/{jurisdiction_id}\n@desc Jurisdiction Detail\n@required {jurisdiction_id: str}\n@optional {include: [str]= # Additional includes for the Jurisdiction response., apikey: str, x-api-key: str}\n@returns(200) {id: str, name: str, classification: any, division_id: str, url: str, latest_bill_update: str(date-time), latest_people_update: str(date-time), organizations: [map], legislative_sessions: [map], latest_runs: [map]} # Successful Response\n@errors {422: Validation Error}\n\n@endgroup\n\n@group people\n@endpoint GET /people\n@desc People Search\n@optional {jurisdiction: str # Filter by jurisdiction name or id., name: str # Filter by name, case-insensitive match., id: [str]= # Filter by id, can be specified multiple times for multiple people., org_classification: any # Filter by current role., district: str # Filter by district name., include: [str]= # Additional information to include in response., page: int=1, per_page: int=10, apikey: str, x-api-key: str}\n@returns(200) {results: [map], pagination: map{per_page: int, page: int, max_page: int, total_items: int}} # Successful Response\n@errors {422: Validation Error}\n\n@endgroup\n\n@group people.geo\n@endpoint GET /people.geo\n@desc People Geo\n@required {lat: num # Latitude of point., lng: num # Longitude of point.}\n@optional {include: [str]= # Additional information to include in the response., apikey: str, x-api-key: str}\n@returns(200) {results: [map], pagination: map{per_page: int, page: int, max_page: int, total_items: int}} # Successful Response\n@errors {422: Validation Error}\n\n@endgroup\n\n@group bills\n@endpoint GET /bills\n@desc Bills Search\n@optional {jurisdiction: str # Filter by jurisdiction name or ID., session: str # Filter by session identifier., chamber: str # Filter by chamber of origination., identifier: [str]= # Filter to only include bills with this identifier., classification: str # Filter by classification, e.g. bill or resolution, subject: [str]= # Filter by one or more subjects., updated_since: str # Filter to only include bills with updates since a given date., created_since: str # Filter to only include bills created since a given date., action_since: str # Filter to only include bills with an action since a given date., sort: any=updated_desc # Desired sort order for bill results., sponsor: str # Filter to only include bills sponsored by a given name or person ID., sponsor_classification: str # Filter matched sponsors to only include particular types of sponsorships., q: str # Filter by full text search term., include: [str]= # Additional information to include in response., page: int=1, per_page: int=10, apikey: str, x-api-key: str}\n@returns(200) {results: [map], pagination: map{per_page: int, page: int, max_page: int, total_items: int}} # Successful Response\n@errors {422: Validation Error}\n\n@endpoint GET /bills/ocd-bill/{openstates_bill_id}\n@desc Bill Detail By Id\n@required {openstates_bill_id: str}\n@optional {include: [str]=, apikey: str, x-api-key: str}\n@returns(200) {id: str, session: str, jurisdiction: map{id: str, name: str, classification: any}, from_organization: map{id: str, name: str, classification: str}, identifier: str, title: str, classification: [str], subject: [str], extras: map, created_at: str(date-time), updated_at: str(date-time), openstates_url: str, first_action_date: str, latest_action_date: str, latest_action_description: str, latest_passage_date: str, related_bills: [map], abstracts: [map], other_titles: [map], other_identifiers: [map], sponsorships: [map], actions: [map], sources: [map], versions: [map], documents: [map], votes: [map]} # Successful Response\n@errors {422: Validation Error}\n\n@endpoint GET /bills/{jurisdiction}/{session}/{bill_id}\n@desc Bill Detail\n@required {jurisdiction: str, session: str, bill_id: str}\n@optional {include: [str]=, apikey: str, x-api-key: str}\n@returns(200) {id: str, session: str, jurisdiction: map{id: str, name: str, classification: any}, from_organization: map{id: str, name: str, classification: str}, identifier: str, title: str, classification: [str], subject: [str], extras: map, created_at: str(date-time), updated_at: str(date-time), openstates_url: str, first_action_date: str, latest_action_date: str, latest_action_description: str, latest_passage_date: str, related_bills: [map], abstracts: [map], other_titles: [map], other_identifiers: [map], sponsorships: [map], actions: [map], sources: [map], versions: [map], documents: [map], votes: [map]} # Successful Response\n@errors {422: Validation Error}\n\n@endgroup\n\n@group committees\n@endpoint GET /committees\n@desc Committee List\n@optional {jurisdiction: str # Filter by jurisdiction name or ID., classification: str, parent: str # ocd-organization ID of parent committee., chamber: any # Chamber of committee, generally upper or lower., include: [str]= # Additional includes for the Committee response., apikey: str, page: int=1, per_page: int=20, x-api-key: str}\n@returns(200) {results: [map], pagination: map{per_page: int, page: int, max_page: int, total_items: int}} # Successful Response\n@errors {422: Validation Error}\n\n@endpoint GET /committees/{committee_id}\n@desc Committee Detail\n@required {committee_id: str}\n@optional {include: [str]= # Additional includes for the Committee response., apikey: str, x-api-key: str}\n@returns(200) {id: str, name: str, classification: str, parent_id: str, extras: map, memberships: [map], other_names: [map], links: [map], sources: [map]} # Successful Response\n@errors {422: Validation Error}\n\n@endgroup\n\n@group events\n@endpoint GET /events\n@desc Event List\n@optional {jurisdiction: str # Filter by jurisdiction name or ID., deleted: bool=false # Return events marked as deleted?, before: str # Limit results to those starting before a given datetime., after: str # Limit results to those starting before a given datetime., require_bills: bool=false # Limit results to events with associated bills., include: [str]= # Additional includes for the Event response., apikey: str, page: int=1, per_page: int=20, x-api-key: str}\n@returns(200) {results: [map], pagination: map{per_page: int, page: int, max_page: int, total_items: int}} # Successful Response\n@errors {422: Validation Error}\n\n@endpoint GET /events/{event_id}\n@desc Event Detail\n@required {event_id: str}\n@optional {include: [str]= # Additional includes for the Event response., apikey: str, x-api-key: str}\n@returns(200) {id: str, name: str, jurisdiction: map{id: str, name: str, classification: any}, description: str, classification: str, start_date: str, end_date: str, all_day: bool, status: str, upstream_id: str, deleted: bool, location: map{name: str, url: str}, links: [map], sources: [map], media: [map], documents: [map], participants: [map], agenda: [map]} # Successful Response\n@errors {422: Validation Error}\n\n@endgroup\n\n@group metrics\n@endpoint GET /metrics\n@desc Metrics\n@returns(200) Successful Response\n\n@endgroup\n\n@end\n"}}