Tomorrow.io Climate API
30-year climate normals for a location.
30-year climate normals for a location.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/tomorrow-io:tomorrow-io-climate-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Tomorrow.io Weather Climate API
description: Unified Tomorrow.io v4 HTTP API for weather and climate intelligence. Combines realtime observations, forecast timelines (minutely, hourly, daily, current), historical data up to 20 years, weather along a route, raster map tiles, plus management surfaces for Locations, Insights, Alerts, and Events.
version: 4.0.1
contact:
name: Tomorrow.io Support
url: https://www.tomorrow.io/support/
license:
name: Tomorrow.io Terms of Service
url: https://www.tomorrow.io/terms-of-service/
x-generated-from: documentation
x-last-validated: '2026-05-30'
servers:
- url: https://api.tomorrow.io/v4
description: Tomorrow.io v4 production API
security:
- apiKeyQuery: []
tags:
- name: Climate
description: 30-year climate normals for a location.
paths:
/historical/normals:
post:
operationId: postClimateNormals
summary: Tomorrow.io Post Climate Normals
description: Returns 30-year monthly climate normals for a location.
tags:
- Climate
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClimateNormalsRequest'
examples:
PostClimateNormalsRequestExample:
summary: Default postClimateNormals request
x-microcks-default: true
value:
fields:
- temperatureAvg
- precipitationAccumulationSum
units: metric
responses:
'200':
description: Climate normals response.
content:
application/json:
schema:
$ref: '#/components/schemas/ClimateNormalsResponse'
examples:
PostClimateNormals200Example:
summary: Default postClimateNormals 200 response
x-microcks-default: true
value:
data:
normals:
- month: 6
values:
temperature: 21.2
temperatureApparent: 20.4
humidity: 64.0
dewPoint: 13.4
windSpeed: 3.1
windDirection: 220
windGust: 6.2
pressureSeaLevel: 1013.2
pressureSurfaceLevel: 1010.5
precipitationIntensity: 0.0
precipitationProbability: 5
precipitationType: 0
cloudCover: 12
cloudBase: 1.5
cloudCeiling: 2.4
visibility: 16
weatherCode: 1000
uvIndex: 6
uvHealthConcern: 2
epaIndex: 42
epaHealthConcern: 1
epaPrimaryPollutant: 0
particulateMatter25: 8.4
particulateMatter10: 14.1
pollutantO3: 28
pollutantNO2: 11
pollutantCO: 0.4
pollutantSO2: 1
treeIndex: 2
grassIndex: 1
weedIndex: 1
fireIndex: 8.2
solarGHI: 480
solarDIF: 120
solarDIR: 360
moonPhase: 3
hailBinary: 0
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
x-microcks-operation:
delay: 0
dispatcher: FALLBACK
components:
schemas:
Error:
type: object
description: Standard Tomorrow.io error envelope.
properties:
code:
type: integer
example: 400001
description: Internal error code.
type:
type: string
example: Invalid Body Parameters
description: Short error type label.
message:
type: string
example: The provided parameters are invalid.
description: Human-readable error message.
required:
- code
- type
- message
ClimateNormalsRequest:
type: object
description: Climate Normals request body.
properties:
location:
oneOf:
- type: string
- $ref: '#/components/schemas/GeoJSONGeometry'
fields:
type: array
items:
type: string
example:
- temperatureAvg
- precipitationAccumulationSum
units:
type: string
enum:
- metric
- imperial
default: metric
required:
- location
- fields
GeoJSONGeometry:
type: object
description: GeoJSON geometry — Point, LineString, or Polygon.
properties:
type:
type: string
enum:
- Point
- LineString
- Polygon
example: Point
coordinates:
type: array
items: {}
example:
- -71.0466
- 42.3478
required:
- type
- coordinates
WeatherValues:
type: object
description: Map of weather data field names to numeric values for one timestep.
additionalProperties: true
properties:
temperature:
type: number
format: double
description: Air temperature (Celsius for metric, Fahrenheit for imperial).
example: 21.2
temperatureApparent:
type: number
format: double
example: 20.4
humidity:
type: number
format: double
example: 64.0
dewPoint:
type: number
format: double
example: 13.4
windSpeed:
type: number
format: double
example: 3.1
windDirection:
type: number
format: double
example: 220
windGust:
type: number
format: double
example: 6.2
pressureSeaLevel:
type: number
format: double
example: 1013.2
pressureSurfaceLevel:
type: number
format: double
example: 1010.5
precipitationIntensity:
type: number
format: double
example: 0.0
precipitationProbability:
type: number
format: double
example: 5
precipitationType:
type: integer
example: 0
cloudCover:
type: number
format: double
example: 12
cloudBase:
type: number
format: double
example: 1.5
cloudCeiling:
type: number
format: double
example: 2.4
visibility:
type: number
format: double
example: 16
weatherCode:
type: integer
example: 1000
uvIndex:
type: integer
example: 6
uvHealthConcern:
type: integer
example: 2
epaIndex:
type: integer
example: 42
epaHealthConcern:
type: integer
example: 1
epaPrimaryPollutant:
type: integer
example: 0
particulateMatter25:
type: number
format: double
example: 8.4
particulateMatter10:
type: number
format: double
example: 14.1
pollutantO3:
type: number
format: double
example: 28
pollutantNO2:
type: number
format: double
example: 11
pollutantCO:
type: number
format: double
example: 0.4
pollutantSO2:
type: number
format: double
example: 1
treeIndex:
type: integer
example: 2
grassIndex:
type: integer
example: 1
weedIndex:
type: integer
example: 1
fireIndex:
type: number
format: double
example: 8.2
solarGHI:
type: number
format: double
example: 480
solarDIF:
type: number
format: double
example: 120
solarDIR:
type: number
format: double
example: 360
moonPhase:
type: integer
example: 3
hailBinary:
type: integer
example: 0
ClimateNormalsResponse:
type: object
properties:
data:
type: object
properties:
normals:
type: array
items:
type: object
properties:
month:
type: integer
minimum: 1
maximum: 12
example: 6
values:
$ref: '#/components/schemas/WeatherValues'
responses:
BadRequest:
description: Malformed request.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
TooManyRequests:
description: Rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
apiKeyQuery:
type: apiKey
in: query
name: apikey
description: Tomorrow.io API key passed as `apikey` query parameter. Obtain at https://app.tomorrow.io/development/keys.