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