Skip to main content
Glama

Open States API MCP Server

models.py21.4 kB
# generated by fastapi-codegen: # filename: openapi.yaml # timestamp: 2025-06-29T07:59:01+00:00 from __future__ import annotations from datetime import datetime from enum import Enum from typing import Any, Dict, List, Optional, Union from pydantic import BaseModel, Field, RootModel class AltIdentifier(BaseModel): identifier: str = Field(..., examples=['NCL000123'], title='Identifier') scheme: str = Field(..., examples=['legacy_openstates'], title='Scheme') class AltName(BaseModel): name: str = Field(..., examples=['Auggie'], title='Name') note: str = Field(..., examples=['nickname'], title='Note') class BillAbstract(BaseModel): abstract: str = Field( ..., examples=['This bill designates a new state arachnid.'], title='Abstract' ) note: str = Field(..., examples=['house abstract'], title='Note') class BillDocumentLink(BaseModel): media_type: str = Field(..., examples=['application/pdf'], title='Media Type') url: str = Field(..., examples=['https://example.com/doc.pdf'], title='Url') class BillDocumentOrVersion(BaseModel): date: str = Field(..., examples=['2020-10-01'], title='Date') links: List[BillDocumentLink] = Field(..., title='Links') note: str = Field(..., examples=['Latest Version'], title='Note') class BillIdentifier(BaseModel): identifier: str = Field(..., examples=['HB 74'], title='Identifier') class BillInclude(Enum): sponsorships = 'sponsorships' abstracts = 'abstracts' other_titles = 'other_titles' other_identifiers = 'other_identifiers' actions = 'actions' sources = 'sources' documents = 'documents' versions = 'versions' votes = 'votes' related_bills = 'related_bills' class BillSortOption(Enum): updated_asc = 'updated_asc' updated_desc = 'updated_desc' first_action_asc = 'first_action_asc' first_action_desc = 'first_action_desc' latest_action_asc = 'latest_action_asc' latest_action_desc = 'latest_action_desc' class BillTitle(BaseModel): note: str = Field(..., examples=['short title'], title='Note') title: str = Field( ..., examples=['Designating the scorpion as the state arachnid.'], title='Title' ) class CommitteeClassification(Enum): committee = 'committee' subcommittee = 'subcommittee' class CommitteeInclude(Enum): memberships = 'memberships' links = 'links' sources = 'sources' class CompactBill(BaseModel): id: str = Field( ..., examples=['ocd-bill/12345678-0000-1111-2222-333344445555'], title='Id' ) identifier: str = Field(..., title='Identifier') session: str = Field(..., title='Session') title: str = Field(..., title='Title') class CompactVoteEvent(BaseModel): id: str = Field( ..., examples=['ocd-vote/12345678-0000-1111-2222-333344445555'], title='Id' ) motion_text: str = Field( ..., examples=['Shall the bill be passed?'], title='Motion Text' ) class DataExport(BaseModel): created_at: datetime = Field(..., title='Created At') data_type: str = Field(..., title='Data Type') updated_at: datetime = Field(..., title='Updated At') url: str = Field(..., title='Url') class EventInclude(Enum): links = 'links' sources = 'sources' media = 'media' documents = 'documents' participants = 'participants' agenda = 'agenda' class EventLocation(BaseModel): name: str = Field(..., title='Name') url: str = Field(..., title='Url') class JurisdictionClassification(Enum): state = 'state' municipality = 'municipality' country = 'country' class JurisdictionInclude(Enum): organizations = 'organizations' legislative_sessions = 'legislative_sessions' latest_runs = 'latest_runs' class LegislativeSession(BaseModel): classification: str = Field(..., title='Classification') downloads: Optional[List[DataExport]] = Field(None, title='Downloads') end_date: str = Field(..., title='End Date') identifier: str = Field(..., title='Identifier') name: str = Field(..., title='Name') start_date: str = Field(..., title='Start Date') class Link(BaseModel): note: str = Field(..., examples=['homepage'], title='Note') url: str = Field(..., examples=['https://example.com/'], title='Url') class Office(BaseModel): address: Optional[str] = Field( None, examples=['212 Maple Lane; Raleigh NC; 27526'], title='Address' ) classification: Optional[str] = Field( None, examples=['capitol'], title='Classification' ) fax: Optional[str] = Field(None, examples=['919-555-1234'], title='Fax') name: str = Field(..., examples=['District Office'], title='Name') voice: Optional[str] = Field(None, examples=['919-555-0064'], title='Voice') class OrgClassification(Enum): legislature = 'legislature' executive = 'executive' lower = 'lower' upper = 'upper' government = 'government' class Organization(BaseModel): classification: str = Field(..., examples=['legislature'], title='Classification') id: str = Field( ..., examples=['ocd-organization/32aab083-d7a0-44e0-9b95-a7790c542605'], title='Id', ) name: str = Field(..., examples=['North Carolina General Assembly'], title='Name') class PaginationMeta(BaseModel): max_page: int = Field(..., examples=[3], title='Max Page') page: int = Field(..., examples=[1], title='Page') per_page: int = Field(..., examples=[20], title='Per Page') total_items: int = Field(..., examples=[52], title='Total Items') class PersonInclude(Enum): other_names = 'other_names' other_identifiers = 'other_identifiers' links = 'links' sources = 'sources' offices = 'offices' class Post(BaseModel): division_id: str = Field( ..., examples=['ocd-division/country:us/state:mn/sldu:4'], title='Division Id' ) label: str = Field(..., examples=['2'], title='Label') maximum_memberships: int = Field(..., examples=[1], title='Maximum Memberships') role: str = Field(..., examples=['Senator'], title='Role') class RelatedBill(BaseModel): identifier: str = Field(..., examples=['HB 123'], title='Identifier') legislative_session: str = Field( ..., examples=['2022S1'], title='Legislative Session' ) relation_type: str = Field(..., examples=['companion'], title='Relation Type') class RunPlan(BaseModel): end_time: datetime = Field(..., title='End Time') start_time: datetime = Field(..., title='Start Time') success: bool = Field(..., title='Success') class ValidationError(BaseModel): loc: List[Union[str, int]] = Field(..., title='Location') msg: str = Field(..., title='Message') type: str = Field(..., title='Error Type') class VoteCount(BaseModel): option: str = Field(..., examples=['yes'], title='Option') value: int = Field(..., examples=[48], title='Value') class Identifier(RootModel[List[str]]): root: List[str] = Field( ..., description='Filter to only include bills with this identifier.', title='Identifier', ) class Subject(RootModel[List[str]]): root: List[str] = Field( ..., description='Filter by one or more subjects.', title='Subject' ) class Include(RootModel[List[BillInclude]]): root: List[BillInclude] = Field( ..., description='Additional information to include in response.' ) class Include1(RootModel[List[BillInclude]]): root: List[BillInclude] class Include3(RootModel[List[CommitteeInclude]]): root: List[CommitteeInclude] = Field( ..., description='Additional includes for the Committee response.' ) class Include5(RootModel[List[EventInclude]]): root: List[EventInclude] = Field( ..., description='Additional includes for the Event response.' ) class Include7(RootModel[List[JurisdictionInclude]]): root: List[JurisdictionInclude] = Field( ..., description='Additional information to include in response.' ) class Include8(RootModel[List[JurisdictionInclude]]): root: List[JurisdictionInclude] = Field( ..., description='Additional includes for the Jurisdiction response.' ) class Id(RootModel[List[str]]): root: List[str] = Field( ..., description='Filter by id, can be specified multiple times for multiple people.', title='Id', ) class Include9(RootModel[List[PersonInclude]]): root: List[PersonInclude] = Field( ..., description='Additional information to include in response.' ) class Include10(RootModel[List[PersonInclude]]): root: List[PersonInclude] = Field( ..., description='Additional information to include in the response.' ) class BillAction(BaseModel): classification: List[str] = Field( ..., examples=[['passed']], title='Classification' ) date: str = Field(..., examples=['2020-03-14'], title='Date') description: str = Field(..., examples=['Passed 1st Reading'], title='Description') order: int = Field(..., title='Order') organization: Organization class Chamber(BaseModel): classification: str = Field(..., examples=['legislature'], title='Classification') districts: Optional[List[Post]] = Field(None, title='Districts') id: str = Field( ..., examples=['ocd-organization/32aab083-d7a0-44e0-9b95-a7790c542605'], title='Id', ) name: str = Field(..., examples=['North Carolina General Assembly'], title='Name') class CompactJurisdiction(BaseModel): classification: JurisdictionClassification = Field(..., examples=['state']) id: str = Field( ..., examples=['ocd-jurisdiction/country:us/state:nc/government'], title='Id' ) name: str = Field(..., examples=['North Carolina'], title='Name') class CurrentRole(BaseModel): district: Optional[Union[str, int]] = Field('', examples=[3], title='District') division_id: Optional[str] = Field( '', examples=['ocd-division/country:us/state:nc/sldu:3'], title='Division Id' ) org_classification: OrgClassification = Field(..., examples=['upper']) title: str = Field(..., examples=['Senator'], title='Title') class EventDocument(BaseModel): classification: str = Field(..., title='Classification') date: str = Field(..., title='Date') links: List[Link] = Field(..., title='Links') note: str = Field(..., title='Note') class EventMedia(BaseModel): classification: str = Field(..., title='Classification') date: str = Field(..., title='Date') links: List[Link] = Field(..., title='Links') note: str = Field(..., title='Note') offset: int = Field(..., title='Offset') class HTTPValidationError(BaseModel): detail: Optional[List[ValidationError]] = Field(None, title='Detail') class Jurisdiction(BaseModel): classification: JurisdictionClassification = Field(..., examples=['state']) division_id: Optional[str] = Field( '', examples=['ocd-division/country:us/state:nc'], title='Division Id' ) id: str = Field( ..., examples=['ocd-jurisdiction/country:us/state:nc/government'], title='Id' ) latest_bill_update: datetime = Field(..., title='Latest Bill Update') latest_people_update: datetime = Field(..., title='Latest People Update') latest_runs: Optional[List[RunPlan]] = Field(None, title='Latest Runs') legislative_sessions: Optional[List[LegislativeSession]] = Field( None, title='Legislative Sessions' ) name: str = Field(..., examples=['North Carolina'], title='Name') organizations: Optional[List[Chamber]] = Field(None, title='Organizations') url: str = Field(..., examples=['https://nc.gov'], title='Url') class JurisdictionList(BaseModel): pagination: PaginationMeta results: List[Jurisdiction] = Field(..., title='Results') class Person(BaseModel): birth_date: str = Field(..., examples=['1960-05-04'], title='Birth Date') created_at: datetime = Field(..., title='Created At') current_role: Optional[CurrentRole] = None death_date: str = Field(..., examples=['2019-04-10'], title='Death Date') email: str = Field(..., examples=['aperson@example.com'], title='Email') extras: Dict[str, Any] = Field( ..., examples=[{'profession': 'Doctor'}], title='Extras' ) family_name: str = Field(..., examples=['Augusta'], title='Family Name') gender: str = Field(..., examples=['female'], title='Gender') given_name: str = Field(..., examples=['Angela'], title='Given Name') id: str = Field( ..., examples=['ocd-person/adb58f21-f2fd-4830-85b6-f490b0867d14'], title='Id' ) image: str = Field(..., examples=['https://example.com/ncimg/3.png'], title='Image') jurisdiction: CompactJurisdiction links: Optional[List[Link]] = Field(None, title='Links') name: str = Field(..., examples=['Angela Augusta'], title='Name') offices: Optional[List[Office]] = Field(None, title='Offices') openstates_url: str = Field( ..., examples=[ 'https://openstates.org/person/amos-l-quick-iii-28NRPPfJA6FGVl9RrjpKjl/' ], title='Openstates Url', ) other_identifiers: Optional[List[AltIdentifier]] = Field( None, title='Other Identifiers' ) other_names: Optional[List[AltName]] = Field(None, title='Other Names') party: str = Field(..., examples=['Democratic'], title='Party') sources: Optional[List[Link]] = Field(None, title='Sources') updated_at: datetime = Field(..., title='Updated At') class PersonList(BaseModel): pagination: PaginationMeta results: List[Person] = Field(..., title='Results') class CompactPerson(BaseModel): current_role: Optional[CurrentRole] = None id: str = Field( ..., examples=['ocd-person/adb58f21-f2fd-4830-85b6-f490b0867d14'], title='Id' ) name: str = Field(..., examples=['Angela Augusta'], title='Name') party: str = Field(..., examples=['Democratic'], title='Party') class EventParticipant(BaseModel): entity_type: str = Field(..., examples=['person'], title='Entity Type') name: str = Field(..., examples=['JONES'], title='Name') note: str = Field(..., title='Note') organization: Optional[Organization] = Field(None, title='Organization') person: Optional[CompactPerson] = None class EventRelatedEntity(BaseModel): bill: Optional[CompactBill] = None entity_type: str = Field(..., examples=['person'], title='Entity Type') name: str = Field(..., examples=['JONES'], title='Name') note: str = Field(..., title='Note') organization: Optional[Organization] = Field(None, title='Organization') person: Optional[CompactPerson] = None vote: Optional[CompactVoteEvent] = None class PersonVote(BaseModel): option: str = Field(..., examples=['no'], title='Option') voter: Optional[CompactPerson] = None voter_name: str = Field(..., examples=['Wu'], title='Voter Name') class VoteEvent(BaseModel): counts: List[VoteCount] = Field(..., title='Counts') extras: Dict[str, Any] = Field(..., title='Extras') id: str = Field(..., title='Id') identifier: str = Field(..., examples=['HV #3312'], title='Identifier') motion_classification: Optional[List[str]] = Field( [], examples=[['passage']], title='Motion Classification' ) motion_text: str = Field( ..., examples=['Shall the bill be passed?'], title='Motion Text' ) organization: Organization result: str = Field(..., examples=['pass'], title='Result') sources: List[Link] = Field(..., title='Sources') start_date: str = Field(..., examples=['2020-09-18'], title='Start Date') votes: List[PersonVote] = Field(..., title='Votes') class BillSponsorship(BaseModel): classification: str = Field(..., examples=['primary'], title='Classification') entity_type: str = Field(..., examples=['person'], title='Entity Type') name: str = Field(..., examples=['JONES'], title='Name') organization: Optional[Organization] = Field(None, title='Organization') person: Optional[CompactPerson] = None primary: bool = Field(..., title='Primary') class CommitteeMembership(BaseModel): person: Optional[CompactPerson] = None person_name: str = Field(..., title='Person Name') role: str = Field(..., title='Role') class EventAgendaItem(BaseModel): classification: List[str] = Field(..., title='Classification') description: str = Field(..., title='Description') extras: Dict[str, Any] = Field(..., title='Extras') media: List[EventMedia] = Field(..., title='Media') notes: List[str] = Field(..., title='Notes') order: int = Field(..., title='Order') related_entities: List[EventRelatedEntity] = Field(..., title='Related Entities') subjects: List[str] = Field(..., title='Subjects') class Bill(BaseModel): abstracts: Optional[List[BillAbstract]] = Field(None, title='Abstracts') actions: Optional[List[BillAction]] = Field(None, title='Actions') classification: Optional[List[str]] = Field( [], examples=[['resolution']], title='Classification' ) created_at: datetime = Field(..., title='Created At') documents: Optional[List[BillDocumentOrVersion]] = Field(None, title='Documents') extras: Optional[Dict[str, Any]] = Field({}, examples=[{}], title='Extras') first_action_date: Optional[str] = Field( '', examples=['2020-01-01'], title='First Action Date' ) from_organization: Organization id: str = Field( ..., examples=['ocd-bill/f0049138-1ad8-4506-a2a4-f4dd1251bbba'], title='Id' ) identifier: str = Field(..., examples=['SB 113'], title='Identifier') jurisdiction: CompactJurisdiction latest_action_date: Optional[str] = Field( '', examples=['2020-02-01'], title='Latest Action Date' ) latest_action_description: Optional[str] = Field( '', examples=['Introduced in House'], title='Latest Action Description' ) latest_passage_date: Optional[str] = Field( '', examples=['2020-03-01'], title='Latest Passage Date' ) openstates_url: str = Field( ..., examples=['https://openstates.org/nc/bills/2019/HB1105/'], title='Openstates Url', ) other_identifiers: Optional[List[BillIdentifier]] = Field( None, title='Other Identifiers' ) other_titles: Optional[List[BillTitle]] = Field(None, title='Other Titles') related_bills: Optional[List[RelatedBill]] = Field(None, title='Related Bills') session: str = Field(..., examples=['2020'], title='Session') sources: Optional[List[Link]] = Field(None, title='Sources') sponsorships: Optional[List[BillSponsorship]] = Field(None, title='Sponsorships') subject: Optional[List[str]] = Field( [], examples=[['SCORPIONS', 'SYMBOLS']], title='Subject' ) title: str = Field(..., examples=['Adopting a State Scorpion'], title='Title') updated_at: datetime = Field(..., title='Updated At') versions: Optional[List[BillDocumentOrVersion]] = Field(None, title='Versions') votes: Optional[List[VoteEvent]] = Field(None, title='Votes') class BillList(BaseModel): pagination: PaginationMeta results: List[Bill] = Field(..., title='Results') class Committee(BaseModel): classification: CommitteeClassification extras: Dict[str, Any] = Field(..., examples=[{'room': 'Room 4B'}], title='Extras') id: str = Field( ..., examples=['ocd-organization/aabbbbcc-dddd-eeee-ffff-0123456789ab'], title='Id', ) links: Optional[List[Link]] = Field(None, title='Links') memberships: Optional[List[CommitteeMembership]] = Field(None, title='Memberships') name: str = Field(..., examples=['Health & Public Services'], title='Name') other_names: Optional[List[AltName]] = Field(None, title='Other Names') parent_id: str = Field( ..., examples=['ocd-organization/aabbbbcc-dddd-eeee-ffff-999988887777'], title='Parent Id', ) sources: Optional[List[Link]] = Field(None, title='Sources') class CommitteeList(BaseModel): pagination: PaginationMeta results: List[Committee] = Field(..., title='Results') class Event(BaseModel): agenda: Optional[List[EventAgendaItem]] = Field(None, title='Agenda') all_day: bool = Field(..., title='All Day') classification: str = Field(..., title='Classification') deleted: bool = Field(..., title='Deleted') description: str = Field(..., title='Description') documents: Optional[List[EventDocument]] = Field(None, title='Documents') end_date: str = Field(..., title='End Date') id: str = Field(..., title='Id') jurisdiction: CompactJurisdiction links: Optional[List[Link]] = Field(None, title='Links') location: Optional[EventLocation] = None media: Optional[List[EventMedia]] = Field(None, title='Media') name: str = Field(..., title='Name') participants: Optional[List[EventParticipant]] = Field(None, title='Participants') sources: Optional[List[Link]] = Field(None, title='Sources') start_date: str = Field(..., title='Start Date') status: str = Field(..., title='Status') upstream_id: str = Field(..., title='Upstream Id') class EventList(BaseModel): pagination: PaginationMeta results: List[Event] = Field(..., title='Results')

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ag2-mcp-servers/open-states-api-v3'

If you have feedback or need assistance with the MCP directory API, please join our Discord server