Crosby News Air API

The Air API from Crosby News — 1 operation(s) for air.

Operations 1

GET /api/air Measured US Air Quality Index for the Houston / Crosby, TX area #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/crosbynews-com:crosbynews-com-air-api"
All apis
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.

Get an API 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 Specification

crosbynews-com-air-api-openapi.yml Raw ↑
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.