> For the complete documentation index, see [llms.txt](https://docs.jua.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.jua.ai/api-v2/query-engine/open-api-reference/benchmarks.md).

# Benchmarks

Query station benchmark metrics for model evaluation and comparison.

## Query station benchmark metrics

> Query benchmark metrics (RMSE, MAE, bias, CRPS, quantiles) for forecast models evaluated against weather station observations.\
> \
> CRPS (Continuous Ranked Probability Score) is derived from the per-ensemble-member forecast errors; for deterministic models it equals MAE.\
> \
> For calibratable Jua ensemble models, CRPS reflects the delivered-product spread calibration by default. Set \`calibrate=false\` to evaluate the raw ensemble spread instead.\
> \
> \*\*Metric selection\*\*: By default all metrics are computed and returned. Pass \`metrics\` (any of \`rmse\`, \`mae\`, \`bias\`, \`crps\`) to compute and return only those. Requesting only mean-based metrics (\`rmse\`/\`mae\`/\`bias\`) is significantly faster for ensemble models, since CRPS is the only metric that needs the per-ensemble-member distribution.\
> \
> Useful for:\
> \- Comparing forecast model performance\
> \- Evaluating model accuracy by region\
> \- Analyzing forecast errors over time\
> \
> \*\*Multi-Model Support\*\*:\
> \- Query multiple models in a single request to compare performance\
> \- Results include model name in each row for easy comparison\
> \
> \*\*Geographic Filtering\*\*:\
> \- \`market\_zone\`: Filter by energy market zone (e.g., "DE", "FR")\
> \- \`country\_key\`: Filter by country code (e.g., "DE", "US")\
> \
> \*\*Note\*\*: Either \`station\_ids\` or \`geo\` must be provided (mutually exclusive).\
> \
> \*\*Authentication\*\*: Requires API key.\
> \
> For more information on benchmark metrics, see \[docs.jua.ai]\(<https://docs.jua.ai>).

```json
{"openapi":"3.1.0","info":{"title":"Jua Query Engine API","version":"0.1.0"},"tags":[{"name":"benchmarks","description":"Query station benchmark metrics for model evaluation and comparison."}],"servers":[{"url":"https://query.jua.ai","description":"Production"}],"security":[{"HTTPBearer":[]}],"paths":{"/v1/station-benchmarks/metrics":{"post":{"tags":["benchmarks"],"summary":"Query station benchmark metrics","description":"Query benchmark metrics (RMSE, MAE, bias, CRPS, quantiles) for forecast models evaluated against weather station observations.\n\nCRPS (Continuous Ranked Probability Score) is derived from the per-ensemble-member forecast errors; for deterministic models it equals MAE.\n\nFor calibratable Jua ensemble models, CRPS reflects the delivered-product spread calibration by default. Set `calibrate=false` to evaluate the raw ensemble spread instead.\n\n**Metric selection**: By default all metrics are computed and returned. Pass `metrics` (any of `rmse`, `mae`, `bias`, `crps`) to compute and return only those. Requesting only mean-based metrics (`rmse`/`mae`/`bias`) is significantly faster for ensemble models, since CRPS is the only metric that needs the per-ensemble-member distribution.\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","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"}}}},"responses":{"200":{"description":"Successfully retrieved benchmark metrics","content":{"application/json":{"schema":{}},"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"}}}}}}}},"components":{"schemas":{"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"},"metrics":{"anyOf":[{"items":{"type":"string","enum":["rmse","mae","bias","crps"]},"type":"array"},{"type":"null"}],"title":"Metrics","description":"Which metrics to compute and return. One or more of 'rmse', 'mae', 'bias', 'crps'. None (the default) returns all four (backward compatible). Selecting only mean-based metrics ('rmse'/'mae'/'bias') is significantly cheaper for ensemble models: CRPS is the only metric that needs the per-member error distribution, so omitting it lets the query skip the per-member array materialisation (and the per-model fan-out it requires)."},"max_prediction_timedelta_minutes":{"type":"integer","title":"Max Prediction Timedelta Minutes","description":"Maximum prediction lead time in minutes","default":28800},"debias":{"type":"boolean","title":"Debias","description":"If True, evaluate supported variables using Jua's bias-corrected forecast errors, keyed by model, valid-time ISO week, forecast-init hour and minute, and prediction lead. Supported variables are air temperature at 2 m, wind speed at 10 m, and surface solar radiation.","default":false},"calibrate":{"type":"boolean","title":"Calibrate","description":"If True, evaluate calibratable Jua ensemble models using the calibrated spread delivered in Jua's forecast product. Set to False to evaluate the raw ensemble spread. Incompatible with obs_buckets.","default":true},"init_hours":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Init Hours","description":"Filter to forecasts initialised at the given UTC hours. Each value must be in 0..23 (e.g. [0, 12] keeps only 00Z and 12Z runs). None or empty list = all hours (no filtering)."},"obs_buckets":{"type":"boolean","title":"Obs Buckets","description":"If True, additionally stratify RMSE / MAE / bias by the observed value's distribution. Each metric is reported per observed-value bucket: < P5, P5-P25, P25-P75, P75-P95, > P95 (plus an 'all' bucket). The P5/P25/P75/P95 thresholds are computed once over the selected stations and time window so the buckets are identical across models and lead times. This option is heavier than the default aggregation and requires exactly one variable.","default":false}},"type":"object","required":["models","start_time","end_time"],"title":"StationBenchmarkQuery","description":"Query parameters for station benchmark data."},"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."},"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."},"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."},"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."},"Model":{"type":"string","enum":["ept2","ept2_early","ept2_e","ept2_rr","ept2_hrrr","ept2_1_helios","ept2_1_europa","ept1_5","ept1_5_early","aifs","aifs_ens","aurora","icon_global","icon_eu","ecmwf_ifs_single","ecmwf_ens","ecmwf_ec46","ecmwf_seas5","ept2_reasoning","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"},"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","surface_elevation","terrain_slope","terrain_aspect"],"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³\n  • surface_elevation: m\n  • terrain_slope: deg\n  • terrain_aspect: deg"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}
```

## Get available benchmark dates

> Retrieve available dates for station benchmark data with optional filtering.\
> \
> Useful for:\
> \- Discovering available benchmark data\
> \- Finding recent benchmark dates\
> \- Planning benchmark queries\
> \
> \*\*Authentication\*\*: Requires API key.\
> \
> For more information, see \[docs.jua.ai]\(<https://docs.jua.ai>).

```json
{"openapi":"3.1.0","info":{"title":"Jua Query Engine API","version":"0.1.0"},"tags":[{"name":"benchmarks","description":"Query station benchmark metrics for model evaluation and comparison."}],"servers":[{"url":"https://query.jua.ai","description":"Production"}],"security":[{"HTTPBearer":[]}],"paths":{"/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","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"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"500":{"description":"Internal server error"}}}}},"components":{"schemas":{"AvailableDatesResponse":{"properties":{"dates":{"items":{"type":"string"},"type":"array","title":"Dates"}},"type":"object","required":["dates"],"title":"AvailableDatesResponse","description":"Response containing available benchmark dates."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}
```

## Get solar-benchmark geographic coverage

> List the country and market-zone codes that have at least one audited solar\
> radiation station.\
> \
> The surface-solar-radiation benchmark is scored only over stations that passed\
> the offline radiation quality audit (a much smaller set than the synoptic\
> network). This endpoint returns the regions where a solar country / market-zone\
> benchmark can actually be computed, so the dashboard can restrict the\
> solar-benchmark region pickers to non-empty selections.\
> \
> \*\*Authentication\*\*: Requires API key.

```json
{"openapi":"3.1.0","info":{"title":"Jua Query Engine API","version":"0.1.0"},"tags":[{"name":"benchmarks","description":"Query station benchmark metrics for model evaluation and comparison."}],"servers":[{"url":"https://query.jua.ai","description":"Production"}],"security":[{"HTTPBearer":[]}],"paths":{"/v1/station-benchmarks/solar-coverage":{"get":{"tags":["benchmarks"],"summary":"Get solar-benchmark geographic coverage","description":"List the country and market-zone codes that have at least one audited solar\nradiation station.\n\nThe surface-solar-radiation benchmark is scored only over stations that passed\nthe offline radiation quality audit (a much smaller set than the synoptic\nnetwork). This endpoint returns the regions where a solar country / market-zone\nbenchmark can actually be computed, so the dashboard can restrict the\nsolar-benchmark region pickers to non-empty selections.\n\n**Authentication**: Requires API key.","operationId":"get_solar_station_coverage_v1_station_benchmarks_solar_coverage_get","responses":{"200":{"description":"Successfully retrieved solar coverage","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolarStationCoverageResponse"}}}},"401":{"description":"Authentication required"},"403":{"description":"Insufficient permissions"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"SolarStationCoverageResponse":{"properties":{"country_keys":{"items":{"type":"string"},"type":"array","title":"Country Keys"},"market_zones":{"items":{"type":"string"},"type":"array","title":"Market Zones"}},"type":"object","required":["country_keys","market_zones"],"title":"SolarStationCoverageResponse","description":"Country / market-zone codes covered by the clean solar-station set."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.jua.ai/api-v2/query-engine/open-api-reference/benchmarks.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
