Discover/Synoptic Data API
live

Synoptic Data APIviewer.synopticdata.com ↗

Retrieve the latest air temperature and observation time for up to 50 weather stations at once from the Synoptic Data public viewer via a single API endpoint.

Endpoint health
verified 1h ago
get_latest_observations
1/1 passing latest checkself-healing
Endpoints
1
Updated
2h ago

What is the Synoptic Data API?

The Synoptic Data Viewer API gives developers access to real-time weather station observations through 1 endpoint, get_latest_observations, returning 8 fields per station including air temperature, coordinates, elevation, and UTC observation time. Submit up to 50 comma-separated station IDs in a single request and get back the most recent reading — within the last 24 hours — for each station the public viewer exposes.

This call costs2 credits / call— charged only on success
Try it
Temperature unit for air_temp.
Comma-separated station identifiers as shown in the viewer, e.g. KMIA,KOPF (1-50 IDs; letters, digits, _ or -). Case-insensitive; the scraper upper-cases them.
→ api.parse.bot/scraper/55ee0dfb-c998-42ad-810f-0c23ab1022a2/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/55ee0dfb-c998-42ad-810f-0c23ab1022a2/get_latest_observations?station_ids=KMIA%2CKOPF%2CKFLL%2CKFXE%2CKPMP' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace viewer-synopticdata-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: Synoptic Data Viewer — fetch latest weather observations."""
from parse_apis.viewer_synopticdata_com_api import Synoptic, TempUnit, InputFormatInvalid

client = Synoptic()

# Fetch the full observation report for several South Florida airports.
report = client.observation_reports.fetch(
    station_ids="KMIA,KOPF,KFLL,KFXE,KPMP",
    temp_unit=TempUnit.F,
)
print(f"Requested: {report.requested_count}, Found: {report.found_count}")
if report.missing_station_ids:
    print("Missing:", report.missing_station_ids)

# Iterate individual station rows via the paginated list accessor.
for station in client.stations.list(station_ids="KMIA,KFLL", limit=5):
    print(
        station.station_id,
        station.name,
        f"{station.air_temp} {station.temp_unit}",
        station.observation_time,
    )

# Demonstrate typed error handling for malformed input.
try:
    client.observation_reports.fetch(station_ids="K MIA;x")
except InputFormatInvalid as exc:
    print(f"Bad input: {exc.message}")

print("exercised: observation_reports.fetch / stations.list / InputFormatInvalid")
All endpoints · 1 totalmissing one? ·

Returns the most recent air-temperature observation (within the last 24 hours) and its UTC observation time for each requested station, one row per station that the public viewer can see, in a single round trip. Stations that the viewer does not expose (unknown IDs, or restricted networks such as the 1-minute 'High Frequency ASOS' stations whose IDs end in 1M) are omitted from `stations` and listed in `missing_station_ids`; a request where every station is missing is a successful response with an empty `stations` array. `air_temp` is expressed in the unit named by `temp_unit` on each row, which follows the optional temperature-unit selector (Celsius when omitted). `observation_time` is an ISO-8601 UTC timestamp.

Input
ParamTypeDescription
temp_unitstringTemperature unit for air_temp.
station_idsrequiredstringComma-separated station identifiers as shown in the viewer, e.g. KMIA,KOPF (1-50 IDs; letters, digits, _ or -). Case-insensitive; the scraper upper-cases them.
Response
{
  "type": "object",
  "fields": {
    "stations": "array of per-station rows: station_id, name, network_id, latitude, longitude, elevation_ft, status, air_temp (number in temp_unit), temp_unit, observation_time (ISO-8601 UTC)",
    "found_count": "integer, number of stations returned",
    "requested_count": "integer, number of station IDs requested",
    "missing_station_ids": "array of requested IDs the viewer did not return (unknown or restricted)"
  },
  "sample": {
    "data": {
      "stations": [
        {
          "name": "Miami, Miami International Airport",
          "status": "ACTIVE",
          "air_temp": 29,
          "latitude": 25.79056,
          "longitude": -80.31639,
          "temp_unit": "Celsius",
          "network_id": "1",
          "station_id": "KMIA",
          "elevation_ft": 10,
          "observation_time": "2026-10-03T05:15:00Z"
        }
      ],
      "found_count": 1,
      "requested_count": 1,
      "missing_station_ids": []
    },
    "status": "success"
  }
}

About the Synoptic Data API

What the API Returns

The get_latest_observations endpoint accepts a required station_ids parameter — a comma-separated list of 1 to 50 station identifiers using letters, digits, underscores, or hyphens (e.g. KMIA,KOPF). For each recognized station, the response includes station_id, name, network_id, latitude, longitude, elevation_ft, status, and air_temp. The air_temp value is returned in the unit specified by the optional temp_unit parameter, defaulting to the viewer's standard unit when omitted.

Response Shape and Coverage Signals

Every response includes three top-level fields that help you audit coverage: found_count (how many stations were matched), requested_count (how many IDs you submitted), and missing_station_ids (an array of IDs the viewer did not return). A station appears in missing_station_ids when its ID is unknown to the public viewer or when the viewer restricts its data — this lets you detect gaps without parsing error messages.

Freshness and Scope

Observations are scoped to the last 24 hours. Stations outside that window or restricted from the public viewer are excluded from the stations array and listed in missing_station_ids instead. Station coverage reflects what the Synoptic Data public viewer at viewer.synopticdata.com exposes, which spans a broad network of surface weather stations primarily across the United States.

Reliability & maintenanceVerified

The Synoptic Data API is a managed, monitored endpoint for viewer.synopticdata.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when viewer.synopticdata.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official viewer.synopticdata.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
1h ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Display current air temperature on a map by pulling latitude, longitude, and air_temp for a set of nearby stations.
  • Monitor airport weather conditions by querying ICAO-style station IDs (e.g. KMIA) and tracking observation timestamps.
  • Validate data pipelines by comparing found_count to requested_count and alerting when missing_station_ids is non-empty.
  • Build elevation-aware weather dashboards using the elevation_ft field alongside temperature readings.
  • Archive hourly snapshots of station readings for trend analysis using the UTC observation time returned per station.
  • Cross-reference network_id values to segment observations by monitoring network for research or operational workflows.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Synoptic Data have an official developer API?+
Yes. Synoptic Data offers the Mesonet API at developers.synopticdata.com, which provides broader access to historical and real-time surface weather data with its own token-based authentication and tiered pricing.
What does the `missing_station_ids` field tell me?+
It contains the station IDs from your request that the public viewer did not return — either because the ID is unrecognized, the station data is restricted from the public viewer, or no observation within the last 24 hours is available. You can use found_count and requested_count together to quickly detect partial responses.
Is historical weather data or multi-day observations covered?+
Not currently. The API returns only the most recent observation within the last 24 hours per station; there is no time-range parameter or historical lookup. You can fork this API on Parse and revise it to add a historical-range endpoint if that capability is needed.
Can I retrieve additional weather variables like wind speed, humidity, or precipitation?+
Not currently. The API exposes air_temp as the only meteorological measurement alongside station metadata. You can fork this API on Parse and revise it to surface additional variables from the viewer if they are available for the stations you need.
How many stations can I request in a single call, and what ID format is expected?+
You can request 1 to 50 stations per call using the station_ids parameter, which accepts a comma-separated string of identifiers composed of letters, digits, underscores, or hyphens. IDs follow the conventions used in the Synoptic Data public viewer, such as KMIA or KOPF.
Page content last updated . Spec covers 1 endpoint from viewer.synopticdata.com.
Related APIs in WeatherSee all →
forecast.weather.gov API
Get National Weather Service station metadata plus the latest and recent weather observations (temperature, wind, pressure, humidity, and METAR text) for a specified station ID.
wunderground.com API
Access real-time weather conditions, multi-day forecasts, and detailed historical weather data from thousands of personal and airport weather stations worldwide. Search and retrieve current observations, hourly history, and monthly records to power your weather applications and analysis.
api.weather.gov API
Access data from api.weather.gov.
weatherunderground.com API
Get real-time weather data and 10-day forecasts for any location, with access to current conditions like temperature, humidity, and wind speed. Search for locations and receive detailed weather narratives to plan your day or week ahead.
lightningmaps.org API
Track real-time lightning strikes across the globe with precise coordinates, timestamps, and accuracy measurements from the Blitzortung.org network. Query live strike data and access information about detector stations worldwide to monitor weather patterns and atmospheric activity as it happens.
weatherspark.com API
Get historical weather data, current METAR reports, and monthly climate summaries for any location by searching WeatherSpark's comprehensive weather database. Access detailed weather insights including temperature trends, precipitation patterns, and atmospheric conditions to power weather-dependent applications and analysis.
openweathermap.org API
Search for cities and retrieve live weather conditions and forecasts (current, minutely precipitation, hourly and daily) by coordinates or by city name.
global-warming.org API
Access real-time climate and environmental data including temperature, CO2, methane, nitrous oxide levels, arctic sea ice coverage, and ocean warming metrics. Browse climate news updates and explore detailed information on deforestation trends through an integrated environmental monitoring platform.