Blue API documentation
Feature guides

Follow one workflow from prerequisites through its response and output.

OGC data workflow

Display and query terrain data

Use separate OGC Features and Tiles services to query map features, reusable terrain products, and map-owned RF results without hard-coding product URLs.

GET/api/maps/{map_id}/ogc/features
01 · Discover

Start with the map's feature collections.

Map features use the read-only map-scoped OGC Features service. Each rendered feature layer is a dynamiclayer--UUID collection. Use blue:layer_type to distinguish boundaries, named areas, annotations, and other content, then follow advertised links.

List OGC feature collections
curl --silent --show-error --fail-with-body \
  --header "Authorization: Bearer $BLUE_API_KEY" \
  "$BLUE_API_URL/api/maps/$BLUE_MAP_ID/ogc/features/collections"
One collection from the catalog
{
  "id": "layer--7d307d4e-46c4-4f6a-909f-9e7d62cd5b19",
  "title": "Area of Operations",
  "blue:map_layer_id": "7d307d4e-46c4-4f6a-909f-9e7d62cd5b19",
  "blue:layer_type": "boundary",
  "links": [
    {
      "rel": "items",
      "href": "https://service-blue.exialabs.com/api/maps/MAP_ID/ogc/features/collections/layer--7d307d4e-46c4-4f6a-909f-9e7d62cd5b19/items",
      "type": "application/geo+json"
    }
  ]
}

Reusable terrain products are advertised by the global OGC Tiles catalog.

List global tile collections
curl --silent --show-error --fail-with-body \
  --header "Authorization: Bearer $BLUE_API_KEY" \
  "$BLUE_API_URL/api/ogc/tiles/collections"
CollectionEncodingTerrain readiness dependency
blue-native--terrain-elevationPNG coverageterrain_display_tiles
blue-native--terrain-landcoverPNG coverageterrain_display_tiles
blue-native--roadsMapbox Vector Tileroad_display_tiles
blue-native--soilMapbox Vector Tilesoil_display_tiles
blue-native--populationMapbox Vector Tilepopulation_display_tiles
blue-native--buildingsMapbox Vector Tilebuildings_display_tiles
02 · Features

Query boundaries and named areas as GeoJSON.

Find the collection you need by its blue:layer_type, then follow its items link. Items endpoints support bbox, datetime, limit, and offset. The default limit is 100 and the maximum is 1000.

Query named areas of interest
export BLUE_LAYER_ID="LAYER_UUID_FROM_COLLECTION"

curl --silent --show-error --fail-with-body \
  --header "Authorization: Bearer $BLUE_API_KEY" \
  "$BLUE_API_URL/api/maps/$BLUE_MAP_ID/ogc/features/collections/layer--$BLUE_LAYER_ID/items?bbox=-104.90,38.80,-104.70,38.95&limit=100"
03 · Tiles

Use the global catalog for reusable terrain tiles.

Tile addresses use tileMatrix = zoom, tileRow = y, andtileCol = x. Use the collection's tileset metadata for its format and supported zoom limits.

Fetch an elevation tile
curl --silent --show-error --fail-with-body \
  --header "Authorization: Bearer $BLUE_API_KEY" \
  --output terrain-tile.png \
  "$BLUE_API_URL/api/ogc/tiles/collections/blue-native--terrain-elevation/tiles/WebMercatorQuad/ZOOM/TILE_ROW/TILE_COLUMN.png"
Map-owned RF tiles are separateDiscover RF results with GET /api/maps/{map_id}/ogc/tiles/collections. RF collection IDs are dynamic layer--UUID values; follow their advertised tileset links.
Do not treat every 204 as an error204 means a valid tile is empty or not ready. Inspect response headers and the terrain job phase for that product. Retry not-ready tiles after backoff; empty tiles may remain empty.
04 · Decode and cache

Interpret each product according to its encoding.

  • Elevation PNG: alpha 0 is nodata; otherwise packed = R × 65536 + G × 256 + B and meters are -10000 + packed × 0.1.
  • Land-cover PNG: alpha 0 is nodata and the red channel contains the raw ESA land-cover category.
  • Roads, population, soil, and buildings are MVT; each source-layer name matches its collection ID.
  • Send If-None-Match with a prior ETag and accept 304 as an unchanged authenticated representation.
200

Tile ready

Read the PNG or MVT body and cache it according to the response headers.

204

Empty or not ready

No response body. Inspect headers and product readiness before retrying.

304

Not modified

Reuse the representation already stored for that ETag.

404 / 503

Unavailable

The collection, address, format, RF layer, or backing service is unavailable.