This project powers the EuroPython 2025 website, Discord bot, and internal bot 🦜 by downloading, transforming, and serving clean, structured JSON files for sessions, speakers, and the schedule, all pulled from Pretalx.
Built for transparency. Designed for reuse. Optimized for EuroPython.
- Downloads submission and speaker data from Pretalx.
- Transforms raw data:
- Removes private/irrelevant fields
- Normalizes formats
- Adds computed fields (e.g. URLs, delivery mode)
 
- Serves the transformed JSON files via a static API.
- 
Clone the repo git clone https://github.com/EuroPython/programapi.git cd programapi
- 
Install uv (fast Python package manager) 
- 
Create a Python 3.13 virtual environment uv venv -p 3.13 
- 
Install dev dependencies make dev 
- 
Enable pre-commit hooks make pre-commit 
You can update the event year or shortname in src/config.py.
Also, create a .env file in the project root and set:
PRETALX_TOKEN=your_api_token_here(Yes, Pretalx has rate limits. Please be nice. 🤪)
- 
Run the entire pipeline: make all 
- 
Run only the download step: make download 
- 
Run only the transformation step: make transform 
- 
(Optional) Exclude components: make all EXCLUDE="schedule youtube"
Hosted at:
https://static.europython.eu/programme/ep2025/releases/current
| Endpoint | Description | 
|---|---|
| /speakers.json | List of confirmed speakers | 
| /sessions.json | List of confirmed sessions | 
| /schedule.json | Latest conference schedule | 
Looking for field definitions and examples?
Check out the 👉 data/examples/README.md for a full schema reference with example payloads and explanations.
Feel free to open an issue or reach us at [email protected]. We love contributors 💜
📅 Last updated for: EuroPython 2025