Base URL
All API requests are made to:API specification
The complete API specification is available in OpenAPI 3.0 format:- Title: City Council API
- Version: 1.0.0
- Format: OpenAPI 3.0
- Location:
swagger.yamlin the source repository
Core concepts
Cities
Cities represent municipalities or regions with council meetings. Each city has:- Unique identifier (slug)
- Localized names (Greek and English)
- Status:
pending,unlisted, orlisted - Authority type:
municipalityorregion - Support for notifications
- Official support status
Meetings
Council meetings contain:- Date and time
- Administrative body (council, committee, or community)
- Video/audio recordings
- Transcripts with speaker segments
- Subjects discussed
- Release status
People and parties
- People: Council members with roles, party affiliation, and active terms
- Parties: Political parties with localized names and branding
Subjects
Agenda items discussed in meetings, including:- Topic categorization
- Speaker segments
- Summaries
- Location data (when applicable)
Key features
Hybrid search
Combine traditional text search with semantic search for intelligent results
Pagination
Built-in pagination support for large result sets
Filtering
Filter by city, person, party, topic, date range, and location
Rich data
Access transcripts, summaries, metadata, and relationships
Response format
All API responses return JSON with consistent structure:Success responses
Error responses
HTTP status codes
The API uses standard HTTP status codes:| Code | Description |
|---|---|
200 | Success - Request completed successfully |
400 | Bad Request - Invalid parameters or request body |
401 | Unauthorized - Authentication required |
404 | Not Found - Resource doesn’t exist |
500 | Internal Server Error - Server-side error occurred |
Data types
Common fields
Many resources include these standard fields:id(string): Unique identifiercreatedAt(datetime): ISO 8601 timestamp of creationupdatedAt(datetime): ISO 8601 timestamp of last updatecityId(string): Associated city identifier
Localized content
Bilingual fields use_en suffix for English:
name(string): Greek namename_en(string): English name
Timestamps
All timestamps are in ISO 8601 format:Rate limiting
Rate limiting is not currently enforced, but may be implemented in future versions. Monitor the
error.code field for RATE_LIMIT_EXCEEDED errors.Technology stack
The API is built with:- Framework: Next.js 14 API Routes
- Database: PostgreSQL with PostGIS extension
- ORM: Prisma for type-safe database access
- Validation: Zod schemas for request validation
- Search: Elasticsearch for full-text and semantic search
- Authentication: Auth.js (NextAuth v5) with Resend email provider
Getting started
Explore the API
Start with the Cities endpoint to discover available municipalities
Fetch meetings
Use the Meetings endpoint to get council meetings for a city
Search content
Try the Search endpoint to find subjects across all meetings
Access transcripts
Get detailed transcripts from the Transcripts endpoint
Need help?
- Join our Discord community
- Check out the API endpoints for detailed usage
- View the OpenAPI specification
- Report issues on GitHub