Tomorrow.io Historical Weather API

Retrieve historical weather observations and monthly climate normals for any point or polygon on Earth using the same field catalog as the realtime and forecast APIs.

Documentation

Specifications

Other Resources

🔗
APIsJSON
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/apis.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-alert-threshold-tuning-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-decommission-location-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-historical-and-normals-analysis-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-insight-driven-alert-setup-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-insight-scoped-event-query-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-location-severe-weather-events-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-map-tile-precipitation-overlay-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-realtime-then-timelines-deep-dive-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-realtime-vs-climate-normals-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-route-weather-hazard-scan-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-saved-location-realtime-forecast-workflow.yml
🔗
Arazzo
https://raw.githubusercontent.com/api-evangelist/tomorrow-io/refs/heads/main/arazzo/tomorrow-io-tag-location-cohort-workflow.yml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/tomorrow-io-historical-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

tomorrow-io-historical-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Tomorrow.io Alerts Historical API
  version: '4.0'
  description: 'Create, manage, and trigger weather-based alerts. Alerts evaluate Tomorrow.io

    weather data layers against custom thresholds for one or more linked locations

    and deliver notifications via webhook, email, and the Tomorrow.io app.

    '
  contact:
    name: Tomorrow.io Support
    url: https://support.tomorrow.io
servers:
- url: https://api.tomorrow.io/v4
  description: Tomorrow.io Production
security:
- apikeyAuth: []
tags:
- name: Historical
  description: Retrieve historical weather data and climate normals.
paths:
  /historical:
    post:
      tags:
      - Historical
      summary: Retrieve Historical Timeline
      operationId: postHistorical
      description: 'Retrieve a historical weather timeline for a point, polygon, or polyline

        across a given start and end time window. Supports the full field catalog

        and minute, hour, and day timesteps depending on plan tier.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HistoricalRequest'
      parameters:
      - name: apikey
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Historical timeline payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HistoricalResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
  /historical/climate/normals:
    get:
      tags:
      - Historical
      summary: Get Climate Normals
      operationId: getClimateNormals
      description: 'Retrieve monthly climate normals (long-term averages and percentiles) for a

        given point. Useful for benchmarking current conditions against typical

        conditions for the location and season.

        '
      parameters:
      - name: location
        in: query
        required: true
        schema:
          type: string
      - name: fields
        in: query
        schema:
          type: string
      - name: apikey
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Climate normals payload.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClimateNormalsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  responses:
    RateLimited:
      description: Rate limit exceeded for the plan tier.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    ClimateNormalsResponse:
      type: object
      properties:
        location:
          type: object
          properties:
            lat:
              type: number
            lon:
              type: number
        data:
          type: object
          properties:
            months:
              type: array
              items:
                type: object
                properties:
                  month:
                    type: integer
                  values:
                    type: object
                    additionalProperties:
                      type: number
    HistoricalRequest:
      type: object
      required:
      - location
      - fields
      - timesteps
      - startTime
      - endTime
      properties:
        location:
          oneOf:
          - type: string
          - type: object
            description: GeoJSON Point/Polygon/LineString
        fields:
          type: array
          items:
            type: string
        timesteps:
          type: array
          items:
            type: string
            enum:
            - 1m
            - 5m
            - 15m
            - 1h
            - 1d
        startTime:
          type: string
          format: date-time
        endTime:
          type: string
          format: date-time
        units:
          type: string
          enum:
          - metric
          - imperial
        timezone:
          type: string
    ErrorResponse:
      type: object
      properties:
        code:
          type: integer
        type:
          type: string
        message:
          type: string
    HistoricalResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            timelines:
              type: array
              items:
                type: object
                properties:
                  timestep:
                    type: string
                  startTime:
                    type: string
                  endTime:
                    type: string
                  intervals:
                    type: array
                    items:
                      type: object
                      properties:
                        startTime:
                          type: string
                          format: date-time
                        values:
                          type: object
                          additionalProperties: true
  securitySchemes:
    apikeyAuth:
      type: apiKey
      in: query
      name: apikey