How to participate
Follow the step-by-step guide below and you can make your first submission in about 15 minutes. The first milestone is one successful manual submission. Once that works, you can focus on improving forecast quality and automating your workflow.
Step-by-step guide to your first submission
Create the account and generate the key you need for the first submission.
Create your Energy Arena account
Register with your email address, confirm the verification link, and sign in.
Create your Arena API key in the dashboard
The starter repository uses this key to submit forecasts on your behalf. For a first run, this is the only required key.
Download the starter repo and use it as the base for your first manual submission.
Download the starter repository
Clone it with Git in your terminal. If needed, you can also download it as a ZIP file.
git clone https://github.com/zubasa107/energy-arena-participate
cd energy-arena-participate
pip install -r requirements.txtCreate the local env file and inspect the currently open challenges.
Create your local .env file
Copy .env.example, paste it into the same folder, rename it to .env, and then fill in your Arena API key.
Inspect the open challenges
For the first manual run, start with run_forecast_model.py. It prints the currently open challenge IDs, areas, accepted forecast formats, and the next submission timing, so you can choose one concrete challenge for your first payload.
python run_forecast_model.py --list_open_challengesUse run_forecast_model.py to generate the payload locally, inspect it, and then submit it with submit_forecast_to_energy_arena.py.
Generate one forecast locally
Choose one of the printed challenge IDs and generate one forecast locally with run_forecast_model.py. In the command below, adjust the target_date and insert a challenge ID, for example <challenge_id> = 1. The starter script still asks for a date on daily challenges, then derives the canonical target_start anchor in the payload it writes to test_payload.json. No submission is sent yet, so you can inspect the payload first.
python run_forecast_model.py --target_date 27-03-2026 --challenge_id <challenge_id> --save_payload test_payload.jsonSubmit the forecast to Energy Arena
Once the locally generated forecast looks correct, submit the saved payload. You can either use the helper script from the starter repository or post the same test_payload.json directly to the API with curl or PowerShell.
python submit_forecast_to_energy_arena.py --payload_path test_payload.jsonBy default, run_forecast_model.py builds a simple baseline forecast from historical SMARD data for the selected challenge. For point forecasts, it reuses recent historical values with a target-specific lookback pattern. For quantile and ensemble forecasts, it estimates quantiles or draws ensemble members from historical analog values. Once this baseline works end to end, you can replace it with your own model logic in custom_model.py and still reuse the provided loader functions from data_loaders.py or the starter baseline logic from starter_model.py.
The helper script in step 7 and the two direct API commands below all submit the same test_payload.json from step 6. Run the command in the folder that contains that file, or replace test_payload.json with the full path to it. In the direct API examples, replace YOUR_ARENA_API_KEY with your own Arena API key.
Direct API POST with curl
curl -X POST "https://api.energy-arena.org/api/v1/submissions" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_ARENA_API_KEY" \
--data @test_payload.jsonDirect API POST with PowerShell
Invoke-RestMethod -Uri "https://api.energy-arena.org/api/v1/submissions" -Method Post -ContentType "application/json" -Headers @{ "X-API-Key" = "YOUR_ARENA_API_KEY" } -InFile "test_payload.json"Open the dashboard and verify that your submission arrived successfully.
Check your submission status in the dashboard
After submitting, open the dashboard and check whether your submission appears there successfully. New submissions usually show up there first as pending and change status later once evaluation runs.
Integrate your own model
The starter repository is only one possible path. You can build your own data pipeline, forecasting workflow, and automation however you like. In the end, the only requirement is that you submit a valid payload to the Energy Arena API before the deadline. If you want to build on the starter workflow, copy custom_model_template.py to custom_model.py and start there.
run_forecast_model.py and run_daily_submissions.py use the same custom-model hook. In most cases, the simplest approach is to keep the payload structure unchanged, keep challenge_id and target_start fixed, and replace only the forecast values in payload["values"]. data_loaders.py for SMARD or ENTSO-E loading and starter_model.py as a reference for how the baseline model builds a valid payload.Automate your submissions
After one manual run works, run_daily_submissions.py can submit all currently open challenges automatically.
Daily batch submission
python run_daily_submissions.pyScheduling guides
Schedule the batch runner e.g. at 11:30 CET/CEST. Use the repository guides for Task Scheduler or cron.