Ready to build?
The quiXzoom API is currently available to approved enterprise partners. Apply for access and our team will get back to you within one business day.
Build on the world's camera network.
REST API · Webhooks · SDKs
Everything you need to make your first API call in under five minutes.
# List active missions curl -s https://api.quixzoom.com/api/qz/v1/missions \ -H "Authorization: Bearer YOUR_TOKEN" \ | jq .
{
"data": [
{
"id": "mission_01jxk7t2q",
"title": "City infrastructure survey — Stockholm",
"status": "active",
"submissions": 14,
"created_at": "2026-06-01T09:00:00Z"
}
],
"meta": { "total": 1, "page": 1 }
}
All endpoints are relative to https://api.quixzoom.com/api/qz/v1
Receive real-time events when missions and submissions change state. Register your endpoint with POST /webhooks.
{
"event": "submission.received",
"timestamp": "2026-06-17T10:32:00Z",
"data": {
"submission_id": "sub_03xpq9r",
"mission_id": "mission_01jxk7t2q",
"zoomer_id": "usr_7m2n4p",
"image_count": 6,
"location": {
"lat": 59.3293,
"lng": 18.0686
}
}
}
Every webhook request includes an X-QZ-Signature header — an HMAC-SHA256 hex digest of the raw request body signed with your webhook secret.
const crypto = require('crypto'); function verifySignature(rawBody, secret, header) { const expected = crypto .createHmac('sha256', secret) .update(rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(header) ); }
quiXzoom uses OAuth 2.0 client credentials flow. All API requests must include a valid Bearer token in the Authorization header.
curl -X POST https://api.quixzoom.com/api/qz/v1/auth/token \ -H "Content-Type: application/json" \ -d '{ "grant_type": "client_credentials", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "scope": "missions:read submissions:read" }'
{
"access_token": "eyJhbGciOiJSUzI1NiJ9...",
"token_type": "Bearer",
"expires_in": 86400,
"scope": "missions:read submissions:read"
}
Limits apply per client credentials pair. Exceeding limits returns HTTP 429 with a Retry-After header.
Official SDKs launching August 2026. Contact enterprise@quixzoom.com for early access.
Full type definitions, Node.js and browser compatible, Promise-based API.
Async/sync client, Pydantic models, supports Python 3.10+.
Language-agnostic. Use any HTTP client. OpenAPI spec available for code generation.
import { QuiXzoom } from '@quixzoom/sdk'; const client = new QuiXzoom({ clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', }); const mission = await client.missions.create({ title: 'Parking lot survey — Gothenburg', description: 'Count and classify parking spaces', bounds: { type: 'Polygon', coordinates: [[11.97, 57.70], [12.00, 57.72], /* ... */], }, requiredImages: 50, }); console.log(mission.id); // mission_01jxk...
All geo data follows the GeoJSON standard (RFC 7946). Images include full EXIF metadata.
Mission boundaries and submission locations follow RFC 7946. Coordinates are WGS 84 (EPSG:4326).
Every image includes GPS coordinates, timestamp, device model, and orientation. EXIF is preserved in downloads.
Download a ZIP archive of all images in a mission plus a metadata.json index file.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [18.0686, 59.3293]
},
"properties": {
"submission_id": "sub_03xpq9r",
"captured_at": "2026-06-17T10:31:44Z",
"altitude_m": 28.4,
"accuracy_m": 3.1,
"image_count": 6
}
}
The quiXzoom API is currently available to approved enterprise partners. Apply for access and our team will get back to you within one business day.