Crosby News Air API
The Air API from Crosby News — 1 operation(s) for air.
The Air API from Crosby News — 1 operation(s) for air.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/crosbynews-com:crosbynews-com-air-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: crosbynews.com Air API
version: 1.7.0
description: 'Crosby, Texas community data: current conditions, hourly and 7-day forecast, active alerts, the EPA UV index, and a measured air-quality index (EPA/AirNow monitors, with an Open-Meteo modeled fallback) from the U.S. National Weather Service, EPA/AirNow, and Open-Meteo; river/bayou flood levels; the Atlantic tropical outlook; the Houston Health Department''s measured daily pollen and mold count; the Harris County burn-ban status from the Texas A&M Forest Service; road incidents and lane closures from Houston TranStar; recent local news headlines; and the Crosby ISD school calendar. Public, no authentication.'
contact:
url: https://crosbynews.com/
license:
name: Public domain (NWS source data)
url: https://www.weather.gov/disclaimer
servers:
- url: https://crosbynews.com
security: []
tags:
- name: Air
paths:
/api/air:
get:
operationId: getAir
summary: Measured US Air Quality Index for the Houston / Crosby, TX area
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
responses:
'200':
description: Current US AQI for the Houston-Galveston-Brazoria reporting area (which includes Crosby). Measured by EPA/AirNow monitors when available (measured:true), with an Open-Meteo modeled fallback (measured:false).
content:
application/json:
schema:
$ref: '#/components/schemas/Air'
'304':
$ref: '#/components/responses/NotModified'
'502':
description: Air quality data unavailable
tags:
- Air
components:
schemas:
AirQuality:
type:
- object
- 'null'
description: 'US Air Quality Index. `measured: true` = EPA/AirNow official monitors for the Houston-Galveston-Brazoria reporting area (the nearest official area, which includes Crosby — there''s no monitor in Crosby itself). `measured: false` = Open-Meteo modeled forecast for Crosby''s coordinates, the fallback when AirNow isn''t reporting. `modeled` is the inverse of `measured` (kept for back-compat). null when both failed.'
properties:
usAqi:
type: integer
description: US AQI, 0–500 scale (the max of the pollutant sub-indices).
category:
type: string
description: Good / Moderate / Unhealthy for Sensitive Groups / Unhealthy / Very Unhealthy / Hazardous.
dominantPollutant:
type:
- string
- 'null'
description: The pollutant driving the overall AQI.
dominantMonitor:
type:
- string
- 'null'
description: Monitor site reporting the dominant pollutant (measured path).
monitors:
type:
- object
- 'null'
description: Per-pollutant reporting monitor site names (measured path).
reportingAgency:
type:
- string
- 'null'
description: Agency operating the monitors (e.g. TCEQ).
subIndices:
type:
- object
- 'null'
description: Per-pollutant AQI (ozone/pm25/pm10/…). Present for both sources.
pm2_5:
type:
- number
- 'null'
description: PM2.5 concentration in concentrationUnit (modeled source only; null when measured).
pm10:
type:
- number
- 'null'
ozone:
type:
- number
- 'null'
concentrationUnit:
type: string
measured:
type: boolean
modeled:
type: boolean
description: Inverse of measured; retained for back-compat.
reportingArea:
type:
- string
- 'null'
description: AirNow reporting area (measured source only).
observed:
type:
- string
- 'null'
description: Local observation time (measured source only).
source:
type: string
nearbyMonitor:
type:
- object
- 'null'
description: Cross-reference reading from the nearest DEDICATED ozone monitor (Channelview C15, ~8.5 mi), so a locally elevated ozone value can't hide behind the closest-per-pollutant headline above. Hourly, EPA/AirNow. null when that monitor didn't report in the last refresh window, or when the headline AQI is itself unavailable.
properties:
site:
type: string
pollutant:
type: string
description: Always "ozone" — PM is already covered by the headline monitors.
usAqi:
type: integer
category:
type: string
distanceMiles:
type: number
description: Straight-line distance from Crosby.
observed:
type:
- string
- 'null'
format: date-time
reportingAgency:
type:
- string
- 'null'
note:
type: string
Air:
type: object
properties:
location:
type: string
updated:
type:
- string
- 'null'
format: date-time
airQuality:
$ref: '#/components/schemas/AirQuality'
parameters:
IfNoneMatch:
name: If-None-Match
in: header
required: false
description: A previously returned weak ETag. When it still matches the cached snapshot, the endpoint answers 304 with no body — the cheap way to poll.
schema:
type: string
responses:
NotModified:
description: Not Modified — the caller's If-None-Match matches the current snapshot, so no body is sent. The ETag is derived from the cache's refresh stamp, so it changes exactly when the payload would.