# 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')