BYTETOOLS

Kanari API

Free wildfire API with no key: clustered satellite fire detections worldwide from VIIRS, GOES and MTG, with radiative power and a confidence grade. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Kanari API?

Kanari fuses wildfire detections from several satellite systems into clustered events, readable with no API key. Each event returns a centroid, bounding box, per-satellite detection counts, fire radiative power and a confidence classification.

Raw satellite fire data arrives as thousands of individual hotspot pixels, and most of them are the same fire seen repeatedly. Kanari's contribution is the clustering: it groups detections into events with a centroid and bounding box, so a map shows fires rather than a scatter of pixels, and it does the fusion across three different satellite families at once.

Those per-satellite counts are the key to interpreting a result. `viirsCount` comes from polar-orbiting satellites — high spatial resolution but only a couple of passes a day. `goesCount` and `mtgCount` come from geostationary satellites over the Americas and Europe respectively, which see the same spot every ten to fifteen minutes at much coarser resolution. An event detected by all three is far more trustworthy than one seen once by a single sensor, and `maxFrp` — fire radiative power in megawatts — indicates intensity. Note that `centroid` is longitude-first, in GeoJSON order, which is the reverse of the latitude-first convention most mapping libraries expect.

Quick facts

Base URL
https://kanari.io/api
Authentication
No API key and no account.
Rate limit
No published limit. Geostationary passes are ten to fifteen minutes apart, so polling faster gains nothing.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Kanari API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Fetch wildfire events from the last 24 hours

GET https://kanari.io/api/events?hours=24

curl
curl 'https://kanari.io/api/events?hours=24'
JavaScript (fetch)
const res = await fetch("https://kanari.io/api/events?hours=24");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://kanari.io/api/events?hours=24", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "events": [
    {
      "id": "2026-08-21T07_-76.97_1.64",
      "centroid": [
        -76.9729,
        1.6407
      ],
      "bbox": [
        -76.973,
        1.641,
        -76.973,
        1.641
      ],
      "count": 1,
      "viirsCount": 0,
      "goesCount": 1,
      "mtgCount": 0,
      "firstSeen": "2026-08-21T07:29:51Z",
      "lastSeen": "2026-08-21T07:29:51Z",
      "maxFrp": 47.6,
      "maxConf": "h",
      "confidence": "probable"
    },
    {
      "id": "2026-08-21T07_28.01_0.60",
      "centroid": [
        28.007,
        0.602
      ],
      "bbox": [
        28.007,
        0.602,
        28.007,
        0.602
      ],
      "count": 1,
      "viirsCount": 0,
      "goesCount": 0,
      "mtgCount": 1,
      "firstSeen": "2026-08-21T07:20:00Z",
      "lastSeen": "2026-08-21T07:20:00Z",
      "maxFrp": 0,
      "maxConf": "n",
      "confidence": "possible"
    },
    {
      "id": "2026-08-21T07_28.20_0.51",
      "centroid": [
        28.203,
        0.51
      ],
      "bbox": [
        28.203,
        0.51,
        28.203,
        0.51
      ],
      "count": 1,
      "viirsCount": 0,
      "goesCount": 0,
      "mtgCount": 1,
      "firstSeen": "2026-08-21T07:20:00Z",
      "lastSeen": "2026-08-21T07:20:00Z",
      "maxFrp": 0,
      "maxConf": "n",
      "confidence": "possible"
    },
    {
      "id": "2026-08-21T07_28.11_0.49",
      "centroid": [
        28.115,
        0.491
      ],
      "bbox": [
        28.115,
        0.491,
        28.115,
        0.491
      ],
      "count": 1,
      "viirsCount": 0,
      "goesCount": 0,
      "

Parameters

ParameterTypeRequiredDescription
hoursqueryOptionalLook-back window in hours. 24
/signalspathOptionalSibling endpoint returning individual detections rather than clustered events.

Response fields

eventsarray
Clustered fire events in the requested window.
events[].idstring
Composite identifier built from the timestamp and rounded coordinates.
events[].centroidarray
Cluster centre as `[longitude, latitude]` — GeoJSON order, the reverse of what most map libraries take.
events[].bboxarray
Bounding box of the cluster. Degenerate when the event is a single detection.
events[].countinteger
Total detections in the cluster across all sensors.
events[].viirsCountinteger
Detections from polar-orbiting VIIRS — high resolution, only a few passes daily.
events[].goesCount / mtgCountinteger
Detections from geostationary GOES over the Americas and MTG over Europe and Africa. Frequent revisit, coarser resolution.
events[].firstSeen / lastSeenstring
ISO 8601 UTC timestamps bounding the cluster.
events[].maxFrpfloat
Peak fire radiative power in megawatts — the best available proxy for intensity. Zero when the sensor did not report it.
events[].maxConfstring
Highest per-detection confidence flag, using the source convention where `h` is high.
events[].confidencestring
Kanari's own overall grade for the event, such as `probable`.

What you can build with the Kanari API

  • Plot active wildfires on a map without clustering raw hotspots yourself
  • Alert when a fire event appears within a defined area
  • Compare detection agreement between polar and geostationary sensors
  • Track fire intensity over time using radiative power

Common errors and how to fix them

Fires appear in the sea

`centroid` is longitude-first.

Fix: It follows GeoJSON order. Most mapping libraries want latitude first, so swap the pair before plotting.

False positives

Satellite thermal detection also picks up flares, furnaces and hot roofs.

Fix: Filter on `confidence` and require detections from more than one sensor family before alerting.

maxFrp is zero

Not every sensor reports radiative power for every detection.

Fix: Treat zero as unknown rather than as a fire of no intensity.

Degenerate bounding box

A single-detection event has identical corners.

Fix: Check `count` before computing an area, and render single detections as points.

Kanari API — frequently asked questions

Is the Kanari wildfire API free?

Yes, free with no key and no account. It fuses publicly available satellite fire detections into clustered events.

What is the difference between viirsCount, goesCount and mtgCount?

They are different satellite families. VIIRS is polar-orbiting with high spatial resolution but few daily passes; GOES and MTG are geostationary over the Americas and Europe, revisiting every ten to fifteen minutes at coarser resolution.

What does maxFrp mean?

Fire radiative power in megawatts — the energy the fire is radiating at detection time. It is the standard satellite proxy for fire intensity, so a higher figure means a more intense fire.

Why are my fires plotting in the wrong place?

The `centroid` array is `[longitude, latitude]`, following GeoJSON order. Most mapping libraries expect latitude first, so the pair needs swapping.

Tools that pair with this API

Kanari is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.