curl --request GET \
--url https://api.aisa.one/apis/v1/openmeteo/archive \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/openmeteo/archive"
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/archive', 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/archive",
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/archive"
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/archive")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/openmeteo/archive")
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": 1.2,
"utc_offset_seconds": 3600,
"timezone": "Europe/Berlin",
"elevation": 38,
"hourly_units": {
"time": "iso8601",
"temperature_2m": "°C",
"precipitation": "mm"
},
"hourly": {
"time": [
"2022-01-01T00:00",
"2022-01-01T01:00"
],
"temperature_2m": [
3.1,
2.8
],
"precipitation": [
0,
0
]
},
"daily_units": {
"time": "iso8601",
"temperature_2m_max": "°C",
"temperature_2m_min": "°C",
"precipitation_sum": "mm"
},
"daily": {
"time": [
"2022-01-01"
],
"temperature_2m_max": [
4.5
],
"temperature_2m_min": [
1.2
],
"precipitation_sum": [
0.6
]
}
}Historical Weather (ERA5 Archive)
Historical reanalysis weather for any coordinate, with data back to 1940.
curl --request GET \
--url https://api.aisa.one/apis/v1/openmeteo/archive \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.aisa.one/apis/v1/openmeteo/archive"
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/archive', 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/archive",
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/archive"
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/archive")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.aisa.one/apis/v1/openmeteo/archive")
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": 1.2,
"utc_offset_seconds": 3600,
"timezone": "Europe/Berlin",
"elevation": 38,
"hourly_units": {
"time": "iso8601",
"temperature_2m": "°C",
"precipitation": "mm"
},
"hourly": {
"time": [
"2022-01-01T00:00",
"2022-01-01T01:00"
],
"temperature_2m": [
3.1,
2.8
],
"precipitation": [
0,
0
]
},
"daily_units": {
"time": "iso8601",
"temperature_2m_max": "°C",
"temperature_2m_min": "°C",
"precipitation_sum": "mm"
},
"daily": {
"time": [
"2022-01-01"
],
"temperature_2m_max": [
4.5
],
"temperature_2m_min": [
1.2
],
"precipitation_sum": [
0.6
]
}
}start_date and end_date (both yyyy-mm-dd) are required and define the interval; data is available from 1940 to the near-present. Request fields with hourly and/or daily variable lists, and set timezone to localize daily aggregates.
The response returns the resolved grid-cell metadata and hourly/daily blocks, each with a time array, one array per variable, and a matching *_units object.
Example: GET /apis/v1/openmeteo/archive?latitude=52.52&longitude=13.41&start_date=2022-01-01&end_date=2022-12-31&hourly=temperature_2m,precipitation&daily=temperature_2m_max,temperature_2m_min&timezone=Europe/Berlin.
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"
Start of the interval, yyyy-mm-dd (ISO 8601).
"2024-01-01"
End of the interval, yyyy-mm-dd (ISO 8601).
"2024-01-07"
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 includes soil temperature/moisture variables.
"temperature_2m,precipitation"
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,temperature_2m_min,precipitation_sum"
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 Comma-separated reanalysis models, e.g. era5, era5_land, ecmwf_ifs, cerra. Default best match.
"era5"
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
Historical weather for the interval.
The response is of type object.