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 }
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.
Parameters
| Name | In | Type | Req | Description |
|---|---|---|---|---|
file | form-data | file | yes | The image to analyse. JPEG, PNG, WebP, or BMP. |
mode | query | string | no | wildfire (default). agriculture is on the roadmap. |
Image input
| Formats | JPEG, PNG, WebP, BMP — anything else returns 415. |
| Resolution | Any. 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. |
| Size | Up to 25 MB. One image per request. |
/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
| Field | Type | Description |
|---|---|---|
mode | string | Mode that ran. |
model_version | string | Exact model that produced the result (e.g. wildfire-v1) — log it for reproducibility. |
image_width / image_height | int | Pixel dimensions of the image you sent. |
detections | array | One object per detection (below). Empty if nothing found. |
detection_count | int | Number of detections. |
inference_ms | float | Server-side model time, milliseconds. |
spray_savings | object | null in wildfire mode; carries the savings estimate only when mode=agriculture. |
Detection object
| Field | Type | Description |
|---|---|---|
class_name | string | smoke or fire (wildfire mode). Use this, not class_id. |
class_id | int | Model class index (0=smoke, 1=fire). |
confidence | float | 0–1. Detections below the model's confidence threshold are omitted. |
bbox | object | {x1,y1,x2,y2} — absolute pixel coordinates in the original image (top-left origin). |
x1_norm = bbox.x1 / image_width.Modes
| mode | Status | Detects |
|---|---|---|
wildfire | Available | Smoke & fire in RGB aerial imagery (wildfire-v1). |
| wildfire — thermal | Roadmap | Thermal-band confirmation model, in development. |
agriculture | Roadmap | Weed detection with a spray-savings estimate. Ask us if this is your use case. |
Errors
Standard HTTP status codes. Error bodies are {"detail": "…"}.
| Status | Meaning |
|---|---|
| 200 | Success. |
| 400 | Empty file, undecodable image, or unknown mode. |
| 401 | Missing or invalid API key. |
| 413 | Image exceeds 25 MB. |
| 415 | Unsupported file type. Send JPEG, PNG, WebP, or BMP. |
| 429 | Rate limit exceeded. Honour the Retry-After header. |
| 503 | Model 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 limit | 30 requests / minute per key. Exceeding it returns 429 with Retry-After. |
| Shape | Synchronous, 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. |
| Versioning | The 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-site | Our 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 ingestion | Point 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
| Date | Change |
|---|---|
2026-06-12 | v1 launched. POST /v1/detect — wildfire smoke & fire detection (RGB), API-key auth, 30 requests/min. |
© AerialIQ · Detection API · info@edgegenix.com