Submitting a Session Forecast¶
Forecasters can submit forecasts for open Market Challenges, competing for the prize money available. They may commence or stop contributing to the market at any time.
API Endpoints¶
To interact with the Predico API and submit your forecasts for open challenges, you can use the following endpoints:
- GET
/api/v1/market/session- Retrieve list of market sessions (you can filter by 'open' sessions with query parameters) - GET
/api/v1/market/challenge- Retrieve challenges for an open market session. - POST
/api/v1/market/challenge/submission/{challenge_id}- Publish your forecast submission for a specific challenge.
Prerequisites
- Access Token: Ensure you have a valid access token. Refer to the Authentication section if needed.
- Selected Challenge: You should have a selected challenge from the Listing Challenges section.
- Prepared Forecast Data: Follow the Preparing a Session Forecast section to prepare your forecast submissions.
Submitting Forecast Data¶
After preparing your submissions, submit it to the Predico platform.
In this example, we'll submit the random data generated in Preparing a Session Forecast section:
Strict requirement!
You must submit forecasts for variables Q10, Q50 and Q90 to be selected to participate in a forecasting session. Partial submissions (e.g., missing one of the variables) will not be considered for the final evaluation / monthly payment distributions.
D+1 and D+N — submit to every opened session
For Day-Ahead and Extended horizons, qualifying for a target day requires submitting your full Q10/Q50/Q90 to every opened session of that day (D+1 opens at 10:00 CET). Skipping one of them triggers a peer-Q75 penalty for that day. Intraday is exempt. See Day-Ahead & Extended Evaluation.
On updating your submission
- If you wish to update your submission, you can do so by submitting a new forecast using the PUT method. The latest submission will overwrite the previous one.
# Submit the forecasts:
for submission in submission_list:
response = requests.post(url=f"{API_URL}/market/challenge/submission/{challenge_id}",
json=submission,
headers=headers,
timeout=30)
# Check if the request was successful
if response.status_code == 201:
print(f"Forecast submission successful for {submission['variable']} quantile.")
else:
print(f"Failed to submit forecast for {submission['variable']} quantile.")
print(f"Status code: {response.status_code}")
Checking your submission status¶
After submitting, you can confirm that each challenge in the open session is covered by your forecasts.
- GET
/api/v1/market/session/coverage- Per-challenge readiness for the currently open session.
The response lists every challenge in the open session and, for each one:
| Field | Meaning |
|---|---|
ready |
true when your forecasts fully cover that challenge window. |
source |
session_submission (your explicit POST), continuous_forecast (auto-sliced from your continuous series), or null if not covered. When both exist, session_submission wins. |
A challenge is ready only when all of the following hold:
- All three quantiles (Q10, Q50, Q90) are present.
- Forecasts exist at every expected 15-minute timestamp in the challenge's
[start_datetime, end_datetime]window — no gaps.
Partial submissions (missing a quantile, missing leadtimes, or values only
inside part of the window) report ready: false and will not qualify for that
challenge's scoring. The endpoint is scoped to the calling forecaster — you
only see your own status.