Contract
{
"type": "object",
"required": [
"station_id"
],
"properties": {
"station_id": {
"type": "string",
"description": "PWS Station ID (e.g. ILONDO440). Obtain from search endpoint's pwsId field."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"observations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"tz": {
"type": "string",
"description": "IANA timezone name, e.g. 'Europe/London'."
},
"lat": {
"type": "number",
"description": "The station's registered latitude -- see verification.notes on why this is safe to ship."
},
"lon": {
"type": "number",
"description": "The station's registered longitude -- see verification.notes on why this is safe to ship."
},
"epoch": {
"type": "number",
"description": "Unix epoch seconds for the observation."
},
"metric": {
"type": "object",
"properties": {
"tempAvg": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see tempHigh."
},
"tempLow": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see tempHigh."
},
"dewptAvg": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see dewptHigh."
},
"dewptLow": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see dewptHigh."
},
"tempHigh": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry in the one populated call -- this station's temperature sensor appears offline/unconfigured for the captured window."
},
"dewptHigh": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- correlated with the offline temperature sensor, see tempHigh."
},
"precipRate": {
"type": "number",
"description": "mm/hr."
},
"precipTotal": {
"type": "number",
"description": "mm, running total for the local day at the time of this hourly entry."
},
"pressureMax": {
"type": "number",
"description": "hPa."
},
"pressureMin": {
"type": "number",
"description": "hPa."
},
"windgustAvg": {
"type": [
"number",
"null"
],
"description": "km/h. Observed null on roughly half of the hourly entries."
},
"windgustLow": {
"type": [
"number",
"null"
],
"description": "km/h. Observed null on roughly half of the hourly entries."
},
"heatindexAvg": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see heatindexHigh."
},
"heatindexLow": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see heatindexHigh."
},
"windchillAvg": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see windchillHigh."
},
"windchillLow": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- see windchillHigh."
},
"windgustHigh": {
"type": [
"number",
"null"
],
"description": "km/h. Observed null on roughly half of the hourly entries."
},
"windspeedAvg": {
"type": [
"number",
"null"
],
"description": "km/h. Observed null on roughly half of the hourly entries."
},
"windspeedLow": {
"type": [
"number",
"null"
],
"description": "km/h. Observed null on roughly half of the hourly entries."
},
"heatindexHigh": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- correlated with the offline temperature sensor, see tempHigh."
},
"pressureTrend": {
"type": "number",
"description": "hPa change."
},
"windchillHigh": {
"type": [
"number",
"null"
],
"description": "Celsius. Observed null on every hourly entry -- correlated with the offline temperature sensor, see tempHigh."
},
"windspeedHigh": {
"type": [
"number",
"null"
],
"description": "km/h. Observed null on roughly half of the hourly entries."
}
},
"description": "Metric-unit measurements for the hour.",
"additionalProperties": true
},
"uvHigh": {
"type": [
"number",
"null"
],
"description": "Observed null on roughly half of the hourly entries in the one populated call."
},
"qcStatus": {
"type": "number",
"description": "Quality-control flag from the vendor. Observed as 1 on every hourly entry in the one populated call."
},
"stationID": {
"type": "string",
"description": "Echoes the input station_id -- see verification.notes on why this is safe to ship."
},
"obsTimeUtc": {
"type": "string",
"description": "Observation timestamp in UTC, ISO 8601, e.g. '2026-08-31T23:59:45Z'. A capture-time PII heuristic flagged this leaf as a possible phone number; it is a timestamp string, confirmed against the real fixture value, not a phone number."
},
"winddirAvg": {
"type": [
"number",
"null"
],
"description": "Compass degrees. Observed null on roughly half of the hourly entries in the one populated call."
},
"humidityAvg": {
"type": [
"number",
"null"
],
"description": "Percent. Observed null on every hourly entry in the one populated call -- see humidityHigh."
},
"humidityLow": {
"type": [
"number",
"null"
],
"description": "Percent. Observed null on every hourly entry in the one populated call -- see humidityHigh."
},
"humidityHigh": {
"type": [
"number",
"null"
],
"description": "Percent. Observed null on every hourly entry in the one populated call -- this station's humidity sensor appears offline/unconfigured for the captured window."
},
"obsTimeLocal": {
"type": "string",
"description": "Observation timestamp in the station's local time, e.g. '2026-09-01 00:59:45'. Same PII-heuristic false positive as obsTimeUtc above -- a timestamp string, not a phone number."
},
"solarRadiationHigh": {
"type": [
"number",
"null"
],
"description": "W/m^2. Observed null on roughly half of the hourly entries in the one populated call."
}
},
"additionalProperties": true
},
"description": "96 hourly entries on the one populated call observed (a full 7-day span reported by that particular station's cadence -- not confirmed to always be exactly 96)."
}
},
"description": "Absent entirely on a station id that does not resolve (see examples/invalid-station-error.json, where the shaped result is `{}`).",
"additionalProperties": true
},
"status": {
"type": "string",
"description": "'success' on the one populated call observed."
}
},
"description": "The weather 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.
| 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
