OParl API Overview
Comprehensive guide to the OParl API and its data structures

What is OParl?
OParl is a standardized web service interface that enables access to parliamentary data in a consistent format across different implementations. It provides structured access to:
- Parliamentary bodies (councils, committees, working groups)
- Organizations (political parties, groups, institutions)
- People (elected officials, staff, participants)
- Meetings (sessions, hearings, consultations)
- Documents (papers, resolutions, reports)
- Agenda items (topics, discussions, decisions)
OParl 1.1 Specification
The current version is OParl 1.1, which defines:
- Standardized data models for parliamentary information
- RESTful API endpoints for data access
- JSON-LD format for data exchange
- Consistent URL patterns across implementations
- Metadata standards for data provenance
Core OParl Objects
1. System
The root object that provides system-wide information and metadata.
Key Properties:
oparlVersion
: Version of the OParl specificationbody
: List of available parliamentary bodiescreated
: System creation timestampmodified
: Last modification timestamp
Example:
{
"type": "https://schema.oparl.org/1.1/System",
"oparlVersion": "https://schema.oparl.org/1.1/",
"body": ["https://oparl.example.org/body/1"],
"created": "2024-01-01T00:00:00+01:00",
"modified": "2024-01-15T10:30:00+01:00"
}
2. Body
Represents a parliamentary body such as a city council, committee, or working group.
Key Properties:
name
: Official name of the bodyshortName
: Abbreviated nameorganization
: Associated organizationsmeeting
: List of meetingslegislativeTerm
: Current legislative period
Example:
{
"type": "https://schema.oparl.org/1.1/Body",
"id": "https://oparl.example.org/body/1",
"name": "Munich City Council",
"shortName": "MCC",
"organization": ["https://oparl.example.org/organization/1"],
"meeting": ["https://oparl.example.org/meeting/1"]
}
3. Organization
Represents political parties, groups, or institutional organizations.
Key Properties:
name
: Organization nameshortName
: Abbreviated namebody
: Associated parliamentary bodymember
: List of membersclassification
: Type of organization
Example:
{
"type": "https://schema.oparl.org/1.1/Organization",
"id": "https://oparl.example.org/organization/1",
"name": "Social Democratic Party",
"shortName": "SPD",
"body": "https://oparl.example.org/body/1",
"member": ["https://oparl.example.org/person/1"]
}
4. Person
Represents elected officials, staff, or other participants.
Key Properties:
name
: Full namegivenName
: First namefamilyName
: Last namebody
: Associated parliamentary bodyorganization
: Political party or groupemail
: Contact email
Example:
{
"type": "https://schema.oparl.org/1.1/Person",
"id": "https://oparl.example.org/person/1",
"name": "Dr. Maria Schmidt",
"givenName": "Maria",
"familyName": "Schmidt",
"body": "https://oparl.example.org/body/1",
"organization": "https://oparl.example.org/organization/1"
}
5. Meeting
Represents a parliamentary session, hearing, or consultation.
Key Properties:
name
: Meeting titlestart
: Start date and timeend
: End date and timelocation
: Meeting venueagendaItem
: List of agenda itemsparticipant
: List of participants
Example:
{
"type": "https://schema.oparl.org/1.1/Meeting",
"id": "https://oparl.example.org/meeting/1",
"name": "City Council Session",
"start": "2024-01-15T14:00:00+01:00",
"end": "2024-01-15T18:00:00+01:00",
"location": "https://oparl.example.org/location/1",
"agendaItem": ["https://oparl.example.org/agendaitem/1"]
}
6. AgendaItem
Represents a topic or item on a meeting agenda.
Key Properties:
name
: Item titlemeeting
: Associated meetingorder
: Position in agendaconsultation
: Related consultationsresolution
: Decision or resolution
Example:
{
"type": "https://schema.oparl.org/1.1/AgendaItem",
"id": "https://oparl.example.org/agendaitem/1",
"name": "Budget Discussion 2024",
"meeting": "https://oparl.example.org/meeting/1",
"order": 1,
"consultation": ["https://oparl.example.org/consultation/1"]
}
7. Paper
Represents documents, resolutions, or reports.
Key Properties:
name
: Document titlereference
: Official reference numberbody
: Associated parliamentary bodydate
: Publication datefile
: Associated files
Example:
{
"type": "https://schema.oparl.org/1.1/Paper",
"id": "https://oparl.example.org/paper/1",
"name": "Budget Resolution 2024",
"reference": "2024/001",
"body": "https://oparl.example.org/body/1",
"date": "2024-01-15T00:00:00+01:00"
}
8. Consultation
Represents public consultations or feedback processes.
Key Properties:
name
: Consultation titlepaper
: Related documentauthoritative
: Whether consultation is bindingstart
: Start dateend
: End date
Example:
{
"type": "https://schema.oparl.org/1.1/Consultation",
"id": "https://oparl.example.org/consultation/1",
"name": "Public Budget Consultation",
"paper": "https://oparl.example.org/paper/1",
"authoritative": true,
"start": "2024-01-01T00:00:00+01:00",
"end": "2024-01-31T23:59:59+01:00"
}
9. File
Represents attachments, media files, or documents.
Key Properties:
name
: File namefileName
: Original file namemimeType
: File typesize
: File size in bytesaccessUrl
: Download URL
Example:
{
"type": "https://schema.oparl.org/1.1/File",
"id": "https://oparl.example.org/file/1",
"name": "budget_2024.pdf",
"fileName": "budget_2024.pdf",
"mimeType": "application/pdf",
"size": 1024000,
"accessUrl": "https://oparl.example.org/file/1/download"
}
10. Location
Represents meeting venues, addresses, or geographical locations.
Key Properties:
name
: Location namedescription
: Additional detailsgeojson
: Geographical coordinatessubLocality
: District or areapostalCode
: Postal code
Example:
{
"type": "https://schema.oparl.org/1.1/Location",
"id": "https://oparl.example.org/location/1",
"name": "City Hall",
"description": "Main council chamber",
"geojson": {
"type": "Point",
"coordinates": [11.5761, 48.1374]
},
"postalCode": "80331"
}
API Endpoints
System Endpoints
GET /system
- Get system informationGET /system/body
- List all bodies
Body Endpoints
GET /body
- List all bodiesGET /body/{id}
- Get specific bodyGET /body/{id}/organization
- List body organizationsGET /body/{id}/meeting
- List body meetingsGET /body/{id}/person
- List body members
Organization Endpoints
GET /organization
- List all organizationsGET /organization/{id}
- Get specific organizationGET /organization/{id}/member
- List organization members
Person Endpoints
GET /person
- List all peopleGET /person/{id}
- Get specific personGET /person/{id}/membership
- List person memberships
Meeting Endpoints
GET /meeting
- List all meetingsGET /meeting/{id}
- Get specific meetingGET /meeting/{id}/agendaitem
- List meeting agenda itemsGET /meeting/{id}/participant
- List meeting participants
Paper Endpoints
GET /paper
- List all papersGET /paper/{id}
- Get specific paperGET /paper/{id}/file
- List paper files
Consultation Endpoints
GET /consultation
- List all consultationsGET /consultation/{id}
- Get specific consultation
File Endpoints
GET /file
- List all filesGET /file/{id}
- Get specific fileGET /file/{id}/download
- Download file content
Location Endpoints
GET /location
- List all locationsGET /location/{id}
- Get specific location
Query Parameters
Most list endpoints support common query parameters:
limit
- Maximum number of results (default: 20, max: 1000)offset
- Number of results to skip (default: 0)search
- Search term for filteringstart
- Start date for filteringend
- End date for filtering
Data Relationships
OParl objects are interconnected through references:
- System → Body (one-to-many)
- Body → Organization (one-to-many)
- Body → Person (one-to-many)
- Body → Meeting (one-to-many)
- Meeting → AgendaItem (one-to-many)
- Meeting → Person (many-to-many, via participants)
- Paper → File (one-to-many)
- AgendaItem → Consultation (one-to-many)
OParl Implementations
Various cities and institutions have implemented OParl:
- Generic API:
https://api.oparl.org
- Munich:
https://oparl.muenchen.de
- Cologne:
https://oparl.koeln.de
- Hamburg:
https://oparl.hamburg.de
- Berlin:
https://oparl.berlin.de
Each implementation may have:
- Different data availability
- Varying authentication requirements
- Custom extensions
- Different rate limits
Next Steps
- FastMCP Integration - How FastMCP connects to OParl
- MCP Components - Understanding MCP resources and tools
- Examples - Practical usage examples