curl --request GET \
--url https://api.aisa.one/apis/v1/openmeteo/ensemble \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/openmeteo/ensemble"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aisa.one/apis/v1/openmeteo/ensemble', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/openmeteo/ensemble",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/openmeteo/ensemble"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aisa.one/apis/v1/openmeteo/ensemble")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/openmeteo/ensemble")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"latitude": 52.5,
"longitude": 13.4,
"generationtime_ms": 2.1,
"utc_offset_seconds": 0,
"timezone": "GMT",
"elevation": 38,
"hourly_units": {
"time": "iso8601",
"temperature_2m": "°C"
},
"hourly": {
"time": [
"2024-01-01T00:00"
],
"temperature_2m_member01": [
2.1
],
"temperature_2m_member02": [
2.4
],
"temperature_2m_member03": [
1.8
]
}
}Ensemble Models
Probabilistic ensemble weather forecasts with per-member arrays.
curl --request GET \
--url https://api.aisa.one/apis/v1/openmeteo/ensemble \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/openmeteo/ensemble"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.aisa.one/apis/v1/openmeteo/ensemble', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.aisa.one/apis/v1/openmeteo/ensemble",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.aisa.one/apis/v1/openmeteo/ensemble"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.aisa.one/apis/v1/openmeteo/ensemble")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/openmeteo/ensemble")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"latitude": 52.5,
"longitude": 13.4,
"generationtime_ms": 2.1,
"utc_offset_seconds": 0,
"timezone": "GMT",
"elevation": 38,
"hourly_units": {
"time": "iso8601",
"temperature_2m": "°C"
},
"hourly": {
"time": [
"2024-01-01T00:00"
],
"temperature_2m_member01": [
2.1
],
"temperature_2m_member02": [
2.4
],
"temperature_2m_member03": [
1.8
]
}
}models is optional — omit it to get the default best-match global ensemble (a 30-member set), or pass a comma-separated list such as icon_seamless, gfs_seamless, ecmwf_ifs025 or gem_global; each model exposes its own number of members. Request variables with hourly and/or daily lists.
Every requested variable is returned once per ensemble member, suffixed with the member index (e.g. temperature_2m_member01, temperature_2m_member02, …), alongside grid-cell metadata, a shared time array and a *_units object.
Example: GET /apis/v1/openmeteo/ensemble?latitude=52.52&longitude=13.41&hourly=temperature_2m,wind_speed_10m&models=icon_seamless&forecast_days=7.
Billing: $0.00015 per call (150 micros USD), metered per request. All Open-Meteo endpoints are GET pass-through — authenticate with your AIsa API key as a bearer token (the same key used across every AIsa /apis/* endpoint); AIsa handles provider access.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
WGS84 latitude of the location. Multiple coordinates can be comma-separated.
"52.52"
WGS84 longitude of the location (negative for the Americas). Multiple coordinates can be comma-separated.
"13.41"
Optional; when omitted, defaults to the best-match global ensemble (a 30-member set). Comma-separated ensemble models, e.g. icon_seamless, gfs_seamless, ecmwf_ifs025, gem_global. Each model exposes its own member count.
"icon_seamless"
Comma-separated list of hourly variables to return. Common values: temperature_2m, relative_humidity_2m, dew_point_2m, apparent_temperature, precipitation, rain, showers, snowfall, weather_code, pressure_msl, cloud_cover, wind_speed_10m, wind_direction_10m, wind_gusts_10m, shortwave_radiation, visibility. Also cape.
"temperature_2m,wind_speed_10m"
Comma-separated list of daily aggregation variables to return. Requires timezone. Common values: temperature_2m_max, temperature_2m_min, temperature_2m_mean, precipitation_sum, rain_sum, snowfall_sum, weather_code, sunrise, sunset, sunshine_duration, wind_speed_10m_max, uv_index_max.
"temperature_2m_max,precipitation_sum"
Number of forecast days to return (0-35). Default 7.
7
Number of past days to include (0-92). Default 0.
Start of the interval, yyyy-mm-dd (ISO 8601).
"2024-01-01"
End of the interval, yyyy-mm-dd (ISO 8601).
"2024-01-07"
Manual elevation (meters). Defaults to a 90m DEM.
"38"
Temperature unit. Default celsius.
celsius, fahrenheit Wind speed unit. Default kmh.
kmh, ms, mph, kn Precipitation unit. Default mm.
mm, inch Time output format. Default iso8601.
iso8601, unixtime IANA time zone name (e.g. Europe/Berlin) or auto to resolve from coordinates. Defaults to GMT.
"Europe/Berlin"
Grid-cell preference for the coordinate. Default land.
land, sea, nearest Response
Ensemble forecast with per-member arrays.
The response is of type object.