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

Get access

Create the account and generate the key you need for the first submission.

1

Create your Energy Arena account

Register with your email address, confirm the verification link, and sign in.

2

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.

Get the starter repository

Download the starter repo and use it as the base for your first manual submission.

Prepare locally

Create the local env file and inspect the currently open challenges.

4

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.

5

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.

Print active challenges
python run_forecast_model.py --list_open_challenges
Make a first submission

Use run_forecast_model.py to generate the payload locally, inspect it, and then submit it with submit_forecast_to_energy_arena.py.

6

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.

Generate one local forecast payload
python run_forecast_model.py --target_date 27-03-2026 --challenge_id <challenge_id> --save_payload test_payload.json
7

Submit 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.

Helper script
python submit_forecast_to_energy_arena.py --payload_path test_payload.json
What the starter model does

By 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.

Optional alternative to step 7

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.json

Direct 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"
Confirm the result

Open the dashboard and verify that your submission arrived successfully.

8

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.

Our proposed pathIf you use the starter repository, both 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"].
Use any pipeline you wantYou can also ignore the starter structure completely and build your own loaders, models, schedulers, or infrastructure. The platform only cares about the final submitted payload. If helpful, you can still reuse 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.py

Scheduling guides

Schedule the batch runner e.g. at 11:30 CET/CEST. Use the repository guides for Task Scheduler or cron.