Contract
{
"type": "object",
"required": [
"end_date",
"station_id",
"start_date"
],
"properties": {
"end_date": {
"type": "string",
"description": "End date in YYYYMMDD format."
},
"start_date": {
"type": "string",
"description": "Start date in YYYYMMDD format."
},
"station_id": {
"type": "string",
"description": "Airport station ICAO code (e.g. KJFK, EGLL). Obtain from search endpoint's icaoCode field."
},
"country_code": {
"type": "string",
"description": "Two-letter ISO country code for the station (e.g. US, GB)."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"metadata": {
"type": "object",
"properties": {
"units": {
"type": "string",
"description": "'m' (metric) on the one real call observed; unconfirmed whether an imperial variant exists."
},
"language": {
"type": "string"
}
},
"description": "Response-envelope metadata. Only `language` (response text locale, e.g. 'en-US') and `units` (the measurement-system flag, e.g. 'm' for metric on the one real call observed) are kept -- the endpoint's own transaction id, cache-expiry epoch, response schema version, and internal location key are vendor session plumbing, not customer-facing data, and are left out of this shape.",
"additionalProperties": false
},
"observations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rh": {
"type": "number",
"description": "Relative humidity, percent."
},
"wc": {
"type": "number",
"description": "Wind chill."
},
"key": {
"type": "string",
"description": "Repeats the station code."
},
"vis": {
"type": "number",
"description": "Visibility, kilometers under the observed metric unit setting."
},
"clds": {
"type": "string",
"description": "Cloud-cover code, e.g. 'OVC', 'BKN', 'FEW', 'CLR', 'SCT'."
},
"gust": {
"type": [
"number",
"null"
],
"description": "Null on most rows on the one real call observed; populated with a wind-gust reading (e.g. 46, 54) on a number of rows, mostly during a windier stretch of the week."
},
"temp": {
"type": "number"
},
"wdir": {
"type": [
"number",
"null"
],
"description": "Null on calm-wind rows (wdir_cardinal='CALM') on the one real call observed."
},
"wspd": {
"type": "number"
},
"class": {
"type": "string",
"description": "'observation' on every row observed."
},
"dewPt": {
"type": "number"
},
"obs_id": {
"type": "string",
"description": "Repeats the station code."
},
"day_ind": {
"type": "string",
"description": "'D' or 'N' (day/night) on the observed rows."
},
"uv_desc": {
"type": "string",
"description": "e.g. 'Low'."
},
"wx_icon": {
"type": "number"
},
"max_temp": {
"type": [
"number",
"null"
],
"description": "Null on almost every row; populated on a small number of rows on the one real call observed -- appears to mark a daily-max reading row, not a per-hour running max."
},
"min_temp": {
"type": [
"number",
"null"
],
"description": "Null on almost every row; populated on a small number of rows on the one real call observed -- appears to mark a daily-min reading row, not a per-hour running min."
},
"obs_name": {
"type": "string",
"description": "The station's display name, e.g. 'New York/JFK Intl'."
},
"pressure": {
"type": "number"
},
"row_type": {
"type": "string",
"description": "'original_station_report' on every observation observed; other values unconfirmed."
},
"uv_index": {
"type": "number"
},
"qc_status": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
},
"snow_hrly": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
},
"temp_unit": {
"type": "string",
"description": "'C' on the one real call observed, matching metadata.units='m'."
},
"wx_phrase": {
"type": "string",
"description": "e.g. 'Cloudy', 'Fair'."
},
"feels_like": {
"type": "number"
},
"heat_index": {
"type": "number"
},
"utc_offset": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
},
"precip_hrly": {
"type": "number",
"description": "0 on every observation on the one real call observed (no precipitation that week)."
},
"precip_total": {
"type": [
"number",
"null"
],
"description": "Null on nearly every row on the one real call observed; populated on a single row (16.26) -- appears to mark a cumulative-total reading row, not a per-hour running total."
},
"pressure_desc": {
"type": [
"string",
"null"
],
"description": "Null on many rows on the one real call observed -- not reported every hour."
},
"pressure_tend": {
"type": [
"number",
"null"
],
"description": "Null on many rows on the one real call observed -- not reported every hour."
},
"timezone_name": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
},
"wdir_cardinal": {
"type": "string",
"description": "e.g. 'WSW', 'CALM'."
},
"valid_time_gmt": {
"type": "number",
"description": "Unix epoch seconds for the observation."
},
"observed_at_utc": {
"type": "string",
"description": "ISO 8601 UTC timestamp of the observation."
},
"observed_at_local": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
},
"revision_timestamp": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
},
"source_availability_timestamp": {
"type": "null",
"description": "Null on every observation on the one real call observed; no populated example was captured, so a populated value's type is unconfirmed."
}
},
"additionalProperties": false
},
"description": "One entry per hourly observation row actually reported by the station within the requested range."
},
"daily_summary": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD."
},
"max_temp_provenance": {
"type": "string",
"description": "'DERIVED_FROM_ROWS' or 'SOURCE_PUBLISHED' on the one real call observed -- other values unconfirmed."
},
"max_temp_row_timestamp": {
"type": "string",
"description": "ISO 8601 timestamp of the row that produced max_temp_from_returned_rows."
},
"source_published_daily_max": {
"type": "number",
"description": "Present only when max_temp_provenance is 'SOURCE_PUBLISHED'; the source's own officially published daily max, which can differ from max_temp_from_returned_rows."
},
"max_temp_from_returned_rows": {
"type": "number",
"description": "Highest temp among the hourly rows this same call actually returned for that day."
}
},
"additionalProperties": false
},
"description": "One entry per calendar day touched by the requested range."
},
"data_source_note": {
"type": "string",
"description": "A data-provenance flag from the upstream vendor, e.g. 'UNVERIFIED_TWC_AIRPORT_HISTORY_PROXY' -- read as a caveat on data reliability, not itself a weather value."
},
"station_metadata": {
"type": "object",
"properties": {
"icao": {
"type": "string"
},
"latitude": {
"type": "null",
"description": "Null on the one real call observed (KJFK); no populated example was captured, so a populated value's type is unconfirmed."
},
"longitude": {
"type": "null",
"description": "Null on the one real call observed (KJFK); no populated example was captured, so a populated value's type is unconfirmed."
},
"station_id": {
"type": "string"
},
"source_product_name": {
"type": "string",
"description": "The upstream data product name, e.g. 'TWC Historical Observations v1'."
}
},
"additionalProperties": false
},
"response_metadata": {
"type": "object",
"properties": {
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Observed as an empty array on the one real call; the shape of a populated warning is unconfirmed."
},
"row_count": {
"type": "number",
"description": "Number of hourly observation rows actually returned."
},
"retrieved_at": {
"type": "string",
"description": "ISO 8601 timestamp of when the upstream call was made."
},
"missing_hour_count": {
"type": "number",
"description": "0 on the one real call observed (no gaps in the requested range)."
},
"requested_end_date": {
"type": "string"
},
"requested_start_date": {
"type": "string"
}
},
"description": "Bookkeeping about the query itself, not weather data.",
"additionalProperties": false
}
},
"description": "Absent when the station code was not recognized (see `status`'s own note).",
"additionalProperties": false
},
"status": {
"type": "string",
"description": "'success' on the one real populated call observed (KJFK). Absent entirely on the invalid-station-code call -- that run's whole result document was empty, not a populated envelope with an error status string."
}
},
"description": "The historical-observation record, as returned at routing.responseResultPath ($.output). An unrecognized station code shapes to `{}` -- see `status`/`data`'s own descriptions.",
"additionalProperties": false
}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.
| Charge | Rate |
|---|---|
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 8, 2026
