Catalog API reference

Discover datasets, parameters and exact selectors before requesting weather data. These public JSON endpoints require no token and consume no credits.

Responses are publicly cacheable for five minutes. Catalog coverage describes the published product; it does not guarantee a weather value for every location and time.

Examples show selected fields and array entries. Full responses can contain more metadata, datasets, parameters or variations. The JSON field names and selector values are unchanged.

Dataset list

GET /api/v2/catalog/datasets

List datasets; filter by code, family, tag or is_ensemble.

curl 'https://gribstream.com/api/v2/catalog/datasets?code=gfs'

Example response (selected fields and entries):

[
  {
    "code": "gfs",
    "name": "GFS",
    "full_name": "Global Forecast System",
    "display_label": "GFS (gfs) - Global Forecast System",
    "provider": "NOAA",
    "is_ensemble": false,
    "parameter_count": 90,
    "models_page_url": "/models/gfs",
    "api_timeseries_url": "/api/v2/gfs/timeseries",
    "api_runs_url": "/api/v2/gfs/runs"
  }
]

Dataset details

GET /api/v2/catalog/datasets/{dataset}

Inspect one dataset: coverage, cadence, ensemble members and source links.

curl 'https://gribstream.com/api/v2/catalog/datasets/gfs'

Example response (selected fields and entries):

{
  "code": "gfs",
  "name": "GFS",
  "provider": "NOAA",
  "spatial_resolution": {
    "label": "0.25° (~28 km)",
    "kind": "latlon"
  },
  "run_cadence": {
    "label": "00/06/12/18 UTC"
  },
  "min_lead_time": "0h",
  "max_lead_time": "384h",
  "is_ensemble": false,
  "archive_start": "2021-03-22",
  "native_grid": {
    "total": 1038240,
    "grid": {
      "type": "regular_latlon",
      "nx": 1440,
      "ny": 721,
      "firstLat": 90,
      "firstLon": 0,
      "latStep": -0.25,
      "lonStep": 0.25,
      "longitudeConvention": "zero_to_360"
    },
    "coordinates_url": "/api/v2/gfs/native-coordinates"
  },
  "source_url": "https://www.ncei.noaa.gov/products/weather-climate-models/global-forecast"
}

Dataset details include native_grid when a verified native grid is available. Its grid object uses the same specification as the coordinate inventory: geometry type, dimensions where applicable, longitude convention, projection parameters and any mesh identifier or precision bound. This summary is free and contains no coordinate pairs.

total is the full grid size, not a bounding-box result count. Satellite rasters may include positions looking past Earth. Dimensions and step fields are zero where inapplicable, such as dimensions on an unstructured mesh; interpret them using the declared grid type.

To retrieve latitude/longitude pairs, use coordinates_url with a registered token and all four bounding-box fields. That inventory request consumes credits; the catalog summary does not.

Parameter list

GET /api/v2/catalog/datasets/{dataset}/parameters

List parameter groups, with names, units and variation counts.

curl 'https://gribstream.com/api/v2/catalog/datasets/gfs/parameters'

Example response (selected fields and entries):

[
  {
    "short_name": "TMP",
    "full_name": "Temperature",
    "display_label": "TMP - Temperature",
    "units": "K",
    "variation_count": 57,
    "has_code_table": false,
    "authoritative_sources": [
      {
        "label": "NOAA GRIB2 Table 4.2-0-0",
        "url": "https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-2-0-0.shtml"
      }
    ]
  }
]

Parameter details

GET /api/v2/catalog/datasets/{dataset}/parameters/{parameter}

Get a parameter’s variations, levels, units and copyable selectors. Parameter paths are case-sensitive.

curl 'https://gribstream.com/api/v2/catalog/datasets/gfs/parameters/TMP'

Example response (selected fields and entries):

{
  "short_name": "TMP",
  "full_name": "Temperature",
  "units": "K",
  "description": "Air temperature is the thermal state of the atmosphere at the specified level. It influences density, stability, and energy exchange.",
  "variations": [
    {
      "level": "2 m above ground",
      "selector": {
        "name": "TMP",
        "level": "2 m above ground",
        "info": ""
      },
      "selector_literal": "{\"name\":\"TMP\",\"level\":\"2 m above ground\",\"info\":\"\"}",
      "introduced_at": "2021-03-22",
      "min_lead_time": "0h",
      "max_lead_time": "384h"
    }
  ]
}

Exact selectors

GET /api/v2/catalog/datasets/{dataset}/selectors

Get every exact (name, level, info) selector in one flat array, suitable for pickers and schema discovery.

curl 'https://gribstream.com/api/v2/catalog/datasets/gfs/selectors'

Example response (selected fields and entries):

[
  {
    "short_name": "TMP",
    "name": "TMP",
    "level": "2 m above ground",
    "info": "",
    "selector": {
      "name": "TMP",
      "level": "2 m above ground",
      "info": ""
    },
    "selector_literal": "{\"name\":\"TMP\",\"level\":\"2 m above ground\",\"info\":\"\"}"
  }
]

Shared parameter list

GET /api/v2/catalog/shared-parameters

List shared weather concepts; filter by dataset. Use dataset_mode=all or any when supplying several datasets.

curl 'https://gribstream.com/api/v2/catalog/shared-parameters'

Example response (selected fields and entries):

[
  {
    "code": "wind_speed_10m",
    "label": "Wind speed at 10m",
    "units": "m/s",
    "summary": "Near-surface wind speed normalized to a single output series.",
    "supported_datasets": [
      "gfs",
      "ifsoper"
    ]
  }
]

Shared parameter details

GET /api/v2/catalog/shared-parameters/{parameter}

Resolve a shared concept for a dataset. Copy resolved_request into your weather request; it may include variables and expressions. Check resolved_supported first.

curl 'https://gribstream.com/api/v2/catalog/shared-parameters/wind_speed_10m?dataset=ifsoper&alias=wind'

Example response (selected fields and entries):

{
  "code": "wind_speed_10m",
  "label": "Wind speed at 10m",
  "units": "m/s",
  "resolved_dataset": "ifsoper",
  "resolved_supported": true,
  "resolved_request": {
    "variables": [
      {
        "name": "10u",
        "level": "sfc",
        "info": "",
        "alias": "u_component",
        "hidden": true
      },
      {
        "name": "10v",
        "level": "sfc",
        "info": "",
        "alias": "v_component",
        "hidden": true
      }
    ],
    "expressions": [
      {
        "expression": "func.Hypot(u_component, v_component)",
        "alias": "wind"
      }
    ]
  }
}

From discovery to a weather request

curl 'https://gribstream.com/api/v2/catalog/datasets?family=gfs'
curl 'https://gribstream.com/api/v2/catalog/datasets/gfs/selectors'
curl 'https://gribstream.com/api/v2/catalog/datasets/gfs/parameters/TMP'
curl 'https://gribstream.com/api/v2/catalog/shared-parameters/wind_speed_10m?dataset=ifsoper&alias=wind'

Copy selectors exactly as returned, including case, spaces and info. Do not infer them from descriptions. Add coordinates and a time window, then call timeseries or runs with your token.

Invalid filters return 400; unknown datasets or parameters return 404. All catalog success responses are JSON. See OpenAPI for complete field and filter schemas.

Full reference · OpenAPI · Native grid coordinates