---
title: "Backtest a joint CatBoost portfolio at D-1 07:00"
method: POST
path: "/api/forecast-sandbox/consumption/portfolio/run"
tags: ["Forecast Sandbox"]
---

# Backtest a joint CatBoost portfolio at D-1 07:00

`POST /api/forecast-sandbox/consumption/portfolio/run`

## Request

- Base URL: `https://api.cernion.de`
- URL: `https://api.cernion.de/api/forecast-sandbox/consumption/portfolio/run`
- Auth: none declared

Serial asynchronous forecast job; common chronological discovery/confirmation boundaries for 2–16 series. Weekly/two-week/weekday mean/median references, global/local/two-part CatBoost and local HGB. Versioned D-3 (default) or D-2 availability. MAE selection by default; optional RMSE ablation. Model selection is past-only; no quality guarantee.

## Query parameters

- `token` string

## Request body

- object
  - `dataset_ids` string[], required
  - `configuration` object, required
    - `portfolio_method` object
      - `latest_measurement_lag` 2 | 3
      - `feature_profile` 'legacy_v1' | 'e2_v1'
      - `selection_objective` 'rmse' | 'mae'
      - `candidate_set` 'existing' | 'hgb' | 'extended' | 'regime'
      - `training_mode` 'rolling' | 'frozen'
    - `model_family` 'portfolio_catboost', required
    - `mode` 'rolling_day_ahead', required
    - `relationship_mode` 'auto', required
    - `issue_time` '07:00', required
    - `feature_set` string[], required
    - `forecast_period_from` string, date, required
    - `forecast_period_until` string, date, required
    - `history_from` string, date
    - `portfolio_stress_test` boolean: Evaluate input-only 5% point, latest eligible day and three-day outages; evaluation actuals unchanged.
  - `payload_fit_confirmed` true, required
  - `token` string: Optional Cernion MCP token for this request. Overrides CERNION_TOKEN when provided.

## Response `200`

Completed immutable run reused; result_manifest contains per-series result URLs.

## Other responses

- `202`: Forecast job accepted. Poll statusUrl/progressUrl; fetch resultUrl once completed. CPU work runs in a separate worker.
- `400`: Invalid or unavailable dataset/configuration.
- `500`: Portfolio execution unavailable.

---

[API](https://skmtc.dev/cernion/apis/cernion-energy-tools-api.md) · [All operations](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cernion/apis/cernion-energy-tools-api/revisions/cdb94473b538?raw)
