Skip to content
DeepfireDeepfire Docs
Esc
↑↓navigate↵open⌘Jpreview
On this page

Quickstart

Fetch satellite wildfire data from our low-latency API and run a fire spread.

1. Get a token

Create an API client under Settings → API clients at app.deepfire.co. See Authentication for the details.

export TOKEN=$(curl -s -X POST "https://api.deepfire.co/v1/token" \
  -H "Content-Type: application/json" \
  -d "{\"client_id\": \"$DEEPFIRE_CLIENT_ID\", \"client_secret\": \"$DEEPFIRE_CLIENT_SECRET\"}" \
  | jq -r .access_token)

2. Fetch hotspots

Get 10 hotspots.

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://api.deepfire.co/ogc/features/v1/collections/deepfire:hotspots/items?f=application/geo%2Bjson&limit=10"

The response is a GeoJSON FeatureCollection — one Point feature per detection (truncated):

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "id": "hotspots.3f9c2a1e-8b4d-4c7a-9e2f-1d5b6a7c8e90",
      "geometry": { "type": "Point", "coordinates": [-120.4512, 38.7734] },
      "properties": {
        "cluster_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
        "observed_at": "2026-09-09T13:42:00Z",
        "source": "VIIRS_NOAA20_NRT",
        "confidence": "HIGH",
        "fire_radiative_power": 42.7,
        "country": "US",
        "active": true
      }
    },
    ...
  ],
  "numberReturned": 10,
  "timeStamp": "2026-09-09T14:00:12Z",
  "links": [
    { "rel": "next", "type": "application/geo+json", "href": "https://api.deepfire.co/ogc/features/v1/collections/deepfire:hotspots/items?f=application/geo%2Bjson&limit=10&startIndex=10" }
  ]
}

See Hotspots for what each property means.

3. Active hotspots in a bounding box

Combine a spatial filter (bbox, WGS84 lon/lat) with an attribute filter (CQL2). Example: currently active detections over California.

curl -sG -H "Authorization: Bearer $TOKEN" \
  "https://api.deepfire.co/ogc/features/v1/collections/deepfire:hotspots/items" \
  --data-urlencode "bbox=-125,32,-114,42" \
  --data-urlencode "filter-lang=cql2-text" \
  --data-urlencode "filter=active = true" \
  --data-urlencode "limit=1000" \
  --data-urlencode "f=application/geo+json"

4. Fetch hotspot by ID

Feature IDs look like hotspots.<uuid> and come from items responses:

id=$(curl -s -H "Authorization: Bearer $TOKEN" \
  "https://api.deepfire.co/ogc/features/v1/collections/deepfire:hotspots/items?f=application/geo%2Bjson&limit=1" \
  | jq -r '.features[0].id')

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://api.deepfire.co/ogc/features/v1/collections/deepfire:hotspots/items/$id?f=application/geo%2Bjson"

5. Run a fire spread

Take the cluster_id of an active hotspot and simulate 12 hours of spread from it. This example picks one in Larimer County, Colorado (bbox + country = 'US') — widen the bbox if nothing is burning there right now:

cluster_id=$(curl -sG -H "Authorization: Bearer $TOKEN" \
  "https://api.deepfire.co/ogc/features/v1/collections/deepfire:hotspots/items" \
  --data-urlencode "bbox=-106.2,40.25,-104.94,41.0" \
  --data-urlencode "filter-lang=cql2-text" \
  --data-urlencode "filter=active = true AND country = 'US'" \
  --data-urlencode "limit=1" \
  --data-urlencode "f=application/geo+json" \
  | jq -r '.features[0].properties.cluster_id')

sim_id=$(curl -s -X POST "https://api.deepfire.co/v1/fire-spread/simulations" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"clusterId\": \"$cluster_id\", \"durationHours\": 12}" \
  | jq -r .id)

curl -s -H "Authorization: Bearer $TOKEN" \
  "https://api.deepfire.co/v1/fire-spread/simulations/$sim_id"

Poll the last call until status is COMPLETED; result then holds one spread polygon per hour. See Fire spread for models, ensembles and ignition options.

Was this page helpful?