Tomorrow.io Just Launched Gale—the World's First Weather and Climate Generative AI! Learn More

X

Explore the World’s Best Free Weather API

See why developers and businesses rely on the Tomorrow.io free Weather API for fast, reliable, and hyper-accurate weather data with the most cutting-edge interfaces

See why developers and businesses rely on the Tomorrow.io Weather API for fast, reliable, and hyper-accurate weather data with the most cutting-edge interfaces

Integrate and Adapt with the World’s Leading Weather API

Get fast, reliable, and hyper-accurate weather data with 80+ layers and insights.

Integrate cutting-edge, real-time weather data directly into your applications.

Access ultra-accurate, hyperlocal data up to 14 days in the future for any location on the globe.

Optimize your operations with access to hourly and daily historical weather data up to 20 years in the past.

Shell
				
					curl --request GET \
        --url 'https://api.tomorrow.io/v4/weather/realtime?location=toronto&apikey=XXX'\
        --header 'accept: application/json'
				
			
				
					{
  "data": {
    "time": "2023-02-14T13:53:00Z",
    "values": {
      "cloudBase": null,
      "cloudCeiling": null,
      "cloudCover": 5,
      "dewPoint": -0.19,
      "freezingRainIntensity": 0,
      "humidity": 100,
      "precipitationProbability": 0,
      "pressureSurfaceLevel": 1005.56,
      "rainIntensity": 0,
      "sleetIntensity": 0,
      "snowIntensity": 0,
      "temperature": 0.31,
      "temperatureApparent": 0.31,
      "uvHealthConcern": 0,
      "uvIndex": 0,
      "visibility": 14.43,
      "weatherCode": 1000,
      "windDirection": 278.31,
      "windGust": 1.19,
      "windSpeed": 1.19
    }
  },
  "location": {
    "lat": 43.653480529785156,
    "lon": -79.3839340209961,
    "name": "Old Toronto, Toronto, Golden Horseshoe, Ontario, Canada",
    "type": "administrative"
  }
}

				
			
				
					curl --request GET \
        --url 'https://api.tomorrow.io/v4/weather/realtime?location=toronto&apikey=XXX'\
        --header 'accept: application/json'
				
			
				
					const options = {method: 'GET',
headers: {accept: 'application/json'}};

fetch('https://api.tomorrow.io/v4/weather/realtime?location=toronto&apikey=XXX, options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
				
			
				
					const sdk = require('api')('@climacell-docs/v4#3efoz19ldn18lig');

sdk.auth('XXX');
sdk.realtimeWeather({location: 'toronto'})
.then(({ data }) => console.log(data))
.catch(err => console.error(err));
				
			
				
					import requests

url = "https://api.tomorrow.io/v4/weather/realtime?location=toronto&apikey=XXX"
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers)

print(response.text)
				
			
				
					library(httr)

url <- "https://api.tomorrow.io/v4/weather/realtime"

queryString <- list(
location = "toronto",
apikey = "XXX"
)

response <- VERB("GET", url, query = queryString, content_type("application/octet-stream"), accept("application/json"))

content(response, "text")
				
			
				
					OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url("https://api.tomorrow.io/v4/weather/realtime?location=toronto&apikey=XXX")
.get()
.addHeader("accept", "application/json")
.build();

Response response = client.newCall(request).execute();
				
			
				
					package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    url := "https://api.tomorrow.io/v4/weather/realtime?location=toronto&apikey=XXX"
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Add("accept", "application/json")
    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)
    fmt.Println(res)
    fmt.Println(string(body))
}
				
			
				
					{
  "data": {
    "time": "2023-02-14T13:53:00Z",
    "values": {
      "cloudBase": null,
      "cloudCeiling": null,
      "cloudCover": 5,
      "dewPoint": -0.19,
      "freezingRainIntensity": 0,
      "humidity": 100,
      "precipitationProbability": 0,
      "pressureSurfaceLevel": 1005.56,
      "rainIntensity": 0,
      "sleetIntensity": 0,
      "snowIntensity": 0,
      "temperature": 0.31,
      "temperatureApparent": 0.31,
      "uvHealthConcern": 0,
      "uvIndex": 0,
      "visibility": 14.43,
      "weatherCode": 1000,
      "windDirection": 278.31,
      "windGust": 1.19,
      "windSpeed": 1.19
    }
  },
  "location": {
    "lat": 43.653480529785156,
    "lon": -79.3839340209961,
    "name": "Old Toronto, Toronto, Golden Horseshoe, Ontario, Canada",
    "type": "administrative"
  }
}

				
			
				
					curl --request GET \
        --url 'https://api.tomorrow.io/v4/weather/forecast?location=newyork&apikey=XXX' \
        --header 'accept: application/json'
				
			
				
					const options = {method: 'GET',
headers: {accept: 'application/json'}};

fetch('https://api.tomorrow.io/v4/weather/forecast?location=newyork&apikey=XXX', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));

				
			
				
					const sdk = require('api')('@climacell-docs/v4#3efoz19ldn18lig');

sdk.auth('XXX');
sdk.weatherForecast({location: 'newyork'})
  .then(({ data }) => console.log(data))
  .catch(err => console.error(err));

				
			
				
					import requests

url = "https://api.tomorrow.io/v4/weather/forecast?location=newyork&apikey=XXX"
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers)

print(response.text)

				
			
				
					library(httr)

url <- "https://api.tomorrow.io/v4/weather/forecast"

queryString <- list(
  location = "newyork",
  apikey = "XXX"
)

response <- VERB("GET", url, query = queryString, content_type("application/octet-stream"), accept("application/json"))

content(response, "text")

				
			
				
					OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.tomorrow.io/v4/weather/forecast?location=newyork&apikey=XXX")
  .get()
  .addHeader("accept", "application/json")
  .build();

Response response = client.newCall(request).execute();

				
			
				
					package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {
	url := "https://api.tomorrow.io/v4/weather/forecast?location=newyork&apikey=XXX"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Add("accept", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)
	fmt.Println(res)
	fmt.Println(string(body))
}

				
			
				
					{
  "timelines":{
     "minutely":[],
     "hourly":[ "time":"2023-02-14T13:00:00Z",
            "values":{
               "cloudBase":1.46,
               "cloudCeiling":1.46,
               "cloudCover":0,
               "dewPoint":-6.5,
               "evapotranspiration":0.055,
               "freezingRainIntensity":0,
               "humidity":54,
               "iceAccumulation":0,
               "iceAccumulationLwe":0,
               "precipitationProbability":0,
               "pressureSurfaceLevel":1013.22,
               "rainAccumulation":0,
               "rainAccumulationLwe":0,
               "rainIntensity":0,
               "sleetAccumulation":0,
               "sleetAccumulationLwe":0,
               "sleetIntensity":0,
               "snowAccumulation":0,
               "snowAccumulationLwe":0,
               "snowIntensity":0,
               "temperature":2,
               "temperatureApparent":0.13,
               "uvHealthConcern":0,
               "uvIndex":0,
               "visibility":16,
               "weatherCode":1000,
               "windDirection":337.63,
               "windGust":3.19,
               "windSpeed":1.81
            }
         },
],
     "daily":[  {
            "time":"2023-02-14T00:00:00Z",
            "values":{
               "cloudBaseAvg":1.71,
               "cloudBaseMax":2.26,
               "cloudBaseMin":0,
               "cloudCeilingAvg":1.53,
               "cloudCeilingMax":2.41,
               "cloudCeilingMin":0,
               "cloudCoverAvg":15.18,
               "cloudCoverMax":70,
               "cloudCoverMin":0,
               "dewPointAvg":-6.52,
               "dewPointMax":-3.5,
               "dewPointMin":-8.99,
               "evapotranspirationAvg":0.095,
               "evapotranspirationMax":0.2,
               "evapotranspirationMin":0.054,
               "evapotranspirationSum":2.28,
               "freezingRainIntensityAvg":0,
               "freezingRainIntensityMax":0,
               "freezingRainIntensityMin":0,
               "humidityAvg":48.55,
               "humidityMax":54.75,
               "humidityMin":39,
               "iceAccumulationAvg":0,
               "iceAccumulationLweAvg":0,
               "iceAccumulationLweMax":0,
               "iceAccumulationLweMin":0,
               "iceAccumulationMax":0,
               "iceAccumulationMin":0,
               "iceAccumulationSum":0,
               "moonriseTime":"2023-02-14T16:57:59Z",
               "moonsetTime":"2023-02-14T01:56:19Z",
               "precipitationProbabilityAvg":0.4,
               "precipitationProbabilityMax":10,
               "precipitationProbabilityMin":0,
               "pressureSurfaceLevelAvg":1012.55,
               "pressureSurfaceLevelMax":1018.98,
               "pressureSurfaceLevelMin":1007.95,
               "rainAccumulationAvg":0,
               "rainAccumulationLweAvg":0,
               "rainAccumulationLweMax":0.01,
               "rainAccumulationLweMin":0,
               "rainAccumulationMax":0.01,
               "rainAccumulationMin":0,
               "rainAccumulationSum":0.01,
               "rainIntensityAvg":0,
               "rainIntensityMax":0.1,
               "rainIntensityMin":0,
               "sleetAccumulationAvg":0,
               "sleetAccumulationLweAvg":0,
               "sleetAccumulationLweMax":0,
               "sleetAccumulationLweMin":0,
               "sleetAccumulationMax":0,
               "sleetAccumulationMin":0,
               "sleetIntensityAvg":0,
               "sleetIntensityMax":0,
               "sleetIntensityMin":0,
               "snowAccumulationAvg":0,
               "snowAccumulationLweAvg":0,
               "snowAccumulationLweMax":0,
               "snowAccumulationLweMin":0,
               "snowAccumulationMax":0,
               "snowAccumulationMin":0,
               "snowAccumulationSum":0,
               "snowIntensityAvg":0,
               "snowIntensityMax":0,
               "snowIntensityMin":0,
               "sunriseTime":"2023-02-13T21:28:00Z",
               "sunsetTime":"2023-02-14T08:22:00Z",
               "temperatureApparentAvg":1.45,
               "temperatureApparentMax":9.38,
               "temperatureApparentMin":-7,
               "temperatureAvg":3.41,
               "temperatureMax":9.38,
               "temperatureMin":-0.71,
               "uvHealthConcernAvg":0,
               "uvHealthConcernMax":1,
               "uvHealthConcernMin":0,
               "uvIndexAvg":0,
               "uvIndexMax":2,
               "uvIndexMin":0,
               "visibilityAvg":16,
               "visibilityMax":16,
               "visibilityMin":16,
               "weatherCodeMax":1000,
               "weatherCodeMin":1000,
               "windDirectionAvg":310.88,
               "windGustAvg":4.34,
               "windGustMax":10.56,
               "windGustMin":2.36,
               "windSpeedAvg":3.17,
               "windSpeedMax":7.36,
               "windSpeedMin":1.75
            }
         },
]

   },
   "location":{
      "lat":35.72515106201172,
      "lon":139.76300048828125,
      "name":"NEWYORK, 不忍通り, 千駄木三丁目, 文京区, 東京都, 113-0022, 日本",
      "type":"yes"
   }
}


				
			
				
					curl --request GET \
        --url 'https://api.tomorrow.io/v4/weather/history/recent?location=austin&apikey=XXX'\
        --header 'accept: application/json'

				
			
				
					const options = {method: 'GET', 
headers: {accept: 'application/json'}};

fetch('https://api.tomorrow.io/v4/weather/history/recent?location=austin&apikey=XXX, options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));

				
			
				
					const sdk = require('api')('@climacell-docs/v4#3efoz19ldn18lig');

sdk.auth('XXX');
sdk.weatherRecentHistory({location: 'austin'})
  .then(({ data }) => console.log(data))
  .catch(err => console.error(err));

				
			
				
					import requests

url = "https://api.tomorrow.io/v4/weather/history/recent?location=austin&apikey=XXX"
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers)

print(response.text)

				
			
				
					library(httr)

url <- "https://api.tomorrow.io/v4/weather/history/recent"

queryString <- list(
  location = "austin",
  apikey = "XXX"
)

response <- VERB("GET", url, query = queryString, content_type("application/octet-stream"), accept("application/json"))

content(response, "text")

				
			
				
					OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.tomorrow.io/v4/weather/history/recent?location=austin&apikey=XXX")
  .get()
  .addHeader("accept", "application/json")
  .build();

Response response = client.newCall(request).execute();

				
			
				
					package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {
	url := "https://api.tomorrow.io/v4/weather/history/recent?location=austin&apikey=XXX"
	req, _ := http.NewRequest("GET", url, nil)
	req.Header.Add("accept", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)
	fmt.Println(res)
	fmt.Println(string(body))
}

				
			
				
					{
  "timelines":{
  "hourly":[
     {
        "time":"2023-02-13T13:00:00Z",
        "values":{
           "cloudBase":0.35,
           "cloudCeiling":0.35,
           "cloudCover":52,
           "dewPoint":3,
           "evapotranspiration":0.022,
           "freezingRainIntensity":0,
           "humidity":82,
           "iceAccumulation":0,
           "iceAccumulationLwe":0,
           "precipitationProbability":0,
           "pressureSurfaceLevel":999.62,
           "rainAccumulation":0,
           "rainAccumulationLwe":0,
           "rainIntensity":0,
           "sleetAccumulation":0,
           "sleetAccumulationLwe":0,
           "sleetIntensity":0,
           "snowAccumulation":0,
           "snowAccumulationLwe":0,
           "snowDepth":0,
           "snowIntensity":0,
           "temperature":5.81,
           "temperatureApparent":5.81,
           "uvHealthConcern":0,
           "uvIndex":0,
           "visibility":16,
           "weatherCode":1101,
           "windDirection":123.31,
           "windGust":1,
           "windSpeed":0.69
        }
     }
  ],
  "daily":[
     {
        "time":"2023-02-13T00:00:00Z",
        "values":{
           "cloudBaseAvg":0.56,
           "cloudBaseMax":2.06,
           "cloudBaseMin":0,
           "cloudCeilingAvg":0.18,
           "cloudCeilingMax":1.35,
           "cloudCeilingMin":0,
           "cloudCoverAvg":33.29,
           "cloudCoverMax":100,
           "cloudCoverMin":0,
           "dewPointAvg":4.2,
           "dewPointMax":12.81,
           "dewPointMin":-0.81,
           "evapotranspirationAvg":0.105,
           "evapotranspirationMax":0.342,
           "evapotranspirationMin":0.019,
           "evapotranspirationSum":2.531,
           "freezingRainIntensityAvg":0,
           "freezingRainIntensityMax":0,
           "freezingRainIntensityMin":0,
           "humidityAvg":61.04,
           "humidityMax":82,
           "humidityMin":32,
           "iceAccumulationAvg":0,
           "iceAccumulationLweAvg":0,
           "iceAccumulationLweMax":0,
           "iceAccumulationLweMin":0,
           "iceAccumulationMax":0,
           "iceAccumulationMin":0,
           "iceAccumulationSum":0,
           "moonriseTime":"2023-02-13T07:00:46Z",
           "moonsetTime":"2023-02-13T17:45:04Z",
           "precipitationProbabilityAvg":0,
           "precipitationProbabilityMax":0,
           "precipitationProbabilityMin":0,
           "pressureSurfaceLevelAvg":998.83,
           "pressureSurfaceLevelMax":1000.73,
           "pressureSurfaceLevelMin":993.72,
           "rainAccumulationAvg":0,
           "rainAccumulationLweAvg":0,
           "rainAccumulationLweMax":0,
           "rainAccumulationLweMin":0,
           "rainAccumulationMax":0,
           "rainAccumulationMin":0,
           "rainAccumulationSum":0,
           "rainIntensityAvg":0,
           "rainIntensityMax":0,
           "rainIntensityMin":0,
           "sleetAccumulationAvg":0,
           "sleetAccumulationLweAvg":0,
           "sleetAccumulationLweMax":0,
           "sleetAccumulationLweMin":0,
           "sleetAccumulationMax":0,
           "sleetAccumulationMin":0,
           "sleetIntensityAvg":0,
           "sleetIntensityMax":0,
           "sleetIntensityMin":0,
           "snowAccumulationAvg":0,
           "snowAccumulationLweAvg":0,
           "snowAccumulationLweMax":0,
           "snowAccumulationLweMin":0,
           "snowAccumulationMax":0,
           "snowAccumulationMin":0,
           "snowAccumulationSum":0,
           "snowDepthAvg":0,
           "snowDepthMax":0,
           "snowDepthMin":0,
           "snowDepthSum":0,
           "snowIntensityAvg":0,
           "snowIntensityMax":0,
           "snowIntensityMin":0,
           "sunriseTime":"2023-02-12T13:12:00Z",
           "sunsetTime":"2023-02-13T00:18:00Z",
           "temperatureApparentAvg":11.95,
           "temperatureApparentMax":21.5,
           "temperatureApparentMin":5.81,
           "temperatureAvg":11.95,
           "temperatureMax":21.5,
           "temperatureMin":5.81,
           "uvHealthConcernAvg":0,
           "uvHealthConcernMax":1,
           "uvHealthConcernMin":0,
           "uvIndexAvg":1,
           "uvIndexMax":4,
           "uvIndexMin":0,
           "visibilityAvg":16,
           "visibilityMax":16,
           "visibilityMin":16,
           "weatherCodeMax":1000,
           "weatherCodeMin":1000,
           "windDirectionAvg":162.33,
           "windGustAvg":4.01,
           "windGustMax":8,
           "windGustMin":0.5,
           "windSpeedAvg":2.18,
           "windSpeedMax":5.19,
           "windSpeedMin":0.31
        }
     }
  ]
},
   
"location":{
      "lat":30.271127700805664,
      "lon":-97.74369812011719,
      "name":"Austin, Travis County, Texas, United States",
      "type":"administrative"
   }
}

				
			

Tomorrow.io Free
Weather API

Tomorrow.io’s weather API delivers the fast, reliable, and hyper-accurate weather data you need, with the flexibility to integrate this data source with any application, system, or program.

From temperature and precipitation to cloud cover, wind speed, and more, businesses across all industries use weather data from Tomorrow.io’s weather API to make decisions in their day-to-day business operations.

With versatile functionality and scope, blazing-fast responsiveness, and the everyday reliability developers need, our weather API offers ease of implementation to get started quickly, along with a host of cutting-edge and unique features that deliver not just weather data and forecasts but true weather intelligence. Sign up to experience our weather API for yourself today!

Weather API Capabilities

Learn more about the Tomorrow.io Weather API’s enterprise-grade capabilities:

Integrate, Automate, and Adapt

80+ Data Layers with Global Coverage

Rich library of weather parameters to cover any condition in any location

Go beyond the forecast with one endpoint

Comprehensive documentation with access to any of our endpoints to get started experimenting - immediately!

Use webhooks to send dynamic triggered alerts

Use webhooks to send dynamic triggered alerts when specific weather thresholds are met at your monitored locations

Models driven by use cases

Out-of-the-box templates such as Road Risk and Fire Index allow for easy integration

Map Layer Visualization

See weather patterns by layering color-coded tiles over your existing map interface

Hyper-Local & High Resolution

Proprietary weather-of-things data and models are optimized for hi-resolution impact, globally

Complete Weather Data API Coverage

Get years of historical weather data, request real-time weather information, or make use of accurate weather forecasts.

Data Catalog

With 80+ data fields, get everything you need all in one place from our weather API.

Flexible Plans Built to Scale as You Grow

Free

For individuals or teams just getting started

$0 / month

500 calls / per day
25 calls / per hour
3 calls / per second
Features:

Enterprise

For teams and companies that need to manage work across initiatives.

Contact us for Offer

Enterprise features include:
Location Types

Get Up and Running Quickly in Any Industry

Weather API Documentation

The Tomorrow.io Weather API combines traditional weather data sources with new sensing technologies and proprietary modeling to deliver best-in-class weather data, with hyperlocal observations, ground-level tracking, up-to-date data delivery, and minutely forecasting.

Get up-and-running immediately! Grab your private API key here to start querying parameters. Your key carries full privileges so make sure to keep it secure!
Here’s where to find information on how to format your Locations (geometry, latlong, or locationID), Date and Time, Unit System, Delimeters, Nulls, and Timezones for all queries.
Webhooks allow you to receive real-time updates when a specific event occur, like an alert notification for a monitored location or weather condition. Configure your webhooks to integrate the API with dozens of systems.
With more than 60 core weather data layers, you’ll find almost any basic weather parameter you’re looking for, in any location in the world.
This endpoint will allow you to query any weather conditions from any of the data layers by specifying the location, fields, timesteps, and receive a response that includes multiple timelines, one for each timestep – all within a single call to the API. 
Superimpose accurate weather conditions onto an interactive weather map, with support for OpenLayers, LeafLets, and MapBox. 
Predefined locations can be queried in any of the data endpoints, via point, polygon, or polyline geometry for maximum flexibility with bounding boxes. 
Use weather insights to go beyond just the forecast with situational awareness and standardized weather events from many sources, allowing managers to monitor the whole picture across all types of local, regional, and national alerts.
This endpoint will allow you to query for weather events by specifying locations and triggers such that the response includes all values on observations or predictions.
When an Event is generated for an Insight being monitored with an Alert, the system will trigger out Webhook notifications to any user.
Enterprise Use Case Examples
Use our Timelines endpoint to query any data points to any locations with just a single call. 
Our advanced alerting system allows you to subscribe locations of interest to national weather advisories in just a few simple steps.
Navigate in peak performance by calling the Route endpoint to properly calculate ETAs and avoid weather risks, integrating with popular navigation services like Google and Mapbox.
The events endpoints allow anyone to pull a collection of all forecasted weather events, using custom conditions or insight categories. 
Log real-time weather by calling our API And logging resolved weather data in a spreadsheet, for data science or climatology use cases. 
Visualize weather data and interact with weather maps, charts, and tables using Python and Jupyter Notebooks.
Create a simple GUI weather widget using Python on Raspberry Pi boards.

Ready to make smart weather decisions?