Forecast
Query and retrieve weather forecast data from Jua's platform.
Retrieve metadata for available forecast models including:
Available weather variables for each model
Spatial grid resolution information
Model identifiers
Use this endpoint to discover which models and variables are available before making data queries.
Authentication: Requires API key.
For detailed model specifications and variable descriptions, visit docs.jua.ai.
Filter by specific model(s). If not provided, returns all models
Successfully retrieved model metadata
Authentication required
Insufficient permissions
Validation Error
GET /v1/forecast/meta HTTP/1.1
Host:
Accept: */*
{
"models": [
{
"model": "ept2",
"variables": [
"air_temperature_at_height_level_2m",
"wind_speed_at_height_level_100m"
],
"grid": {
"num_latitudes": 2160,
"num_longitudes": 4320
}
}
]
}Retrieve credit pricing information for forecast queries including:
Base credit cost per forecast point
Model-specific pricing multipliers
Variable pricing tiers (standard vs advanced variables)
Horizon-based pricing adjustments
Use this information along with the /cost endpoint to estimate query costs before execution.
Authentication: Requires API key.
For pricing details and billing information, visit docs.jua.ai/pricing.
Successfully retrieved pricing information
Authentication required
Insufficient permissions
GET /v1/forecast/pricing HTTP/1.1
Host:
Accept: */*
{
"flu_base_credits": 1,
"resolution_multiplier": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"horizon_multiplier_days": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"per_variable_addition_to_multiplier": 1,
"per_advanced_variable_addition_to_multiplier": 1,
"advanced_variables": [
"air_temperature_at_height_level_2m"
],
"model_multiplier": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"access_right_multiplier": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"assistant_multiplier": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"hindcast_multiplier": 1,
"hindcast_min_lag_days": 1,
"aggregate_credit_per_point": 1,
"aggregate_credit_per_row": 1,
"weighting_mutliplier": 1,
"pay_as_you_go_price_per_credit": 1,
"user_tier_included_credits": {
"ANY_ADDITIONAL_PROPERTY": 1
},
"free_tier_credits": 1,
"free_tier_models": [
"ept2"
],
"horizon_multiplier": {
"ANY_ADDITIONAL_PROPERTY": 1
}
}List all available forecast initialization times for specified models with optional time filtering.
Returns forecast init times and maximum available lead times, useful for:
Discovering historical forecast availability
Finding specific forecast runs
Monitoring forecast data updates
Authentication: Requires API key.
Results are paginated. Use limit and offset parameters to navigate through large result sets.
For forecast schedules and update frequencies, see docs.jua.ai.
Filter by specific model(s). If not provided, returns all accessible models with Clickhouse data source
Only return forecasts initialized on or after this datetime (optional)
2025-01-01T00:00:00ZOnly return forecasts initialized before this datetime (optional)
2025-10-01T00:00:00ZMaximum number of results to return
20Number of results to skip for pagination
0Successfully retrieved available forecasts
Authentication required
Insufficient permissions
Validation error - invalid model selection
GET /v1/forecast/available-forecasts HTTP/1.1
Host:
Accept: */*
{
"forecasts_per_model": {
"ept2": [
{
"init_time": "2025-01-15T00:00:00Z",
"max_prediction_timedelta": 10080
}
]
},
"pagination": {
"limit": 20,
"offset": 0
}
}Get the total count of available forecasts per model with optional time filtering.
Useful for:
Checking data availability before querying
Monitoring forecast archive growth
Validating expected data coverage
Authentication: Requires API key.
For more information on forecast availability, see docs.jua.ai.
Only count forecasts initialized on or after this datetime (optional)
2025-01-01T00:00:00ZOnly count forecasts initialized before this datetime (optional)
2025-10-01T00:00:00ZSuccessfully counted forecasts
Authentication required
Insufficient permissions
Validation error - invalid model selection
GET /v1/forecast/count?models=ept2 HTTP/1.1
Host:
Accept: */*
{
"forecasts_per_model": {
"ept2": 1250,
"aifs": 980
}
}Retrieve the most recent forecast initialization time available for each model.
Returns:
Latest init_time for each model
Maximum available lead time for that forecast
Useful for:
Getting real-time forecast data with
init_time='latest'Monitoring forecast update status
Validating forecast freshness
Authentication: Requires API key.
For forecast update schedules, see docs.jua.ai.
Minimum required lead time in minutes
0Successfully retrieved latest forecast info
Authentication required
Insufficient permissions
Validation error - models list must contain at least one model
GET /v1/forecast/latest-init-time?models=ept2 HTTP/1.1
Host:
Accept: */*
{
"forecasts_per_model": {
"ept2": {
"init_time": "2025-01-15T12:00:00Z",
"prediction_timedelta": 10080
}
}
}Retrieve dissemination status and delay statistics for forecasts.
Returns for each model:
Status for individual forecasts (init_time, delay, whether missing)
Aggregated delay statistics (min, max, mean, median, std, percentiles)
Missing forecast percentage
Useful for:
Monitoring forecast delivery timeliness
Identifying delayed or missing forecasts
Analyzing dissemination performance over time
Authentication: Requires API key.
Results are paginated. Use limit and offset parameters to navigate through large result sets.
For forecast schedules and SLA information, see docs.jua.ai.
Only analyze forecasts initialized on or after this datetime (optional)
2025-01-01T00:00:00ZOnly analyze forecasts initialized before this datetime (optional)
2025-10-01T00:00:00ZMaximum number of forecasts to analyze per model
100Number of forecasts to skip for pagination
0Only return delay statistics per init time (without forecast status)
falseSuccessfully retrieved dissemination status
Authentication required
Insufficient permissions
Validation error - invalid model selection
GET /v1/forecast/dissemination-status?models=ept2 HTTP/1.1
Host:
Accept: */*
{
"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
}
}
}
}Main endpoint for querying weather forecast data with full flexibility.
Features
Query by location (point, area, market zone) and time
Select specific models and weather variables
Support for aggregation and grouping
Multiple response formats (JSON, Apache Arrow)
Optional streaming for large datasets
Response Formats
JSON (
format=json): Returns columnar JSON{column: [values], ...}suitable for small to medium datasetsArrow (
format=arrow): Returns Apache Arrow IPC stream for efficient large dataset handling
Streaming
Set stream=true for streaming responses with Arrow format. Recommended for queries returning >100k rows.
Cost Management
Queries are billed based on data volume, models, and variables. Use:
request_credit_limit: Set maximum credits to prevent unexpectedly large charges/costendpoint: Estimate costs before executing
For more details on how the costs are computed, visit docs.jua.ai/pricing.
Authentication: Requires API key.
For detailed query examples and best practices, visit docs.jua.ai.
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
jsonPossible values: Enable streaming response (only with format=arrow). Recommended for queries returning >100k rows.
falseMaximum credits allowed for this request. Query will fail if estimated cost exceeds this limit
50Main query object for retrieving weather forecast data.
Supports flexible querying by location, time, variables, and models with optional aggregation, grouping, and weighting capabilities.
Two modes of specifying models and init_times:
- Classic mode: Use
models+init_time(same init_time for all models) - Model runs mode: Use
model_runs(per-model init_time specification)
These modes are mutually exclusive.
List of forecast model identifiers to query (e.g., ['ept2', 'aifs']). Required if model_runs is not specified.
["ept2"]Forecast initialization time(s). Use 'latest' for most recent forecast, a datetime string, a list of datetimes (optionally with 'latest'), or a TimeSlice for a date range. Required if model_runs is not specified.
latestPer-model init_time specification. Alternative to models+init_time. Keys are model identifiers, values are init_time specifications. Cannot be used together with models/init_time.
{"aifs":"2025-01-15T00:00:00","ept2":"latest"}Filter by specific forecast valid times (as opposed to lead times). Accepts datetime, list of datetimes, or time range
2025-01-15T09:00:00Forecast 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.
1When 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).
Time scale to use for the query. Can be 'h' for hours, 'm' for minutes, 'd' for days
hExample: hPossible values: 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
List of dimensions to sort results by (e.g., ['model', 'init_time', 'time', 'point'])
["model","init_time","prediction_timedelta"]List of aggregation functions to apply when grouping (e.g., ['avg', 'std']). Requires 'group_by' to be specified
Optional weighting scheme for geographic aggregation (e.g., by wind/solar capacity or population)
{"type":"wind_capacity"}Include the forecast valid time (init_time + prediction_timedelta) as a column in results
falseIANA time zone name for time formatting (e.g., 'Europe/Berlin', 'America/New_York'). Defaults to UTC
UTCPagination parameters for limiting result size. Requires 'order_by' to be specified
{"limit":100,"offset":0}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.
trueSuccessfully retrieved forecast data
Invalid query parameters or response size exceeded
Authentication required
Insufficient credits
Insufficient permissions or model not in subscription
Validation Error
POST /v1/forecast/data HTTP/1.1
Host:
Content-Type: application/json
Accept: */*
Content-Length: 235
{
"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
}
}{
"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
]
}Endpoint to obtain the index for weather forecasts.
Authentication: Requires API key.
For detailed query examples and best practices, visit docs.jua.ai.
Maximum credits allowed for this request. Query will fail if estimated cost exceeds this limit
50Main query object for retrieving the index for forecast data.
Model identifiers to query (e.g. 'ept2')
ept1_5Possible values: Forecast initialization time(s). Use 'latest' for most recent forecast, a datetime string, a list of datetimes, or a TimeSlice for a date range
latestThe range of latitudes to return.
[32,71]Geographic filter specifying the query location(s) or region(s)
[-15,50]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.
1When 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).
Time scale to use for the query. Can be 'h' for hours, 'm' for minutes, 'd' for days
hExample: hPossible values: Successfully retrieved forecast data
Invalid query parameters or response size exceeded
Authentication required
Insufficient credits
Insufficient permissions or model not in subscription
Validation Error
POST /v1/forecast/index HTTP/1.1
Host:
Content-Type: application/json
Accept: */*
Content-Length: 281
{
"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"
}{
"init_time": [
"2025-10-15T00:00:00Z",
"2025-10-15T06:00:00Z"
],
"latitude": [
52,
52.25,
52.5
],
"longitude": [
13,
13.25
],
"prediction_timedelta": [
0,
60,
120,
180
],
"variables": [
"air_temperature_at_height_level_2m"
]
}Simplified GET endpoint for querying forecast data at a single point location.
This endpoint provides a simpler interface compared to POST /data for basic point queries. Use this for quick lookups at specific coordinates.
Limitations:
Point queries only (no areas or market zones)
JSON response format only (no Arrow or streaming)
No grouping or aggregation support
For advanced queries with aggregation, multiple locations, or Arrow format, use POST /data.
Authentication: Requires API key.
See docs.jua.ai for examples.
Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast
Latitude of query point in degrees (-90 to 90)
Longitude of query point in degrees (-180 to 180)
Interpolate or return the nearest value
nearestPossible values: Weather variables to query. If not specified, returns all available variables
IANA time zone name for time formatting
GMTInclude forecast valid time column
trueMinimum lead time in minutes
0Maximum lead time in minutes
Number of results to skip for pagination
0Maximum number of results to return
10000Maximum credits allowed for this request
5Successfully retrieved forecast data
Invalid query parameters
Authentication required
Insufficient credits
Insufficient permissions
Validation Error
GET /v1/forecast/?models=ept2&init_time=2025-12-06T21%3A00%3A31.244Z&latitude=1&longitude=1 HTTP/1.1
Host:
Accept: */*
{
"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
]
}Simplified GET endpoint for querying weighted-average forecasts over market zones or countries.
Automatically applies weighted aggregation based on capacity (wind/solar) or population distribution. Useful for energy market analysis and regional forecasting.
Common Use Cases:
Wind power generation forecasts for market zones (weighted by wind capacity)
Solar power generation forecasts (weighted by solar capacity)
Population-weighted temperature averages for countries
Weighting Options:
wind_capacity: Weight by installed wind power capacitysolar_capacity: Weight by installed solar power capacitypopulation: Weight by population density
Limitations:
JSON response format only (no Arrow or streaming)
Must specify either
market_zonesORcountry_keys(not both)
For advanced aggregation queries, use POST /data with group_by and weighting parameters.
Authentication: Requires API key.
See docs.jua.ai for examples.
Forecast initialization time (ISO 8601 format) or 'latest' for most recent forecast
Weighting scheme for aggregation
Energy market zone codes (e.g., ['DE', 'FR']). Mutually exclusive with country_keys
ISO country codes (e.g., ['DE', 'US']). Mutually exclusive with market_zones
Weather variables to query. If not specified, returns all available variables
IANA time zone name for time formatting
GMTInclude forecast valid time column
trueMinimum lead time in minutes
0Maximum lead time in minutes
Number of results to skip for pagination
0Maximum number of results to return
10000Maximum credits allowed for this request
50Successfully retrieved aggregated forecast data
Invalid parameters (must specify market_zones OR country_keys)
Authentication required
Insufficient credits
Insufficient permissions
Validation Error
GET /v1/forecast/market-aggregate?models=ept2&init_time=2025-12-06T21%3A00%3A31.244Z&weighting=wind_capacity HTTP/1.1
Host:
Accept: */*
{
"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
]
}Calculate the estimated credit cost for a forecast query before executing it.
Returns detailed information about:
Total credits required
Number of data rows to be returned
Number of data rows to be accessed (may differ from returned when using aggregation)
Use this endpoint to:
Preview costs before running expensive queries
Validate query parameters won't exceed budget
Optimize queries to reduce credit usage
Note: This endpoint does not execute the query or charge credits. It only estimates costs based on current data availability and pricing.
Authentication: Requires API key.
For cost optimization strategies, see docs.jua.ai/pricing/optimization.
Main query object for retrieving weather forecast data.
Supports flexible querying by location, time, variables, and models with optional aggregation, grouping, and weighting capabilities.
Two modes of specifying models and init_times:
- Classic mode: Use
models+init_time(same init_time for all models) - Model runs mode: Use
model_runs(per-model init_time specification)
These modes are mutually exclusive.
List of forecast model identifiers to query (e.g., ['ept2', 'aifs']). Required if model_runs is not specified.
["ept2"]Forecast initialization time(s). Use 'latest' for most recent forecast, a datetime string, a list of datetimes (optionally with 'latest'), or a TimeSlice for a date range. Required if model_runs is not specified.
latestPer-model init_time specification. Alternative to models+init_time. Keys are model identifiers, values are init_time specifications. Cannot be used together with models/init_time.
{"aifs":"2025-01-15T00:00:00","ept2":"latest"}Filter by specific forecast valid times (as opposed to lead times). Accepts datetime, list of datetimes, or time range
2025-01-15T09:00:00Forecast 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.
1When 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).
Time scale to use for the query. Can be 'h' for hours, 'm' for minutes, 'd' for days
hExample: hPossible values: 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
List of dimensions to sort results by (e.g., ['model', 'init_time', 'time', 'point'])
["model","init_time","prediction_timedelta"]List of aggregation functions to apply when grouping (e.g., ['avg', 'std']). Requires 'group_by' to be specified
Optional weighting scheme for geographic aggregation (e.g., by wind/solar capacity or population)
{"type":"wind_capacity"}Include the forecast valid time (init_time + prediction_timedelta) as a column in results
falseIANA time zone name for time formatting (e.g., 'Europe/Berlin', 'America/New_York'). Defaults to UTC
UTCPagination parameters for limiting result size. Requires 'order_by' to be specified
{"limit":100,"offset":0}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.
trueSuccessfully calculated query cost
Invalid query parameters
Authentication required
Insufficient permissions
Validation Error
POST /v1/forecast/cost HTTP/1.1
Host:
Content-Type: application/json
Accept: */*
Content-Length: 156
{
"models": [
"ept2"
],
"geo": {
"type": "point",
"value": [
13.405,
52.52
],
"method": "nearest"
},
"variables": [
"air_temperature_at_height_level_2m"
],
"init_time": "latest"
}{
"total_credits_needed": 0.187,
"total_rows_returned": 281,
"total_rows_accessed": 281
}Last updated