Skip to content
DeepfireDeepfire Docs
Esc
navigateopen⌘Jpreview
On this page

Paging & bulk export

Page through results with next links or startIndex, and export in bulk by windowing on observed_at.

Page size

limit is capped at 10,000 features per request; a larger value is silently clamped to 10,000.

Paging

Page through larger result sets by following the next link in each response, or with startIndex:

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

Avoid deep offsets. Very large startIndex values (hundreds of thousands and up) are slow and will hit the 30-second query limit. For anything bulk-sized, window by time instead.

Bulk export: window by observed_at

Request successive closed time windows via CQL, paging within each window. Windows keep every startIndex shallow, so each request stays fast:

import os
import requests

BASE = "https://api.deepfire.co/ogc/features/v1"
# See /guides/authentication.
HEADERS = {"Authorization": f"Bearer {os.environ['DEEPFIRE_TOKEN']}"}

def fetch_window(collection, start, end, page_size=10_000):
    """All features with observed_at in [start, end), paging within the window."""
    features, start_index = [], 0
    while True:
        r = requests.get(
            f"{BASE}/collections/{collection}/items",
            headers=HEADERS,
            params={
                "f": "application/geo+json",
                "limit": page_size,
                "startIndex": start_index,
                "filter-lang": "cql2-text",
                "filter": (
                    f"observed_at >= TIMESTAMP('{start}') "
                    f"AND observed_at < TIMESTAMP('{end}')"
                ),
            },
            timeout=60,
        )
        r.raise_for_status()
        page = r.json()["features"]
        features.extend(page)
        if len(page) < page_size:
            return features
        start_index += page_size

# One day at a time
day = fetch_window(
    "deepfire:hotspots", "2026-07-01T00:00:00Z", "2026-07-02T00:00:00Z"
)
print(len(day), "hotspots")

Pick a window size that keeps each window to a handful of pages (a day of global hotspots is a reasonable starting point; shrink the window for busy periods).

Was this page helpful?