Detection API

Aerial wildfire detection in a single API call. POST an image — get smoke and fire detections back in milliseconds. RGB today; thermal confirmation next.

The image API takes one still frame per request; live video runs on our edge device (see Live feeds & cameras). Overlay values are illustrative.

Quickstart

Your first detection in three steps.

1. Get a key. Request access — we issue your X-API-Key.
2. POST an image to /v1/detect:

curl -X POST "https://api.aerialiq.app/v1/detect?mode=wildfire" \
  -H "X-API-Key: your_api_key" \
  -F "file=@frame.jpg;type=image/jpeg"

3. Read the JSON. Each detection carries a class_name, a confidence, and a pixel bbox — draw the boxes and you're done.

{ "detections": [ { "class_name": "smoke", "confidence": 0.94,
                   "bbox": { "x1": 812.4, "y1": 233.0, "x2": 1106.7, "y2": 498.2 } } ],
  "model_version": "wildfire-v1", "inference_ms": 38.6 }
That's the whole loop — one HTTPS POST, detections back in milliseconds. Everything below is detail.

Base URL

https://api.aerialiq.app/v1

All endpoints are HTTPS.

Authentication

Access is provisioned per partner organisation. You'll receive an API key — send it on every request as the X-API-Key header. Self-serve keys and usage dashboards are on the roadmap; contact us to request access.

X-API-Key: your_api_key

Detect

Run wildfire detection on a single image. Synchronous — the response carries the detections directly.

POST /v1/detect

Parameters

NameInTypeReqDescription
fileform-datafileyesThe image to analyse. JPEG, PNG, WebP, or BMP.
modequerystringnowildfire (default). agriculture is on the roadmap.

Image input

FormatsJPEG, PNG, WebP, BMP — anything else returns 415.
ResolutionAny. The model runs at a fixed internal size and letterboxes — no need to pre-resize. Boxes are returned in your original image's pixel coordinates.
SizeUp to 25 MB. One image per request.
This endpoint is image-only. Each /v1/detect call analyses one still frame — no video upload here. For live drone or camera video, AerialIQ runs detection on every frame — on our on-site edge device or via cloud stream ingestion (see Live feeds & cameras). This public self-serve API is the image entry point.

Request

curl -X POST "https://api.aerialiq.app/v1/detect?mode=wildfire" \
  -H "X-API-Key: your_api_key" \
  -F "file=@frame.jpg;type=image/jpeg"
import requests

with open("frame.jpg", "rb") as f:
    resp = requests.post(
        "https://api.aerialiq.app/v1/detect",
        params={"mode": "wildfire"},
        headers={"X-API-Key": "your_api_key"},
        files={"file": ("frame.jpg", f, "image/jpeg")},
        timeout=30,
    )
resp.raise_for_status()
data = resp.json()
for d in data["detections"]:
    print(d["class_name"], round(d["confidence"], 2), d["bbox"])

Response 200 OK

{
  "mode": "wildfire",
  "model_version": "wildfire-v1",
  "image_width": 1920,
  "image_height": 1080,
  "detections": [
    {
      "class_id": 0,
      "class_name": "smoke",
      "confidence": 0.94,
      "bbox": { "x1": 812.4, "y1": 233.0, "x2": 1106.7, "y2": 498.2 }
    }
  ],
  "detection_count": 1,
  "inference_ms": 38.6,
  "spray_savings": null
}

Fields

FieldTypeDescription
modestringMode that ran.
model_versionstringExact model that produced the result (e.g. wildfire-v1) — log it for reproducibility.
image_width / image_heightintPixel dimensions of the image you sent.
detectionsarrayOne object per detection (below). Empty if nothing found.
detection_countintNumber of detections.
inference_msfloatServer-side model time, milliseconds.
spray_savingsobjectnull in wildfire mode; carries the savings estimate only when mode=agriculture.

Detection object

FieldTypeDescription
class_namestringsmoke or fire (wildfire mode). Use this, not class_id.
class_idintModel class index (0=smoke, 1=fire).
confidencefloat0–1. Detections below the model's confidence threshold are omitted.
bboxobject{x1,y1,x2,y2}absolute pixel coordinates in the original image (top-left origin).
Boxes are pixels, not 0–1. To normalise: x1_norm = bbox.x1 / image_width.

Modes

modeStatusDetects
wildfireAvailableSmoke & fire in RGB aerial imagery (wildfire-v1).
wildfire — thermalRoadmapThermal-band confirmation model, in development.
agricultureRoadmapWeed detection with a spray-savings estimate. Ask us if this is your use case.
Production-grade aerial smoke detection; fire detection is improving and will be complemented by thermal confirmation. Trained on aerial wildfire imagery and validated against field deployments.

Errors

Standard HTTP status codes. Error bodies are {"detail": "…"}.

StatusMeaning
200Success.
400Empty file, undecodable image, or unknown mode.
401Missing or invalid API key.
413Image exceeds 25 MB.
415Unsupported file type. Send JPEG, PNG, WebP, or BMP.
429Rate limit exceeded. Honour the Retry-After header.
503Model not loaded or inference failed — retry shortly.

Data handling

Images are processed in-memory and not retained. No uploaded image is written to disk or stored. Only detection metadata (counts, model version, timing) may appear in operational logs. It's a property of how the endpoint works, not a policy promise.

Limits & versioning

Rate limit30 requests / minute per key. Exceeding it returns 429 with Retry-After.
ShapeSynchronous, one image per request. Live video runs on our edge device or via stream ingestion (see Live feeds & cameras) — not this endpoint. Batch is on the roadmap.
VersioningThe path is versioned (/api/v1). Breaking changes ship under a new version; model_version is in every response.

Live feeds & cameras

The image API is for snapshots — one frame per request. To run detection on a live drone or camera feed, you have two paths that detect every frame:

Edge on-siteOur edge device sits on your network, pulls your camera streams, runs detection locally, and sends up only alerts. Best for camera fleets — low bandwidth, works offline.
Stream ingestionPoint your drone or camera stream at our cloud; we infer every frame and push results back live.

Got drones or cameras? Talk to us about edge and stream ingestion — the public image API detects one frame at a time.

Changelog

DateChange
2026-06-12v1 launched. POST /v1/detect — wildfire smoke & fire detection (RGB), API-key auth, 30 requests/min.

© AerialIQ · Detection API · info@edgegenix.com