{"openapi":"3.1.0","info":{"title":"Jua Query Engine API","description":"\n# Jua Query Engine API\n\nAccess to Jua's weather forecast and energy market data.\n\n## Features\n\n- Query forecast data for specific locations, regions, or market zones\n- Access multiple forecast models with various resolutions and update frequencies\n- Query ENTSOE energy market data including prices, load, and generation\n- Retrieve data in JSON or Apache Arrow format for efficient processing\n- Stream large datasets with optional streaming response\n- Advanced aggregation and grouping capabilities\n- Estimate credit consumption before executing queries\n\n## Authentication\nInclude your API key in the `X-API-Key` header:\n```\nX-API-Key: your_api_key_id:your_api_key_secret\n```\n\n## Documentation\n\nFor detailed guides, tutorials, and examples, visit our documentation at [docs.jua.ai](https://docs.jua.ai).\n\n## Rate Limiting\n\nAPI requests are subject to rate limiting based on your subscription plan. Rate limit information is included in response headers.\n        ","version":"0.1.0"},"paths":{"/v1/forecast/meta":{"get":{"tags":["forecast"],"summary":"Get forecast models metadata","description":"Retrieve metadata for available forecast models including:\n- Available weather variables for each model\n- Spatial grid resolution information\n- Model identifiers\n\nUse this endpoint to discover which models and variables are available before making data queries.\n\n**Authentication**: Requires API key.\n\nFor detailed model specifications and variable descriptions, visit [docs.jua.ai](https://docs.jua.ai).","operationId":"get_meta_v1_forecast_meta_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Model"}},{"type":"null"}],"description":"Filter by specific model(s). If not provided, returns all models","title":"Models"},"description":"Filter by specific model(s). If not provided, returns all models"}],"responses":{"200":{"description":"Successfully retrieved model metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaQueryResult"},"example":{"models":[{"model":"ept2","variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_100m"],"grid":{"num_latitudes":2160,"num_longitudes":4320}}]}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/available-forecasts":{"get":{"tags":["forecast"],"summary":"List available forecasts","description":"List all available forecast initialization times for specified models with optional time filtering.\n\nReturns forecast init times and maximum available lead times, useful for:\n- Discovering historical forecast availability\n- Finding specific forecast runs\n- Monitoring forecast data updates\n\n**Authentication**: Requires API key.\n\nResults are paginated. Use `limit` and `offset` parameters to navigate through large result sets.\n\nFor forecast schedules and update frequencies, see [docs.jua.ai](https://docs.jua.ai).","operationId":"get_available_forecasts_v1_forecast_available_forecasts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Model"}},{"type":"null"}],"description":"Filter by specific model(s). If not provided, returns all accessible models with Clickhouse data source","title":"Models"},"description":"Filter by specific model(s). If not provided, returns all accessible models with Clickhouse data source"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return forecasts initialized on or after this datetime (optional)","examples":["2025-01-01T00:00:00Z","2025-01-01 00:00:00"],"title":"Since"},"description":"Only return forecasts initialized on or after this datetime (optional)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return forecasts initialized before this datetime (optional)","examples":["2025-10-01T00:00:00Z","2025-10-01 00:00:00"],"title":"Before"},"description":"Only return forecasts initialized before this datetime (optional)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Maximum number of results to return","default":20,"title":"Limit"},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successfully retrieved available forecasts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableForecastsQueryResult"},"example":{"forecasts_per_model":{"ept2":[{"init_time":"2025-01-15T00:00:00Z","max_prediction_timedelta":10080}]},"pagination":{"limit":20,"offset":0}}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/count":{"get":{"tags":["forecast"],"summary":"Count available forecasts","description":"Get the total count of available forecasts per model with optional time filtering.\n\nUseful for:\n- Checking data availability before querying\n- Monitoring forecast archive growth\n- Validating expected data coverage\n\n**Authentication**: Requires API key.\n\nFor more information on forecast availability, see [docs.jua.ai](https://docs.jua.ai).","operationId":"get_count_v1_forecast_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"minItems":1,"description":"Filter by specific model(s)","title":"Models"},"description":"Filter by specific model(s)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only count forecasts initialized on or after this datetime (optional)","examples":["2025-01-01T00:00:00Z","2025-01-01 00:00:00"],"title":"Since"},"description":"Only count forecasts initialized on or after this datetime (optional)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only count forecasts initialized before this datetime (optional)","examples":["2025-10-01T00:00:00Z","2025-10-01 00:00:00"],"title":"Before"},"description":"Only count forecasts initialized before this datetime (optional)"}],"responses":{"200":{"description":"Successfully counted forecasts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotalNumberOfForecastsQueryResult"},"example":{"forecasts_per_model":{"ept2":1250,"aifs":980}}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/latest-init-time":{"get":{"tags":["forecast"],"summary":"Get latest forecast initialization time","description":"Retrieve the most recent forecast initialization time available for each model.\n\nReturns:\n- Latest init_time for each model\n- Maximum available lead time for that forecast\n\nUseful for:\n- Getting real-time forecast data with `init_time='latest'`\n- Monitoring forecast update status\n- Validating forecast freshness\n\n**Authentication**: Requires API key.\n\nFor forecast update schedules, see [docs.jua.ai](https://docs.jua.ai).","operationId":"get_latest_init_time_v1_forecast_latest_init_time_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"minItems":1,"description":"Filter by specific model(s)","title":"Models"},"description":"Filter by specific model(s)"},{"name":"min_prediction_timedelta","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum required lead time in minutes","default":0,"title":"Min Prediction Timedelta"},"description":"Minimum required lead time in minutes"}],"responses":{"200":{"description":"Successfully retrieved latest forecast info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestForecastInfoQueryResult"},"example":{"forecasts_per_model":{"ept2":{"init_time":"2025-01-15T12:00:00Z","prediction_timedelta":10080}}}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/dissemination-status":{"get":{"tags":["forecast"],"summary":"Get forecast dissemination status","description":"Retrieve dissemination status and delay statistics for forecasts.\n\nReturns for each model:\n- Status for individual forecasts (init_time, delay, whether missing)\n- Aggregated delay statistics (min, max, mean, median, std, percentiles)\n- Missing forecast percentage\n\nUseful for:\n- Monitoring forecast delivery timeliness\n- Identifying delayed or missing forecasts\n- Analyzing dissemination performance over time\n\n**Authentication**: Requires API key.\n\nResults are paginated. Use `limit` and `offset` parameters to navigate through large result sets.\n\nFor forecast schedules and SLA information, see [docs.jua.ai](https://docs.jua.ai).","operationId":"get_forecast_dissemination_status_v1_forecast_dissemination_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"minItems":1,"description":"Filter by specific model(s)","title":"Models"},"description":"Filter by specific model(s)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only analyze forecasts initialized on or after this datetime (optional)","examples":["2025-01-01T00:00:00Z","2025-01-01 00:00:00"],"title":"Since"},"description":"Only analyze forecasts initialized on or after this datetime (optional)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only analyze forecasts initialized before this datetime (optional)","examples":["2025-10-01T00:00:00Z","2025-10-01 00:00:00"],"title":"Before"},"description":"Only analyze forecasts initialized before this datetime (optional)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Maximum number of forecasts to analyze per model","default":100,"title":"Limit"},"description":"Maximum number of forecasts to analyze per model"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of forecasts to skip for pagination","default":0,"title":"Offset"},"description":"Number of forecasts to skip for pagination"},{"name":"only_stats","in":"query","required":false,"schema":{"type":"boolean","description":"Only return delay statistics per init time (without forecast status)","default":false,"title":"Only Stats"},"description":"Only return delay statistics per init time (without forecast status)"}],"responses":{"200":{"description":"Successfully retrieved dissemination status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisseminationStatus"},"example":{"status_per_model":{"ept2":{"status":[{"init_time":"2025-01-15T00:00:00Z","delay":-2.2,"is_missing":false,"is_delayed":true}],"delay_stats":{"min":-2.5,"max":0.3,"mean":-0.1,"median":-2.3,"std":1.1,"q90":-0.1,"q99":0.01,"missing_percentage":0.0}}}}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/data":{"post":{"tags":["forecast"],"summary":"Query forecast data","description":"Main endpoint for querying weather forecast data with full flexibility.\n\n## Features\n- Query by location (point, area, market zone) and time\n- Select specific models and weather variables\n- Support for aggregation and grouping\n- Multiple response formats (JSON, Apache Arrow)\n- Optional streaming for large datasets\n\n## Response Formats\n- **JSON** (`format=json`): Returns columnar JSON `{column: [values], ...}` suitable for small to medium datasets\n- **Arrow** (`format=arrow`): Returns Apache Arrow IPC stream for efficient large dataset handling\n\n## Streaming\nSet `stream=true` for streaming responses with Arrow format. Recommended for queries returning >100k rows.\n\n## Cost Management\nQueries are billed based on data volume, models, and variables. Use:\n- `request_credit_limit`: Set maximum credits to prevent unexpectedly large charges\n- `/cost` endpoint: Estimate costs before executing\n\nFor more details on how the costs are computed, visit [docs.jua.ai/pricing](https://docs.jua.ai/pricing).\n\n**Authentication**: Requires API key.\n\nFor detailed query examples and best practices, visit [docs.jua.ai](https://docs.jua.ai).","operationId":"post_data_v1_forecast_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow formatjson only supports up to 50k rows, arrow supports up to 5M rows without streaming","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow formatjson only supports up to 50k rows, arrow supports up to 5M rows without streaming"},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","description":"Enable streaming response (only with format=arrow). Recommended for queries returning >100k rows.","default":false,"title":"Stream"},"description":"Enable streaming response (only with format=arrow). Recommended for queries returning >100k rows."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."},{"name":"X-Request-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Request-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForecastQuery"},"examples":{"point_query":{"summary":"Simple point query","description":"Query temperature and wind at a single location","value":{"models":["ept2"],"geo":{"type":"point","value":[13.405,52.52],"method":"nearest"},"variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_100m"],"init_time":"latest","prediction_timedelta":{"start":0,"end":360}}},"market_aggregate":{"summary":"Market zone aggregation","description":"Average wind speed over Germany market zone","value":{"models":["ept2"],"geo":{"type":"market_zone","value":"DE"},"variables":["wind_speed_at_height_level_100m"],"init_time":"2025-01-15T00:00:00","prediction_timedelta":{"start":0,"end":2880},"group_by":["model","init_time","time"],"aggregation":["avg"],"include_time":true}}}}}},"responses":{"200":{"description":"Successfully retrieved forecast data","content":{"application/json":{"schema":{},"example":{"model":["ept2","ept2"],"init_time":["2025-10-15T00:00:00Z","2025-10-15T00:00:00Z"],"latitude":[52.52,52.52],"longitude":[13.4,13.4],"prediction_timedelta":[60,120],"air_temperature_at_height_level_2m":[285.5,286.2]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters or response size exceeded"},"401":{"description":"Authentication required"},"402":{"description":"Insufficient credits"},"403":{"description":"Insufficient permissions or model not in subscription"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/index":{"post":{"tags":["forecast"],"summary":"Query forecast data index","description":"Endpoint to obtain the index for weather forecasts.\n\n**Authentication**: Requires API key.\n\nFor detailed query examples and best practices, visit [docs.jua.ai](https://docs.jua.ai).","operationId":"post_forecast_index_v1_forecast_index_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForecastIndexQuery"},"examples":{"european_hindcast":{"summary":"Simple point query","description":"Query temperature and wind at a single location","value":{"model":"ept2","latitude":[32,71],"longitude":[-15,50],"variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_100m"],"init_time":{"start":"2025-01-01T00:00:00Z","end":"2025-01-31T23:59:59Z"},"prediction_timedelta":{"start":0,"end":120},"timedelta_unit":"h"}}}}}},"responses":{"200":{"description":"Successfully retrieved forecast data","content":{"application/json":{"schema":{},"example":{"init_time":["2025-10-15T00:00:00Z","2025-10-15T06:00:00Z"],"latitude":[52.0,52.25,52.5],"longitude":[13,13.25],"prediction_timedelta":[0,60,120,180],"variables":["air_temperature_at_height_level_2m"]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters or response size exceeded"},"401":{"description":"Authentication required"},"402":{"description":"Insufficient credits"},"403":{"description":"Insufficient permissions or model not in subscription"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/":{"get":{"tags":["forecast"],"summary":"Query forecast data (simple)","description":"Simplified GET endpoint for querying forecast data at a single point location.\n\nThis endpoint provides a simpler interface compared to POST `/data` for basic point queries.\nUse this for quick lookups at specific coordinates.\n\n**Limitations**:\n- Point queries only (no areas or market zones)\n- JSON response format only (no Arrow or streaming)\n- No grouping or aggregation support\n\nFor advanced queries with aggregation, multiple locations, or Arrow format, use POST `/data`.\n\n**Authentication**: Requires API key.\n\nSee [docs.jua.ai](https://docs.jua.ai/) for examples.","operationId":"get_data_simple_v1_forecast__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"description":"List of forecast models to query","title":"Models"},"description":"List of forecast models to query"},{"name":"init_time","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"const":"latest","type":"string"}],"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast","title":"Init Time"},"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast"},{"name":"latitude","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude of query point in degrees (-90 to 90)","title":"Latitude"},"description":"Latitude of query point in degrees (-90 to 90)"},{"name":"longitude","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude of query point in degrees (-180 to 180)","title":"Longitude"},"description":"Longitude of query point in degrees (-180 to 180)"},{"name":"method","in":"query","required":false,"schema":{"enum":["nearest","bilinear"],"type":"string","description":"Interpolate or return the nearest value","default":"nearest","title":"Method"},"description":"Interpolate or return the nearest value"},{"name":"variables","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/CustomerVariable"}},{"type":"null"}],"description":"Weather variables to query. If not specified, returns all available variables","title":"Variables"},"description":"Weather variables to query. If not specified, returns all available variables"},{"name":"time_zone","in":"query","required":false,"schema":{"type":"string","description":"IANA time zone name for time formatting","default":"GMT","title":"Time Zone"},"description":"IANA time zone name for time formatting"},{"name":"include_time","in":"query","required":false,"schema":{"type":"boolean","description":"Include forecast valid time column","default":true,"title":"Include Time"},"description":"Include forecast valid time column"},{"name":"min_prediction_timedelta","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum lead time in minutes","default":0,"title":"Min Prediction Timedelta"},"description":"Minimum lead time in minutes"},{"name":"max_prediction_timedelta","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum lead time in minutes","title":"Max Prediction Timedelta"},"description":"Maximum lead time in minutes"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Maximum number of results to return","default":10000,"title":"Limit"},"description":"Maximum number of results to return"},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":5,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."},{"name":"include_ensemble_members","in":"query","required":false,"schema":{"type":"boolean","description":"When true, return per-ensemble-member rows instead of ensemble-mean rows. Not supported for ept2_e.","default":false,"title":"Include Ensemble Members"},"description":"When true, return per-ensemble-member rows instead of ensemble-mean rows. Not supported for ept2_e."}],"responses":{"200":{"description":"Successfully retrieved forecast data","content":{"application/json":{"schema":{},"example":{"model":["ept2","ept2"],"init_time":["2025-01-15T00:00:00Z","2025-01-15T00:00:00Z"],"latitude":[52.52,52.52],"longitude":[13.4,13.4],"prediction_timedelta":[60,120],"air_temperature_at_height_level_2m":[285.5,286.2]}}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"402":{"description":"Insufficient credits"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/market-aggregate":{"get":{"tags":["forecast"],"summary":"Query market-aggregated forecast data","description":"Simplified GET endpoint for querying weighted-average forecasts over market zones or countries.\n\nAutomatically applies weighted aggregation based on capacity (wind/solar) or population distribution.\nUseful for energy market analysis and regional forecasting.\n\n**Common Use Cases**:\n- Wind power generation forecasts for market zones (weighted by wind capacity)\n- Solar power generation forecasts (weighted by solar capacity)\n- Population-weighted temperature averages for countries\n\n**Weighting Options**:\n- `wind_capacity`: Weight by installed wind power capacity\n- `solar_capacity`: Weight by installed solar power capacity  \n- `population`: Weight by population density\n\n**Limitations**:\n- JSON response format only (no Arrow or streaming)\n- Must specify either `market_zones` OR `country_keys` (not both)\n\nFor advanced aggregation queries, use POST `/data` with `group_by` and `weighting` parameters.\n\n**Authentication**: Requires API key.\n\nSee [docs.jua.ai](https://docs.jua.ai/) for examples.","operationId":"get_market_aggregate_simple_v1_forecast_market_aggregate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"description":"List of forecast models to query","title":"Models"},"description":"List of forecast models to query"},{"name":"init_time","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"const":"latest","type":"string"}],"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast","title":"Init Time"},"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast"},{"name":"weighting","in":"query","required":true,"schema":{"enum":["wind_capacity","solar_capacity","population"],"type":"string","description":"Weighting scheme for aggregation","title":"Weighting"},"description":"Weighting scheme for aggregation"},{"name":"market_zones","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Energy market zone codes (e.g., ['DE', 'FR']). Mutually exclusive with country_keys","title":"Market Zones"},"description":"Energy market zone codes (e.g., ['DE', 'FR']). Mutually exclusive with country_keys"},{"name":"country_keys","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"ISO country codes (e.g., ['DE', 'US']). Mutually exclusive with market_zones","title":"Country Keys"},"description":"ISO country codes (e.g., ['DE', 'US']). Mutually exclusive with market_zones"},{"name":"variables","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/CustomerVariable"}},{"type":"null"}],"description":"Weather variables to query. If not specified, returns all available variables","title":"Variables"},"description":"Weather variables to query. If not specified, returns all available variables"},{"name":"time_zone","in":"query","required":false,"schema":{"type":"string","description":"IANA time zone name for time formatting","default":"GMT","title":"Time Zone"},"description":"IANA time zone name for time formatting"},{"name":"include_time","in":"query","required":false,"schema":{"type":"boolean","description":"Include forecast valid time column","default":true,"title":"Include Time"},"description":"Include forecast valid time column"},{"name":"min_prediction_timedelta","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum lead time in minutes","default":0,"title":"Min Prediction Timedelta"},"description":"Minimum lead time in minutes"},{"name":"max_prediction_timedelta","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum lead time in minutes","title":"Max Prediction Timedelta"},"description":"Maximum lead time in minutes"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"description":"Maximum number of results to return","default":10000,"title":"Limit"},"description":"Maximum number of results to return"},{"name":"unit","in":"query","required":false,"schema":{"enum":["weather","mw"],"type":"string","description":"Output unit. 'weather': capacity-weighted raw weather. 'mw': apply power curves and return predicted MW.","default":"weather","title":"Unit"},"description":"Output unit. 'weather': capacity-weighted raw weather. 'mw': apply power curves and return predicted MW."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"responses":{"200":{"description":"Successfully retrieved aggregated forecast data","content":{"application/json":{"schema":{},"example":{"model":["ept2"],"init_time":["2025-01-15T00:00:00Z"],"time":["2025-01-15T06:00:00Z"],"prediction_timedelta":[360],"wind_speed_at_height_level_100m":[8.5]}}}},"400":{"description":"Invalid parameters (must specify market_zones OR country_keys)"},"401":{"description":"Authentication required"},"402":{"description":"Insufficient credits"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/forecast/market-aggregate/mw-zones":{"get":{"tags":["forecast"],"summary":"List market zones capable of MW output","description":"Return market zones that have both facility data and fitted power curves.\n\nThis is a metadata endpoint and does not require authentication.\n\nA zone is MW-capable for wind if it has operating wind facilities\n*and* corresponding entries in the wind power-curve tables.\nSame logic applies for solar.\n\nResults are cached in-memory for 5 minutes.","operationId":"get_mw_zones_v1_forecast_market_aggregate_mw_zones_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MWZonesResponse"}}}}}}},"/v1/simulate/forecast/available-forecasts":{"get":{"tags":["simulate"],"summary":"[Simulate] List available forecasts","operationId":"simulate_available_forecasts_v1_simulate_forecast_available_forecasts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Model"}},{"type":"null"}],"description":"Filter by specific model(s). If not provided, returns all accessible models with Clickhouse data source","title":"Models"},"description":"Filter by specific model(s). If not provided, returns all accessible models with Clickhouse data source"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return forecasts initialized on or after this datetime (optional)","examples":["2025-01-01T00:00:00Z","2025-01-01 00:00:00"],"title":"Since"},"description":"Only return forecasts initialized on or after this datetime (optional)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return forecasts initialized before this datetime (optional)","examples":["2025-10-01T00:00:00Z","2025-10-01 00:00:00"],"title":"Before"},"description":"Only return forecasts initialized before this datetime (optional)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Maximum number of results to return","default":20,"title":"Limit"},"description":"Maximum number of results to return"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableForecastsQueryResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/count":{"get":{"tags":["simulate"],"summary":"[Simulate] Count available forecasts","operationId":"simulate_count_v1_simulate_forecast_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"minItems":1,"description":"Filter by specific model(s)","title":"Models"},"description":"Filter by specific model(s)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only count forecasts initialized on or after this datetime (optional)","examples":["2025-01-01T00:00:00Z","2025-01-01 00:00:00"],"title":"Since"},"description":"Only count forecasts initialized on or after this datetime (optional)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only count forecasts initialized before this datetime (optional)","examples":["2025-10-01T00:00:00Z","2025-10-01 00:00:00"],"title":"Before"},"description":"Only count forecasts initialized before this datetime (optional)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotalNumberOfForecastsQueryResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/latest-init-time":{"get":{"tags":["simulate"],"summary":"[Simulate] Get latest forecast initialization time","operationId":"simulate_latest_init_time_v1_simulate_forecast_latest_init_time_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"minItems":1,"description":"Filter by specific model(s)","title":"Models"},"description":"Filter by specific model(s)"},{"name":"min_prediction_timedelta","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum required lead time in minutes","default":0,"title":"Min Prediction Timedelta"},"description":"Minimum required lead time in minutes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestForecastInfoQueryResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/meta":{"get":{"tags":["simulate"],"summary":"[Simulate] Get forecast models metadata","description":"Backtest twin of ``GET /v1/forecast/meta``.\n\nThe model catalogue is static config (not time-varying), so the response\nis identical to the live one.  ``as_of`` is required for API symmetry\nwith the rest of ``/simulate/*`` but has no effect on results.","operationId":"simulate_get_meta_v1_simulate_forecast_meta_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/Model"}},{"type":"null"}],"description":"Filter by specific model(s). If not provided, returns all models","title":"Models"},"description":"Filter by specific model(s). If not provided, returns all models"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaQueryResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/dissemination-status":{"get":{"tags":["simulate"],"summary":"[Simulate] Get forecast dissemination status","description":"Backtest twin of ``GET /v1/forecast/dissemination-status``.\n\nRestricts the dissemination snapshot to forecast runs visible at\n``as_of`` (i.e. disseminated at or before that timestamp).","operationId":"simulate_dissemination_status_v1_simulate_forecast_dissemination_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"minItems":1,"description":"Filter by specific model(s)","title":"Models"},"description":"Filter by specific model(s)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only analyze forecasts initialized on or after this datetime (optional)","examples":["2025-01-01T00:00:00Z","2025-01-01 00:00:00"],"title":"Since"},"description":"Only analyze forecasts initialized on or after this datetime (optional)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only analyze forecasts initialized before this datetime (optional)","examples":["2025-10-01T00:00:00Z","2025-10-01 00:00:00"],"title":"Before"},"description":"Only analyze forecasts initialized before this datetime (optional)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Maximum number of forecasts to analyze per model","default":100,"title":"Limit"},"description":"Maximum number of forecasts to analyze per model"},{"name":"offset","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Number of forecasts to skip for pagination","default":0,"title":"Offset"},"description":"Number of forecasts to skip for pagination"},{"name":"only_stats","in":"query","required":false,"schema":{"type":"boolean","description":"Only return delay statistics per init time (without forecast status)","default":false,"title":"Only Stats"},"description":"Only return delay statistics per init time (without forecast status)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisseminationStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query forecast data","operationId":"simulate_post_data_v1_simulate_forecast_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","description":"Enable streaming response (only with format=arrow).","default":false,"title":"Stream"},"description":"Enable streaming response (only with format=arrow)."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."},{"name":"X-Request-Source","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Request-Source"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForecastQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/index":{"post":{"tags":["simulate"],"summary":"[Simulate] Query forecast data index","operationId":"simulate_post_index_v1_simulate_forecast_index_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForecastIndexQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/":{"get":{"tags":["simulate"],"summary":"[Simulate] Query forecast data (simple)","operationId":"simulate_data_simple_v1_simulate_forecast__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"description":"List of forecast models to query","title":"Models"},"description":"List of forecast models to query"},{"name":"init_time","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"const":"latest","type":"string"}],"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast","title":"Init Time"},"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast"},{"name":"latitude","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"description":"Latitude of query point in degrees (-90 to 90)","title":"Latitude"},"description":"Latitude of query point in degrees (-90 to 90)"},{"name":"longitude","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"description":"Longitude of query point in degrees (-180 to 180)","title":"Longitude"},"description":"Longitude of query point in degrees (-180 to 180)"},{"name":"method","in":"query","required":false,"schema":{"enum":["nearest","bilinear"],"type":"string","description":"Interpolate or return the nearest value","default":"nearest","title":"Method"},"description":"Interpolate or return the nearest value"},{"name":"variables","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/CustomerVariable"}},{"type":"null"}],"description":"Weather variables to query","title":"Variables"},"description":"Weather variables to query"},{"name":"time_zone","in":"query","required":false,"schema":{"type":"string","description":"IANA time zone name for time formatting","default":"GMT","title":"Time Zone"},"description":"IANA time zone name for time formatting"},{"name":"include_time","in":"query","required":false,"schema":{"type":"boolean","description":"Include forecast valid time column","default":true,"title":"Include Time"},"description":"Include forecast valid time column"},{"name":"min_prediction_timedelta","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum lead time in minutes","default":0,"title":"Min Prediction Timedelta"},"description":"Minimum lead time in minutes"},{"name":"max_prediction_timedelta","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum lead time in minutes","title":"Max Prediction Timedelta"},"description":"Maximum lead time in minutes"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Maximum number of results to return","default":10000,"title":"Limit"},"description":"Maximum number of results to return"},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":5,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."},{"name":"include_ensemble_members","in":"query","required":false,"schema":{"type":"boolean","description":"When true, return per-ensemble-member rows instead of ensemble-mean rows. Not supported for ept2_e.","default":false,"title":"Include Ensemble Members"},"description":"When true, return per-ensemble-member rows instead of ensemble-mean rows. Not supported for ept2_e."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/market-aggregate":{"get":{"tags":["simulate"],"summary":"[Simulate] Query market-aggregated forecast data","operationId":"simulate_market_aggregate_v1_simulate_forecast_market_aggregate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."},{"name":"models","in":"query","required":true,"schema":{"type":"array","items":{"$ref":"#/components/schemas/Model"},"description":"List of forecast models to query","title":"Models"},"description":"List of forecast models to query"},{"name":"init_time","in":"query","required":true,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"const":"latest","type":"string"}],"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast","title":"Init Time"},"description":"Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast"},{"name":"weighting","in":"query","required":true,"schema":{"enum":["wind_capacity","solar_capacity","population"],"type":"string","description":"Weighting scheme for aggregation","title":"Weighting"},"description":"Weighting scheme for aggregation"},{"name":"market_zones","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Energy market zone codes","title":"Market Zones"},"description":"Energy market zone codes"},{"name":"country_keys","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"ISO country codes","title":"Country Keys"},"description":"ISO country codes"},{"name":"variables","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/CustomerVariable"}},{"type":"null"}],"description":"Weather variables to query","title":"Variables"},"description":"Weather variables to query"},{"name":"time_zone","in":"query","required":false,"schema":{"type":"string","description":"IANA time zone name for time formatting","default":"GMT","title":"Time Zone"},"description":"IANA time zone name for time formatting"},{"name":"include_time","in":"query","required":false,"schema":{"type":"boolean","description":"Include forecast valid time column","default":true,"title":"Include Time"},"description":"Include forecast valid time column"},{"name":"min_prediction_timedelta","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum lead time in minutes","default":0,"title":"Min Prediction Timedelta"},"description":"Minimum lead time in minutes"},{"name":"max_prediction_timedelta","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Maximum lead time in minutes","title":"Max Prediction Timedelta"},"description":"Maximum lead time in minutes"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":1,"description":"Maximum number of results to return","default":10000,"title":"Limit"},"description":"Maximum number of results to return"},{"name":"unit","in":"query","required":false,"schema":{"enum":["weather","mw"],"type":"string","description":"Output unit.","default":"weather","title":"Unit"},"description":"Output unit."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/forecast/market-aggregate/mw-zones":{"get":{"tags":["simulate"],"summary":"[Simulate] List market zones capable of MW output","description":"Backtest twin of ``GET /v1/forecast/market-aggregate/mw-zones``.\n\nThe set of zones with facility data and fitted power curves is static\nconfig (not time-varying), so the simulate response is identical to the\nlive one. ``as_of`` is accepted (and required, like every other simulate\nroute) so callers using the standard\n``/v1/<prefix>/* -> /v1/simulate/<prefix>/*`` rewrite at the api-server\nlayer don't get a 404, but it only validates the synthetic clock.","operationId":"simulate_get_mw_zones_v1_simulate_forecast_market_aggregate_mw_zones_get","parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs disseminated at or before this time are visible."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MWZonesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/station-benchmarks/metrics":{"post":{"tags":["benchmarks"],"summary":"Query station benchmark metrics","description":"Query benchmark metrics (RMSE, MAE, quantiles) for forecast models evaluated against weather station observations.\n\nUseful for:\n- Comparing forecast model performance\n- Evaluating model accuracy by region\n- Analyzing forecast errors over time\n\n**Multi-Model Support**:\n- Query multiple models in a single request to compare performance\n- Results include model name in each row for easy comparison\n\n**Geographic Filtering**:\n- `market_zone`: Filter by energy market zone (e.g., \"DE\", \"FR\")\n- `country_key`: Filter by country code (e.g., \"DE\", \"US\")\n\n**Note**: Either `station_ids` or `geo` must be provided (mutually exclusive).\n\n**Authentication**: Requires API key.\n\nFor more information on benchmark metrics, see [docs.jua.ai](https://docs.jua.ai).","operationId":"post_station_metrics_v1_station_benchmarks_metrics_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow IPC stream","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow IPC stream"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationBenchmarkQuery"},"examples":{"market_zone_query":{"summary":"Query by market zone","description":"Get benchmark metrics for Germany market zone","value":{"models":["ept2"],"geo":{"type":"market_zone","value":"DE"},"start_time":"2024-10-01T00:00:00Z","end_time":"2024-10-07T00:00:00Z","variables":["air_temperature_at_height_level_2m"]}},"multi_model_query":{"summary":"Compare multiple models","description":"Get benchmark metrics for multiple models to compare performance","value":{"models":["ept2","aifs"],"geo":{"type":"country_key","value":"US"},"start_time":"2024-10-01T00:00:00Z","end_time":"2024-10-07T00:00:00Z","variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"]}}}}}},"responses":{"200":{"description":"Successfully retrieved benchmark metrics","content":{"application/json":{"schema":{},"example":{"model":["ept2","ept2","aifs","aifs"],"prediction_timedelta":[60,60,60,60],"variable":["air_temperature_at_height_level_2m","air_temperature_at_height_level_2m","air_temperature_at_height_level_2m","air_temperature_at_height_level_2m"],"metric":["rmse","mae","bias","rmse"],"avg":[1.23,0.98,-0.12,1.45]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/station-benchmarks/available-dates":{"get":{"tags":["benchmarks"],"summary":"Get available benchmark dates","description":"Retrieve available dates for station benchmark data with optional filtering.\n\nUseful for:\n- Discovering available benchmark data\n- Finding recent benchmark dates\n- Planning benchmark queries\n\n**Authentication**: Requires API key.\n\nFor more information, see [docs.jua.ai](https://docs.jua.ai).","operationId":"get_available_dates_v1_station_benchmarks_available_dates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional model name to filter by","title":"Model"},"description":"Optional model name to filter by"},{"name":"days_lookback","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to look back from today","default":365,"title":"Days Lookback"},"description":"Number of days to look back from today"}],"responses":{"200":{"description":"Successfully retrieved available dates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableDatesResponse"},"example":{"dates":["2024-10-15","2024-10-14","2024-10-13"]}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"500":{"description":"Internal server error"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/station-benchmarks/metrics":{"post":{"tags":["simulate"],"summary":"[Simulate] Query station benchmark metrics","operationId":"simulate_post_station_metrics_v1_simulate_station_benchmarks_metrics_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only metric rows that would have been computable at this time (forecast disseminated AND station truth visible) are returned.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only metric rows that would have been computable at this time (forecast disseminated AND station truth visible) are returned."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow IPC stream","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow IPC stream"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationBenchmarkQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/station-benchmarks/available-dates":{"get":{"tags":["simulate"],"summary":"[Simulate] Get available benchmark dates","description":"Backtest twin of ``GET /v1/station-benchmarks/available-dates``.\n\nThe live route looks back ``days_lookback`` days from *today*; the\nsimulate route looks back from ``as_of`` and additionally caps the\nupper bound at ``as_of`` so we don't surface dates that wouldn't have\nbeen benchmarked yet at that point in time.","operationId":"simulate_get_available_dates_v1_simulate_station_benchmarks_available_dates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only metric rows that would have been computable at this time (forecast disseminated AND station truth visible) are returned.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only metric rows that would have been computable at this time (forecast disseminated AND station truth visible) are returned."},{"name":"model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional model name to filter by","title":"Model"},"description":"Optional model name to filter by"},{"name":"days_lookback","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Number of days to look back from ``as_of``","default":365,"title":"Days Lookback"},"description":"Number of days to look back from ``as_of``"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableDatesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entsoe/data":{"post":{"tags":["entsoe"],"summary":"Query ENTSOE timeseries data","description":"Query ENTSOE energy market timeseries data including:\n- Day-ahead and imbalance prices\n- Load and generation actuals and forecasts\n- Cross-border flows and scheduled exchanges\n- Wind and solar forecasts\n\n**Supported Variables:**\n- `day_ahead_prices`: Day-ahead electricity market prices\n- `imbalance_prices`: Imbalance settlement prices\n- `load_actual`: Actual total load\n- `load_forecast_da`: Day-ahead load forecast\n- `generation_actual`: Actual power generation by source type\n- `generation_forecast_da`: Day-ahead generation forecast\n- `crossborder_flows`: Physical cross-border power flows\n- `wind_solar_forecast_da`: Day-ahead wind/solar forecast\n- And more...\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.\n\nFor more information, see [docs.jua.ai](https://docs.jua.ai).","operationId":"post_entsoe_data_v1_entsoe_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntsoeTimeseriesQuery"},"examples":{"day_ahead_prices":{"summary":"Query day-ahead prices","description":"Get day-ahead electricity prices for Germany-Luxembourg","value":{"variables":["day_ahead_prices"],"zone_keys":["DE_LU"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-15T00:00:00Z"}},"generation_by_source":{"summary":"Query generation by source","description":"Get actual generation data for solar and wind","value":{"variables":["generation_actual"],"zone_keys":["DE_LU"],"psr_types":["Solar","Wind Onshore","Wind Offshore"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}},"crossborder_flows":{"summary":"Query cross-border flows","description":"Get physical power flows from Germany to France","value":{"variables":["crossborder_flows"],"zone_from":["DE_LU"],"zone_to":["FR"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}}}}}},"responses":{"200":{"description":"Successfully retrieved ENTSOE data","content":{"application/json":{"schema":{},"example":{"time":["2025-12-01T00:00:00Z","2025-12-01T01:00:00Z"],"variable_name":["day_ahead_prices","day_ahead_prices"],"zone_key":["DE_LU","DE_LU"],"zone_key_from":["",""],"zone_key_to":["",""],"psr_type":["",""],"other_type":["",""],"value":[85.5,82.3],"unit":["EUR/MWh","EUR/MWh"],"currency":["EUR","EUR"]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entsoe/pivoted":{"post":{"tags":["entsoe"],"summary":"Query ENTSOE data in pivoted wide-column format","description":"Returns ENTSO-E generation+load data pivoted into one column per PSR type, with optional derived columns (wind_total, renewables_total, residual_load) and linear interpolation — all computed inside ClickHouse.","operationId":"post_entsoe_pivoted_v1_entsoe_pivoted_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntsoePivotedQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entsoe/outages":{"post":{"tags":["entsoe"],"summary":"Query ENTSOE outages data","description":"Query ENTSOE infrastructure outages (generation units and transmission lines).\n\n**Features:**\n- **Source Types:** Generation units (power plants) or Transmission lines\n- **Time Filtering:** Real-time snapshots (active_at) or schedule ranges (start_from/to)\n- **Filtering:** Filter by zone, plant type, business type (planned/forced)\n- **Aggregation:** Optional capacity aggregation summaries\n\n**Authentication**: Requires API key.","operationId":"post_entsoe_outages_v1_entsoe_outages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntsoeOutagesQuery"},"examples":{"active_generation_outages":{"summary":"Active Generation Outages","description":"Get currently active generation outages in Germany","value":{"source_type":"generation_unit","biddingzone_domain":["DE_LU"],"active_at":"2025-12-01T12:00:00Z"}},"transmission_schedule":{"summary":"Transmission Schedule","description":"Planned maintenance for France-Germany lines","value":{"source_type":"transmission","in_domain":["FR"],"out_domain":["DE_LU"],"start_from":"2025-12-01T00:00:00Z","business_types":["A53"]}}}}}},"responses":{"200":{"description":"Successfully retrieved outages data","content":{"application/json":{"schema":{},"example":{}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entsoe/variables":{"get":{"tags":["entsoe"],"summary":"List available ENTSOE variables","description":"Get a list of available ENTSOE variable types with metadata including:\n- Variable name\n- Description\n- Unit of measurement\n- Whether variable uses zone_key, zone_from/zone_to, or psr_type filters\n\n**Authentication**: Requires API key.","operationId":"get_entsoe_variables_v1_entsoe_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional zone to filter variables by","title":"Zone Key"},"description":"Optional zone to filter variables by"}],"responses":{"200":{"description":"Successfully retrieved variable list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__entsoe__types__AvailableVariablesResult"},"example":{"variables":[{"name":"day_ahead_prices","description":"Day-ahead electricity market prices","unit":"EUR/MWh","uses_zone_key":true,"uses_zone_from_to":false,"uses_psr_type":false}]}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entsoe/zones":{"get":{"tags":["entsoe"],"summary":"List available ENTSOE zones","description":"Get a list of available zone codes (bidding zones, countries).\n\nOptionally filter by variable to see which zones have data for a specific variable.\n\n**Authentication**: Requires API key.","operationId":"get_entsoe_zones_v1_entsoe_zones_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"variable","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EntsoeVariable"},{"type":"null"}],"description":"Optional variable to filter zones by","title":"Variable"},"description":"Optional variable to filter zones by"}],"responses":{"200":{"description":"Successfully retrieved zone list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableZonesResult"},"example":{"zones":["AT","BE","CH","DE","DK_1","DK_2","FR","NL"]}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entsoe/psr-types":{"get":{"tags":["entsoe"],"summary":"List available PSR types","description":"Get a list of available PSR (Production Source Type) codes for generation data.\n\nPSR types include:\n- Solar, Wind Onshore, Wind Offshore\n- Nuclear, Hydro (various types)\n- Fossil fuels (Gas, Coal, Oil, etc.)\n- Biomass, Geothermal, etc.\n\n**Authentication**: Requires API key.","operationId":"get_entsoe_psr_types_v1_entsoe_psr_types_get","responses":{"200":{"description":"Successfully retrieved PSR type list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePsrTypesResult"},"example":{"psr_types":["Biomass","Fossil Gas","Nuclear","Solar","Wind Offshore","Wind Onshore"]}}}},"401":{"description":"Authentication required"}},"security":[{"HTTPBearer":[]}]}},"/v1/simulate/entsoe/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query ENTSOE timeseries data","operationId":"simulate_post_data_v1_simulate_entsoe_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time)."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntsoeTimeseriesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/entsoe/pivoted":{"post":{"tags":["simulate"],"summary":"[Simulate] Query ENTSOE pivoted data","operationId":"simulate_post_pivoted_v1_simulate_entsoe_pivoted_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time)."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntsoePivotedQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/entsoe/outages":{"post":{"tags":["simulate"],"summary":"[Simulate] Query ENTSOE outages","operationId":"simulate_post_outages_v1_simulate_entsoe_outages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time)."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntsoeOutagesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/entsoe/variables":{"get":{"tags":["simulate"],"summary":"[Simulate] List ENTSOE variables visible at as_of","operationId":"simulate_get_variables_v1_simulate_entsoe_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time)."},{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional zone to filter variables by","title":"Zone Key"},"description":"Optional zone to filter variables by"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__entsoe__types__AvailableVariablesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/entsoe/zones":{"get":{"tags":["simulate"],"summary":"[Simulate] List ENTSOE zones visible at as_of","operationId":"simulate_get_zones_v1_simulate_entsoe_zones_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time)."},{"name":"variable","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EntsoeVariable"},{"type":"null"}],"description":"Optional variable to filter zones by","title":"Variable"},"description":"Optional variable to filter zones by"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableZonesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/entsoe/psr-types":{"get":{"tags":["simulate"],"summary":"[Simulate] List ENTSOE PSR types visible at as_of","operationId":"simulate_get_psr_types_v1_simulate_entsoe_psr_types_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ENTSO-E publication time is on or before this timestamp are visible. For outages, this filters by the TSO publish time (created_doc_time)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePsrTypesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/netztransparenz/data":{"post":{"tags":["netztransparenz"],"summary":"Query Netztransparenz timeseries data","description":"Query German TSO transparency data (netztransparenz.de) including:\n- NRV balance (grid control cooperation)\n- Balancing energy prices (reBAP, ID-AEP, AEP estimator)\n- Reserve power activation (aFRR, mFRR, FCR)\n- Renewable energy marketing and forecasts\n- Emergency measures (additional measures, emergency assistance, interruptible loads)\n\n**TSOs (Transmission System Operators):**\n- 50Hertz (Eastern Germany)\n- Amprion (Western Germany)\n- TenneT TSO (Northern Germany)\n- TransnetBW (Southern Germany)\n- gesamt (Germany-wide aggregate)\n\n**Variables with Per-TSO Data:**\nReserve activation (aktivierte_srl_*, aktivierte_mrl_*, srl_optimierung_*, mrl_optimierung_*,\ndifference_*, prl_*, zusatzmassnahmen_*, nothilfe_*), interruptible loads (abschaltbare_lasten_*),\nand control area balance (rz_saldo_*) have data for all 4 individual TSOs plus the gesamt aggregate.\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.","operationId":"post_netztransparenz_data_v1_netztransparenz_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetztransparenzTimeseriesQuery"},"examples":{"nrv_balance":{"summary":"Query NRV balance","description":"Get operational NRV balance data","value":{"variables":["nrv_saldo_betrieblich"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-02T00:00:00Z"}},"balancing_prices":{"summary":"Query balancing prices","description":"Get reBAP balancing energy prices","value":{"variables":["rebap_qualitaetsgesichert"],"directions":["positive","negative"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}},"reserve_activation_by_tso":{"summary":"Query reserve activation by TSO","description":"Get secondary reserve activation data with direction filter","value":{"variables":["aktivierte_srl_betrieblich"],"directions":["positive","negative"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-02T00:00:00Z"}},"renewable_forecasts":{"summary":"Query renewable generation forecasts","description":"Get day-ahead solar and wind forecasts","value":{"variables":["hochrechnung_solar","hochrechnung_wind"],"start_time":"2025-12-01T00:00:00Z","aggregation":"hourly"}}}}}},"responses":{"200":{"description":"Successfully retrieved Netztransparenz data","content":{"application/json":{"schema":{},"example":{"time":["2025-12-01T00:00:00Z","2025-12-01T00:15:00Z"],"ts_end":["2025-12-01T00:15:00Z","2025-12-01T00:30:00Z"],"variable_name":["nrv_saldo_betrieblich","nrv_saldo_betrieblich"],"subcategory":["",""],"value":[150.5,-82.3],"value_name":["",""],"unit":["MW","MW"],"tso":["",""],"direction":["",""]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/netztransparenz/variables":{"get":{"tags":["netztransparenz"],"summary":"List available Netztransparenz variables","description":"Get a list of available Netztransparenz variable types with metadata including:\n- Variable name\n- Description\n- Unit of measurement\n- Whether variable uses TSO or subcategory filters\n\n**Variable Categories:**\n- Renewable Marketing (vermarktung_*)\n- Day-Ahead Forecast (hochrechnung_*)\n- NRV Balance (nrv_saldo_*, rz_saldo_*)\n- Balancing Prices (rebap_qualitaetsgesichert, idaep, aep_schaetzer_*)\n- Reserve Activation (aktivierte_srl_*, aktivierte_mrl_*, prl_*)\n- Emergency Measures (zusatzmassnahmen_*, nothilfe_*, abschaltbare_lasten_*)\n\n**Authentication**: Requires API key.","operationId":"get_netztransparenz_variables_v1_netztransparenz_variables_get","responses":{"200":{"description":"Successfully retrieved variable list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__netztransparenz__types__AvailableVariablesResult"},"example":{"variables":[{"name":"nrv_saldo_betrieblich","description":"NRV balance - operational (real-time)","unit":"MW","uses_tso":false,"uses_subcategory":false,"uses_direction":false}]}}}},"401":{"description":"Authentication required"}},"security":[{"HTTPBearer":[]}]}},"/v1/netztransparenz/tsos":{"get":{"tags":["netztransparenz"],"summary":"List available TSOs","description":"Get a list of available German Transmission System Operators (TSOs).\n\nThe four TSOs operating the German high-voltage grid, plus the aggregate:\n- **50Hertz** - Eastern Germany\n- **Amprion** - Western Germany\n- **TenneT TSO** - Northern Germany\n- **TransnetBW** - Southern Germany\n- **gesamt** - Germany-wide aggregate (sum of all TSOs)\n\nOptionally filter by variable to see which TSOs have data for a specific variable.\nMany reserve activation variables now have per-TSO data in addition to the aggregate.\n\n**Authentication**: Requires API key.","operationId":"get_netztransparenz_tsos_v1_netztransparenz_tsos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"variable","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/NetztransparenzVariable"},{"type":"null"}],"description":"Optional variable to filter TSOs by","title":"Variable"},"description":"Optional variable to filter TSOs by"}],"responses":{"200":{"description":"Successfully retrieved TSO list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableTsosResult"},"example":{"tsos":["50Hertz","Amprion","TenneT TSO","TransnetBW","gesamt"]}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/netztransparenz/subcategories":{"get":{"tags":["netztransparenz"],"summary":"List available subcategories","description":"Get a list of available subcategories (technology types) for data that is\nbroken down by energy source.\n\nSubcategories include:\n- **solar** - Solar photovoltaic\n- **wind_onshore** - Onshore wind\n- **wind_offshore** - Offshore wind\n- **wind** - Combined wind (used in some endpoints)\n\n**Authentication**: Requires API key.","operationId":"get_netztransparenz_subcategories_v1_netztransparenz_subcategories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"variable","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/NetztransparenzVariable"},{"type":"null"}],"description":"Optional variable to filter subcategories by","title":"Variable"},"description":"Optional variable to filter subcategories by"}],"responses":{"200":{"description":"Successfully retrieved subcategory list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableSubcategoriesResult"},"example":{"subcategories":["solar","wind_onshore","wind_offshore"]}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/netztransparenz/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query Netztransparenz timeseries data","description":"Backtest the /netztransparenz/data endpoint.  Rows whose estimated publication time on www.netztransparenz.de exceeds ``as_of`` are filtered out, so the response reflects what a caller would have seen at that wall-clock time.","operationId":"simulate_post_netztransparenz_data_v1_simulate_netztransparenz_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetztransparenzTimeseriesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/netztransparenz/variables":{"get":{"tags":["simulate"],"summary":"[Simulate] List available Netztransparenz variables","description":"Return only variables with at least one row whose estimated publication time is <= ``as_of``.","operationId":"simulate_get_netztransparenz_variables_v1_simulate_netztransparenz_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__netztransparenz__types__AvailableVariablesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/netztransparenz/tsos":{"get":{"tags":["simulate"],"summary":"[Simulate] List available TSOs","description":"Return only TSOs that had at least one published row at ``as_of``.","operationId":"simulate_get_netztransparenz_tsos_v1_simulate_netztransparenz_tsos_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible."},{"name":"variable","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/NetztransparenzVariable"},{"type":"null"}],"description":"Optional variable to filter TSOs by","title":"Variable"},"description":"Optional variable to filter TSOs by"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableTsosResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/netztransparenz/subcategories":{"get":{"tags":["simulate"],"summary":"[Simulate] List available subcategories","description":"Return only subcategories that had at least one published row at ``as_of``.","operationId":"simulate_get_netztransparenz_subcategories_v1_simulate_netztransparenz_subcategories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only Netztransparenz rows whose estimated publication time is <= this timestamp are visible."},{"name":"variable","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/NetztransparenzVariable"},{"type":"null"}],"description":"Optional variable to filter subcategories by","title":"Variable"},"description":"Optional variable to filter subcategories by"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableSubcategoriesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/climatology/data":{"post":{"tags":["climatology"],"summary":"Query climatology data over a time range","description":"Query ERA5 WMO climatology data (smoothed 30-year daily averages from 1991-2020) over a specified time range.\n\nClimatology provides historical baseline values for each (day_of_year, hour, latitude, longitude)\ncombination, useful for:\n- Comparing forecasts against historical norms\n- Detecting anomalies in weather patterns\n- Energy market baseline calculations\n\n**Time Range Query:**\nSpecify `start_time` and `end_time` to get climatology data for each hour in the range.\nThe climatology values are matched by day of year and hour, then combined with the full\ndatetime from your time range. This allows you to get a \"typical\" weather pattern\nfor any date range based on historical averages.\n\n**Query Dimensions:**\n- `geo`: Location filter (point, bounding_box, polygon, market_zone, country_key)\n- `start_time`: Start of the time range (inclusive)\n- `end_time`: End of the time range (exclusive)\n- `variables`: Weather variables to retrieve\n\n**Time Aggregation:**\nUse `group_by` to control time aggregation:\n- `hourly`: Hourly resolution (default)\n- `daily`: Daily averages\n- `weekly`: Weekly averages\n\nFor daily/weekly aggregations, use `timezone` to specify the timezone for day/week boundaries\n(e.g., \"Europe/Berlin\"). Defaults to UTC if not specified.\n\n**Spatial Aggregation:**\nAdd `market_zone`, `country_key`, or `point` to `group_by` to preserve geographic dimensions.\nUse `aggregation` to specify the aggregation function (e.g., `[\"avg\"]`).\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.\n\n**Billing**: Free - no credit charges.\n\nFor more information, see [docs.jua.ai](https://docs.jua.ai).","operationId":"post_climatology_data_v1_climatology_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeRangeClimatologyQuery"},"examples":{"point_query_day":{"summary":"Query single point for one day","description":"Get climatology for Berlin for a full day","value":{"geo":{"type":"point","value":[[52.52,13.405]],"method":"nearest"},"start_time":"2024-01-15T00:00:00Z","end_time":"2024-01-16T00:00:00Z","variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"]}},"point_query_week":{"summary":"Query single point for one week","description":"Get climatology for Berlin for a week in summer","value":{"geo":{"type":"point","value":[[52.52,13.405]],"method":"nearest"},"start_time":"2024-07-01T00:00:00Z","end_time":"2024-07-08T00:00:00Z","variables":["air_temperature_at_height_level_2m","surface_downwelling_shortwave_flux_sum_1h"]}},"market_zone_query":{"summary":"Market zone query","description":"Get climatology for Germany market zone","value":{"geo":{"type":"market_zone","value":"DE"},"start_time":"2024-06-01T00:00:00Z","end_time":"2024-06-02T00:00:00Z","variables":["air_temperature_at_height_level_2m"]}},"daily_aggregation":{"summary":"Daily aggregation query","description":"Get daily climatology averages for a market zone","value":{"geo":{"type":"market_zone","value":"DE"},"start_time":"2024-06-01T00:00:00Z","end_time":"2024-06-08T00:00:00Z","variables":["air_temperature_at_height_level_2m"],"group_by":["daily","market_zone"],"aggregation":["avg"],"timezone":"Europe/Berlin"}},"weekly_aggregation":{"summary":"Weekly aggregation query","description":"Get weekly climatology averages","value":{"geo":{"type":"point","value":[[52.52,13.405]]},"start_time":"2024-01-01T00:00:00Z","end_time":"2024-02-01T00:00:00Z","variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"],"group_by":["weekly"],"aggregation":["avg"]}}}}}},"responses":{"200":{"description":"Successfully retrieved climatology data","content":{"application/json":{"schema":{},"example":{"time":["2024-01-15T00:00:00Z","2024-01-15T01:00:00Z","2024-01-15T02:00:00Z"],"latitude":[52.5,52.5,52.5],"longitude":[13.5,13.5,13.5],"air_temperature_at_height_level_2m":[271.5,271.2,270.8]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/climatology/variables":{"get":{"tags":["climatology"],"summary":"List available climatology variables","description":"Get a list of weather variables available in the ERA5 climatology dataset.\n\nThese variables represent 30-year averages (1991-2020) computed from ERA5 reanalysis data.\n\n**Authentication**: Requires API key.","operationId":"get_climatology_variables_v1_climatology_variables_get","responses":{"200":{"description":"Successfully retrieved variable list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/query_engine__climatology__router__AvailableVariablesResult"},"example":{"variables":[{"name":"air_temperature_at_height_level_2m","description":"Air temperature at 2m height"},{"name":"wind_speed_at_height_level_10m","description":"Wind speed at 10m height"}]}}}},"401":{"description":"Authentication required"}},"security":[{"HTTPBearer":[]}]}},"/v1/climatology/meta":{"get":{"tags":["climatology"],"summary":"Get climatology dataset metadata","description":"Get metadata about the ERA5 WMO climatology dataset including:\n- Grid resolution and dimensions\n- Available days of year and hours\n- List of variables\n\n**Authentication**: Requires API key.","operationId":"get_climatology_meta_v1_climatology_meta_get","responses":{"200":{"description":"Successfully retrieved metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClimatologyMetaResult"},"example":{"description":"ERA5 WMO 30-year climatology (1991-2020)","period":"1991-2020","grid_resolution":"0.25° x 0.25°","num_latitudes":720,"num_longitudes":1440,"days_of_year":[1,2,3,4,5],"hours":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],"variables":["air_temperature_at_height_level_2m","..."]}}}},"401":{"description":"Authentication required"}},"security":[{"HTTPBearer":[]}]}},"/v1/simulate/climatology/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query climatology data over a time range","operationId":"simulate_post_climatology_data_v1_simulate_climatology_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Climatology is a static dataset, so this parameter has no effect on results, but it is still validated (future values rejected) for uniformity with other ``/simulate/*`` endpoints.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Climatology is a static dataset, so this parameter has no effect on results, but it is still validated (future values rejected) for uniformity with other ``/simulate/*`` endpoints."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeRangeClimatologyQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/climatology/variables":{"get":{"tags":["simulate"],"summary":"[Simulate] List available climatology variables","description":"Backtest twin of ``GET /v1/climatology/variables`` (static dataset).","operationId":"simulate_get_climatology_variables_v1_simulate_climatology_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Climatology is a static dataset, so this parameter has no effect on results, but it is still validated (future values rejected) for uniformity with other ``/simulate/*`` endpoints.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Climatology is a static dataset, so this parameter has no effect on results, but it is still validated (future values rejected) for uniformity with other ``/simulate/*`` endpoints."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/query_engine__climatology__router__AvailableVariablesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/climatology/meta":{"get":{"tags":["simulate"],"summary":"[Simulate] Get climatology dataset metadata","description":"Backtest twin of ``GET /v1/climatology/meta`` (static dataset).","operationId":"simulate_get_climatology_meta_v1_simulate_climatology_meta_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Climatology is a static dataset, so this parameter has no effect on results, but it is still validated (future values rejected) for uniformity with other ``/simulate/*`` endpoints.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Climatology is a static dataset, so this parameter has no effect on results, but it is still validated (future values rejected) for uniformity with other ``/simulate/*`` endpoints."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClimatologyMetaResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/station-data/data":{"post":{"tags":["station-data"],"summary":"Query station observation data","description":"Query weather station observation data including:\n- Temperature, dew point, wind speed/direction\n- Atmospheric pressure (surface and MSL)\n- Precipitation accumulations (1h, 3h, 6h, 12h, 24h)\n- Solar radiation and cloud cover\n\n**Filtering Options:**\n- `station_ids`: List of specific station IDs\n- `bounding_box`: Geographic bounds (min/max lat/lon)\n- `variables`: Subset of observation variables\n\n**Temporal Aggregation:**\n- `none`: Raw observations (default)\n- `hourly`: Hourly averages\n- `daily`: Daily averages\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.\n\nFor more information, see [docs.jua.ai](https://docs.jua.ai).","operationId":"post_station_data_v1_station_data_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationDataQuery"},"examples":{"basic_query":{"summary":"Query temperature for stations","description":"Get temperature data for specific stations using ICAO codes","value":{"station_ids":["EDDT"],"variables":["air_temperature_at_height_level_2m"],"start_time":"2025-08-01T00:00:00Z","end_time":"2025-08-07T00:00:00Z"}},"bounding_box_query":{"summary":"Query by geographic region","description":"Get all variables for stations in Europe","value":{"bounding_box":{"min_lat":35.0,"max_lat":70.0,"min_lon":-10.0,"max_lon":40.0},"start_time":"2024-01-01T00:00:00Z","end_time":"2024-01-02T00:00:00Z","aggregation":"hourly"}},"daily_aggregation":{"summary":"Daily aggregated data","description":"Get daily average temperature","value":{"station_ids":["EDDT","EDDH"],"variables":["air_temperature_at_height_level_2m","precipitation_amount_sum_24h"],"start_time":"2024-01-01T00:00:00Z","end_time":"2024-01-31T00:00:00Z","aggregation":"daily"}}}}}},"responses":{"200":{"description":"Successfully retrieved station data","content":{"application/json":{"schema":{},"example":{"time":["2024-01-01T00:00:00Z","2024-01-01T01:00:00Z"],"station":["EDDT","EDDT"],"name":["BERLIN-TEGEL","BERLIN-TEGEL"],"latitude":[52.56,52.56],"longitude":[13.28,13.28],"air_temperature_at_height_level_2m":[275.5,274.8]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/station-data/stations":{"get":{"tags":["station-data"],"summary":"List available stations","description":"Get a list of available weather stations with their metadata.\n\nOptionally filter by geographic bounding box.\n\n**Authentication**: Requires API key.","operationId":"get_stations_v1_station_data_stations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"min_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"description":"Minimum latitude for bounding box filter","title":"Min Lat"},"description":"Minimum latitude for bounding box filter"},{"name":"max_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"description":"Maximum latitude for bounding box filter","title":"Max Lat"},"description":"Maximum latitude for bounding box filter"},{"name":"min_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"description":"Minimum longitude for bounding box filter","title":"Min Lon"},"description":"Minimum longitude for bounding box filter"},{"name":"max_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"description":"Maximum longitude for bounding box filter","title":"Max Lon"},"description":"Maximum longitude for bounding box filter"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":10000,"minimum":1},{"type":"null"}],"description":"Maximum number of stations to return","title":"Limit"},"description":"Maximum number of stations to return"}],"responses":{"200":{"description":"Successfully retrieved station list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableStationsResult"},"example":{"stations":[{"station":"EDDT","name":"BERLIN-TEGEL","latitude":52.56,"longitude":13.28,"elevation":3.0}],"total_count":1}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/station-data/variables":{"get":{"tags":["station-data"],"summary":"List available variables","description":"Get a list of available observation variables with metadata including:\n- Variable name\n- Description\n- Unit of measurement\n\n**Authentication**: Requires API key.","operationId":"get_variables_v1_station_data_variables_get","responses":{"200":{"description":"Successfully retrieved variable list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__station_data__types__AvailableVariablesResult"},"example":{"variables":[{"name":"air_temperature_at_height_level_2m","description":"Air temperature at 2 meters above ground","unit":"K"},{"name":"wind_speed_at_height_level_10m","description":"Wind speed at 10 meters above ground","unit":"m/s"}]}}}},"401":{"description":"Authentication required"}},"security":[{"HTTPBearer":[]}]}},"/v1/simulate/station-data/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query station observation data","operationId":"simulate_post_station_data_v1_simulate_station_data_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only observations whose estimated publication time is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only observations whose estimated publication time is on or before this timestamp are visible."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow format"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StationDataQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/station-data/stations":{"get":{"tags":["simulate"],"summary":"[Simulate] List available stations","description":"Backtest twin of ``GET /v1/station-data/stations``.\n\nThe station catalogue is treated as static metadata, so the response is\nidentical to the live one. ``as_of`` is required for API symmetry and\nis validated (future values rejected) for uniformity.","operationId":"simulate_get_stations_v1_simulate_station_data_stations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only observations whose estimated publication time is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only observations whose estimated publication time is on or before this timestamp are visible."},{"name":"min_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"description":"Minimum latitude for bounding box filter","title":"Min Lat"},"description":"Minimum latitude for bounding box filter"},{"name":"max_lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"description":"Maximum latitude for bounding box filter","title":"Max Lat"},"description":"Maximum latitude for bounding box filter"},{"name":"min_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"description":"Minimum longitude for bounding box filter","title":"Min Lon"},"description":"Minimum longitude for bounding box filter"},{"name":"max_lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"description":"Maximum longitude for bounding box filter","title":"Max Lon"},"description":"Maximum longitude for bounding box filter"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":10000,"minimum":1},{"type":"null"}],"description":"Maximum number of stations to return","title":"Limit"},"description":"Maximum number of stations to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableStationsResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/station-data/variables":{"get":{"tags":["simulate"],"summary":"[Simulate] List available variables","description":"Backtest twin of ``GET /v1/station-data/variables`` (static catalogue).","operationId":"simulate_get_variables_v1_simulate_station_data_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only observations whose estimated publication time is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only observations whose estimated publication time is on or before this timestamp are visible."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__station_data__types__AvailableVariablesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reanalysis/data":{"post":{"tags":["reanalysis"],"summary":"Query reanalysis data","description":"Query reanalysis data from models like ARCO ERA5.\n\nReanalysis data provides historical weather analysis at a specific time (unlike forecasts\nwhich have init_time + prediction_timedelta dimensions). This is useful for:\n- Historical weather analysis\n- Training and validating machine learning models\n- Comparing forecasts against actuals\n\n**Query Dimensions:**\n- `models`: Reanalysis model(s) to query (e.g., [\"arco_era5\"])\n- `geo`: Location filter (point, bounding_box, polygon, market_zone, country_key)\n- `time`: Time(s) to query - \"latest\", single datetime, list of datetimes, or time range\n- `variables`: Weather variables to retrieve\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.\n\nFor more information, see [docs.jua.ai](https://docs.jua.ai).","operationId":"post_reanalysis_data_v1_reanalysis_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow"},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","description":"If true, stream the response as an Apache Arrow IPC stream. Overrides 'format' to 'arrow'.","default":false,"title":"Stream"},"description":"If true, stream the response as an Apache Arrow IPC stream. Overrides 'format' to 'arrow'."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReanalysisQuery"},"examples":{"point_query_day":{"summary":"Query single point for one day","description":"Get reanalysis data for Berlin for a full day","value":{"models":["arco_era5"],"geo":{"type":"point","value":[[52.52,13.405]],"method":"nearest"},"time":{"start":"2024-01-15T00:00:00Z","end":"2024-01-16T00:00:00Z"},"variables":["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"]}},"point_query_latest":{"summary":"Query latest available data","description":"Get the most recent reanalysis data for Berlin","value":{"models":["arco_era5"],"geo":{"type":"point","value":[[52.52,13.405]],"method":"nearest"},"time":"latest","variables":["air_temperature_at_height_level_2m"]}},"market_zone_query":{"summary":"Market zone query","description":"Get reanalysis data for Germany market zone","value":{"models":["arco_era5"],"geo":{"type":"market_zone","value":"DE"},"time":{"start":"2024-06-01T00:00:00Z","end":"2024-06-02T00:00:00Z"},"variables":["air_temperature_at_height_level_2m"]}},"aggregation_query":{"summary":"Aggregation query","description":"Get daily averages for a market zone","value":{"models":["arco_era5"],"geo":{"type":"market_zone","value":"DE"},"time":{"start":"2024-06-01T00:00:00Z","end":"2024-06-08T00:00:00Z"},"variables":["air_temperature_at_height_level_2m"],"group_by":["time__date","market_zone"],"aggregation":["avg"]}}}}}},"responses":{"200":{"description":"Successfully retrieved reanalysis data","content":{"application/json":{"schema":{},"example":{"time":["2024-01-15T00:00:00Z","2024-01-15T01:00:00Z","2024-01-15T02:00:00Z"],"latitude":[52.5,52.5,52.5],"longitude":[13.5,13.5,13.5],"air_temperature_at_height_level_2m":[271.5,271.2,270.8]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"402":{"description":"Insufficient credits"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reanalysis/meta":{"get":{"tags":["reanalysis"],"summary":"Get reanalysis dataset metadata","description":"Get metadata about available reanalysis models including:\n- Model names and display names\n- Grid resolution and temporal resolution\n- Available variables\n\n**Authentication**: Requires API key.","operationId":"get_reanalysis_meta_v1_reanalysis_meta_get","responses":{"200":{"description":"Successfully retrieved metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReanalysisMetaResult"},"example":{"models":[{"name":"arco_era5","display_name":"ARCO ERA5","grid_resolution":"0.25° x 0.25°","temporal_resolution_minutes":60,"variables":["air_temperature_at_height_level_2m","..."]}]}}}},"401":{"description":"Authentication required"}},"security":[{"HTTPBearer":[]}]}},"/v1/reanalysis/latest-timestamp":{"get":{"tags":["reanalysis"],"summary":"Get latest available timestamp","description":"Get the latest available timestamp for each specified reanalysis model.\n\nThis is useful for knowing what data is currently available without making a full query.\n\n**Authentication**: Requires API key.","operationId":"get_latest_timestamp_v1_reanalysis_latest_timestamp_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"List of reanalysis models to check","examples":["arco_era5"],"default":["arco_era5"],"title":"Models"},"description":"List of reanalysis models to check"}],"responses":{"200":{"description":"Successfully retrieved latest timestamps","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestTimestampResult"},"example":{"timestamps":{"arco_era5":"2024-01-15T12:00:00Z"}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reanalysis/available-timestamps":{"get":{"tags":["reanalysis"],"summary":"Get available timestamps","description":"Get a list of available timestamps for each specified reanalysis model within an optional\ntime range.\n\n**Authentication**: Requires API key.","operationId":"get_available_timestamps_v1_reanalysis_available_timestamps_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"models","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"List of reanalysis models to check","examples":["arco_era5"],"default":["arco_era5"],"title":"Models"},"description":"List of reanalysis models to check"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return timestamps >= this time (inclusive)","title":"Since"},"description":"Only return timestamps >= this time (inclusive)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return timestamps < this time (exclusive)","title":"Before"},"description":"Only return timestamps < this time (exclusive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of timestamps to return","default":100,"title":"Limit"},"description":"Maximum number of timestamps to return"}],"responses":{"200":{"description":"Successfully retrieved available timestamps","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableTimestampsResult"},"example":{"timestamps":{"arco_era5":["2024-01-15T00:00:00Z","2024-01-15T01:00:00Z","2024-01-15T02:00:00Z"]}}}}},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/reanalysis/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query reanalysis data","operationId":"simulate_post_reanalysis_data_v1_simulate_reanalysis_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow","default":"json","title":"Format"},"description":"Response format: 'json' for columnar JSON or 'arrow' for Apache Arrow"},{"name":"stream","in":"query","required":false,"schema":{"type":"boolean","description":"If true, stream the response as an Apache Arrow IPC stream. Overrides 'format' to 'arrow'.","default":false,"title":"Stream"},"description":"If true, stream the response as an Apache Arrow IPC stream. Overrides 'format' to 'arrow'."},{"name":"request_credit_limit","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Maximum credits allowed for this request","default":50,"title":"Request Credit Limit"},"description":"Maximum credits allowed for this request"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReanalysisQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/reanalysis/meta":{"get":{"tags":["simulate"],"summary":"[Simulate] Get reanalysis dataset metadata","description":"Backtest twin of ``GET /v1/reanalysis/meta``.\n\nThe model catalogue is static config, so the response is identical to\nthe live one. ``as_of`` is accepted for API symmetry but has no effect.","operationId":"simulate_get_reanalysis_meta_v1_simulate_reanalysis_meta_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReanalysisMetaResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/reanalysis/latest-timestamp":{"get":{"tags":["simulate"],"summary":"[Simulate] Get latest available timestamp","description":"Get the latest available timestamp visible at ``as_of``.\n\nApplies the ERA5T publication-lag bound: only timestamps whose\nestimated upstream publication time is at or before ``as_of`` are\nconsidered visible.","operationId":"simulate_get_latest_timestamp_v1_simulate_reanalysis_latest_timestamp_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible."},{"name":"models","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"List of reanalysis models to check","examples":["arco_era5"],"default":["arco_era5"],"title":"Models"},"description":"List of reanalysis models to check"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestTimestampResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/reanalysis/available-timestamps":{"get":{"tags":["simulate"],"summary":"[Simulate] Get available timestamps","description":"Get timestamps that would have been visible at ``as_of``.\n\nThe caller's ``before`` is intersected with the publication-lag bound\n(``as_of - PUBLICATION_DELAY``) so we never return timestamps that\nweren't queryable yet.","operationId":"simulate_get_available_timestamps_v1_simulate_reanalysis_available_timestamps_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose estimated ERA5T preliminary publication time (`time + 5 days`) is on or before this timestamp are visible."},{"name":"models","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"List of reanalysis models to check","examples":["arco_era5"],"default":["arco_era5"],"title":"Models"},"description":"List of reanalysis models to check"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return timestamps >= this time (inclusive)","title":"Since"},"description":"Only return timestamps >= this time (inclusive)"},{"name":"before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only return timestamps < this time (exclusive)","title":"Before"},"description":"Only return timestamps < this time (exclusive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of timestamps to return","default":100,"title":"Limit"},"description":"Maximum number of timestamps to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableTimestampsResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/power-forecast/data":{"post":{"tags":["power-forecast"],"summary":"Query power forecast data","description":"Query power forecast prediction data for renewable energy generation (Solar, Wind, etc.).\n\n**Dimensions:**\n- `zone_key`: Country/region code (e.g. \"DE\")\n- `psr_type`: Generation source type (e.g. \"Solar\", \"Wind Onshore\")\n\n**Query Modes (mutually exclusive):**\n\n1. **Horizon mode** (init_time-centric):\n   - `init_time`: Specific init time(s) or relative tokens (`latest`, `latest-N`)\n   - `max_prediction_timedelta`: Limit forecast horizon (minutes)\n\n2. **Time range mode** (time-centric):\n   - `start_time` / `end_time`: Filter by computed forecast time\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.","operationId":"post_power_forecast_data_v1_power_forecast_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}. Units are always sent via X-Variable-Units header regardless."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerForecastQuery"},"examples":{"latest_solar_de":{"summary":"Latest solar forecast for Germany","description":"Get the latest solar power forecast for Germany","value":{"zone_keys":["DE"],"psr_types":["Solar"],"init_time":"latest"}},"specific_init_time":{"summary":"Specific init time with horizon","description":"Query a specific forecast run with 48h horizon","value":{"zone_keys":["DE"],"psr_types":["Wind Onshore"],"init_time":["2025-12-01T00:00:00Z"],"max_prediction_timedelta":2880}},"time_range":{"summary":"Time range query","description":"Get forecasts covering a specific time period","value":{"zone_keys":["DE"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-03T00:00:00Z"}}}}}},"responses":{"200":{"description":"Successfully retrieved power forecast data","content":{"application/json":{"schema":{},"example":{"zone_key":["DE","DE"],"psr_type":["Solar","Solar"],"init_time":["2025-12-01T00:00:00Z","2025-12-01T00:00:00Z"],"prediction_timedelta":[60,120],"time":["2025-12-01T01:00:00Z","2025-12-01T02:00:00Z"],"value":[1250.5,1320.3]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/power-forecast/zones":{"get":{"tags":["power-forecast"],"summary":"List available power forecast zones","description":"Get a list of available zone codes that have power forecast data.\n\nThis is a metadata endpoint and does not require authentication.","operationId":"get_power_forecast_zones_v1_power_forecast_zones_get","responses":{"200":{"description":"Successfully retrieved zone list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableZonesResult"},"example":{"zones":["DE"]}}}}}}},"/v1/power-forecast/psr-types":{"get":{"tags":["power-forecast"],"summary":"List available PSR types","description":"Get a list of available PSR (Production Source) types for power forecasts.\n\nThis is a metadata endpoint and does not require authentication.","operationId":"get_power_forecast_psr_types_v1_power_forecast_psr_types_get","parameters":[{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Optional zone key(s) to filter PSR types by","title":"Zone Key"},"description":"Optional zone key(s) to filter PSR types by"}],"responses":{"200":{"description":"Successfully retrieved PSR type list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePsrTypesResult"},"example":{"psr_types":["Solar","Wind Onshore"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/power-forecast/fallback-status":{"get":{"tags":["power-forecast"],"summary":"Check if latest forecast uses fallback initial conditions","description":"Check whether the most recent power forecast was generated using fallback\ninitial conditions (i.e. ENTSO-E source data was unavailable).\n\nReturns `{\"is_fallback\": true}` when the latest forecast used synthetic\nhistory, and `{\"is_fallback\": false}` otherwise.\n\nThis is a metadata endpoint and does not require authentication.","operationId":"get_fallback_status_v1_power_forecast_fallback_status_get","parameters":[{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional zone key to check (e.g. 'DE'). If omitted, checks across all zones.","title":"Zone Key"},"description":"Optional zone key to check (e.g. 'DE'). If omitted, checks across all zones."}],"responses":{"200":{"description":"Fallback status","content":{"application/json":{"schema":{},"example":{"is_fallback":false}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/power-forecast/fallback-init-times":{"get":{"tags":["power-forecast"],"summary":"List init times that used fallback initial conditions","description":"Return init times whose forecasts were generated with fallback (estimated)\ninitial conditions.  The frontend uses this to flag specific model runs\nin the chart legend as potentially degraded.\n\nThis is a metadata endpoint and does not require authentication.","operationId":"get_fallback_init_times_v1_power_forecast_fallback_init_times_get","parameters":[{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional zone key to filter by (e.g. 'DE'). If omitted, returns fallback init times across all zones.","title":"Zone Key"},"description":"Optional zone key to filter by (e.g. 'DE'). If omitted, returns fallback init times across all zones."}],"responses":{"200":{"description":"List of fallback init times","content":{"application/json":{"schema":{},"example":{"fallback_init_times":["2026-03-24T14:00:00Z","2026-03-25T06:00:00Z"]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/power-forecast/init-times":{"get":{"tags":["power-forecast"],"summary":"List available init times","description":"Get available forecast init times with their max prediction horizon.\n\nUsed by the dashboard to populate the init_time dropdown when creating a\npower forecast data source.  Results are ordered newest-first.\n\nWhen `include_availability=true` is passed along with zone_key and psr_type\nfilters, the response includes an `availability_by_init_time` field that\nmaps each init_time to the list of (zone_key, psr_type) combinations that\nare available for it. This allows determining which specific combinations\nare missing for excluded init times without additional API calls.\n\nThis is a metadata endpoint and does not require authentication.","operationId":"get_power_forecast_init_times_v1_power_forecast_init_times_get","parameters":[{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Zone key(s) to filter init times by","title":"Zone Key"},"description":"Zone key(s) to filter init times by"},{"name":"psr_type","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"PSR type(s) to filter by. When multiple are given, only init_times available for ALL of them are returned.","title":"Psr Type"},"description":"PSR type(s) to filter by. When multiple are given, only init_times available for ALL of them are returned."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of init times to return","default":192,"title":"Limit"},"description":"Maximum number of init times to return"},{"name":"order","in":"query","required":false,"schema":{"enum":["desc","asc"],"type":"string","description":"Sort direction for init_time: 'desc' (newest first, default) or 'asc' (oldest first)","default":"desc","title":"Order"},"description":"Sort direction for init_time: 'desc' (newest first, default) or 'asc' (oldest first)"},{"name":"include_availability","in":"query","required":false,"schema":{"type":"boolean","description":"When true and zone_key/psr_type are provided, include per-init-time availability breakdown showing which zone/PSR combinations are available for each init_time.","default":false,"title":"Include Availability"},"description":"When true and zone_key/psr_type are provided, include per-init-time availability breakdown showing which zone/PSR combinations are available for each init_time."}],"responses":{"200":{"description":"Successfully retrieved init times","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableInitTimesResult"},"example":{"init_times":[{"init_time":"2025-12-01T18:00:00Z","max_prediction_timedelta":3720},{"init_time":"2025-12-01T12:00:00Z","max_prediction_timedelta":3720}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/power-forecast/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query power forecast data","description":"Backtest the /power-forecast/data endpoint. Forecast runs whose estimated upstream publication time exceeds ``as_of`` are filtered out, so the response reflects what a live caller would have seen at that wall-clock time.","operationId":"simulate_post_power_forecast_data_v1_simulate_power_forecast_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``)."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerForecastQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/power-forecast/zones":{"get":{"tags":["simulate"],"summary":"[Simulate] List available power forecast zones","operationId":"simulate_get_power_forecast_zones_v1_simulate_power_forecast_zones_get","parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableZonesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/power-forecast/psr-types":{"get":{"tags":["simulate"],"summary":"[Simulate] List available PSR types","operationId":"simulate_get_power_forecast_psr_types_v1_simulate_power_forecast_psr_types_get","parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``)."},{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Optional zone key(s) to filter PSR types by","title":"Zone Key"},"description":"Optional zone key(s) to filter PSR types by"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePsrTypesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/power-forecast/init-times":{"get":{"tags":["simulate"],"summary":"[Simulate] List available init times","operationId":"simulate_get_power_forecast_init_times_v1_simulate_power_forecast_init_times_get","parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``)."},{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Zone key(s) to filter init times by","title":"Zone Key"},"description":"Zone key(s) to filter init times by"},{"name":"psr_type","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"PSR type(s) to filter by","title":"Psr Type"},"description":"PSR type(s) to filter by"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum number of init times to return","default":192,"title":"Limit"},"description":"Maximum number of init times to return"},{"name":"order","in":"query","required":false,"schema":{"enum":["desc","asc"],"type":"string","description":"Sort direction for init_time","default":"desc","title":"Order"},"description":"Sort direction for init_time"},{"name":"include_availability","in":"query","required":false,"schema":{"type":"boolean","description":"When true and zone_key/psr_type are provided, include per-init-time availability breakdown.","default":false,"title":"Include Availability"},"description":"When true and zone_key/psr_type are provided, include per-init-time availability breakdown."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableInitTimesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/power-forecast/fallback-status":{"get":{"tags":["simulate"],"summary":"[Simulate] Check if latest forecast uses fallback ICs","description":"Reproduce /fallback-status as of a synthetic wall-clock time.\n\nUses the dissemination filter to restrict step_status to runs that\nwere upstream-visible at ``as_of``, then returns the ``forecast_ic``\nflag of the latest such run.","operationId":"simulate_get_fallback_status_v1_simulate_power_forecast_fallback_status_get","parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``)."},{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional zone key (e.g. 'DE')","title":"Zone Key"},"description":"Optional zone key (e.g. 'DE')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/power-forecast/fallback-init-times":{"get":{"tags":["simulate"],"summary":"[Simulate] List init times that used fallback ICs","description":"Reproduce /fallback-init-times as of a synthetic wall-clock time.","operationId":"simulate_get_fallback_init_times_v1_simulate_power_forecast_fallback_init_times_get","parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``)."},{"name":"zone_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional zone key to filter by (e.g. 'DE')","title":"Zone Key"},"description":"Optional zone key to filter by (e.g. 'DE')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/uk-power/data":{"post":{"tags":["uk-power"],"summary":"Query UK power generation data","description":"Query UK power generation timeseries data.\n\n**Variables** (aggregated totals):\n- `wind`: Total wind generation (transmission + embedded)\n- `solar`: Total solar generation\n- `wind_forecast`: Day-ahead total wind forecast (NESO)\n- `solar_forecast`: Day-ahead solar forecast (NESO)\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.","operationId":"post_uk_power_data_v1_uk_power_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UkPowerTimeseriesQuery"},"examples":{"actuals":{"summary":"Query wind and solar actuals","description":"Get total wind and solar generation","value":{"variables":["wind","solar"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}},"forecasts":{"summary":"Query day-ahead forecasts","description":"Get NESO day-ahead wind and solar forecasts","value":{"variables":["wind_forecast","solar_forecast"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}}}}}},"responses":{"200":{"description":"Successfully retrieved UK power data","content":{"application/json":{"schema":{},"example":{"time":["2025-12-01T00:00:00Z","2025-12-01T00:30:00Z"],"variable_name":["wind","wind"],"value":[12500.0,12700.0],"unit":["MW","MW"]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/uk-power/variables":{"get":{"tags":["uk-power"],"summary":"List available UK power variables","description":"Get a list of available UK power generation variables with metadata.\n\n**Authentication**: Requires API key.","operationId":"get_uk_power_variables_v1_uk_power_variables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__uk_power__types__AvailableVariablesResult"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/uk-power/sources":{"get":{"tags":["uk-power"],"summary":"List available UK power data sources","description":"Get a list of available data sources for UK power generation.\n\n**Authentication**: Requires API key.","operationId":"get_uk_power_sources_v1_uk_power_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__uk_power__types__AvailableSourcesResult"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/simulate/uk-power/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query UK power generation data","description":"Query UK power generation timeseries as it would have been visible at\n``as_of``.  Same body and response shape as ``POST /uk-power/data``;\nonly rows whose estimated upstream publication time is at or before\n``as_of`` participate.  Publication-time rules per variable live in\n``jua_query_v2.uk_power.dissemination``.\n\n**Authentication**: Requires API key.","operationId":"simulate_post_uk_power_data_v1_simulate_uk_power_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC).  Only rows whose estimated upstream publication time is at or before this time are visible — i.e. data that an honest live caller would have seen on Elexon / PV_Live / NESO at ``as_of``.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC).  Only rows whose estimated upstream publication time is at or before this time are visible — i.e. data that an honest live caller would have seen on Elexon / PV_Live / NESO at ``as_of``."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UkPowerTimeseriesQuery"},"examples":{"actuals":{"summary":"Query wind and solar actuals as-of a past date","description":"Reproduce wind and solar generation as visible at the given as_of (e.g. before later revisions landed).","value":{"variables":["wind","solar"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}},"forecasts":{"summary":"Query day-ahead forecasts as-of a past date","description":"Reproduce NESO day-ahead wind/solar forecasts as visible at the given as_of.","value":{"variables":["wind_forecast","solar_forecast"],"start_time":"2025-12-01T00:00:00Z","end_time":"2025-12-07T00:00:00Z"}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/uk-power/variables":{"get":{"tags":["simulate"],"summary":"[Simulate] List UK power variables visible at as_of","operationId":"simulate_get_uk_power_variables_v1_simulate_uk_power_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC).  Only rows whose estimated upstream publication time is at or before this time are visible — i.e. data that an honest live caller would have seen on Elexon / PV_Live / NESO at ``as_of``.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC).  Only rows whose estimated upstream publication time is at or before this time are visible — i.e. data that an honest live caller would have seen on Elexon / PV_Live / NESO at ``as_of``."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__uk_power__types__AvailableVariablesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/uk-power/sources":{"get":{"tags":["simulate"],"summary":"[Simulate] List UK power data sources visible at as_of","operationId":"simulate_get_uk_power_sources_v1_simulate_uk_power_sources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC).  Only rows whose estimated upstream publication time is at or before this time are visible — i.e. data that an honest live caller would have seen on Elexon / PV_Live / NESO at ``as_of``.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC).  Only rows whose estimated upstream publication time is at or before this time are visible — i.e. data that an honest live caller would have seen on Elexon / PV_Live / NESO at ``as_of``."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__uk_power__types__AvailableSourcesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/epex-spot/data":{"post":{"tags":["epex-spot"],"summary":"Query EPEX SPOT market data","description":"Query EPEX SPOT electricity market data including:\n- Intraday continuous prices (VWAP, last, low, high) and volumes\n- Intraday continuous price indices: IDFULL (full session), ID1 (last 1h\n  before delivery), ID3 (last 3h before delivery) — all at 60-minute resolution\n- Day-ahead auction clearing prices and volumes (quarter-hourly)\n- Intraday auction (IDA1/IDA2/IDA3) prices and volumes\n- Day-ahead official index prices\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.","operationId":"post_epex_spot_data_v1_epex_spot_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpexSpotTimeseriesQuery"},"examples":{"da_prices":{"summary":"Query day-ahead prices","description":"Get DA clearing prices for Germany","value":{"variables":["da_price"],"start_time":"2026-04-01T00:00:00Z","end_time":"2026-04-14T00:00:00Z"}},"intraday_continuous":{"summary":"Query intraday continuous VWAP","description":"Get VWAP and volumes from continuous trading","value":{"variables":["continuous_weighted_avg_price","continuous_volume_buy","continuous_volume_sell"],"start_time":"2026-04-10T00:00:00Z","end_time":"2026-04-14T00:00:00Z"}},"all_auction_prices":{"summary":"Compare DA vs IDA prices","description":"Get DA, IDA1, IDA2, IDA3 clearing prices","value":{"variables":["da_price","ida1_price","ida2_price","ida3_price"],"start_time":"2026-04-12T00:00:00Z","end_time":"2026-04-13T00:00:00Z"}},"intraday_indices":{"summary":"Compare IDFULL vs ID1 vs ID3 indices","description":"Get the 60-minute intraday continuous indices: IDFULL (full session VWAP), ID1 (last 1h before delivery), ID3 (last 3h before delivery).","value":{"variables":["continuous_idfull_price","continuous_id1_price","continuous_id3_price"],"start_time":"2026-04-12T00:00:00Z","end_time":"2026-04-13T00:00:00Z"}}}}}},"responses":{"200":{"description":"Successfully retrieved EPEX SPOT data","content":{"application/json":{"schema":{},"example":{"time":["2026-04-12T22:00:00Z","2026-04-12T23:00:00Z"],"variable_name":["da_price","da_price"],"value":[95.1,98.05],"unit":["EUR/MWh","EUR/MWh"],"market_area":["DE","DE"],"auction":["DA","DA"]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/epex-spot/variables":{"get":{"tags":["epex-spot"],"summary":"List available EPEX SPOT variables","description":"Get a list of available EPEX SPOT variables with metadata including:\n- Variable name\n- Description\n- Unit of measurement\n- Source table\n\n**Authentication**: Requires API key.","operationId":"get_epex_spot_variables_v1_epex_spot_variables_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__epex_spot__types__AvailableVariablesResult"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/simulate/epex-spot/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EPEX SPOT market data","operationId":"simulate_post_epex_spot_data_v1_simulate_epex_spot_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. Continuous statistics and indices use ``delivery_end + 5 min``; each auction uses its CET/CEST gate-closure time. See ``jua_query_v2.epex_spot.dissemination``.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. Continuous statistics and indices use ``delivery_end + 5 min``; each auction uses its CET/CEST gate-closure time. See ``jua_query_v2.epex_spot.dissemination``."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpexSpotTimeseriesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/epex-spot/variables":{"get":{"tags":["simulate"],"summary":"[Simulate] List available EPEX SPOT variables","description":"Backtest twin of ``GET /v1/epex-spot/variables`` (static catalogue).","operationId":"simulate_get_epex_spot_variables_v1_simulate_epex_spot_variables_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. Continuous statistics and indices use ``delivery_end + 5 min``; each auction uses its CET/CEST gate-closure time. See ``jua_query_v2.epex_spot.dissemination``.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. Continuous statistics and indices use ``delivery_end + 5 min``; each auction uses its CET/CEST gate-closure time. See ``jua_query_v2.epex_spot.dissemination``."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__epex_spot__types__AvailableVariablesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/climate-indices/data":{"post":{"tags":["climate-indices"],"summary":"Query climate indices data","description":"Query climate oscillation indices timeseries data.\n\n**Available indices** (43 series):\n- Atmospheric oscillations: NAO, AO, AAO, PNA, PDO, QBO, AMO, SOI, WPO, EPO, GBI\n- Teleconnections: EA, SCAND, EAWR, TNH\n- ENSO: ENSO_NINO12, ENSO_NINO3, ENSO_NINO4, ENSO_NINO34 (and their _ANOM variants), MEI, ONI\n- Atlantic SST: TNA, TSA, AMM\n- MJO (Wheeler-Hendon RMM, daily): MJO_RMM1, MJO_RMM2, MJO_PHASE, MJO_AMPLITUDE\n- MJO (CPC velocity-potential, pentad): MJO_20E..MJO_10W (10 longitude series)\n- Solar: SUNSPOT\n\n**Sources**: noaa_psl, noaa_cpc, bom, sidc\n\n**Temporal resolution**: monthly for most indices; daily for BOM RMM MJO; pentad (5-day) for CPC VP-MJO.\n\n**Response Formats:**\n- `json`: Columnar JSON format `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.","operationId":"post_climate_indices_data_v1_climate_indices_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClimateIndicesTimeseriesQuery"},"examples":{"enso_nao":{"summary":"Query ENSO and NAO indices","description":"Get ENSO Nino 3.4 and NAO for a time range","value":{"indices":["ENSO_NINO34","NAO"],"start_time":"2020-01-01T00:00:00Z","end_time":"2025-01-01T00:00:00Z"}},"all_recent":{"summary":"Query all indices (recent)","description":"Get all available indices from 2024 onwards","value":{"start_time":"2024-01-01T00:00:00Z"}}}}}},"responses":{"200":{"description":"Successfully retrieved climate indices data","content":{"application/json":{"schema":{},"example":{"time":["2020-01-01T00:00:00Z","2020-02-01T00:00:00Z"],"index_name":["NAO","NAO"],"value":[0.56,-0.3],"unit":["index","index"]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/climate-indices/indices":{"get":{"tags":["climate-indices"],"summary":"List available climate indices","description":"Get a list of available climate oscillation indices with metadata.\n\n**Authentication**: Requires API key.","operationId":"get_climate_indices_list_v1_climate_indices_indices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableIndicesResult"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/climate-indices/sources":{"get":{"tags":["climate-indices"],"summary":"List available climate indices data sources","description":"Get a list of available data sources for climate indices.\n\n**Authentication**: Requires API key.","operationId":"get_climate_indices_sources_v1_climate_indices_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__climate_indices__types__AvailableSourcesResult"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/simulate/climate-indices/data":{"post":{"tags":["simulate"],"summary":"[Simulate] Query climate indices data","operationId":"simulate_post_climate_indices_data_v1_simulate_climate_indices_data_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only climate-index rows whose estimated upstream publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only climate-index rows whose estimated upstream publication time is <= this timestamp are visible."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"},{"name":"include_units","in":"query","required":false,"schema":{"type":"boolean","description":"When true, JSON responses are wrapped in {data, units}.","default":false,"title":"Include Units"},"description":"When true, JSON responses are wrapped in {data, units}."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClimateIndicesTimeseriesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/climate-indices/indices":{"get":{"tags":["simulate"],"summary":"[Simulate] List available climate indices","operationId":"simulate_get_climate_indices_list_v1_simulate_climate_indices_indices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only climate-index rows whose estimated upstream publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only climate-index rows whose estimated upstream publication time is <= this timestamp are visible."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableIndicesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/climate-indices/sources":{"get":{"tags":["simulate"],"summary":"[Simulate] List available climate indices data sources","operationId":"simulate_get_climate_indices_sources_v1_simulate_climate_indices_sources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only climate-index rows whose estimated upstream publication time is <= this timestamp are visible.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only climate-index rows whose estimated upstream publication time is <= this timestamp are visible."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__climate_indices__types__AvailableSourcesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-power/settlements":{"post":{"tags":["eex-power"],"summary":"Query EEX power settlement prices","description":"Query EEX Group power derivatives end-of-day settlement prices.\n\nData covers **33 European market areas** (DE, FR, AT, BE, NL, CH, CZ, SK, PL, RO, HU,\nHR, RS, SI, BG, IT, GR, ES, IE, GB, SE1-SE4, DK1, DK2, FI, NO1-NO5, Phelix, Nordic).\n\nSettlements are published daily at ~18:30 UTC on weekdays. Historical data available\nfrom November 2020. Includes futures and options (use `exclude_options=true` for\nfutures only).\n\n**Response Formats:**\n- `json`: Columnar JSON `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream for efficient processing\n\n**Authentication**: Requires API key.","operationId":"post_eex_settlements_v1_eex_power_settlements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexSettlementsQuery"},"examples":{"de_base_month":{"summary":"DE base month futures","description":"Get German base month settlement prices","value":{"areas":["DE"],"short_codes":["DEBM"],"start_date":"2026-04-01","end_date":"2026-04-08","exclude_options":true}},"all_de_futures":{"summary":"All DE futures (no options)","description":"Get all German power futures settlements","value":{"areas":["DE"],"start_date":"2026-04-07","end_date":"2026-04-07","exclude_options":true}},"multi_area":{"summary":"Multi-area base month","description":"Base month settlements across DE, FR, AT","value":{"areas":["DE","FR","AT"],"short_codes":["DEBM","F7BM","ATBM"],"start_date":"2026-04-07","end_date":"2026-04-07"}}}}}},"responses":{"200":{"description":"Successfully retrieved EEX settlement data","content":{"application/json":{"schema":{},"example":{"trd_date":["2026-04-07","2026-04-07"],"area":["DE","DE"],"short_code":["DEBM","DEBM"],"maturity":[202605,202606],"settlement_px":[85.5,82.3],"currency":["EUR","EUR"]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-power/trades":{"post":{"tags":["eex-power"],"summary":"Query EEX power individual trades","description":"Query individual exchange trades for EEX Group power derivatives.\n\nTrades are polled every 5 minutes during trading hours. The `from_broken_spread`\nand `volume_only` flags identify spread/cascade legs (no independent price).\nUse `exclude_spread_legs=true` for outright trades only.\n\n**Authentication**: Requires API key.","operationId":"post_eex_trades_v1_eex_power_trades_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexTradesQuery"},"examples":{"de_outrights_today":{"summary":"DE outright trades today","description":"Get all outright DE trades for a single day","value":{"areas":["DE"],"trd_date_start":"2026-04-08","trd_date_end":"2026-04-08","exclude_spread_legs":true,"exclude_cancellations":true}},"debm_trades":{"summary":"DEBM trades with pagination","description":"Get base month futures trades, newest first","value":{"areas":["DE"],"short_codes":["DEBM"],"trd_date_start":"2026-04-01","trd_date_end":"2026-04-08","exclude_spread_legs":true,"exclude_cancellations":true,"order_by":["tm__desc"],"pagination":{"limit":100,"offset":0}}}}}}},"responses":{"200":{"description":"Successfully retrieved EEX trade data","content":{"application/json":{"schema":{},"example":{"trd_date":["2026-04-08"],"tm":["2026-04-08T09:15:00.123456Z"],"area":["DE"],"short_code":["DEBM"],"maturity":[202605],"px":[85.5],"trd_vol":[1000.0]}},"application/vnd.apache.arrow.stream":{"description":"Apache Arrow IPC stream format"}}},"400":{"description":"Invalid query parameters"},"401":{"description":"Authentication required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-power/areas":{"get":{"tags":["eex-power"],"summary":"List available EEX market areas","description":"Get a list of market area codes with data in ClickHouse.\n\n**Authentication**: Requires API key.","operationId":"get_eex_areas_v1_eex_power_areas_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table","in":"query","required":false,"schema":{"enum":["settlements","trades"],"type":"string","description":"Which table to query for areas ('settlements' or 'trades')","default":"settlements","title":"Table"},"description":"Which table to query for areas ('settlements' or 'trades')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_power__types__AvailableAreasResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-power/short-codes":{"get":{"tags":["eex-power"],"summary":"List available EEX ShortCodes","description":"Get a list of EEX product ShortCodes (e.g. DEBM, DEBQ, DEBY) with data in ClickHouse.\n\n**Authentication**: Requires API key.","operationId":"get_eex_short_codes_v1_eex_power_short_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table","in":"query","required":false,"schema":{"enum":["settlements","trades"],"type":"string","description":"Which table to query for ShortCodes ('settlements' or 'trades')","default":"settlements","title":"Table"},"description":"Which table to query for ShortCodes ('settlements' or 'trades')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_power__types__AvailableShortCodesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-power/settlements":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EEX power settlement prices","operationId":"simulate_eex_settlements_v1_simulate_eex_power_settlements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexSettlementsQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-power/trades":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EEX power individual trades","operationId":"simulate_eex_trades_v1_simulate_eex_power_trades_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","description":"Response format: 'json' or 'arrow'","default":"json","title":"Format"},"description":"Response format: 'json' or 'arrow'"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexTradesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-power/areas":{"get":{"tags":["simulate"],"summary":"[Simulate] List available EEX market areas","operationId":"simulate_eex_areas_v1_simulate_eex_power_areas_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule."},{"name":"table","in":"query","required":false,"schema":{"enum":["settlements","trades"],"type":"string","description":"Which table to query for areas ('settlements' or 'trades')","default":"settlements","title":"Table"},"description":"Which table to query for areas ('settlements' or 'trades')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_power__types__AvailableAreasResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-power/short-codes":{"get":{"tags":["simulate"],"summary":"[Simulate] List available EEX ShortCodes","operationId":"simulate_eex_short_codes_v1_simulate_eex_power_short_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_power.dissemination`` for the per-dataset rule."},{"name":"table","in":"query","required":false,"schema":{"enum":["settlements","trades"],"type":"string","description":"Which table to query for ShortCodes ('settlements' or 'trades')","default":"settlements","title":"Table"},"description":"Which table to query for ShortCodes ('settlements' or 'trades')"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_power__types__AvailableShortCodesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-gas/derivatives/settlements":{"post":{"tags":["eex-gas"],"summary":"Query EEX gas derivatives settlement prices","description":"Query EEX Group natural gas derivatives end-of-day settlement prices.\n\nData covers **18 European gas hubs** (TTF, THE, CEGHVTP, NBP, PEG, PSV, PVB,\nETF, CZVTP, ZTP, FIN, LTU, LVA-EST, JKM, and others).\n\nSettlements are published daily at ~19:00 UTC on weekdays. Historical data\navailable from November 2020.\n\n**Response Formats:**\n- `json`: Columnar JSON `{column: [values], ...}`\n- `arrow`: Apache Arrow IPC stream","operationId":"post_gas_derivatives_settlements_v1_eex_gas_derivatives_settlements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasDerivativesSettlementsQuery"},"examples":{"ttf_base_month":{"summary":"TTF base month futures","value":{"areas":["TTF"],"short_codes":["G3BM"],"start_date":"2026-04-01","end_date":"2026-04-08","exclude_options":true}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-gas/derivatives/trades":{"post":{"tags":["eex-gas"],"summary":"Query EEX gas derivatives individual trades","description":"Query individual exchange trades for EEX Group natural gas derivatives.\n\nTrades are polled every 5 minutes during trading hours.","operationId":"post_gas_derivatives_trades_v1_eex_gas_derivatives_trades_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasDerivativesTradesQuery"},"examples":{"ttf_outrights":{"summary":"TTF outright trades today","value":{"areas":["TTF"],"trd_date_start":"2026-04-08","trd_date_end":"2026-04-08","exclude_spread_legs":true,"exclude_cancellations":true}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-gas/spot/settlements":{"post":{"tags":["eex-gas"],"summary":"Query EEX gas spot settlement prices","description":"Query EEX Group natural gas spot end-of-day settlement prices.\n\nData covers **41 gas spot areas**. Typically 1 settlement per area per day\n(DayAhead contract). Published daily at ~19:15 UTC on weekdays.","operationId":"post_gas_spot_settlements_v1_eex_gas_spot_settlements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasSpotSettlementsQuery"},"examples":{"ttf_da_spot":{"summary":"TTF DayAhead spot settlements","value":{"areas":["TTF"],"short_codes":["TTFDA"],"start_date":"2026-04-01","end_date":"2026-04-08"}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-gas/spot/trades":{"post":{"tags":["eex-gas"],"summary":"Query EEX gas spot individual trades","description":"Query individual spot trades for EEX Group natural gas.\n\nGas spot trades have delivery_day, start/end times for delivery windows,\nand group_id/trd_version for trade history tracking.","operationId":"post_gas_spot_trades_v1_eex_gas_spot_trades_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasSpotTradesQuery"},"examples":{"ttf_spot_trades":{"summary":"TTF spot trades today","value":{"areas":["TTF"],"trd_date_start":"2026-04-08","trd_date_end":"2026-04-08","exclude_cancellations":true}}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-gas/areas":{"get":{"tags":["eex-gas"],"summary":"List available EEX gas market areas","operationId":"get_eex_gas_areas_v1_eex_gas_areas_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table","in":"query","required":false,"schema":{"enum":["derivatives_settlements","derivatives_trades","spot_settlements","spot_trades"],"type":"string","default":"derivatives_settlements","title":"Table"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_gas__types__AvailableAreasResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eex-gas/short-codes":{"get":{"tags":["eex-gas"],"summary":"List available EEX gas ShortCodes","operationId":"get_eex_gas_short_codes_v1_eex_gas_short_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"table","in":"query","required":false,"schema":{"enum":["derivatives_settlements","derivatives_trades","spot_settlements","spot_trades"],"type":"string","default":"derivatives_settlements","title":"Table"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_gas__types__AvailableShortCodesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-gas/derivatives/settlements":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EEX gas derivatives settlement prices","operationId":"simulate_post_gas_derivatives_settlements_v1_simulate_eex_gas_derivatives_settlements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasDerivativesSettlementsQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-gas/derivatives/trades":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EEX gas derivatives individual trades","operationId":"simulate_post_gas_derivatives_trades_v1_simulate_eex_gas_derivatives_trades_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasDerivativesTradesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-gas/spot/settlements":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EEX gas spot settlement prices","operationId":"simulate_post_gas_spot_settlements_v1_simulate_eex_gas_spot_settlements_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasSpotSettlementsQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-gas/spot/trades":{"post":{"tags":["simulate"],"summary":"[Simulate] Query EEX gas spot individual trades","operationId":"simulate_post_gas_spot_trades_v1_simulate_eex_gas_spot_trades_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule."},{"name":"format","in":"query","required":false,"schema":{"enum":["json","arrow"],"type":"string","default":"json","title":"Format"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EexGasSpotTradesQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}},"application/vnd.apache.arrow.stream":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-gas/areas":{"get":{"tags":["simulate"],"summary":"[Simulate] List available EEX gas market areas","operationId":"simulate_get_eex_gas_areas_v1_simulate_eex_gas_areas_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule."},{"name":"table","in":"query","required":false,"schema":{"enum":["derivatives_settlements","derivatives_trades","spot_settlements","spot_trades"],"type":"string","default":"derivatives_settlements","title":"Table"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_gas__types__AvailableAreasResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/simulate/eex-gas/short-codes":{"get":{"tags":["simulate"],"summary":"[Simulate] List available EEX gas ShortCodes","operationId":"simulate_get_eex_gas_short_codes_v1_simulate_eex_gas_short_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"as_of","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule.","title":"As Of"},"description":"Required. Synthetic invocation time for backtesting (ISO 8601 UTC). Only rows whose modelled publication time is on or before this datetime are visible. See ``jua_query_v2.eex_gas.dissemination`` for the per-dataset rule."},{"name":"table","in":"query","required":false,"schema":{"enum":["derivatives_settlements","derivatives_trades","spot_settlements","spot_trades"],"type":"string","default":"derivatives_settlements","title":"Table"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/jua_query_v2__eex_gas__types__AvailableShortCodesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Aggregation":{"properties":{"aggregation":{"type":"string","enum":["avg","std","min","max","sum","count","median","quantile","argmin","argmax"],"title":"Aggregation","description":"Aggregation function name.","examples":["avg","min","max","quantile","argmin","argmax"]},"parameters":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Parameters","description":"Parameters for parameterized aggregations.Example: 'quantile': [0.5] for median, [0.95] for 95th percentile, etc.","examples":[[0.5],[0.95]]},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"Specific variables to aggregate. If None, applies to all variables in the query"}},"type":"object","required":["aggregation"],"title":"Aggregation","description":"Aggregation function to apply when grouping forecast data.\n\nSupported aggregations:\n- Basic: avg, std, min, max, sum, count, median\n- Parameterized: quantile_(p), argmin_(col), argmax_(col)\n\nFor argmin/argmax, the parameter is the column to return, and the variable\nis the column to find the min/max of. Example:\n    argmin_(time)__temperature -> returns time when temperature is minimum\n\nCan be applied to specific variables or all variables in the query."},"AvailableDatesResponse":{"properties":{"dates":{"items":{"type":"string"},"type":"array","title":"Dates"}},"type":"object","required":["dates"],"title":"AvailableDatesResponse","description":"Response containing available benchmark dates."},"AvailableForecastsQueryResult":{"properties":{"forecasts_per_model":{"additionalProperties":{"items":{"$ref":"#/components/schemas/ForecastInfo"},"type":"array"},"propertyNames":{"$ref":"#/components/schemas/Model"},"type":"object","title":"Forecasts Per Model","description":"Mapping of model identifiers to lists of available forecasts"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination information if results were paginated"}},"type":"object","required":["forecasts_per_model"],"title":"AvailableForecastsQueryResult","description":"Result containing available forecast times per model."},"AvailableIndicesResult":{"properties":{"indices":{"items":{"$ref":"#/components/schemas/ClimateIndexInfo"},"type":"array","title":"Indices"}},"type":"object","required":["indices"],"title":"AvailableIndicesResult","description":"Result for available climate indices query."},"AvailableInitTimesResult":{"properties":{"init_times":{"items":{"$ref":"#/components/schemas/InitTimeInfo"},"type":"array","title":"Init Times"},"availability_by_init_time":{"anyOf":[{"additionalProperties":{"items":{"prefixItems":[{"type":"string"},{"type":"string"}],"type":"array","maxItems":2,"minItems":2},"type":"array"},"type":"object"},{"type":"null"}],"title":"Availability By Init Time"}},"type":"object","required":["init_times"],"title":"AvailableInitTimesResult","description":"Result for available init times query."},"AvailablePsrTypesResult":{"properties":{"psr_types":{"items":{"type":"string"},"type":"array","title":"Psr Types"}},"type":"object","required":["psr_types"],"title":"AvailablePsrTypesResult","description":"Result for available PSR types query."},"AvailableStationsResult":{"properties":{"stations":{"items":{"$ref":"#/components/schemas/StationInfo"},"type":"array","title":"Stations"},"total_count":{"type":"integer","title":"Total Count","description":"Total number of stations"}},"type":"object","required":["stations","total_count"],"title":"AvailableStationsResult","description":"Result containing list of available stations."},"AvailableSubcategoriesResult":{"properties":{"subcategories":{"items":{"type":"string"},"type":"array","title":"Subcategories"}},"type":"object","required":["subcategories"],"title":"AvailableSubcategoriesResult","description":"Result for available subcategories query."},"AvailableTimestampsResult":{"properties":{"timestamps":{"additionalProperties":{"items":{"type":"string","format":"date-time"},"type":"array"},"type":"object","title":"Timestamps"}},"type":"object","required":["timestamps"],"title":"AvailableTimestampsResult","description":"Result containing available timestamps per model."},"AvailableTsosResult":{"properties":{"tsos":{"items":{"type":"string"},"type":"array","title":"Tsos"}},"type":"object","required":["tsos"],"title":"AvailableTsosResult","description":"Result for available TSOs query."},"AvailableZonesResult":{"properties":{"zones":{"items":{"type":"string"},"type":"array","title":"Zones"}},"type":"object","required":["zones"],"title":"AvailableZonesResult","description":"Result for available zones query."},"BoundingBox":{"properties":{"min_lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Min Lat","description":"Minimum latitude"},"max_lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Max Lat","description":"Maximum latitude"},"min_lon":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Min Lon","description":"Minimum longitude"},"max_lon":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Max Lon","description":"Maximum longitude"}},"type":"object","required":["min_lat","max_lat","min_lon","max_lon"],"title":"BoundingBox","description":"Geographic bounding box for filtering stations.\n\nNote: This is kept for backward compatibility. Prefer using GeoFilter\nwith type='bounding_box' for new code."},"ClimateIndex":{"type":"string","enum":["NAO","AO","AAO","PNA","PDO","QBO","AMO","SOI","WPO","EPO","GBI","EA","SCAND","EAWR","TNH","ENSO_NINO12","ENSO_NINO12_ANOM","ENSO_NINO3","ENSO_NINO3_ANOM","ENSO_NINO4","ENSO_NINO4_ANOM","ENSO_NINO34","ENSO_NINO34_ANOM","MEI","ONI","TNA","TSA","AMM","MJO_20E","MJO_70E","MJO_80E","MJO_100E","MJO_120E","MJO_140E","MJO_160E","MJO_120W","MJO_40W","MJO_10W","MJO_RMM1","MJO_RMM2","MJO_PHASE","MJO_AMPLITUDE","SUNSPOT"],"title":"ClimateIndex","description":"Climate oscillation index identifiers."},"ClimateIndexInfo":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["name","description","unit"],"title":"ClimateIndexInfo","description":"Metadata for a climate index."},"ClimateIndicesTimeseriesQuery":{"properties":{"indices":{"anyOf":[{"items":{"$ref":"#/components/schemas/ClimateIndex"},"type":"array"},{"type":"null"}],"title":"Indices","description":"Climate indices to query. If not set, returns all.","examples":[["NAO","ENSO_NINO34"]]},"sources":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sources","description":"Data sources to filter by (e.g. 'noaa_psl', 'noaa_cpc', 'sidc')."},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the query (inclusive)","examples":["2020-01-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time for the query (exclusive). If None, no upper bound.","examples":["2025-01-01T00:00:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for time formatting (e.g. 'Europe/Berlin').","examples":["UTC","Europe/Berlin"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by (e.g. 'time__desc').","examples":[["time"],["time__desc"]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Synthetic invocation time for backtesting (ISO 8601 UTC datetime). When set, only rows whose estimated upstream publication time is <= this timestamp are visible. Omit for real-time behaviour.","examples":["2025-06-15T12:00:00Z"]}},"type":"object","required":["start_time"],"title":"ClimateIndicesTimeseriesQuery","description":"Query parameters for climate indices timeseries data."},"ClimatologyMetaResult":{"properties":{"description":{"type":"string","title":"Description"},"period":{"type":"string","title":"Period"},"grid_resolution":{"type":"string","title":"Grid Resolution"},"num_latitudes":{"type":"integer","title":"Num Latitudes"},"num_longitudes":{"type":"integer","title":"Num Longitudes"},"days_of_year":{"items":{"type":"integer"},"type":"array","title":"Days Of Year"},"hours":{"items":{"type":"integer"},"type":"array","title":"Hours"},"variables":{"items":{"type":"string"},"type":"array","title":"Variables"},"variable_units":{"additionalProperties":{"type":"string"},"type":"object","title":"Variable Units","default":{}}},"type":"object","required":["description","period","grid_resolution","num_latitudes","num_longitudes","days_of_year","hours","variables"],"title":"ClimatologyMetaResult","description":"Metadata about the climatology dataset."},"ClimatologyVariableInfo":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit","default":""}},"type":"object","required":["name","description"],"title":"ClimatologyVariableInfo","description":"Information about a climatology variable."},"Coordinates":{"type":"string","enum":["model","init_time","time","prediction_timedelta","latitude","longitude","point","market_zone","country_key"],"title":"Coordinates"},"CustomerVariable":{"type":"string","enum":["air_temperature_at_height_level_2m","surface_temperature","dew_point_temperature_at_height_level_2m","relative_humidity_at_height_level_2m","air_pressure_at_mean_sea_level","surface_air_pressure","wind_speed_at_height_level_10m","wind_direction_at_height_level_10m","wind_speed_at_height_level_100m","wind_direction_at_height_level_100m","wind_speed_at_height_level_20m","wind_speed_at_height_level_40m","wind_speed_at_height_level_60m","wind_speed_at_height_level_80m","wind_speed_at_height_level_120m","wind_speed_at_height_level_140m","wind_speed_at_height_level_160m","wind_speed_at_height_level_180m","wind_speed_at_height_level_200m","wind_direction_at_height_level_200m","air_density_at_height_level_2m","geopotential_at_pressure_level_50000Pa","eastward_wind_at_height_level_10m","northward_wind_at_height_level_10m","eastward_wind_at_height_level_100m","northward_wind_at_height_level_100m","wind_speed_of_gust_at_height_level_10m_max","surface_direct_downwelling_shortwave_flux_sum_1h","surface_downwelling_longwave_flux_sum_1h","surface_downwelling_shortwave_flux_sum_1h","surface_downwelling_shortwave_flux_sum_30min","surface_direct_downwelling_shortwave_flux_sum_30min","toa_bidirectional_reflectance_560_710nm","toa_bidirectional_reflectance_1500_1780nm","toa_brightness_temperature_3480_4360nm","toa_brightness_temperature_9800_11800nm","surface_downwelling_longwave_flux_sum_6h","surface_downwelling_shortwave_flux_sum_6h","surface_net_downward_longwave_flux_sum_1h","surface_net_downward_shortwave_flux_sum_1h","surface_net_downward_longwave_flux_sum_6h","surface_net_downward_shortwave_flux_sum_6h","surface_direct_along_beam_shortwave_flux_sum_6h","cloud_area_fraction_at_entire_atmosphere","cloud_area_fraction_at_entire_atmosphere_high_type","cloud_area_fraction_at_entire_atmosphere_medium_type","cloud_area_fraction_at_entire_atmosphere_low_type","precipitation_amount_sum_1h","precipitation_amount_sum_3h","precipitation_amount_sum_6h","precipitation_amount_sum_12h","precipitation_amount_sum_24h","atmosphere_convective_available_potential_energy","predominant_precipitation_type_at_surface","sea_surface_temperature","snowfall_sum_1h","surface_runoff_sum_1h","sub_surface_runoff_sum_1h","surface_sensible_heat_flux_sum_1h","surface_latent_heat_flux_sum_1h","maximum_temperature_at_height_level_2m_24h","minimum_temperature_at_height_level_2m_24h","snow_depth","temperature_in_ground_at_layer_below_ground_0.00m","volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_0.00m","volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_0.07m","volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_0.28m","volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_1.00m"],"title":"CustomerVariable","description":"Weather variable name with units:\n  • air_temperature_at_height_level_2m: K\n  • surface_temperature: K\n  • dew_point_temperature_at_height_level_2m: K\n  • relative_humidity_at_height_level_2m: %\n  • air_pressure_at_mean_sea_level: Pa\n  • surface_air_pressure: Pa\n  • wind_speed_at_height_level_10m: m/s\n  • wind_direction_at_height_level_10m: degrees\n  • wind_speed_at_height_level_100m: m/s\n  • wind_direction_at_height_level_100m: degrees\n  • wind_speed_at_height_level_20m: m/s\n  • wind_speed_at_height_level_40m: m/s\n  • wind_speed_at_height_level_60m: m/s\n  • wind_speed_at_height_level_80m: m/s\n  • wind_speed_at_height_level_120m: m/s\n  • wind_speed_at_height_level_140m: m/s\n  • wind_speed_at_height_level_160m: m/s\n  • wind_speed_at_height_level_180m: m/s\n  • wind_speed_at_height_level_200m: m/s\n  • wind_direction_at_height_level_200m: degrees\n  • air_density_at_height_level_2m: kg/m³\n  • geopotential_at_pressure_level_50000Pa: m²/s²\n  • eastward_wind_at_height_level_10m: m/s\n  • northward_wind_at_height_level_10m: m/s\n  • eastward_wind_at_height_level_100m: m/s\n  • northward_wind_at_height_level_100m: m/s\n  • wind_speed_of_gust_at_height_level_10m_max: m/s\n  • surface_direct_downwelling_shortwave_flux_sum_1h: J/m²\n  • surface_downwelling_longwave_flux_sum_1h: J/m²\n  • surface_downwelling_shortwave_flux_sum_1h: J/m²\n  • surface_downwelling_shortwave_flux_sum_30min: J/m²\n  • surface_direct_downwelling_shortwave_flux_sum_30min: J/m²\n  • toa_bidirectional_reflectance_560_710nm: \n  • toa_bidirectional_reflectance_1500_1780nm: \n  • toa_brightness_temperature_3480_4360nm: \n  • toa_brightness_temperature_9800_11800nm: \n  • surface_downwelling_longwave_flux_sum_6h: J/m²\n  • surface_downwelling_shortwave_flux_sum_6h: J/m²\n  • surface_net_downward_longwave_flux_sum_1h: J/m²\n  • surface_net_downward_shortwave_flux_sum_1h: J/m²\n  • surface_net_downward_longwave_flux_sum_6h: J/m²\n  • surface_net_downward_shortwave_flux_sum_6h: J/m²\n  • surface_direct_along_beam_shortwave_flux_sum_6h: J/m²\n  • cloud_area_fraction_at_entire_atmosphere: fraction (0-1)\n  • cloud_area_fraction_at_entire_atmosphere_high_type: fraction (0-1)\n  • cloud_area_fraction_at_entire_atmosphere_medium_type: fraction (0-1)\n  • cloud_area_fraction_at_entire_atmosphere_low_type: fraction (0-1)\n  • precipitation_amount_sum_1h: mm\n  • precipitation_amount_sum_3h: mm\n  • precipitation_amount_sum_6h: mm\n  • precipitation_amount_sum_12h: mm\n  • precipitation_amount_sum_24h: mm\n  • atmosphere_convective_available_potential_energy: J/kg\n  • predominant_precipitation_type_at_surface: categorical\n  • sea_surface_temperature: K\n  • snowfall_sum_1h: mm\n  • surface_runoff_sum_1h: mm\n  • sub_surface_runoff_sum_1h: mm\n  • surface_sensible_heat_flux_sum_1h: W/m²\n  • surface_latent_heat_flux_sum_1h: W/m²\n  • maximum_temperature_at_height_level_2m_24h: K\n  • minimum_temperature_at_height_level_2m_24h: K\n  • snow_depth: m\n  • temperature_in_ground_at_layer_below_ground_0.00m: K\n  • volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_0.00m: m³/m³\n  • volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_0.07m: m³/m³\n  • volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_0.28m: m³/m³\n  • volume_fraction_of_condensed_water_in_soil_at_layer_below_ground_1.00m: m³/m³"},"DataSource":{"type":"string","enum":["clickhouse","open_meteo"],"title":"DataSource"},"DisseminationStats":{"properties":{"number_of_data_points":{"type":"integer","title":"Number Of Data Points","description":"Number of data points.Tracking started on '2025-10-29"},"min":{"type":"number","title":"Min","description":"Minimum delay in minutes"},"max":{"type":"number","title":"Max","description":"Maximum delay in minutes"},"mean":{"type":"number","title":"Mean","description":"Mean delay in minutes"},"median":{"type":"number","title":"Median","description":"Median delay in minutes"},"std":{"type":"number","title":"Std","description":"Standard deviation of delay in minutes"},"q90":{"type":"number","title":"Q90","description":"90th percentile of delay in minutes"},"q99":{"type":"number","title":"Q99","description":"99th percentile of delay in minutes"},"in_time_percentage":{"type":"number","title":"In Time Percentage","description":"Percentage of forecasts in time"},"missing_percentage":{"type":"number","title":"Missing Percentage","description":"Percentage of missing forecasts"},"expected_dissemination_time":{"type":"string","format":"time","title":"Expected Dissemination Time","description":"Expected dissemination time (time of day) as reference"},"dissemination_time_min":{"type":"string","format":"time","title":"Dissemination Time Min","description":"Minimum dissemination time (time of day)"},"dissemination_time_max":{"type":"string","format":"time","title":"Dissemination Time Max","description":"Maximum dissemination time (time of day)"},"dissemination_time_mean":{"type":"string","format":"time","title":"Dissemination Time Mean","description":"Mean dissemination time (time of day)"},"dissemination_time_median":{"type":"string","format":"time","title":"Dissemination Time Median","description":"Median dissemination time (time of day)"},"dissemination_time_q90":{"type":"string","format":"time","title":"Dissemination Time Q90","description":"90th percentile of dissemination time (time of day)"},"dissemination_time_q99":{"type":"string","format":"time","title":"Dissemination Time Q99","description":"99th percentile of dissemination time (time of day)"}},"type":"object","required":["number_of_data_points","min","max","mean","median","std","q90","q99","in_time_percentage","missing_percentage","expected_dissemination_time","dissemination_time_min","dissemination_time_max","dissemination_time_mean","dissemination_time_median","dissemination_time_q90","dissemination_time_q99"],"title":"DisseminationStats"},"DisseminationStatus":{"properties":{"status_per_model":{"additionalProperties":{"$ref":"#/components/schemas/ModelDisseminationStatus"},"propertyNames":{"$ref":"#/components/schemas/Model"},"type":"object","title":"Status Per Model","description":"Status per model"}},"type":"object","required":["status_per_model"],"title":"DisseminationStatus"},"EexGasDerivativesSettlementsQuery":{"properties":{"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas","description":"Gas hub codes (e.g. ['TTF', 'THE']). None = all.","examples":[["TTF","THE"]]},"short_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Short Codes","description":"EEX ShortCodes (e.g. ['G3BM', 'G0BM']). None = all.","examples":[["G3BM","G0BM"]]},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"Start trading date (inclusive)."},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"End trading date (inclusive)."},"exclude_options":{"type":"boolean","title":"Exclude Options","description":"When true, excludes option records (option_type != '').","default":false},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled EEX publication time is on or before this UTC datetime.  The derivatives-settlements rule is ``max(tm, trd_date 19:30 UTC)`` — EEX's EOD batch publishes around 19:00 UTC, so a settlement isn't visible at an ``as_of`` earlier than that even if its ``tm`` says otherwise.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T19:45:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for datetime output."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (requires order_by)."}},"type":"object","title":"EexGasDerivativesSettlementsQuery","description":"Query parameters for EEX gas derivatives settlement prices.\n\nSchema identical to eex_power_settlements. Fetches from\neex_gas_derivatives_settlements."},"EexGasDerivativesTradesQuery":{"properties":{"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas","description":"Gas hub codes (e.g. ['TTF'])."},"short_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Short Codes","description":"EEX ShortCodes (e.g. ['G3BM'])."},"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time","description":"Start trade timestamp (inclusive, filters on tm column)."},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End trade timestamp (exclusive, filters on tm column)."},"trd_date_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trd Date Start","description":"Start trading date (inclusive)."},"trd_date_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trd Date End","description":"End trading date (inclusive)."},"exclude_spread_legs":{"type":"boolean","title":"Exclude Spread Legs","description":"When true, excludes spread/cascade legs.","default":false},"exclude_cancellations":{"type":"boolean","title":"Exclude Cancellations","description":"When true, excludes cancelled trades.","default":false},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled REST publication time is on or before this UTC datetime.  The trades rule is ``tm + 5 minutes`` — Jua polls EEX's REST API every five minutes, so a /eex-gas/derivatives/trades consumer can't see a row before then.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T14:00:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for datetime output."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (requires order_by)."}},"type":"object","title":"EexGasDerivativesTradesQuery","description":"Query parameters for EEX gas derivatives individual trades.\n\nSchema identical to eex_power_trades. Fetches from\neex_gas_derivatives_trades."},"EexGasSpotSettlementsQuery":{"properties":{"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas","description":"Gas hub codes (e.g. ['TTF', 'THE']). None = all."},"short_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Short Codes","description":"Spot ShortCodes (e.g. ['TTFDA', 'THEDA']). None = all."},"delivery_day_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Delivery Day Start","description":"Start delivery day (inclusive)."},"delivery_day_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Delivery Day End","description":"End delivery day (inclusive)."},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"Start trading date (inclusive)."},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"End trading date (inclusive)."},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled EEX publication time is on or before this UTC datetime.  The spot-settlements rule is ``max(tm, trd_date 19:30 UTC)`` — EEX publishes spot settlements around 19:15 UTC.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T19:45:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for datetime output."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (requires order_by)."}},"type":"object","title":"EexGasSpotSettlementsQuery","description":"Query parameters for EEX gas spot settlement prices.\n\nFetches from eex_gas_spot_settlements. Typically 1 settlement per area\nper day (DayAhead contract)."},"EexGasSpotTradesQuery":{"properties":{"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas","description":"Gas hub codes (e.g. ['TTF'])."},"short_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Short Codes","description":"Spot ShortCodes (e.g. ['TTFDA', 'TTFWD'])."},"delivery_day_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Delivery Day Start","description":"Start delivery day (inclusive)."},"delivery_day_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Delivery Day End","description":"End delivery day (inclusive)."},"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time","description":"Start trade timestamp (inclusive, filters on tm column)."},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End trade timestamp (exclusive, filters on tm column)."},"trd_date_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trd Date Start","description":"Start trading date (inclusive)."},"trd_date_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trd Date End","description":"End trading date (inclusive)."},"exclude_spread_legs":{"type":"boolean","title":"Exclude Spread Legs","description":"When true, excludes spread legs.","default":false},"exclude_cancellations":{"type":"boolean","title":"Exclude Cancellations","description":"When true, excludes cancelled trades.","default":false},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled REST publication time is on or before this UTC datetime.  The trades rule is ``tm + 5 minutes`` — Jua polls EEX's REST API every five minutes.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T14:00:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for datetime output."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (requires order_by)."}},"type":"object","title":"EexGasSpotTradesQuery","description":"Query parameters for EEX gas spot individual trades.\n\nFetches from eex_gas_spot_trades. Gas spot trades have delivery_day,\nstart/end times, and group_id/trd_version for trade history tracking."},"EexSettlementsQuery":{"properties":{"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas","description":"Market area codes to filter by (e.g. ['DE', 'FR']). If not set, returns all areas.","examples":[["DE","FR"]]},"short_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Short Codes","description":"EEX ShortCodes to filter by (e.g. ['DEBM', 'DEBQ']). If not set, returns all ShortCodes.","examples":[["DEBM","DEBQ"]]},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date","description":"Start trading date (inclusive).","examples":["2026-04-01"]},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date","description":"End trading date (inclusive).","examples":["2026-04-08"]},"exclude_options":{"type":"boolean","title":"Exclude Options","description":"When true, excludes option records (option_type != '').","default":false},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled EEX publication time is on or before this UTC datetime.  The settlements rule is ``max(tm, trd_date 18:00 UTC)`` — EEX publishes EOD settlements in a daily batch that completes around 16:20–16:45 UTC, so a settlement is not visible at an ``as_of`` earlier than that even if its ``tm`` says otherwise.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T18:30:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for datetime output (e.g. 'Europe/Berlin').","examples":["UTC","Europe/Berlin"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by (e.g. 'trd_date__desc')."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (requires order_by)."}},"type":"object","title":"EexSettlementsQuery","description":"Query parameters for EEX power settlement prices.\n\nFetches from eex_power_settlements. Filtered by trading date, area,\nand ShortCode. Deleted records (updt_act='Delete') are excluded by default."},"EexTradesQuery":{"properties":{"areas":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Areas","description":"Market area codes to filter by (e.g. ['DE', 'FR']).","examples":[["DE"]]},"short_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Short Codes","description":"EEX ShortCodes to filter by (e.g. ['DEBM']).","examples":[["DEBM","DEBQ"]]},"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time","description":"Start trade timestamp (inclusive, filters on tm column).","examples":["2026-04-08T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End trade timestamp (exclusive, filters on tm column).","examples":["2026-04-09T00:00:00Z"]},"trd_date_start":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trd Date Start","description":"Start trading date (inclusive, filters on trd_date column).","examples":["2026-04-08"]},"trd_date_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Trd Date End","description":"End trading date (inclusive, filters on trd_date column).","examples":["2026-04-08"]},"exclude_spread_legs":{"type":"boolean","title":"Exclude Spread Legs","description":"When true, excludes spread/cascade legs (volume_only = false).","default":false},"exclude_cancellations":{"type":"boolean","title":"Exclude Cancellations","description":"When true, excludes cancelled trades (updt_act != 'Delete').","default":false},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled REST publication time is on or before this UTC datetime.  The trades rule is ``tm + 5 minutes`` — Jua polls EEX's REST tier every 5 minutes, so a trade with exchange-time ``tm`` is conservatively considered visible to a Jua REST consumer at ``tm + 5min``.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T18:30:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for datetime output."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by (e.g. 'tm__desc')."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (requires order_by)."}},"type":"object","title":"EexTradesQuery","description":"Query parameters for EEX power individual trades.\n\nFetches from eex_power_trades. Supports filtering by area, ShortCode,\ntrade timestamp, and trading date. Optional flags to exclude spread legs\nand cancellations."},"EntsoeBusinessType":{"type":"string","enum":["Planned maintenance","Unplanned outage"],"title":"EntsoeBusinessType","description":"Business type for outages (reason).\n\nNote: Values match the human-readable strings stored in ClickHouse,\nnot the raw ENTSOE codes (A53, A54)."},"EntsoeOtherType":{"type":"string","enum":["Long","Short"],"title":"EntsoeOtherType","description":"ENTSOE Other Type (for imbalance data)."},"EntsoeOutageSourceType":{"type":"string","enum":["generation_unit","transmission"],"title":"EntsoeOutageSourceType","description":"Outage source type discriminator."},"EntsoeOutagesQuery":{"properties":{"source_type":{"anyOf":[{"$ref":"#/components/schemas/EntsoeOutageSourceType"},{"type":"null"}],"description":"Filter by source type (generation_unit or transmission)"},"biddingzone_domain":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array"},{"type":"null"}],"title":"Biddingzone Domain","description":"List of bidding zones (for generation outages)"},"in_domain":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array"},{"type":"null"}],"title":"In Domain","description":"List of from-zones (for transmission outages)"},"out_domain":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array"},{"type":"null"}],"title":"Out Domain","description":"List of to-zones (for transmission outages)"},"active_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Active At","description":"Get outages active at this specific time (start <= time < end)"},"start_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start From","description":"Filter by start time >= this value"},"start_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start To","description":"Filter by start time < this value"},"plant_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoePsrType"},"type":"array"},{"type":"null"}],"title":"Plant Types","description":"Filter by plant type (generation only)"},"business_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeBusinessType"},"type":"array"},{"type":"null"}],"title":"Business Types","description":"Filter by business type (reason)"},"exclude_cancelled":{"type":"boolean","title":"Exclude Cancelled","description":"Exclude cancelled outages (docstatus in ['A09', 'Cancelled'])","default":true},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by. Supports direction suffix: 'start_time__desc' for descending, 'start_time__asc' for ascending. Object format: {'field': 'start_time', 'direction': 'desc'}"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, only outage records whose TSO publication time (created_doc_time) is <= this timestamp are returned. Used by /simulate/entsoe/outages."}},"type":"object","title":"EntsoeOutagesQuery","description":"Query parameters for ENTSOE outages data.\n\nSupports filtering by:\n- source_type: Generation vs Transmission\n- zones: biddingzone_domain (gen) or in_domain/out_domain (trans)\n- time: active_at, or start_from/start_to\n- attributes: plant_type, business_type, status"},"EntsoePivotedQuery":{"properties":{"zone_keys":{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array","title":"Zone Keys","description":"Zone codes to query"},"psr_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoePsrType"},"type":"array"},{"type":"null"}],"title":"Psr Types","description":"PSR types to pivot into columns"},"generation_variable":{"anyOf":[{"$ref":"#/components/schemas/EntsoeVariable"},{"type":"null"}],"description":"ENTSO-E variable for generation data"},"load_variable":{"anyOf":[{"$ref":"#/components/schemas/EntsoeVariable"},{"type":"null"}],"description":"ENTSO-E variable for load data"},"psr_column_map":{"additionalProperties":{"type":"string"},"type":"object","title":"Psr Column Map","description":"Maps PSR type name to output column name"},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time (inclusive)"},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time (exclusive)"},"temporal_resolution_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Temporal Resolution Minutes","description":"Target resolution; None to skip interpolation","default":15},"model_label":{"type":"string","title":"Model Label","description":"Value for the 'model' column in output rows","default":"ENTSO-E Actual"},"needed_derived_vars":{"anyOf":[{"items":{"type":"string"},"type":"array","uniqueItems":true},{"type":"null"}],"title":"Needed Derived Vars","description":"Set of derived column names to attempt to compute (wind_total_mw / renewables_total_mw / residual_load_mw). compute_derived_power_columns silently skips any whose input columns aren't in the frame, so callers don't have to mirror the feasibility logic. None means no derivation."},"load_col":{"type":"string","title":"Load Col","default":"load_mw"},"zone_key_remap":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Zone Key Remap","description":"Remap zone_key values in output"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, only rows whose estimated ENTSO-E publication time is <= as_of contribute to the pivot."}},"type":"object","required":["zone_keys","start_time"],"title":"EntsoePivotedQuery","description":"Query that returns ENTSO-E data pivoted into wide-column format.\n\nPivots PSR-based generation data into per-source columns, optionally\njoins load, and interpolates to a regular time grid in ClickHouse.\nDerived columns (wind_total / renewables_total / residual_load) are\ncomputed post-query in `query_pivoted_data` via the shared\n`compute_derived_power_columns` helper — same code path as UK power\nand the api-server pivoted view, so null-propagation semantics match\neverywhere. Callers declare *intent* via ``needed_derived_vars``\n(the set of derived column names they want); feasibility (does this\nzone have onshore+offshore? does the frame have load?) is decided by\nthe derivation helper itself, not by the call site."},"EntsoePsrType":{"type":"string","enum":["Biomass","Energy storage","Fossil Brown coal/Lignite","Fossil Coal-derived gas","Fossil Gas","Fossil Hard coal","Fossil Oil","Fossil Oil shale","Fossil Peat","Geothermal","Hydro Pumped Storage","Hydro Pumped Storage Consumption","Hydro Pumped Storage Generation","Hydro Run-of-river and poundage","Hydro Water Reservoir","Marine","Nuclear","Other","Other renewable","Solar","Waste","Wind Offshore","Wind Onshore"],"title":"EntsoePsrType","description":"ENTSOE Production/Generation Source (PSR) types."},"EntsoeTimeseriesQuery":{"properties":{"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"List of ENTSOE variable types to query. If not set, returns all variables.","examples":[["day_ahead_prices","load_actual"]]},"zone_keys":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array"},{"type":"null"}],"title":"Zone Keys","description":"List of zone codes (e.g., ['DE_LU', 'FR', 'NO_1'])","examples":[["DE_LU","FR"]]},"zone_from":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array"},{"type":"null"}],"title":"Zone From","description":"Source zones for cross-border queries (e.g., FR)","examples":[["FR"]]},"zone_to":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeZone"},"type":"array"},{"type":"null"}],"title":"Zone To","description":"Destination zones for cross-border queries (e.g., DE_LU)","examples":[["DE_LU"]]},"psr_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoePsrType"},"type":"array"},{"type":"null"}],"title":"Psr Types","description":"List of PSR types to filter generation data","examples":[["Solar","Wind Onshore"]]},"other_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EntsoeOtherType"},"type":"array"},{"type":"null"}],"title":"Other Types","description":"Other types filter (e.g., 'Long', 'Short' for imbalance)","examples":[["Long","Short"]]},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the query (inclusive)","examples":["2025-12-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time for the query (exclusive). If None, no upper bound is applied (useful for day-ahead forecasts)","examples":["2025-12-15T00:00:00Z"]},"aggregation":{"$ref":"#/components/schemas/jua_query_v2__entsoe__query__TemporalAggregation","description":"Temporal aggregation to apply","default":"none"},"include_metadata":{"type":"boolean","title":"Include Metadata","description":"Include metadata column in response","default":false},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone name for time formatting (e.g., 'Europe/Berlin', 'America/New_York'). Defaults to UTC","examples":["UTC","Europe/Berlin","America/New_York"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by. Supports direction suffix: 'time__desc' for descending, 'time__asc' for ascending (default). Can also use object format: {'field': 'time', 'direction': 'desc'}","examples":[["time","zone_key"],["time__desc"],[{"direction":"desc","field":"time"}]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, the query only returns rows whose estimated ENTSO-E publication time is <= this timestamp. Used by /simulate/entsoe to backtest against the data state at as_of."}},"type":"object","required":["start_time"],"title":"EntsoeTimeseriesQuery","description":"Query parameters for ENTSOE timeseries data.\n\nSupports filtering by:\n- variables: List of ENTSOE variable types (optional, returns all if not set)\n- zone_keys: List of zone codes for zone-based data\n- zone_from/zone_to: For cross-border flow queries\n- psr_types: For generation data by source type\n- start_time: Start of time range (required)\n- end_time: End of time range (optional - if None, no upper bound applied)\n\nNote: end_time can be None to include all future data, which is useful\nfor day-ahead forecasts that extend into tomorrow."},"EntsoeVariable":{"type":"string","enum":["crossborder_flows","day_ahead_prices","generation_actual","generation_forecast_da","imbalance_prices","imbalance_volumes","load_actual","load_forecast_da","net_position_da","net_position_total","ntc_dayahead","ntc_weekahead","ntc_monthahead","ntc_yearahead","scheduled_exchanges_da","scheduled_exchanges_total","total_available_hydro_capacity","wind_solar_forecast_da","wind_solar_forecast_intraday"],"title":"EntsoeVariable","description":"ENTSOE timeseries variable types."},"EntsoeVariableInfo":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"uses_zone_key":{"type":"boolean","title":"Uses Zone Key","default":true},"uses_zone_from_to":{"type":"boolean","title":"Uses Zone From To","default":false},"uses_psr_type":{"type":"boolean","title":"Uses Psr Type","default":false},"zone_kind":{"$ref":"#/components/schemas/EntsoeZoneKind","default":"physical"}},"type":"object","required":["name","description","unit"],"title":"EntsoeVariableInfo","description":"Information about an ENTSOE variable."},"EntsoeZone":{"type":"string","enum":["AL","AT","BA","BE","BG","CH","CY","CZ","DE","DK","EE","ES","FI","FR","GB","GE","GR","HR","HU","IE","IT","LT","LU","LV","MD","ME","MK","MT","NL","NO","PL","PT","RO","RS","RU","SE","SI","SK","TR","UA","UK","XK","DE_LU","DE_AT_LU","DE_50HZ","DE_AMPRION","DE_TENNET","DE_TRANSNET","DK_1","DK_2","DK_CA","IT_CALA","IT_CNOR","IT_CSUD","IT_NORD","IT_SARD","IT_SICI","IT_SUD","IT_SACO_AC","IT_SACO_DC","NO_1","NO_2","NO_3","NO_4","NO_5","NO_2_NSL","SE_1","SE_2","SE_3","SE_4","IE_SEM","GB_NIR","LU_BZN","UA_IPS"],"title":"EntsoeZone","description":"ENTSOE bidding zones and control areas.\n\nBased on ENTSO-E Transparency Platform zone codes."},"EntsoeZoneKind":{"type":"string","enum":["physical","bidding","cross_border"],"title":"EntsoeZoneKind","description":"Which ENTSOE zone concept a variable is published under.\n\nENTSOE publishes some data at the country / control-area level\n(generation, load, capacity) and other data at the bidding-zone\nlevel (prices, net positions, imbalance).  For most countries the\ncountry code IS the bidding-zone code, but not always: Ireland\npublishes gen/load under ``IE`` (the country) and day-ahead prices\nunder ``IE_SEM`` (the all-island Single Electricity Market bidding\nzone).  Luxembourg is similar (``LU`` vs ``LU_BZN``).\n\nCross-border variables (flows, NTC, scheduled exchanges) use\n``zone_from`` / ``zone_to`` instead of ``zone_key`` and are flagged\nseparately so callers know not to try resolving them against a\nphysical/bidding zone pair."},"EpexSpotTimeseriesQuery":{"properties":{"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/EpexSpotVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"Variables to query. If not set, returns all.","examples":[["da_price","continuous_weighted_avg_price"]]},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the query (inclusive, filters on delivery_start)","examples":["2026-04-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time for the query (exclusive). If None, no upper bound.","examples":["2026-04-14T00:00:00Z"]},"market_area":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Area","description":"Market area filter (e.g. 'DE'). If None, returns all."},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for time formatting (e.g. 'Europe/Berlin').","examples":["UTC","Europe/Berlin"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by (e.g. 'delivery_start__desc')."},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay: only return rows whose modelled publication time is on or before this UTC datetime.  Continuous statistics and indices use ``delivery_end + 5 min`` (we only persist the final aggregate).  Each auction (DA, IDA1/2/3, DA index) uses its CET/CEST gate-closure time on the trading day.  See ``jua_query_v2.epex_spot.dissemination``.  Used by the /simulate endpoint; live callers should leave unset.","examples":["2025-04-08T14:00:00Z"]}},"type":"object","required":["start_time"],"title":"EpexSpotTimeseriesQuery","description":"Query parameters for EPEX SPOT market data.\n\nEach variable maps to a specific ClickHouse table and column.\nThe query builder generates the appropriate SQL UNION for variables\nspanning different tables."},"EpexSpotVariable":{"type":"string","enum":["continuous_weighted_avg_price","continuous_last_price","continuous_low_price","continuous_high_price","continuous_volume_buy","continuous_volume_sell","continuous_index_price","continuous_idfull_price","continuous_id1_price","continuous_id3_price","da_price","ida1_price","ida2_price","ida3_price","da_volume","ida1_volume","ida2_volume","ida3_volume","da_index_price"],"title":"EpexSpotVariable","description":"EPEX SPOT user-facing variable types."},"EpexSpotVariableInfo":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"table":{"type":"string","title":"Table"}},"type":"object","required":["name","description","unit","table"],"title":"EpexSpotVariableInfo","description":"Information about an EPEX SPOT variable."},"ForecastDisseminationStatus":{"properties":{"init_time":{"type":"string","title":"Init Time","description":"Forecast initialization time"},"delay":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delay","description":"Delay in minutes"},"is_missing":{"type":"boolean","title":"Is Missing","description":"Whether the forecast is missing","default":false},"dissemination_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dissemination Time","description":"Forecast dissemination time"},"expected_dissemination_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Expected Dissemination Time","description":"Expected dissemination time"},"max_prediction_timedelta":{"type":"integer","title":"Max Prediction Timedelta","description":"Maximum prediction timedelta for the forecast"},"expected_max_prediction_timedelta":{"type":"integer","title":"Expected Max Prediction Timedelta","description":"Expected maximum prediction timedelta for the forecast"},"is_delayed":{"type":"boolean","title":"Is Delayed","description":"Whether the forecast is delayed","readOnly":true}},"type":"object","required":["init_time","max_prediction_timedelta","expected_max_prediction_timedelta","is_delayed"],"title":"ForecastDisseminationStatus"},"ForecastIndexQuery":{"properties":{"model":{"$ref":"#/components/schemas/Model","description":"Model identifiers to query (e.g. 'ept2')","examples":["ept1_5","ept2"]},"init_time":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"},{"items":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"}]},"type":"array"},{"$ref":"#/components/schemas/TimeSlice"},{"$ref":"#/components/schemas/PreferredHours"}],"title":"Init Time","description":"Forecast initialization time(s). Accepts: 'latest' or 'latest-N' for relative init times, an integer offset (0 = latest, 1 = second latest), an ISO 8601 datetime string, a list of any of the above, or a TimeSlice object with start/end for a date range.","examples":["latest","latest-1",0,"2025-01-15T00:00:00","2025-05-02 12:00:00",["2025-01-15T00:00:00","2025-01-16T00:00:00"],[0,"latest-1","2025-01-16T00:00:00"],{"end":"2025-01-07T00:00:00","start":"2025-01-01T00:00:00"}]},"latitude":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"title":"Latitude","description":"The range of latitudes to return.","examples":[[32,71],[25,50]]},"longitude":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"title":"Longitude","description":"Geographic filter specifying the query location(s) or region(s)","examples":[[-15,50],[70,125]]},"variables":{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array","title":"Variables","description":"List of weather variables to query (e.g., 'air_temperature_at_height_level_2m', 'wind_speed_at_height_level_100m'). If empty, returns all variables available for the selected models","examples":[["air_temperature_at_height_level_2m","wind_speed_at_height_level_100m"]]},"prediction_timedelta":{"anyOf":[{"type":"integer"},{"$ref":"#/components/schemas/PredictionTimedeltaSlice"},{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Prediction Timedelta","description":"Forecast lead time(s) from init_time. The units are determined by the `timedelta_unit` parameter (default: `h`). Can be a single integer, list of integers, or a PredictionTimedeltaSlice range. If None, returns all available lead times. ","examples":[1,[1,2,3],{"end":48,"start":0}]},"latest_min_prediction_timedelta":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Latest Min Prediction Timedelta","description":"When using init_time='latest', only use forecasts with at least `latest_min_prediction_timedelta` of lead time available. The units are determined by the `timedelta_unit` parameter (default: `h`). "},"timedelta_unit":{"type":"string","enum":["h","m","d","hour","hourly","minute","minutes","day","days"],"title":"Timedelta Unit","description":"Time scale to use for the query. Can be 'h' for hours, 'm' for minutes, 'd' for days","default":"h","examples":["h","m","d","hour","hours","minute","minutes","day","days"]},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Synthetic invocation time for backtesting (ISO 8601 UTC datetime). When set, only forecast runs that were disseminated at or before this time are visible. Omit or set to null for real-time behaviour.","examples":["2025-06-15T12:00:00"]}},"type":"object","required":["model","init_time","latitude","longitude"],"title":"ForecastIndexQuery","description":"Main query object for retrieving the index for forecast data."},"ForecastInfo":{"properties":{"init_time":{"type":"string","title":"Init Time","description":"Forecast initialization time"},"max_prediction_timedelta":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Prediction Timedelta","description":"Maximum available lead time in minutes for this forecast"},"dissemination_time":{"type":"string","title":"Dissemination Time","description":"Forecast step dissemination time"}},"type":"object","required":["init_time","dissemination_time"],"title":"ForecastInfo","description":"Information about a single available forecast."},"ForecastQuery":{"properties":{"models":{"anyOf":[{"items":{"$ref":"#/components/schemas/Model"},"type":"array"},{"type":"null"}],"title":"Models","description":"List of forecast model identifiers to query (e.g., ['ept2', 'aifs']). Required if model_runs is not specified.","examples":[["ept2"],["ept2","ept1_5"]]},"geo":{"$ref":"#/components/schemas/GeoFilter","description":"Geographic filter specifying the query location(s) or region(s)","examples":[{"method":"nearest","type":"point","value":[13.405,52.52]},{"type":"market_zone","value":"DE"},{"type":"country_key","value":"DE"},{"type":"country_key","value":["DE","FR"]}]},"init_time":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"},{"items":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"}]},"type":"array"},{"$ref":"#/components/schemas/TimeSlice"},{"$ref":"#/components/schemas/PreferredHours"},{"type":"null"}],"title":"Init Time","description":"Forecast initialization time(s). Accepts: 'latest' or 'latest-N' for relative init times, an integer offset (0 = latest, 1 = second latest), an ISO 8601 datetime string, a list of any of the above, or a TimeSlice object with start/end for a date range. Required if model_runs is not specified.","examples":["latest","latest-1",0,1,"2025-01-15T00:00:00",["latest","latest-1","2025-01-15T00:00:00"],[0,1,2],{"end":"2025-01-07T00:00:00","start":"2025-01-01T00:00:00"}]},"model_runs":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"},{"items":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"}]},"type":"array"},{"$ref":"#/components/schemas/TimeSlice"},{"$ref":"#/components/schemas/PreferredHours"}]},"propertyNames":{"$ref":"#/components/schemas/Model"},"type":"object"},{"type":"null"}],"title":"Model Runs","description":"Per-model init_time specification. Alternative to models+init_time. Keys are model identifiers, values are init_time specifications (same formats as init_time: 'latest', 'latest-N', integer offset, datetime, list, or TimeSlice). Cannot be used together with models/init_time.","examples":[{"aifs":"2025-01-15T00:00:00","ept2":"latest"},{"aifs":1,"ept2":0},{"ept2":["latest","latest-1"]}]},"time":{"anyOf":[{"type":"string","format":"date-time"},{"items":{"type":"string","format":"date-time"},"type":"array"},{"$ref":"#/components/schemas/TimeSlice"},{"type":"null"}],"title":"Time","description":"Filter by specific forecast valid times (as opposed to lead times). Accepts datetime, list of datetimes, or time range","examples":["2025-01-15T09:00:00","2025-05-02 14:00:00",["2025-01-15T00:00:00","2025-01-16T00:00:00"],{"end":"2025-01-07T00:00:00","start":"2025-01-01T00:00:00"}]},"variables":{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array","title":"Variables","description":"List of weather variables to query (e.g., 'air_temperature_at_height_level_2m', 'wind_speed_at_height_level_100m'). If empty, returns all variables available for the selected models","examples":[["air_temperature_at_height_level_2m","wind_speed_at_height_level_100m"]]},"prediction_timedelta":{"anyOf":[{"type":"integer"},{"$ref":"#/components/schemas/PredictionTimedeltaSlice"},{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Prediction Timedelta","description":"Forecast lead time(s) from init_time. The units are determined by the `timedelta_unit` parameter (default: `h`). Can be a single integer, list of integers, or a PredictionTimedeltaSlice range. If None, returns all available lead times. ","examples":[1,[1,2,3],{"end":48,"start":0}]},"latest_min_prediction_timedelta":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Latest Min Prediction Timedelta","description":"When using init_time='latest', only use forecasts with at least `latest_min_prediction_timedelta` of lead time available. The units are determined by the `timedelta_unit` parameter (default: `h`). "},"timedelta_unit":{"type":"string","enum":["h","m","d","hour","hourly","minute","minutes","day","days"],"title":"Timedelta Unit","description":"Time scale to use for the query. Can be 'h' for hours, 'm' for minutes, 'd' for days","default":"h","examples":["h","m","d","hour","hours","minute","minutes","day","days"]},"temporal_resolution":{"anyOf":[{"type":"integer","enum":[15,30,60,120,180,240,300,360]},{"type":"null"}],"title":"Temporal Resolution","description":"Requested temporal resolution in minutes","examples":[15,30,60,120]},"group_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/GroupByKey"},"type":"array"},{"type":"null"}],"title":"Group By","description":"List of dimensions to group by for aggregation (e.g., ['model', 'init_time', 'time']). Requires 'aggregation' to be specified. See docs.jua.ai for grouping examples"},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_Union_Coordinates__CustomerVariable__"},"type":"array"},{"type":"null"}],"title":"Order By","description":"List of dimensions to sort results by. Supports direction suffix: 'time__desc' for descending, 'time__asc' for ascending (default). Can also use object format: {'field': 'time', 'direction': 'desc'}","examples":[["model","init_time","prediction_timedelta"],["point","time__desc"],[{"direction":"desc","field":"time"}]]},"aggregation":{"anyOf":[{"items":{"$ref":"#/components/schemas/Aggregation"},"type":"array"},{"type":"null"}],"title":"Aggregation","description":"List of aggregation functions to apply when grouping (e.g., ['avg', 'std']). Requires 'group_by' to be specified"},"weighting":{"anyOf":[{"$ref":"#/components/schemas/Weighting"},{"type":"null"}],"description":"Optional weighting scheme for geographic aggregation (e.g., by wind/solar capacity or population)","examples":[{"type":"wind_capacity"},{"type":"solar_capacity"},{"type":"population"}]},"include_time":{"type":"boolean","title":"Include Time","description":"Include the forecast valid time (init_time + prediction_timedelta) as a column in results","default":false},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone name for time formatting (e.g., 'Europe/Berlin', 'America/New_York'). Defaults to UTC","examples":["UTC","Europe/Berlin","America/New_York"]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters for limiting result size. Requires 'order_by' to be specified","examples":[{"limit":100,"offset":0}]},"were_variables_explicitly_requested":{"type":"boolean","title":"Were Variables Explicitly Requested","description":"Whether the user passed the variables explicitly. If True, the variables will be used to filter the results. If False, all variables will be returned.","default":true},"include_ensemble_members":{"type":"boolean","title":"Include Ensemble Members","description":"When True, return per-ensemble-member rows for ensemble models instead of the implicit ensemble-mean. Disables the auto-grouping that hides individual members. If group_by is also explicit, 'ensemble_member' is automatically added so aggregation runs per member.","default":false},"value_filters":{"anyOf":[{"items":{"$ref":"#/components/schemas/ValueFilter"},"type":"array"},{"type":"null"}],"title":"Value Filters","description":"Post-aggregation value filters applied as an outermost SQL wrapper. Used by alert evaluation to push threshold conditions into ClickHouse."},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Synthetic invocation time for backtesting (ISO 8601 UTC datetime). When set, only forecast runs that were disseminated at or before this time are visible, and 'latest' resolves relative to this timestamp. Omit or set to null for real-time behaviour.","examples":["2025-06-15T12:00:00"]}},"type":"object","required":["geo"],"title":"ForecastQuery","description":"Main query object for retrieving weather forecast data.\n\nSupports flexible querying by location, time, variables, and models with optional\naggregation, grouping, and weighting capabilities.\n\nTwo modes of specifying models and init_times:\n1. Classic mode: Use `models` + `init_time` (same init_time for all models)\n2. Model runs mode: Use `model_runs` (per-model init_time specification)\n\nThese modes are mutually exclusive."},"GeoConstraints":{"properties":{"allowed_zones":{"items":{"type":"string"},"type":"array","title":"Allowed Zones","description":"ISO country / market-zone codes where this model has data. In YAML, may be given as the string 'european' to expand to the shared EUROPEAN_ZONES list."},"bounding_box":{"anyOf":[{"$ref":"#/components/schemas/GridBounds"},{"type":"null"}],"description":"Explicit lat/lon bounding box. When omitted on a model with a non-EXACT grid, the grid's own bounds are used."}},"type":"object","required":["allowed_zones"],"title":"GeoConstraints","description":"Geographic coverage limits for a regional model.\n\nModels without a ``geo_constraints`` entry in their YAML are considered\nglobal and available everywhere."},"GeoFilter":{"properties":{"type":{"type":"string","enum":["point","bounding_box","polygon","market_zone","country_key","poi"],"title":"Type","description":"Geographic filter type. 'point': Single location or list of [latitude, longitude] coordinates. 'bounding_box': Rectangular area defined by [[lat_min, lon_min], [lat_max, lon_max]]. 'polygon': Custom area defined by list of [latitude, longitude] coordinates. 'market_zone': Predefined energy market zone codes (e.g., 'DE', 'FR'). 'country_key': ISO country codes (e.g., 'DE', 'US'). 'poi': Point of Interest reference(s) with coordinates and optional id/label.","examples":["point","bounding_box","polygon","market_zone","country_key","poi"]},"value":{"anyOf":[{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"items":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},"type":"array"},{"prefixItems":[{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2}],"type":"array","maxItems":2,"minItems":2},{"items":{"prefixItems":[{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2}],"type":"array","maxItems":2,"minItems":2},"type":"array"},{"items":{"items":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2},"type":"array"},"type":"array"},{"type":"string","enum":["AD","AE","AF","AG","AL","AM","AO","AR","AT","AU-LH","AU-NSW","AU-NT","AU-QLD","AU-SA","AU-TAS","AU-TAS-CBI","AU-TAS-FI","AU-TAS-KI","AU-VIC","AU-WA","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO","BR-CS","BR-N","BR-NE","BR-S","BS","BT","BW","BY","BZ","CA-AB","CA-BC","CA-MB","CA-NB","CA-NL","CA-NS","CA-NT","CA-NU","CA-ON","CA-PE","CA-QC","CA-SK","CA-YT","CD","CF","CG","CH","CI","CL-CHP","CL-SEA","CL-SEM","CL-SEN","CM","CN","CO","CR","CU","CV","CW","CY","CZ","DE","DJ","DK-BHM","DK-DK1","DK-DK2","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ES-CN-FV","ES-CN-GC","ES-CN-HI","ES-CN-IG","ES-CN-LP","ES-CN-LZ","ES-CN-TE","ES-IB-FO","ES-IB-IZ","ES-IB-MA","ES-IB-ME","ET","FI","FJ","FK","FM","FO-MI","FO-SI","FR","FR-COR","GA","GB","GB-NIR","GB-ORK","GB-ZET","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GT","GU","GW","GY","HK","HN","HR","HT","HU","ID","IE","IL","IM","IN-AN","IN-EA","IN-NE","IN-NO","IN-SO","IN-WE","IQ","IR","IS","IT-CALA","IT-CNO","IT-CSO","IT-NO","IT-SAR","IT-SIC","IT-SO","JE","JM","JO","JP-CB","JP-CG","JP-HKD","JP-HR","JP-KN","JP-KY","JP-ON","JP-SK","JP-TH","JP-TK","KE","KG","KH","KM","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MD","ME","MG","MK","ML","MM","MN","MQ","MR","MT","MU","MV","MW","MX","MY-EM","MY-WM","MZ","NA","NC","NE","NG","NI","NL","NO-NO1","NO-NO2","NO-NO3","NO-NO4","NO-NO5","NP","NZ","NZ-NZC","NZ-NZST","OM","PA","PE","PF","PG","PH-LU","PH-MI","PH-VI","PK","PL","PM","PR","PS","PT","PT-AC","PT-MA","PW","PY","QA","RE","RO","RS","RU-1","RU-2","RU-AS","RU-EU","RU-FE","RU-KGD","RW","SA","SB","SC","SD","SE-SE1","SE-SE2","SE-SE3","SE-SE4","SG","SI","SJ","SK","SL","SN","SO","SR","SS","ST","SV","SY","SZ","TD","TG","TH","TJ","TL","TM","TN","TO","TR","TT","TW","TZ","UA","UA-CR","UG","US-AK","US-AK-SEAPA","US-CAL-BANC","US-CAL-CISO","US-CAL-IID","US-CAL-LDWP","US-CAL-TIDC","US-CAR-CPLE","US-CAR-CPLW","US-CAR-DUK","US-CAR-SC","US-CAR-SCEG","US-CENT-SPA","US-CENT-SWPP","US-FLA-FMPP","US-FLA-FPC","US-FLA-FPL","US-FLA-GVL","US-FLA-HST","US-FLA-JEA","US-FLA-SEC","US-FLA-TAL","US-FLA-TEC","US-HI","US-MIDA-PJM","US-MIDW-AECI","US-MIDW-LGEE","US-MIDW-MISO","US-NE-ISNE","US-NW-AVA","US-NW-BPAT","US-NW-CHPD","US-NW-DOPD","US-NW-GCPD","US-NW-IPCO","US-NW-NEVP","US-NW-NWMT","US-NW-PACE","US-NW-PACW","US-NW-PGE","US-NW-PSCO","US-NW-PSEI","US-NW-SCL","US-NW-TPWR","US-NW-WACM","US-NW-WAUW","US-NY-NYIS","US-SE-SOCO","US-SW-AZPS","US-SW-EPE","US-SW-PNM","US-SW-SRP","US-SW-TEPC","US-SW-WALC","US-TEN-TVA","US-TEX-ERCO","UY","UZ","VC","VE","VI","VN","VU","WS","XK","XX","YE","YT","ZA","ZM","ZW"]},{"items":{"type":"string","enum":["AD","AE","AF","AG","AL","AM","AO","AR","AT","AU-LH","AU-NSW","AU-NT","AU-QLD","AU-SA","AU-TAS","AU-TAS-CBI","AU-TAS-FI","AU-TAS-KI","AU-VIC","AU-WA","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BM","BN","BO","BR-CS","BR-N","BR-NE","BR-S","BS","BT","BW","BY","BZ","CA-AB","CA-BC","CA-MB","CA-NB","CA-NL","CA-NS","CA-NT","CA-NU","CA-ON","CA-PE","CA-QC","CA-SK","CA-YT","CD","CF","CG","CH","CI","CL-CHP","CL-SEA","CL-SEM","CL-SEN","CM","CN","CO","CR","CU","CV","CW","CY","CZ","DE","DJ","DK-BHM","DK-DK1","DK-DK2","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ES-CN-FV","ES-CN-GC","ES-CN-HI","ES-CN-IG","ES-CN-LP","ES-CN-LZ","ES-CN-TE","ES-IB-FO","ES-IB-IZ","ES-IB-MA","ES-IB-ME","ET","FI","FJ","FK","FM","FO-MI","FO-SI","FR","FR-COR","GA","GB","GB-NIR","GB-ORK","GB-ZET","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GT","GU","GW","GY","HK","HN","HR","HT","HU","ID","IE","IL","IM","IN-AN","IN-EA","IN-NE","IN-NO","IN-SO","IN-WE","IQ","IR","IS","IT-CALA","IT-CNO","IT-CSO","IT-NO","IT-SAR","IT-SIC","IT-SO","JE","JM","JO","JP-CB","JP-CG","JP-HKD","JP-HR","JP-KN","JP-KY","JP-ON","JP-SK","JP-TH","JP-TK","KE","KG","KH","KM","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MD","ME","MG","MK","ML","MM","MN","MQ","MR","MT","MU","MV","MW","MX","MY-EM","MY-WM","MZ","NA","NC","NE","NG","NI","NL","NO-NO1","NO-NO2","NO-NO3","NO-NO4","NO-NO5","NP","NZ","NZ-NZC","NZ-NZST","OM","PA","PE","PF","PG","PH-LU","PH-MI","PH-VI","PK","PL","PM","PR","PS","PT","PT-AC","PT-MA","PW","PY","QA","RE","RO","RS","RU-1","RU-2","RU-AS","RU-EU","RU-FE","RU-KGD","RW","SA","SB","SC","SD","SE-SE1","SE-SE2","SE-SE3","SE-SE4","SG","SI","SJ","SK","SL","SN","SO","SR","SS","ST","SV","SY","SZ","TD","TG","TH","TJ","TL","TM","TN","TO","TR","TT","TW","TZ","UA","UA-CR","UG","US-AK","US-AK-SEAPA","US-CAL-BANC","US-CAL-CISO","US-CAL-IID","US-CAL-LDWP","US-CAL-TIDC","US-CAR-CPLE","US-CAR-CPLW","US-CAR-DUK","US-CAR-SC","US-CAR-SCEG","US-CENT-SPA","US-CENT-SWPP","US-FLA-FMPP","US-FLA-FPC","US-FLA-FPL","US-FLA-GVL","US-FLA-HST","US-FLA-JEA","US-FLA-SEC","US-FLA-TAL","US-FLA-TEC","US-HI","US-MIDA-PJM","US-MIDW-AECI","US-MIDW-LGEE","US-MIDW-MISO","US-NE-ISNE","US-NW-AVA","US-NW-BPAT","US-NW-CHPD","US-NW-DOPD","US-NW-GCPD","US-NW-IPCO","US-NW-NEVP","US-NW-NWMT","US-NW-PACE","US-NW-PACW","US-NW-PGE","US-NW-PSCO","US-NW-PSEI","US-NW-SCL","US-NW-TPWR","US-NW-WACM","US-NW-WAUW","US-NY-NYIS","US-SE-SOCO","US-SW-AZPS","US-SW-EPE","US-SW-PNM","US-SW-SRP","US-SW-TEPC","US-SW-WALC","US-TEN-TVA","US-TEX-ERCO","UY","UZ","VC","VE","VI","VN","VU","WS","XK","XX","YE","YT","ZA","ZM","ZW"]},"type":"array"},{"type":"string","enum":["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","XX","YE","YT","ZA","ZM","ZW"]},{"items":{"type":"string","enum":["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","XX","YE","YT","ZA","ZM","ZW"]},"type":"array"},{"$ref":"#/components/schemas/POIReference"},{"items":{"$ref":"#/components/schemas/POIReference"},"type":"array"}],"title":"Value","description":"Geographic coordinates or identifiers. For 'point': [latitude, longitude] or list of coordinate pairs. For 'bounding_box': [[lat_min, lon_min], [lat_max, lon_max]]. For 'polygon': [[lat1, lon1], [lat2, lon2], ...]. For 'market_zone' or 'country_key': string code or list of codes. For 'poi': POIReference object or list of POIReference objects.","examples":[[52.52,13.405],[[52.52,13.405],[47.3784,8.5387]],"DE",["DE","FR"],[[52.52,13.405],[47.3784,8.5387],[51.0538,12.3724]],[[30,-15],[60,30]],{"coordinates":[52.52,13.405],"id":"station_123","label":"Berlin"}]},"method":{"anyOf":[{"type":"string","enum":["nearest","bilinear"]},{"type":"null"}],"title":"Method","description":"Interpolation method for point queries. 'nearest': Uses closest grid point (faster). 'bilinear': Interpolates between 4 surrounding grid points. Only applicable when type='point'. Defaults to 'nearest'"}},"type":"object","required":["type","value"],"title":"GeoFilter","description":"Geographic filter for specifying query locations.\n\nSupports various geographic query types including points, regions, and\npredefined areas like market zones."},"Grid":{"type":"string","enum":["720x1440","2160x4320","1440x2880","2220x4440","2221x4440","360x720","180x360","451x900","720x900_europe","721x1201_europe","657x1377","553x961_europe","746x1215","exact"],"title":"Grid"},"GridBounds":{"properties":{"min_lat":{"type":"number","title":"Min Lat"},"max_lat":{"type":"number","title":"Max Lat"},"min_lon":{"type":"number","title":"Min Lon"},"max_lon":{"type":"number","title":"Max Lon"}},"type":"object","required":["min_lat","max_lat","min_lon","max_lon"],"title":"GridBounds"},"GroupByKey":{"properties":{"field":{"type":"string","enum":["model","init_time","time","prediction_timedelta","ensemble_member","market_zone","country_key","point","latitude","longitude","day_of_year","hour"],"title":"Field"},"transformation":{"anyOf":[{"type":"string","const":"to_start_of"},{"type":"null"}],"title":"Transformation"},"parameters_list":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Parameters List"}},"type":"object","required":["field"],"title":"GroupByKey","description":"Structured representation of a group-by key.\n\n- field: one of supported base fields\n- transformation: optional transformation name (currently only 'to_start_of')\n- parameters_list: optional list of parameters for the transformation"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InitTimeInfo":{"properties":{"init_time":{"type":"string","format":"date-time","title":"Init Time"},"max_prediction_timedelta":{"type":"integer","title":"Max Prediction Timedelta"}},"type":"object","required":["init_time","max_prediction_timedelta"],"title":"InitTimeInfo","description":"Information about an available init_time."},"LatestForecastInfo":{"properties":{"init_time":{"type":"string","title":"Init Time","description":"Latest forecast initialization time (ISO 8601 format)"},"prediction_timedelta":{"type":"integer","title":"Prediction Timedelta","description":"Maximum available lead time in minutes for this forecast"},"dissemination_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dissemination Time","description":"Forecast step dissemination time"}},"type":"object","required":["init_time","prediction_timedelta"],"title":"LatestForecastInfo","description":"Information about the latest available forecast for a model."},"LatestForecastInfoQueryResult":{"properties":{"forecasts_per_model":{"additionalProperties":{"$ref":"#/components/schemas/LatestForecastInfo"},"propertyNames":{"$ref":"#/components/schemas/Model"},"type":"object","title":"Forecasts Per Model","description":"Mapping of model identifiers to their latest forecast information"}},"type":"object","required":["forecasts_per_model"],"title":"LatestForecastInfoQueryResult","description":"Result containing the latest forecast information per model."},"LatestTimestampResult":{"properties":{"timestamps":{"additionalProperties":{"type":"string","format":"date-time"},"type":"object","title":"Timestamps"}},"type":"object","required":["timestamps"],"title":"LatestTimestampResult","description":"Result containing latest timestamps per model."},"MWZonesResponse":{"properties":{"wind":{"items":{"type":"string"},"type":"array","title":"Wind"},"wind_combined":{"items":{"type":"string"},"type":"array","title":"Wind Combined"},"wind_onshore_only":{"items":{"type":"string"},"type":"array","title":"Wind Onshore Only"},"solar":{"items":{"type":"string"},"type":"array","title":"Solar"},"load":{"items":{"type":"string"},"type":"array","title":"Load"}},"type":"object","required":["wind","wind_combined","wind_onshore_only","solar","load"],"title":"MWZonesResponse","description":"Market zones that have power-curve data and can produce MW output."},"MetaQueryResult":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ModelInfo"},"type":"array","title":"Models","description":"List of model metadata"}},"type":"object","required":["models"],"title":"MetaQueryResult","description":"Result containing metadata for one or more forecast models."},"Model":{"type":"string","enum":["ept2","ept2_early","ept2_e","ept2_rr","ept2_hrrr","ept1_5","ept1_5_early","aifs","aurora","icon_global","icon_eu","ecmwf_ifs_single","ecmwf_ens","ecmwf_ec46","ecmwf_seas5","ept2_reasoning","ecmwf_aifs025_ensemble","meteofrance_arome_france_hd","gfs_global_single","noaa_gfs_single","gfs_global_ensemble","icon_d2","gfs_graphcast025","knmi_harmonie_arome_europe","knmi_harmonie_arome_netherlands","ukmo_global_deterministic_10km","ukmo_uk_deterministic_2km"],"title":"Model"},"ModelDisseminationStatus":{"properties":{"status":{"items":{"$ref":"#/components/schemas/ForecastDisseminationStatus"},"type":"array","title":"Status","description":"Status for the model"},"delay_stats_per_init_time":{"additionalProperties":{"$ref":"#/components/schemas/DisseminationStats"},"type":"object","title":"Delay Stats Per Init Time","description":"Delay statistics per init time (without date, e.g., '00:00', '06:00')"}},"type":"object","required":["status","delay_stats_per_init_time"],"title":"ModelDisseminationStatus"},"ModelInfo":{"properties":{"name":{"type":"string","title":"Name","description":"The name of the model"},"grid":{"anyOf":[{"$ref":"#/components/schemas/Grid"},{"type":"null"}],"description":"Human readable grid description"},"is_ensemble_model":{"type":"boolean","title":"Is Ensemble Model","description":"Whether the model is an ensemble model","default":false},"variables":{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array","title":"Variables","description":"The variables of the model"},"daily_runs":{"additionalProperties":{"$ref":"#/components/schemas/RunDefinition"},"propertyNames":{"format":"time"},"type":"object","title":"Daily Runs","description":"The daily runs of the model"},"init_schedule":{"type":"string","title":"Init Schedule","description":"Cron expression (5-field: 'minute hour day-of-month month day-of-week') specifying which *dates* the model runs on. The minute/hour fields MUST be '*' — time-of-day lives exclusively in ``daily_runs`` (its dict keys are the clock times of each run). Default '* * * * *' means 'every day', which preserves the previous implicit semantics for all existing models. Example: '* * 1 * *' for a once-a-month model (SEAS5); '* * * * 0' for weekly-Sunday.","default":"* * * * *"},"variable_units":{"additionalProperties":{"type":"string"},"type":"object","title":"Variable Units","description":"SI unit for each variable (e.g. K, Pa, m/s)","readOnly":true},"grid_bounds":{"anyOf":[{"$ref":"#/components/schemas/GridBounds"},{"type":"null"}],"description":"The bounds of the grid","readOnly":true},"is_limited_model":{"type":"boolean","title":"Is Limited Model","description":"Limited models provide limited capabilities, such as being restricted to point forecasts and no access to historical data","readOnly":true},"min_step_minutes":{"type":"integer","title":"Min Step Minutes","description":"Minimum temporal step size across all runs in minutes","readOnly":true}},"type":"object","required":["name","variables","variable_units","grid_bounds","is_limited_model","min_step_minutes"],"title":"ModelInfo"},"NetztransparenzDirection":{"type":"string","enum":["positive","negative"],"title":"NetztransparenzDirection","description":"Direction indicators for signed values.\n\nUsed for balance and reserve data: positive/negative values."},"NetztransparenzSubcategory":{"type":"string","enum":["H1","H2","T1","T2","T3","T4","T5","T6","AEP Modul 1","AEP Modul 2","AEP Modul 3"],"title":"NetztransparenzSubcategory","description":"Subcategories for specific variable types.\n\nNote: Only certain variables support subcategory filtering:\n- ABSM variables (absm_*): H1, H2, T1-T6 (relief regions)\n- aep_module_qualitaetsgesichert, finanzielle_wirkung_aep: AEP Modul 1/2/3"},"NetztransparenzTimeseriesQuery":{"properties":{"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/NetztransparenzVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"List of Netztransparenz variable types to query. If not set, returns all variables.","examples":[["nrv_saldo_betrieblich","aep_schaetzer_betrieblich"]]},"tsos":{"anyOf":[{"items":{"$ref":"#/components/schemas/NetztransparenzTso"},"type":"array"},{"type":"null"}],"title":"Tsos","description":"List of TSOs to filter by (e.g., ['50Hertz', 'Amprion'])","examples":[["50Hertz","Amprion"]]},"subcategories":{"anyOf":[{"items":{"$ref":"#/components/schemas/NetztransparenzSubcategory"},"type":"array"},{"type":"null"}],"title":"Subcategories","description":"List of subcategories (only for ABSM relief regions or AEP module variables)","examples":[["H1","H2","T1"]]},"directions":{"anyOf":[{"items":{"$ref":"#/components/schemas/NetztransparenzDirection"},"type":"array"},{"type":"null"}],"title":"Directions","description":"List of directions (e.g., ['positive', 'negative'])","examples":[["positive","negative"]]},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the query (inclusive)","examples":["2025-12-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time for the query (exclusive). If None, no upper bound is applied (useful for day-ahead forecasts)","examples":["2025-12-15T00:00:00Z"]},"aggregation":{"$ref":"#/components/schemas/jua_query_v2__netztransparenz__query__TemporalAggregation","description":"Temporal aggregation to apply","default":"none"},"include_metadata":{"type":"boolean","title":"Include Metadata","description":"Include metadata column in response","default":false},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone name for time formatting (e.g., 'Europe/Berlin', 'America/New_York'). Defaults to UTC","examples":["UTC","Europe/Berlin"]},"order_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by","examples":[["time","tso"]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, the query only returns rows whose estimated Netztransparenz publication time is <= this timestamp. Used by /simulate/netztransparenz to backtest against the data state at as_of."}},"type":"object","required":["start_time"],"title":"NetztransparenzTimeseriesQuery","description":"Query parameters for Netztransparenz timeseries data.\n\nSupports filtering by:\n- variables: List of variable types (optional, returns all if not set)\n- tsos: List of TSOs to filter by (optional)\n- subcategories: List of technology subcategories (optional)\n- directions: List of directions - positive/negative (optional)\n- start_time: Start of time range (required)\n- end_time: End of time range (optional - if None, no upper bound applied)\n\nNote: end_time can be None to include all future data, which is useful\nfor day-ahead forecasts that extend into tomorrow."},"NetztransparenzTso":{"type":"string","enum":["50Hertz","Amprion","TenneT TSO","TransnetBW","gesamt"],"title":"NetztransparenzTso","description":"German Transmission System Operators (TSOs).\n\nThe four TSOs that operate the German high-voltage transmission grid,\nplus the Germany-wide aggregate."},"NetztransparenzVariable":{"type":"string","enum":["vermarktung_epex","vermarktung_exaa","vermarktung_solar","vermarktung_wind","vermarktung_sonstige","untertaegige_strommengen","differenz_einspeiseprognose","hochrechnung_solar","hochrechnung_wind","absm_ausgewiesen","absm_zugeteilt","absm_erzeugungsverbot","nrv_saldo_betrieblich","nrv_saldo_qualitaetsgesichert","rz_saldo_betrieblich","rz_saldo_qualitaetsgesichert","nrv_saldo_minute_betrieblich","aep_schaetzer_betrieblich","idaep","rebap_qualitaetsgesichert","voaa_qualitaetsgesichert","finanzielle_wirkung_aep","aep_module_qualitaetsgesichert","aktivierte_srl_betrieblich","aktivierte_srl_qualitaetsgesichert","aktivierte_mrl_betrieblich","aktivierte_mrl_qualitaetsgesichert","srl_optimierung_betrieblich","srl_optimierung_qualitaetsgesichert","mrl_optimierung_betrieblich","mrl_optimierung_qualitaetsgesichert","difference_betrieblich","difference_qualitaetsgesichert","prl_betrieblich","prl_qualitaetsgesichert","zusatzmassnahmen_betrieblich","zusatzmassnahmen_qualitaetsgesichert","nothilfe_betrieblich","nothilfe_qualitaetsgesichert","abschaltbare_lasten_betrieblich","abschaltbare_lasten_qualitaetsgesichert","mfrr_satisfied_demand_betrieblich","inanspruchnahme_ausgleichsenergie"],"title":"NetztransparenzVariable","description":"Netztransparenz timeseries variable types.\n\nVariables are organized by category matching the data dictionary."},"NetztransparenzVariableInfo":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"},"uses_tso":{"type":"boolean","title":"Uses Tso","default":true},"uses_subcategory":{"type":"boolean","title":"Uses Subcategory","default":false},"uses_direction":{"type":"boolean","title":"Uses Direction","default":false}},"type":"object","required":["name","description","unit"],"title":"NetztransparenzVariableInfo","description":"Information about a Netztransparenz variable."},"OrderByItem_Union_Coordinates__CustomerVariable__":{"properties":{"field":{"anyOf":[{"$ref":"#/components/schemas/Coordinates"},{"$ref":"#/components/schemas/CustomerVariable"}],"title":"Field","description":"Field to sort by"},"direction":{"$ref":"#/components/schemas/SortDirection","description":"Sort direction: 'asc' (default) or 'desc'","default":"asc"},"aggregation":{"anyOf":[{"type":"string","enum":["avg","std","min","max","sum","count","median","quantile","argmin","argmax"]},{"type":"null"}],"title":"Aggregation","description":"Aggregation function when ordering by variable"}},"type":"object","required":["field"],"title":"OrderByItem[Union[Coordinates, CustomerVariable]]"},"OrderByItem_Union_ReanalysisCoordinates__CustomerVariable__":{"properties":{"field":{"anyOf":[{"$ref":"#/components/schemas/ReanalysisCoordinates"},{"$ref":"#/components/schemas/CustomerVariable"}],"title":"Field","description":"Field to sort by"},"direction":{"$ref":"#/components/schemas/SortDirection","description":"Sort direction: 'asc' (default) or 'desc'","default":"asc"},"aggregation":{"anyOf":[{"type":"string","enum":["avg","std","min","max","sum","count","median","quantile","argmin","argmax"]},{"type":"null"}],"title":"Aggregation","description":"Aggregation function when ordering by variable"}},"type":"object","required":["field"],"title":"OrderByItem[Union[ReanalysisCoordinates, CustomerVariable]]"},"OrderByItem_str_":{"properties":{"field":{"type":"string","title":"Field","description":"Field to sort by"},"direction":{"$ref":"#/components/schemas/SortDirection","description":"Sort direction: 'asc' (default) or 'desc'","default":"asc"},"aggregation":{"anyOf":[{"type":"string","enum":["avg","std","min","max","sum","count","median","quantile","argmin","argmax"]},{"type":"null"}],"title":"Aggregation","description":"Aggregation function when ordering by variable"}},"type":"object","required":["field"],"title":"OrderByItem[str]"},"POIReference":{"properties":{"coordinates":{"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array","maxItems":2,"minItems":2,"title":"Coordinates","description":"Geographic coordinates as [latitude, longitude]"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Optional unique identifier (e.g., station ID)"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","description":"Optional human-readable name for display"}},"type":"object","required":["coordinates"],"title":"POIReference","description":"Reference to a Point of Interest with optional identity.\n\nThe coordinates are required for geo queries. The id and label are optional\nmetadata - id can be used by data sources that need identifiers (e.g., station IDs),\nand label provides a human-readable name for display purposes."},"Pagination":{"properties":{"limit":{"type":"integer","title":"Limit","default":100},"offset":{"type":"integer","title":"Offset","default":0}},"type":"object","title":"Pagination"},"PowerForecastQuery":{"properties":{"zone_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Zone Keys","description":"List of zone codes (e.g. ['DE', 'FR'])","examples":[["DE"]]},"psr_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Psr Types","description":"List of PSR types (e.g. ['Solar', 'Wind Onshore'])","examples":[["Solar","Wind Onshore"]]},"init_time":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"items":{"anyOf":[{"type":"string","format":"date-time"},{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"}]},"type":"array"},{"type":"null"}],"title":"Init Time","description":"Init time selection for horizon mode. Accepts datetime(s), 'latest', or 'latest-N'.","examples":["latest","latest-2",["2025-12-01T00:00:00Z","latest-1"]]},"max_prediction_timedelta":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Max Prediction Timedelta","description":"Maximum prediction horizon in minutes (horizon mode)"},"start_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Time","description":"Start of time range (inclusive, time range mode)","examples":["2025-12-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End of time range (exclusive, time range mode)","examples":["2025-12-07T00:00:00Z"]},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone name for time formatting (e.g. 'Europe/Berlin')","examples":["UTC","Europe/Berlin"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by. Supports direction suffix: 'time__desc' for descending. Default: time ASC.","examples":[["time","zone_key"]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Synthetic invocation time for backtesting (ISO 8601 UTC datetime). **Honoured only by /simulate/power-forecast/data; the live /power-forecast/data endpoint silently strips this field** so live callers always get real-time behaviour. When set on the simulate endpoint, only forecast runs whose estimated upstream publication time is <= this timestamp are visible (per-zone lag from ``power_forecast.dissemination``).","examples":["2025-06-15T12:00:00Z"]}},"type":"object","title":"PowerForecastQuery","description":"Query parameters for power forecast data.\n\nSupports two mutually exclusive query modes:\n\n**Horizon mode** (init_time-centric):\n    - Specify init_time as datetime(s) or relative tokens (latest/latest-N)\n    - Optionally limit by max_prediction_timedelta\n\n**Time range mode** (time-centric):\n    - Specify start_time / end_time\n    - Computed time = init_time + prediction_timedelta * 60s\n\nCommon filters:\n    - zone_keys: List of zone codes (e.g. [\"DE\", \"FR\"])\n    - psr_types: List of generation types (e.g. [\"Solar\", \"Wind Onshore\"])"},"PredictionTimedeltaSlice":{"properties":{"start":{"type":"integer","minimum":0.0,"title":"Start","description":"Start lead time in minutes from init_time (inclusive)","default":0},"end":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"End","description":"End lead time in minutes from init_time (inclusive). If None, uses model's maximum available lead time"}},"type":"object","title":"PredictionTimedeltaSlice","description":"Forecast lead time range in minutes from the initialization time."},"PreferredHours":{"properties":{"type":{"type":"string","title":"Type","default":"preferred_hours"},"selections":{"items":{"$ref":"#/components/schemas/PreferredHoursSelection"},"type":"array","title":"Selections","description":"List of {hour, offset} pairs to select"}},"type":"object","title":"PreferredHours","description":"Select specific forecast runs by UTC hour and per-hour offset.\n\nEach selection picks the Nth most recent available run at a given UTC hour.\nExample: selections=[{hour:6, offset:0}, {hour:6, offset:2}, {hour:18, offset:0}]\nresolves to today's 6am, day-before-yesterday's 6am, and today's 6pm."},"PreferredHoursSelection":{"properties":{"hour":{"type":"integer","maximum":23.0,"minimum":0.0,"title":"Hour","description":"UTC hour (0-23)"},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"0 = most recent run at this hour, 1 = previous, etc.","default":0}},"type":"object","required":["hour"],"title":"PreferredHoursSelection","description":"A single preferred-hour run selection.\n\nPicks the Nth most recent run at a given UTC hour."},"ReanalysisCoordinates":{"type":"string","enum":["model","time","latitude","longitude","point","market_zone","country_key"],"title":"ReanalysisCoordinates","description":"Coordinate dimensions available for reanalysis queries."},"ReanalysisMetaResult":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ReanalysisModelInfo"},"type":"array","title":"Models"}},"type":"object","required":["models"],"title":"ReanalysisMetaResult","description":"Metadata about available reanalysis models."},"ReanalysisModel":{"type":"string","enum":["arco_era5"],"title":"ReanalysisModel","description":"Enumeration of available reanalysis models.\n\nUnlike forecast models which have init_time + prediction_timedelta dimensions,\nreanalysis models have a single time dimension representing the actual timestamp\nof the analysis."},"ReanalysisModelInfo":{"properties":{"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"grid_resolution":{"type":"string","title":"Grid Resolution"},"temporal_resolution_minutes":{"type":"integer","title":"Temporal Resolution Minutes"},"variables":{"items":{"type":"string"},"type":"array","title":"Variables"},"variable_units":{"additionalProperties":{"type":"string"},"type":"object","title":"Variable Units","default":{}}},"type":"object","required":["name","display_name","grid_resolution","temporal_resolution_minutes","variables"],"title":"ReanalysisModelInfo","description":"Information about a reanalysis model."},"ReanalysisQuery":{"properties":{"models":{"items":{"$ref":"#/components/schemas/ReanalysisModel"},"type":"array","title":"Models","description":"List of reanalysis model identifiers to query","examples":[["arco_era5"]]},"geo":{"$ref":"#/components/schemas/GeoFilter","description":"Geographic filter specifying the query location(s) or region(s)","examples":[{"method":"nearest","type":"point","value":[[52.52,13.405]]},{"type":"market_zone","value":"DE"},{"type":"country_key","value":"DE"},{"type":"country_key","value":["DE","FR"]}]},"time":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"},{"items":{"anyOf":[{"type":"integer","minimum":0.0,"description":"Offset from latest forecast (0 = latest, 1 = second latest, etc.)"},{"type":"string","format":"date-time"},{"type":"string","pattern":"^latest(-\\d+)?$","description":"Use 'latest' or 'latest-N' for relative init times"}]},"type":"array"},{"$ref":"#/components/schemas/TimeSlice"},{"$ref":"#/components/schemas/PreferredHours"}],"title":"Time","description":"Time(s) to query. Can be 'latest' (or integer offset 0), a single datetime, a list of datetimes, or a TimeSlice range.","examples":["latest",0,"2024-01-15T00:00:00Z",["2024-01-15T00:00:00Z","2024-01-16T00:00:00Z"],{"end":"2024-01-07T00:00:00Z","start":"2024-01-01T00:00:00Z"}]},"variables":{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array","title":"Variables","description":"List of weather variables to query. If empty, returns all variables available for the selected models","examples":[["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"]]},"group_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/GroupByKey"},"type":"array"},{"type":"null"}],"title":"Group By","description":"List of dimensions to group by for aggregation (e.g., ['model', 'time']). Requires 'aggregation' to be specified."},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_Union_ReanalysisCoordinates__CustomerVariable__"},"type":"array"},{"type":"null"}],"title":"Order By","description":"List of dimensions to sort results by. Supports direction suffix: 'time__desc' for descending, 'time__asc' for ascending (default). Can also use object format: {'field': 'time', 'direction': 'desc'}","examples":[["model","time"],["point","time__desc"],[{"direction":"desc","field":"time"}]]},"aggregation":{"anyOf":[{"items":{"$ref":"#/components/schemas/Aggregation"},"type":"array"},{"type":"null"}],"title":"Aggregation","description":"List of aggregation functions to apply when grouping (e.g., ['avg', 'std']). Requires 'group_by' to be specified"},"weighting":{"anyOf":[{"$ref":"#/components/schemas/Weighting"},{"type":"null"}],"description":"Optional weighting scheme for geographic aggregation (e.g., by wind/solar capacity or population)","examples":[{"type":"wind_capacity"},{"type":"solar_capacity"},{"type":"population"}]},"include_time":{"type":"boolean","title":"Include Time","description":"Include the time column in results (default: True)","default":true},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone name for time formatting (e.g., 'Europe/Berlin', 'America/New_York'). Defaults to UTC","examples":["UTC","Europe/Berlin","America/New_York"]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters for limiting result size. Requires 'order_by' to be specified","examples":[{"limit":100,"offset":0}]},"were_variables_explicitly_requested":{"type":"boolean","title":"Were Variables Explicitly Requested","description":"Whether the user passed the variables explicitly. If True, the variables will be used to filter the results. If False, all variables will be returned.","default":true},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, only rows whose estimated reanalysis publication time is <= as_of are returned. Used by /simulate/reanalysis to backtest against the data state at as_of. ERA5T preliminary publishes ~5 days after the valid time; the final ERA5 release lags by 2–3 months."}},"type":"object","required":["models","geo","time"],"title":"ReanalysisQuery","description":"Query object for retrieving reanalysis data.\n\nReanalysis data uses a simple time dimension (unlike forecasts which\nhave init_time + prediction_timedelta). This provides historical\nanalysis data at specified timestamps.\n\nExample:\n    ```python\n    query = ReanalysisQuery(\n        models=[\"arco_era5\"],\n        geo={\"type\": \"point\", \"value\": [(52.52, 13.405)]},\n        time={\"start\": \"2024-01-01T00:00:00Z\", \"end\": \"2024-01-07T00:00:00Z\"},\n        variables=[\"air_temperature_at_height_level_2m\"],\n    )\n    ```"},"RunDefinition":{"properties":{"lead_time_set":{"items":{"type":"integer"},"type":"array","title":"Lead Time Set"},"dissemination_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"Dissemination Time"},"dissemination_day_offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dissemination Day Offset"},"min_step_minutes":{"type":"integer","title":"Min Step Minutes","description":"Minimum temporal step size between consecutive lead times in minutes.\n\nReturns 60 (hourly) as default if step cannot be determined.","readOnly":true}},"type":"object","required":["lead_time_set","min_step_minutes"],"title":"RunDefinition"},"SortDirection":{"type":"string","enum":["asc","desc"],"title":"SortDirection","description":"Sort direction for ORDER BY clauses."},"StationBenchmarkQuery":{"properties":{"station_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Station Ids","description":"List of specific station IDs to query. Mutually exclusive with geo filter."},"geo":{"anyOf":[{"$ref":"#/components/schemas/GeoFilter"},{"type":"null"}],"description":"Geographic filter for selecting stations by region. Mutually exclusive with station_ids."},"models":{"items":{"$ref":"#/components/schemas/Model"},"type":"array","title":"Models","description":"List of model names to query (e.g., ['ept2', 'aifs'])"},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for benchmark period"},"end_time":{"type":"string","format":"date-time","title":"End Time","description":"End time for benchmark period"},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"List of variables to compute metrics for"},"max_prediction_timedelta_minutes":{"type":"integer","title":"Max Prediction Timedelta Minutes","description":"Maximum prediction lead time in minutes","default":10080},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, only metric rows whose (forecast_dissemination, valid_time + truth_lag) is on or before as_of are returned. Used by /simulate/station-benchmarks to backtest as the benchmark would have appeared at as_of."}},"type":"object","required":["models","start_time","end_time"],"title":"StationBenchmarkQuery","description":"Query parameters for station benchmark data."},"StationDataQuery":{"properties":{"station_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Station Ids","description":"List of ICAO station codes to query. Mutually exclusive with geo.","examples":[["EDDT","EDDH","LFPG"]]},"geo":{"anyOf":[{"$ref":"#/components/schemas/GeoFilter"},{"type":"null"}],"description":"Geographic filter for selecting stations by region. Supports: bounding_box, market_zone, country_key, polygon. Mutually exclusive with station_ids."},"bounding_box":{"anyOf":[{"$ref":"#/components/schemas/BoundingBox"},{"type":"null"}],"description":"[Deprecated] Use geo with type='bounding_box' instead.","examples":[{"max_lat":50.0,"max_lon":10.0,"min_lat":40.0,"min_lon":-10.0}]},"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/StationVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"List of observation variables to return. If not set, returns all.","examples":[["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"]]},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the query (inclusive)","examples":["2024-01-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time for the query (exclusive). If not set, no upper bound.","examples":["2024-01-07T00:00:00Z"]},"aggregation":{"$ref":"#/components/schemas/jua_query_v2__station_data__query__TemporalAggregation","description":"Temporal aggregation to apply (none, hourly, daily)","default":"none"},"aggregate_across_stations":{"type":"boolean","title":"Aggregate Across Stations","description":"If True and aggregation is hourly/daily, compute mean across all stations (regional average). If False, compute mean per station.","default":false},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for time formatting. Defaults to UTC.","examples":["UTC","Europe/Berlin","America/New_York"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by. Supports direction suffix: 'time__desc' for descending, 'time__asc' for ascending (default). Can also use object format: {'field': 'time', 'direction': 'desc'}","examples":[["time","station"],["time__desc"],[{"direction":"desc","field":"time"}]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters (limit, offset)"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Point-in-time replay. If set, only observations whose estimated publication time is <= as_of are returned. Used by /simulate/station-data to backtest against the data state at as_of."}},"type":"object","required":["start_time"],"title":"StationDataQuery","description":"Query parameters for station observation data.\n\nSupports filtering by:\n- station_ids: List of specific station IDs (mutually exclusive with geo)\n- geo: GeoFilter for region-based filtering (bounding_box, market_zone,\n  country_key, polygon)\n- variables: List of observation variables to return\n- start_time / end_time: Time range for observations\n- aggregation: Temporal aggregation (none, hourly, daily)"},"StationInfo":{"properties":{"station":{"type":"string","title":"Station","description":"Unique station identifier"},"name":{"type":"string","title":"Name","description":"Station name"},"latitude":{"type":"number","title":"Latitude","description":"Station latitude"},"longitude":{"type":"number","title":"Longitude","description":"Station longitude"},"elevation":{"type":"number","title":"Elevation","description":"Station elevation in meters"}},"type":"object","required":["station","name","latitude","longitude","elevation"],"title":"StationInfo","description":"Basic station information."},"StationVariable":{"type":"string","enum":["air_temperature_at_height_level_2m","dew_point_temperature_at_height_level_2m","wind_speed_at_height_level_10m","wind_direction_at_height_level_10m"],"title":"StationVariable","description":"Available station observation variables.\n\nThese correspond to columns in the synoptic_station_data table.\nValues use max value as NULL indicator (UInt8: 255, UInt16: 65535).\n\nNote: Only variables with reliable data availability (>60%) are included.\nPressure, precipitation, solar radiation, and cloud cover are NOT available\nin the current station data feed."},"StationVariableInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Variable name (column name)"},"description":{"type":"string","title":"Description","description":"Human-readable description"},"unit":{"type":"string","title":"Unit","description":"Unit of measurement"}},"type":"object","required":["name","description","unit"],"title":"StationVariableInfo","description":"Information about a station variable."},"TimeRangeClimatologyQuery":{"properties":{"geo":{"$ref":"#/components/schemas/GeoFilter","description":"Geographic filter specifying the query location(s) or region(s)","examples":[{"method":"nearest","type":"point","value":[[52.52,13.405]]},{"type":"bounding_box","value":[[[45.0,5.0],[55.0,15.0]]]},{"type":"market_zone","value":"DE"},{"type":"country_key","value":["DE","FR"]}]},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the climatology query (inclusive). UTC timezone."},"end_time":{"type":"string","format":"date-time","title":"End Time","description":"End time for the climatology query (exclusive). UTC timezone."},"variables":{"items":{"$ref":"#/components/schemas/CustomerVariable"},"type":"array","title":"Variables","description":"List of weather variables to query. If empty, returns all available climatology variables.","examples":[["air_temperature_at_height_level_2m","wind_speed_at_height_level_10m"]]},"group_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Group By","description":"List of dimensions to group by for aggregation. Time aggregation options: 'hourly', 'daily', 'weekly'. Other valid fields: 'market_zone', 'country_key', 'point'.","examples":[["hourly"],["hourly","market_zone"],["daily"],["daily","market_zone"],["weekly"]]},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone","description":"Timezone for time-based aggregations (daily, weekly). If not specified, UTC is used. Example: 'Europe/Berlin'.","examples":["UTC","Europe/Berlin","America/New_York"]},"aggregation":{"anyOf":[{"items":{"$ref":"#/components/schemas/Aggregation"},"type":"array"},{"type":"null"}],"title":"Aggregation","description":"List of aggregation functions to apply when grouping (e.g., ['avg', 'std']). Requires 'group_by' to be specified."},"order_by":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Order By","description":"List of dimensions to sort results by. Use 'time' for time-based ordering.","examples":[["time"],["time","latitude","longitude"]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters for limiting result size.","examples":[{"limit":100,"offset":0}]},"weighting":{"anyOf":[{"$ref":"#/components/schemas/Weighting"},{"type":"null"}],"description":"Optional weighting scheme for geographic aggregation. Applies weighted averages based on capacity or population. Only valid with spatial aggregation (market_zone or country_key).","examples":[{"type":"population"},{"type":"wind_capacity"},{"type":"solar_capacity"}]}},"type":"object","required":["geo","start_time","end_time"],"title":"TimeRangeClimatologyQuery","description":"Query for retrieving ERA5 WMO climatology data over a time range.\n\nInstead of specifying day_of_year/hour directly, provide a time range\n(start_time, end_time) and the query will return climatology data\nmatched to each hour in the range. The response includes a 'time'\ncolumn with the full datetime values.\n\nExample:\n    ```python\n    query = TimeRangeClimatologyQuery(\n        geo={\"type\": \"point\", \"value\": [(52.52, 13.405)]},\n        start_time=datetime(2024, 1, 15, 0, 0, 0),\n        end_time=datetime(2024, 1, 16, 0, 0, 0),\n        variables=[\"air_temperature_at_height_level_2m\"],\n    )\n    # Returns 24 hourly rows with daily-smoothed climatology values\n    ```"},"TimeSlice":{"properties":{"start":{"type":"string","format":"date-time","title":"Start","description":"Start datetime (inclusive)","examples":["2025-01-01T00:00:00Z","2025-05-02 12:00:00"]},"end":{"type":"string","format":"date-time","title":"End","description":"End datetime (inclusive) in ISO 8601 format"}},"type":"object","required":["start","end"],"title":"TimeSlice","description":"Time range for querying forecasts between two datetime values."},"TotalNumberOfForecastsQueryResult":{"properties":{"forecasts_per_model":{"additionalProperties":{"type":"integer"},"propertyNames":{"$ref":"#/components/schemas/Model"},"type":"object","title":"Forecasts Per Model","description":"Mapping of model identifiers to the number of available forecasts"}},"type":"object","required":["forecasts_per_model"],"title":"TotalNumberOfForecastsQueryResult","description":"Result containing forecast counts per model."},"UkPowerTimeseriesQuery":{"properties":{"variables":{"anyOf":[{"items":{"$ref":"#/components/schemas/UkPowerVariable"},"type":"array"},{"type":"null"}],"title":"Variables","description":"Variables to query. If not set, returns all.","examples":[["wind","solar"]]},"start_time":{"type":"string","format":"date-time","title":"Start Time","description":"Start time for the query (inclusive)","examples":["2025-12-01T00:00:00Z"]},"end_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Time","description":"End time for the query (exclusive). If None, no upper bound.","examples":["2025-12-15T00:00:00Z"]},"aggregation":{"$ref":"#/components/schemas/jua_query_v2__uk_power__query__TemporalAggregation","description":"Temporal aggregation to apply","default":"none"},"temporal_resolution_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Temporal Resolution Minutes","description":"Target temporal resolution in minutes.  When set, data is linearly interpolated in ClickHouse to the requested cadence (native NESO data is 30-minute; use 15 for 15-minute interpolation).  Set to None (the default) to return data at its native resolution."},"time_zone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time Zone","description":"IANA time zone for time formatting (e.g. 'Europe/London').","examples":["UTC","Europe/London"]},"order_by":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderByItem_str_"},"type":"array"},{"type":"null"}],"title":"Order By","description":"Columns to order by (e.g. 'time__desc').","examples":[["time"],["time__desc"]]},"pagination":{"anyOf":[{"$ref":"#/components/schemas/Pagination"},{"type":"null"}],"description":"Pagination parameters"},"as_of":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of","description":"Optional point-in-time replay timestamp; rows are filtered by estimated upstream publication time (see ``jua_query_v2.uk_power.dissemination``)."}},"type":"object","required":["start_time"],"title":"UkPowerTimeseriesQuery","description":"Query parameters for UK power generation timeseries data.\n\nVariables are aggregated totals:\n- wind: transmission + embedded wind generation\n- solar: total solar generation\n- wind_forecast: day-ahead total wind forecast\n- solar_forecast: day-ahead solar forecast"},"UkPowerVariable":{"type":"string","enum":["wind","wind_transmission","wind_embedded","solar","load","wind_forecast","wind_transmission_forecast","wind_embedded_forecast","solar_forecast"],"title":"UkPowerVariable","description":"UK power generation variable types (aggregated)."},"UkPowerVariableInfo":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["name","description","unit"],"title":"UkPowerVariableInfo","description":"Information about a UK power variable."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValueFilter":{"properties":{"variable":{"type":"string","title":"Variable"},"operator":{"type":"string","title":"Operator"},"value":{"type":"number","title":"Value"}},"type":"object","required":["variable","operator","value"],"title":"ValueFilter","description":"Post-aggregation value filter applied as outermost SQL wrapper."},"Weighting":{"properties":{"type":{"type":"string","enum":["wind_capacity","wind_capacity_combined","solar_capacity","population"],"title":"Type","description":"Weighting type for geographic aggregation. 'wind_capacity': Weight by installed wind power capacity. 'solar_capacity': Weight by installed solar power capacity. 'population': Weight by population density","examples":["wind_capacity","solar_capacity","population"]},"unit":{"type":"string","enum":["weather","mw"],"title":"Unit","description":"Output unit. 'weather': return capacity-weighted raw weather values E[wu]. 'mw': apply power curves in ClickHouse and return predicted MW.","default":"weather"}},"type":"object","required":["type"],"title":"Weighting","description":"Weighting scheme for aggregating forecast data over geographic areas.\n\nApplies weighted averages based on capacity or population distribution within\nthe queried area."},"jua_query_v2__climate_indices__types__AvailableSourcesResult":{"properties":{"sources":{"items":{"type":"string"},"type":"array","title":"Sources"}},"type":"object","required":["sources"],"title":"AvailableSourcesResult","description":"Result for available climate indices data sources query."},"jua_query_v2__eex_gas__types__AvailableAreasResult":{"properties":{"areas":{"items":{"type":"string"},"type":"array","title":"Areas"}},"type":"object","required":["areas"],"title":"AvailableAreasResult","description":"Result type for available EEX gas market areas / hubs."},"jua_query_v2__eex_gas__types__AvailableShortCodesResult":{"properties":{"short_codes":{"items":{"type":"string"},"type":"array","title":"Short Codes"}},"type":"object","required":["short_codes"],"title":"AvailableShortCodesResult","description":"Result type for available EEX gas product ShortCodes."},"jua_query_v2__eex_power__types__AvailableAreasResult":{"properties":{"areas":{"items":{"type":"string"},"type":"array","title":"Areas"}},"type":"object","required":["areas"],"title":"AvailableAreasResult","description":"Result type for available EEX market areas."},"jua_query_v2__eex_power__types__AvailableShortCodesResult":{"properties":{"short_codes":{"items":{"type":"string"},"type":"array","title":"Short Codes"}},"type":"object","required":["short_codes"],"title":"AvailableShortCodesResult","description":"Result type for available EEX product ShortCodes."},"jua_query_v2__entsoe__query__TemporalAggregation":{"type":"string","enum":["none","hourly","daily"],"title":"TemporalAggregation","description":"Temporal aggregation options for ENTSOE queries."},"jua_query_v2__entsoe__types__AvailableVariablesResult":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/EntsoeVariableInfo"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"AvailableVariablesResult","description":"Result for available variables query."},"jua_query_v2__epex_spot__types__AvailableVariablesResult":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/EpexSpotVariableInfo"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"AvailableVariablesResult","description":"Result for available EPEX SPOT variables query."},"jua_query_v2__netztransparenz__query__TemporalAggregation":{"type":"string","enum":["none","hourly","daily"],"title":"TemporalAggregation","description":"Temporal aggregation options for Netztransparenz queries."},"jua_query_v2__netztransparenz__types__AvailableVariablesResult":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/NetztransparenzVariableInfo"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"AvailableVariablesResult","description":"Result for available variables query."},"jua_query_v2__station_data__query__TemporalAggregation":{"type":"string","enum":["none","hourly","daily"],"title":"TemporalAggregation","description":"Temporal aggregation options for station data queries."},"jua_query_v2__station_data__types__AvailableVariablesResult":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/StationVariableInfo"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"AvailableVariablesResult","description":"Result containing list of available variables."},"jua_query_v2__uk_power__query__TemporalAggregation":{"type":"string","enum":["none","hourly","daily"],"title":"TemporalAggregation","description":"Temporal aggregation options for UK power queries."},"jua_query_v2__uk_power__types__AvailableSourcesResult":{"properties":{"sources":{"items":{"type":"string"},"type":"array","title":"Sources"}},"type":"object","required":["sources"],"title":"AvailableSourcesResult","description":"Result for available UK power data sources query."},"jua_query_v2__uk_power__types__AvailableVariablesResult":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/UkPowerVariableInfo"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"AvailableVariablesResult","description":"Result for available UK power variables query."},"query_engine__climatology__router__AvailableVariablesResult":{"properties":{"variables":{"items":{"$ref":"#/components/schemas/ClimatologyVariableInfo"},"type":"array","title":"Variables"}},"type":"object","required":["variables"],"title":"AvailableVariablesResult","description":"Result containing available climatology variables."}},"securitySchemes":{}},"tags":[{"name":"forecast","description":"Query and retrieve weather forecast data from Jua's platform.","externalDocs":{"description":"Forecast API Guide","url":"https://docs.jua.ai/"}},{"name":"benchmarks","description":"Query station benchmark metrics for model evaluation and comparison.","externalDocs":{"description":"Benchmarks API Guide","url":"https://docs.jua.ai/"}},{"name":"entsoe","description":"Query ENTSOE energy market data including prices, load, and generation.","externalDocs":{"description":"ENTSOE API Guide","url":"https://docs.jua.ai/"}},{"name":"netztransparenz","description":"Query German TSO transparency data (netztransparenz.de) including NRV balance, balancing prices, reserve activation, and renewable forecasts.","externalDocs":{"description":"Netztransparenz API Guide","url":"https://docs.jua.ai/"}},{"name":"climatology","description":"Query ERA5 WMO 30-year climatology data (1991-2020) for historical baselines.","externalDocs":{"description":"Climatology API Guide","url":"https://docs.jua.ai/"}},{"name":"station-data","description":"Query weather station observation data including temperature, wind, precipitation, and more.","externalDocs":{"description":"Station Data API Guide","url":"https://docs.jua.ai/"}},{"name":"reanalysis","description":"Query reanalysis data from models like ARCO ERA5 for historical weather analysis.","externalDocs":{"description":"Reanalysis API Guide","url":"https://docs.jua.ai/"}},{"name":"power-forecast","description":"Query power generation forecast data for renewable energy sources (Solar, Wind, etc.).","externalDocs":{"description":"Power Forecast API Guide","url":"https://docs.jua.ai/"}},{"name":"uk-power","description":"Query UK power generation actuals and NESO day-ahead forecasts (wind, solar).","externalDocs":{"description":"UK Power API Guide","url":"https://docs.jua.ai/"}},{"name":"climate-indices","description":"Query climate oscillation indices (ENSO, NAO, AO, PDO, QBO, sunspots, etc.)."},{"name":"eex-power","description":"Query EEX Group power derivatives market data including EOD settlement prices and individual exchange trades across 33 European market areas.","externalDocs":{"description":"EEX Power API Guide","url":"https://docs.jua.ai/"}}]}