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.
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 'https://kanari.io/api/events?hours=24'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);import requests
res = requests.get("https://kanari.io/api/events?hours=24", timeout=20)
res.raise_for_status()
print(res.json()){
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
hours | query | Optional | Look-back window in hours. 24 |
/signals | path | Optional | Sibling 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
Coordinate Converter
Convert GPS coordinates between decimal degrees, degrees-minutes-seconds and decimal minutes instantly. Paste any format like 40°26'46"N and copy the result.
GeoJSON Validator
Validate GeoJSON against RFC 7946 and get the exact JSON path of every problem: unclosed rings, swapped coordinates, missing properties and more.
Distance Calculator
Calculate the straight-line distance and bearing between two points on a map by latitude/longitude using the Haversine formula — km, miles and nautical miles.
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.