Skip to content
Eden Engine

Historical Airport Temperature Series (by Station & Date Range)

omnial/get-historical-airport-temperature-series

Given an airport's ICAO station code, country, IANA timezone, and a start/end date range, returns every historical weather observation recorded at that station across the range (temperature, humidity, wind, pressure, visibility, sky conditions, weather phrase) plus a derived per-local-day maximum-temperature summary. A station code that does not resolve still completes with an empty observation set and explanatory warnings rather than failing.

activeper callv1
Provider
Web & Business Data Network
Category
weather
Provider price
$0.01365 per call
Latency p50 / p95
— / —
Success rate
—
Verified
—

Provider list price; Omnial MCP charges provider cost plus a platform markup on top.

Contract

input_schema.json
{
  "type": "object",
  "required": [
    "end_date",
    "country_code",
    "station_id",
    "timezone_name",
    "start_date"
  ],
  "properties": {
    "end_date": {
      "type": "string",
      "description": "End date in YYYYMMDD format, inclusive local calendar date."
    },
    "start_date": {
      "type": "string",
      "description": "Start date in YYYYMMDD format, interpreted as a local calendar date."
    },
    "station_id": {
      "type": "string",
      "description": "Airport station ICAO code (e.g. EFHK, KJFK). Obtain from search endpoint's icaoCode field."
    },
    "country_code": {
      "type": "string",
      "description": "Two-letter ISO country code for the station (e.g. FI, US)."
    },
    "timezone_name": {
      "type": "string",
      "description": "IANA timezone name for local date grouping (e.g. Europe/Helsinki, America/New_York). DST transitions are handled automatically."
    }
  },
  "additionalProperties": false
}
output_schema.json
{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "daily_maxima": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "date": {
                "type": "string"
              },
              "max_temp_c": {
                "type": "number"
              },
              "provenance": {
                "type": "string",
                "description": "'DERIVED_FROM_RETURNED_ROWS' on the one real populated example observed."
              },
              "duplicate_count": {
                "type": "number"
              },
              "observation_count": {
                "type": "number"
              },
              "largest_gap_minutes": {
                "type": "number"
              },
              "max_observed_at_utc": {
                "type": "string"
              },
              "max_observed_at_local": {
                "type": "string"
              },
              "last_observed_at_local": {
                "type": "string"
              },
              "first_observed_at_local": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "description": "One derived per-local-day summary entry, computed from the returned observation rows (see provenance below). Empty when observations is empty."
        },
        "observations": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "rh": {
                "type": "number",
                "description": "Relative humidity, percent."
              },
              "vis": {
                "type": "number",
                "description": "Visibility, unit per request_metadata.units."
              },
              "clds": {
                "type": "string",
                "description": "Cloud layer code, e.g. 'OVC', 'BKN', 'CLR'."
              },
              "gust": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Populated with the observed gust speed when a wind gust occurred at that reading (e.g. values of 46, 44, 57 observed on jfk-january-week.json rows); null otherwise."
              },
              "temp": {
                "type": "number",
                "description": "Degrees, unit per request_metadata.units."
              },
              "wdir": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Compass degrees. Null observed on calm-wind rows (wdir_cardinal 'CALM')."
              },
              "wspd": {
                "type": "number"
              },
              "class": {
                "type": "string",
                "description": "'observation' on every row observed."
              },
              "dewPt": {
                "type": "number"
              },
              "obs_id": {
                "type": "string"
              },
              "max_temp": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Populated only on the rare summary-style row within a local day (observed on a small minority of rows); null on ordinary observation rows."
              },
              "min_temp": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Same pairing/behavior as max_temp above -- populated only on rare summary-style rows."
              },
              "obs_name": {
                "type": "string",
                "description": "The station's registered public display name, repeated per row."
              },
              "pressure": {
                "type": "number"
              },
              "row_type": {
                "type": "string",
                "description": "'original_station_report' on every row observed."
              },
              "temp_unit": {
                "type": "string"
              },
              "wx_phrase": {
                "type": "string"
              },
              "local_date": {
                "type": "string"
              },
              "station_id": {
                "type": "string"
              },
              "precip_hrly": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Observed as 0 on the KJFK fixture and null throughout the EFHK fixture."
              },
              "wdir_cardinal": {
                "type": "string"
              },
              "valid_time_gmt": {
                "type": "number",
                "description": "Unix epoch seconds."
              },
              "observed_at_utc": {
                "type": "string"
              },
              "observed_at_local": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          "description": "One entry per recorded observation, chronologically sorted. Empty when the station code does not resolve or the range has no data (see examples/invalid-station-error.json)."
        },
        "data_source_note": {
          "type": "string",
          "description": "'UNVERIFIED_TWC_AIRPORT_HISTORY_PROXY' on all three real calls observed -- a note on data provenance, not a live status flag."
        },
        "request_metadata": {
          "type": "object",
          "properties": {
            "units": {
              "type": "string",
              "description": "'m' (metric) on all three real calls observed."
            },
            "complete": {
              "type": "boolean",
              "description": "False when the requested station/date range could not be fully resolved (see examples/invalid-station-error.json, where it is false with row_count 0)."
            },
            "warnings": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Human-readable diagnostic strings, e.g. an upstream error for a date chunk or 'No observations for date <date>' -- populated on an invalid/unresolvable station, empty on both real successful pulls observed."
            },
            "row_count": {
              "type": "number"
            },
            "station_id": {
              "type": "string",
              "description": "Echoes the input station_id."
            },
            "country_code": {
              "type": "string"
            },
            "retrieved_at": {
              "type": "string",
              "description": "ISO 8601 UTC timestamp of the call itself."
            },
            "timezone_name": {
              "type": "string"
            },
            "duplicate_count": {
              "type": "number"
            },
            "requested_end_date": {
              "type": "string"
            },
            "missing_local_dates": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Local calendar dates in the requested range with no observation data."
            },
            "last_observed_at_utc": {
              "type": [
                "string",
                "null"
              ],
              "description": "Null when no observations were returned at all (invalid station code)."
            },
            "requested_start_date": {
              "type": "string"
            },
            "first_observed_at_utc": {
              "type": [
                "string",
                "null"
              ],
              "description": "Null when no observations were returned at all (invalid station code)."
            },
            "invalid_timestamp_count": {
              "type": "number"
            },
            "invalid_temperature_count": {
              "type": "number"
            }
          },
          "description": "Echoes and summarizes the request, including how much data actually came back.",
          "additionalProperties": true
        },
        "station_metadata": {
          "type": "object",
          "properties": {
            "icao": {
              "type": "string"
            },
            "obs_name": {
              "type": [
                "string",
                "null"
              ],
              "description": "The station's registered public display name, e.g. 'New York/JFK Intl'. Null when the station code does not resolve."
            },
            "station_id": {
              "type": "string"
            },
            "source_product_name": {
              "type": "string"
            }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "status": {
      "type": "string",
      "description": "'success' on all three real calls observed."
    }
  },
  "description": "The observation record, as returned at routing.responseResultPath ($.output).",
  "additionalProperties": true
}

Pricing

Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.

Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.

ChargeRate
Per call
Flat, regardless of what comes back
$0.01365
Cost basis
Not recorded

This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.

Updated
Sep 15, 2026