724 lines
24 KiB
Markdown
724 lines
24 KiB
Markdown
|
|
# quiXzoom Developer API — Product Specification
|
||
|
|
|
||
|
|
> **Version:** 1.0.0
|
||
|
|
> **Status:** Draft
|
||
|
|
> **Last updated:** 2026-07-14
|
||
|
|
> **Owner:** Landvex Inc / quiXzoom Platform Team
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Executive Summary
|
||
|
|
|
||
|
|
quiXzoom Developer API enables software developers, agencies, and platform builders to programmatically order, verify, and retrieve real-world geotagged photography. Unlike stock photo APIs that serve stale archives, quiXzoom dispatches verified field contributors ("Zoomers") to capture fresh visual data on demand.
|
||
|
|
|
||
|
|
**The core value proposition:** Any visual information gap in a digital product can be filled with fresh, verified, structured photography — ordered via REST API and delivered within hours.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## The Problem We Solve
|
||
|
|
|
||
|
|
### Scenario: Malmö Stad Website Redesign
|
||
|
|
|
||
|
|
A marketing agency wins a contract to rebuild Malmö Stad's tourism website. The design mockups need real photography of:
|
||
|
|
|
||
|
|
- All 15 museums (exterior + current exhibitions)
|
||
|
|
- 40 public parks (seasonal conditions, crowd levels)
|
||
|
|
- 8 beaches (water quality flags, facility status)
|
||
|
|
- 25 restaurants in the old town (ambiance, outdoor seating)
|
||
|
|
|
||
|
|
**Traditional approach:**
|
||
|
|
1. City sends archive photos from 2019 (outdated, wrong seasons)
|
||
|
|
2. Agency hires a media crew for 3 days (€8,000+, scheduling hell)
|
||
|
|
3. Photos are staged, not representative of actual conditions
|
||
|
|
4. Website launches with stale visuals, requires redo in 6 months
|
||
|
|
|
||
|
|
**quiXzoom approach:**
|
||
|
|
```bash
|
||
|
|
# Order all museum exteriors — fresh, current, verified
|
||
|
|
POST /v1/missions
|
||
|
|
{
|
||
|
|
"category": "cultural_exterior",
|
||
|
|
"locations": [...15 museum coordinates...],
|
||
|
|
"requirements": {
|
||
|
|
"angles": ["front", "entrance_signage"],
|
||
|
|
"time_of_day": "daylight",
|
||
|
|
"weather": "any"
|
||
|
|
},
|
||
|
|
"delivery_format": "api_json",
|
||
|
|
"recurring": {
|
||
|
|
"frequency": "monthly",
|
||
|
|
"seasonal_adjustments": true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
# Response: mission_id, estimated_completion, price_quote
|
||
|
|
|
||
|
|
# Poll for completion
|
||
|
|
GET /v1/missions/{mission_id}/status
|
||
|
|
# → "completed" — photos ready
|
||
|
|
|
||
|
|
# Retrieve structured data
|
||
|
|
GET /v1/missions/{mission_id}/photos
|
||
|
|
# → JSON with URLs, metadata, verification_status, AI_analysis
|
||
|
|
```
|
||
|
|
|
||
|
|
**Result:** €200, 4-hour turnaround, photos verified by AI against requirements, auto-updating every month.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Product Architecture
|
||
|
|
|
||
|
|
```
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ DEVELOPER APPLICATION │
|
||
|
|
│ (Website, App, Dashboard, CMS, Digital Signage, AI Training Pipeline) │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼ REST API
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ quiXzoom DEVELOPER API │
|
||
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
|
|
│ │ Orders │ │ Missions │ │ Photos │ │ Analytics │ │
|
||
|
|
│ │ /orders │ │ /missions │ │ /photos │ │ /analytics │ │
|
||
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
┌───────────────┼───────────────┐
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||
|
|
│ Order │ │ Order │ │ Order │
|
||
|
|
│ Routing │ │ Matching │ │ Pricing │
|
||
|
|
│ Engine │ │ Engine │ │ Engine │
|
||
|
|
└──────────┘ └──────────┘ └──────────┘
|
||
|
|
│ │ │
|
||
|
|
└───────────────┼───────────────┘
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ ZOOMER NETWORK │
|
||
|
|
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
||
|
|
│ │ Zoomer │ │ Zoomer │ │ Zoomer │ │ Zoomer │ │ Zoomer │ ... │
|
||
|
|
│ │ #4721 │ │ #4722 │ │ #4723 │ │ #4724 │ │ #4725 │ │
|
||
|
|
│ │ Malmö │ │ Göteborg│ │ Stockholm││ Uppsala│ │ Lund │ │
|
||
|
|
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
┌───────────────┼───────────────┐
|
||
|
|
▼ ▼ ▼
|
||
|
|
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||
|
|
│ Photo │ │ GPS │ │ Quality │
|
||
|
|
│ Capture │ │ Verify │ │ Verify │
|
||
|
|
└──────────┘ └──────────┘ └──────────┘
|
||
|
|
│ │ │
|
||
|
|
└───────────────┼───────────────┘
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ AI VERIFICATION PIPELINE │
|
||
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
|
|
│ │ Object │ │ Angle │ │ Condition │ │ Geo │ │
|
||
|
|
│ │ Detection │ │ Match │ │ Check │ │ Validate │ │
|
||
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
|
|
│ │ Crowd │ │ Weather │ │ Time │ │ Brand │ │
|
||
|
|
│ │ Density │ │ Detect │ │ Verify │ │ Match │ │
|
||
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
│
|
||
|
|
▼
|
||
|
|
┌─────────────────────────────────────────────────────────────────────────┐
|
||
|
|
│ DELIVERY & ANALYTICS │
|
||
|
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||
|
|
│ │ Raw Photo │ │ Metadata │ │ Landvex │ │ Change │ │
|
||
|
|
│ │ CDN │ │ JSON │ │ Analysis │ │ Detection │ │
|
||
|
|
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||
|
|
└─────────────────────────────────────────────────────────────────────────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## API Endpoints (v1)
|
||
|
|
|
||
|
|
### 1. Orders — Create and manage photo orders
|
||
|
|
|
||
|
|
#### `POST /v1/orders`
|
||
|
|
Create a new photo order.
|
||
|
|
|
||
|
|
**Request:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"order_id": "ord_7f8a9b2c",
|
||
|
|
"client_reference": "malmo-stad-v2-2026",
|
||
|
|
"category": "cultural_exterior",
|
||
|
|
"description": "Exterior photos of all museums in Malmö municipality. Front facade + entrance signage. Daylight, any weather.",
|
||
|
|
"locations": [
|
||
|
|
{
|
||
|
|
"location_id": "loc_001",
|
||
|
|
"name": "Malmö Konstmuseum",
|
||
|
|
"address": "S:t Johannesgatan 7, 211 46 Malmö",
|
||
|
|
"coordinates": {"lat": 55.6050, "lng": 13.0038},
|
||
|
|
"requirements": {
|
||
|
|
"angles": ["front", "entrance"],
|
||
|
|
"minimum_resolution": "1920x1080",
|
||
|
|
"time_of_day": "daylight",
|
||
|
|
"avoid": ["construction scaffolding", "closed shutters"]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
],
|
||
|
|
"delivery": {
|
||
|
|
"format": "structured_json",
|
||
|
|
"include_metadata": true,
|
||
|
|
"include_ai_analysis": true,
|
||
|
|
"webhook_url": "https://api.malmocity.se/quixzoom/webhook"
|
||
|
|
},
|
||
|
|
"recurring": {
|
||
|
|
"enabled": true,
|
||
|
|
"frequency": "monthly",
|
||
|
|
"seasonal_adjustments": true,
|
||
|
|
"notify_before_capture": 24
|
||
|
|
},
|
||
|
|
"budget": {
|
||
|
|
"max_total": 5000.00,
|
||
|
|
"currency": "USD",
|
||
|
|
"per_photo_max": 5.00
|
||
|
|
},
|
||
|
|
"timeline": {
|
||
|
|
"desired_completion": "2026-07-20T23:59:59Z",
|
||
|
|
"flexible": false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"order_id": "ord_7f8a9b2c",
|
||
|
|
"status": "accepted",
|
||
|
|
"estimated_price": {
|
||
|
|
"total": 2840.00,
|
||
|
|
"currency": "USD",
|
||
|
|
"breakdown": {
|
||
|
|
"base_mission_fee": 15.00,
|
||
|
|
"per_location": 8.00,
|
||
|
|
"ai_verification": 2.00,
|
||
|
|
"recurring_discount": -0.10
|
||
|
|
}
|
||
|
|
},
|
||
|
|
"estimated_completion": "2026-07-18T14:00:00Z",
|
||
|
|
"missions_created": 15,
|
||
|
|
"webhook_secret": "whsec_...",
|
||
|
|
"confirmation_url": "https://api.quixzoom.com/v1/orders/ord_7f8a9b2c/confirm"
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
#### `GET /v1/orders/{order_id}`
|
||
|
|
Retrieve order status and details.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"order_id": "ord_7f8a9b2c",
|
||
|
|
"status": "in_progress",
|
||
|
|
"progress": {
|
||
|
|
"total_missions": 15,
|
||
|
|
"completed": 7,
|
||
|
|
"in_progress": 5,
|
||
|
|
"pending": 3,
|
||
|
|
"failed": 0
|
||
|
|
},
|
||
|
|
"photos_delivered": 42,
|
||
|
|
"photos_pending": 18,
|
||
|
|
"next_recurring_date": "2026-08-14T00:00:00Z",
|
||
|
|
"total_spent": 1320.00,
|
||
|
|
"budget_remaining": 1680.00
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
#### `PATCH /v1/orders/{order_id}`
|
||
|
|
Modify an active order (add locations, change requirements, pause recurring).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
#### `DELETE /v1/orders/{order_id}`
|
||
|
|
Cancel an order and stop any recurring missions.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. Missions — Individual photo capture tasks
|
||
|
|
|
||
|
|
#### `GET /v1/missions/{mission_id}`
|
||
|
|
Get mission details and current status.
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"mission_id": "mis_a3b4c5d6",
|
||
|
|
"order_id": "ord_7f8a9b2c",
|
||
|
|
"status": "completed",
|
||
|
|
"location": {
|
||
|
|
"name": "Malmö Konstmuseum",
|
||
|
|
"coordinates": {"lat": 55.6050, "lng": 13.0038}
|
||
|
|
},
|
||
|
|
"zoomer": {
|
||
|
|
"zoomer_id": "zmr_4721",
|
||
|
|
"rating": 4.8,
|
||
|
|
"missions_completed": 342
|
||
|
|
},
|
||
|
|
"timeline": {
|
||
|
|
"assigned_at": "2026-07-15T09:23:00Z",
|
||
|
|
"completed_at": "2026-07-15T11:45:00Z",
|
||
|
|
"verified_at": "2026-07-15T12:03:00Z"
|
||
|
|
},
|
||
|
|
"photos": [
|
||
|
|
{
|
||
|
|
"photo_id": "img_x7y8z9",
|
||
|
|
"url": "https://cdn.quixzoom.com/v1/photos/img_x7y8z9.jpg",
|
||
|
|
"thumbnail": "https://cdn.quixzoom.com/v1/photos/img_x7y8z9_thumb.jpg",
|
||
|
|
"angle": "front",
|
||
|
|
"resolution": "4032x3024",
|
||
|
|
"file_size_mb": 4.2,
|
||
|
|
"format": "jpeg",
|
||
|
|
"metadata": {
|
||
|
|
"captured_at": "2026-07-15T11:42:18Z",
|
||
|
|
"gps": {"lat": 55.6051, "lng": 13.0039, "accuracy_m": 3.2},
|
||
|
|
"device": "iPhone15,2",
|
||
|
|
"weather": {"condition": "partly_cloudy", "temp_c": 22}
|
||
|
|
},
|
||
|
|
"verification": {
|
||
|
|
"status": "approved",
|
||
|
|
"ai_checks": {
|
||
|
|
"location_match": {"score": 0.98, "passed": true},
|
||
|
|
"angle_match": {"score": 0.94, "passed": true},
|
||
|
|
"quality_check": {"score": 0.91, "passed": true},
|
||
|
|
"obstruction_check": {"score": 0.99, "passed": true}
|
||
|
|
},
|
||
|
|
"reviewed_by": null
|
||
|
|
}
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. Photos — Retrieve and manage delivered photos
|
||
|
|
|
||
|
|
#### `GET /v1/photos/{photo_id}`
|
||
|
|
Get photo metadata and URLs.
|
||
|
|
|
||
|
|
#### `GET /v1/photos?order_id={order_id}&angle=front&status=approved`
|
||
|
|
List photos with filtering.
|
||
|
|
|
||
|
|
#### `GET /v1/photos/{photo_id}/download`
|
||
|
|
Download original resolution photo (signed URL, expires in 1 hour).
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 4. Analytics — Insights from photo data
|
||
|
|
|
||
|
|
#### `GET /v1/analytics/orders/{order_id}/changes`
|
||
|
|
Detect changes between photo sets (for recurring missions).
|
||
|
|
|
||
|
|
**Response:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"comparison_period": "2026-06-15 to 2026-07-15",
|
||
|
|
"changes_detected": [
|
||
|
|
{
|
||
|
|
"location_id": "loc_003",
|
||
|
|
"location_name": "Teknikens och Sjöfartens Hus",
|
||
|
|
"change_type": "new_construction",
|
||
|
|
"confidence": 0.87,
|
||
|
|
"description": "Scaffolding erected on east facade. Entrance temporarily relocated.",
|
||
|
|
"photos": {
|
||
|
|
"before": "img_abc123",
|
||
|
|
"after": "img_def456"
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{
|
||
|
|
"location_id": "loc_007",
|
||
|
|
"location_name": "Moderna Museet Malmö",
|
||
|
|
"change_type": "seasonal_variation",
|
||
|
|
"confidence": 0.95,
|
||
|
|
"description": "Outdoor exhibition space now active. 23 visitors visible (vs 0 in June).",
|
||
|
|
"photos": {
|
||
|
|
"before": "img_ghi789",
|
||
|
|
"after": "img_jkl012"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
#### `GET /v1/analytics/orders/{order_id}/crowd-density`
|
||
|
|
Crowd density analysis over time.
|
||
|
|
|
||
|
|
#### `GET /v1/analytics/orders/{order_id}/sentiment`
|
||
|
|
Emotional/sentiment analysis from facial expressions and body language.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## AI Verification Pipeline
|
||
|
|
|
||
|
|
Every photo passes through multi-layer AI verification before delivery:
|
||
|
|
|
||
|
|
| Check | Description | Threshold |
|
||
|
|
|-------|-------------|-----------|
|
||
|
|
| **Location Match** | GPS coordinates within 50m of target | ≥ 95% |
|
||
|
|
| **Angle Match** | Photo angle matches requirement (front/side/etc) | ≥ 90% |
|
||
|
|
| **Quality Check** | Resolution, blur, exposure, noise | ≥ 85% |
|
||
|
|
| **Obstruction Check** | No major obstructions (vehicles, scaffolding) | ≥ 95% |
|
||
|
|
| **Object Detection** | Required objects present (signage, building) | ≥ 90% |
|
||
|
|
| **Time Verify** | Photo taken within requested time window | ≥ 99% |
|
||
|
|
| **Weather Detect** | Actual weather conditions logged | Always |
|
||
|
|
| **Brand Match** | Logo/signage matches reference (if specified) | ≥ 85% |
|
||
|
|
|
||
|
|
**Failed verification flow:**
|
||
|
|
1. Photo fails one or more checks
|
||
|
|
2. Zoomer notified with specific failure reason
|
||
|
|
3. Zoomer can retake within 2 hours (no extra charge)
|
||
|
|
4. If still failing, mission reassigned to new Zoomer
|
||
|
|
5. Client notified of delay with new ETA
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Recurring Missions
|
||
|
|
|
||
|
|
### Configuration
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"recurring": {
|
||
|
|
"enabled": true,
|
||
|
|
"frequency": "monthly",
|
||
|
|
"day_of_month": 15,
|
||
|
|
"seasonal_adjustments": true,
|
||
|
|
"notify_before_capture": 24,
|
||
|
|
"pause_conditions": {
|
||
|
|
"weather_extreme": true,
|
||
|
|
"holiday_override": ["2026-12-25", "2026-12-26"]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Seasonal Adjustments
|
||
|
|
|
||
|
|
| Season | Adjustment | Example |
|
||
|
|
|--------|-----------|---------|
|
||
|
|
| Spring | Earlier capture time | Parks photographed at 10:00 (flowers blooming) |
|
||
|
|
| Summer | Extended hours | Beach photos at 18:00 (peak activity) |
|
||
|
|
| Autumn | Weather contingency | Indoor fallback for rain-sensitive locations |
|
||
|
|
| Winter | Reduced frequency | Monthly → Bi-monthly for outdoor venues |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Use Cases & Examples
|
||
|
|
|
||
|
|
### 1. Municipal Website (Malmö Stad)
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// Initialize client
|
||
|
|
const quixzoom = new QuixzoomClient({
|
||
|
|
apiKey: process.env.QUIXZOOM_API_KEY,
|
||
|
|
environment: 'production'
|
||
|
|
});
|
||
|
|
|
||
|
|
// Order all museum exteriors — monthly refresh
|
||
|
|
const order = await quixzoom.orders.create({
|
||
|
|
client_reference: 'malmo-museums-2026',
|
||
|
|
category: 'cultural_exterior',
|
||
|
|
locations: museums.map(m => ({
|
||
|
|
name: m.name,
|
||
|
|
coordinates: m.coordinates,
|
||
|
|
requirements: {
|
||
|
|
angles: ['front', 'entrance'],
|
||
|
|
avoid: ['construction']
|
||
|
|
}
|
||
|
|
})),
|
||
|
|
recurring: {
|
||
|
|
frequency: 'monthly',
|
||
|
|
seasonal_adjustments: true
|
||
|
|
},
|
||
|
|
delivery: {
|
||
|
|
webhook_url: 'https://api.malmocity.se/photos/update'
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// Webhook receives:
|
||
|
|
{
|
||
|
|
event: 'photos.delivered',
|
||
|
|
order_id: 'ord_7f8a9b2c',
|
||
|
|
mission_id: 'mis_a3b4c5d6',
|
||
|
|
photos: [{
|
||
|
|
url: 'https://cdn.quixzoom.com/...',
|
||
|
|
metadata: { ... },
|
||
|
|
ai_analysis: {
|
||
|
|
crowd_density: 'low',
|
||
|
|
weather: 'sunny',
|
||
|
|
condition: 'well_maintained'
|
||
|
|
}
|
||
|
|
}]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. Restaurant Discovery App
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Python SDK example
|
||
|
|
from quixzoom import QuixzoomClient
|
||
|
|
|
||
|
|
client = QuixzoomClient(api_key="qz_live_...")
|
||
|
|
|
||
|
|
# Weekly ambiance updates for trending restaurants
|
||
|
|
order = client.orders.create(
|
||
|
|
category="restaurant_ambiance",
|
||
|
|
locations=[
|
||
|
|
{"name": "Lilla Kafferosteriet", "coordinates": (55.605, 13.0038)},
|
||
|
|
{"name": "Bullen", "coordinates": (55.603, 13.001)}
|
||
|
|
],
|
||
|
|
requirements={
|
||
|
|
"angles": ["interior", "outdoor_seating", "bar_area"],
|
||
|
|
"time_of_day": "evening",
|
||
|
|
"minimum_crowd": "moderate" # Capture real vibe
|
||
|
|
},
|
||
|
|
recurring={
|
||
|
|
"frequency": "weekly",
|
||
|
|
"day_of_week": "friday",
|
||
|
|
"time_window": "18:00-21:00"
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
# Use crowd density + sentiment for "vibe score"
|
||
|
|
for photo in order.photos:
|
||
|
|
vibe_score = (
|
||
|
|
photo.ai_analysis.crowd_density * 0.4 +
|
||
|
|
photo.ai_analysis.sentiment_positive * 0.3 +
|
||
|
|
photo.ai_analysis.ambiance_lighting * 0.3
|
||
|
|
)
|
||
|
|
update_restaurant_vibe(photo.location_id, vibe_score)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. Event Venue Monitoring
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Real-time venue status for event planners
|
||
|
|
curl -X POST https://api.quixzoom.com/v1/orders \
|
||
|
|
-H "Authorization: Bearer $QUIXZOOM_API_KEY" \
|
||
|
|
-d '{
|
||
|
|
"category": "event_venue_status",
|
||
|
|
"locations": [
|
||
|
|
{"name": "Malmö Arena", "coordinates": {"lat": 55.563, "lng": 12.976}}
|
||
|
|
],
|
||
|
|
"requirements": {
|
||
|
|
"angles": ["entrance_queue", "parking_lot", "main_entrance"],
|
||
|
|
"time_of_day": "evening",
|
||
|
|
"recurring": {
|
||
|
|
"frequency": "daily",
|
||
|
|
"time_window": "19:00-23:00",
|
||
|
|
"event_nights_only": true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}'
|
||
|
|
|
||
|
|
# Returns real-time crowd estimates for app users:
|
||
|
|
# "Malmö Arena: Moderate crowd (450 people), 5 min queue, parking 80% full"
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 4. Retail Chain Compliance
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// Monthly storefront audits for franchise compliance
|
||
|
|
const order = await quixzoom.orders.create({
|
||
|
|
client_reference: 'ica-stores-july-2026',
|
||
|
|
category: 'retail_compliance',
|
||
|
|
locations: icaStores.map(store => ({
|
||
|
|
name: store.name,
|
||
|
|
coordinates: store.coordinates,
|
||
|
|
requirements: {
|
||
|
|
angles: ['storefront', 'opening_hours_sign', 'promotional_display'],
|
||
|
|
brand_match: 'ICA', // AI verifies ICA logo present
|
||
|
|
obstruction_check: true
|
||
|
|
}
|
||
|
|
})),
|
||
|
|
recurring: {
|
||
|
|
frequency: 'monthly',
|
||
|
|
deliver_before: '5th of month' // For management reports
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// Automated compliance report:
|
||
|
|
// - Store #234: Compliant ✓
|
||
|
|
// - Store #235: Non-compliant ✗ (promotional display missing)
|
||
|
|
// - Store #236: Non-compliant ✗ (opening hours sign obscured)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 5. Beach & Outdoor Facility Status
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Daily beach status for summer season
|
||
|
|
order = client.orders.create(
|
||
|
|
category="beach_facility_status",
|
||
|
|
locations=malmo_beaches,
|
||
|
|
requirements={
|
||
|
|
"angles": ["overview", "water_quality_flag", "lifeguard_tower", "facilities"],
|
||
|
|
"time_of_day": "midday"
|
||
|
|
},
|
||
|
|
recurring={
|
||
|
|
"frequency": "daily",
|
||
|
|
"season": "summer_only", # June 1 - August 31
|
||
|
|
"weather_dependent": True # Skip if thunderstorm
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
# AI analysis delivers:
|
||
|
|
# - Water quality flag color (blue/yellow/red)
|
||
|
|
# - Crowd density estimate
|
||
|
|
# - Lifeguard presence (yes/no)
|
||
|
|
# - Facility condition (clean/moderate/poor)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Integration with Landvex Intelligence
|
||
|
|
|
||
|
|
When `include_ai_analysis: true` is set, photos are automatically processed through Landvex AI engines:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"ai_analysis": {
|
||
|
|
"amos_vision": {
|
||
|
|
"object_detection": ["building", "signage", "people", "vehicles"],
|
||
|
|
"scene_classification": "urban_cultural",
|
||
|
|
"condition_assessment": "well_maintained"
|
||
|
|
},
|
||
|
|
"amos_change": {
|
||
|
|
"changes_since_last": ["new_banner", "repainted_facade"],
|
||
|
|
"change_confidence": 0.89
|
||
|
|
},
|
||
|
|
"amos_risk": {
|
||
|
|
"safety_score": 0.94,
|
||
|
|
"accessibility_score": 0.87,
|
||
|
|
"maintenance_urgency": "low"
|
||
|
|
},
|
||
|
|
"amos_sentiment": {
|
||
|
|
"crowd_mood": "positive",
|
||
|
|
"engagement_level": "moderate",
|
||
|
|
"atmosphere": "welcoming"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Pricing
|
||
|
|
|
||
|
|
| Tier | Volume | Per Photo | Features |
|
||
|
|
|------|--------|-----------|----------|
|
||
|
|
| **Developer** | 0-1,000 photos/month | $3.00 | API access, basic verification, 48h delivery |
|
||
|
|
| **Business** | 1,000-10,000 photos/month | $2.00 | Priority delivery, advanced AI analysis, webhooks |
|
||
|
|
| **Enterprise** | 10,000+ photos/month | Custom | SLA guarantees, dedicated support, custom AI models |
|
||
|
|
|
||
|
|
**Recurring mission discount:** 10% off for monthly, 15% for weekly.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## SDKs & Libraries
|
||
|
|
|
||
|
|
| Language | Package | Status |
|
||
|
|
|----------|---------|--------|
|
||
|
|
| JavaScript/TypeScript | `@quixzoom/sdk` | Available |
|
||
|
|
| Python | `quixzoom-python` | Available |
|
||
|
|
| Go | `github.com/quixzoom/go-sdk` | Beta |
|
||
|
|
| Ruby | `quixzoom-ruby` | Coming Q3 2026 |
|
||
|
|
| PHP | `quixzoom-php` | Coming Q3 2026 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Webhooks
|
||
|
|
|
||
|
|
Events delivered to your endpoint:
|
||
|
|
|
||
|
|
| Event | Description |
|
||
|
|
|-------|-------------|
|
||
|
|
| `order.created` | Order accepted and priced |
|
||
|
|
| `order.confirmed` | Payment received, missions dispatched |
|
||
|
|
| `mission.assigned` | Zoomer assigned to location |
|
||
|
|
| `mission.completed` | Photos captured, pending verification |
|
||
|
|
| `photos.verified` | AI verification passed |
|
||
|
|
| `photos.delivered` | Photos ready for download |
|
||
|
|
| `photos.rejected` | Verification failed, being retaken |
|
||
|
|
| `order.completed` | All missions complete |
|
||
|
|
| `recurring.triggered` | New recurring cycle started |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Error Handling
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"error": {
|
||
|
|
"code": "location_unserviceable",
|
||
|
|
"message": "No Zoomers available within 50km of specified coordinates",
|
||
|
|
"details": {
|
||
|
|
"coordinates": {"lat": 67.8558, "lng": 20.2253},
|
||
|
|
"nearest_zoomer": {"distance_km": 127, "location": "Luleå"}
|
||
|
|
},
|
||
|
|
"suggested_action": "Increase budget for remote area surcharge or choose 'flexible' timeline"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Rate Limits
|
||
|
|
|
||
|
|
| Tier | Requests/minute | Concurrent orders |
|
||
|
|
|------|-----------------|-------------------|
|
||
|
|
| Developer | 60 | 5 |
|
||
|
|
| Business | 300 | 25 |
|
||
|
|
| Enterprise | 2000 | Unlimited |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Security
|
||
|
|
|
||
|
|
- All API requests require `Authorization: Bearer {api_key}`
|
||
|
|
- Webhook signatures verified with HMAC-SHA256
|
||
|
|
- Photo URLs are signed and expire after 1 hour
|
||
|
|
- GDPR compliant — all photos include consent metadata
|
||
|
|
- SOC 2 Type II certified infrastructure
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Support
|
||
|
|
|
||
|
|
- **Documentation:** https://docs.quixzoom.com
|
||
|
|
- **API Status:** https://status.quixzoom.com
|
||
|
|
- **Support Email:** dev-support@quixzoom.com
|
||
|
|
- **Slack Community:** https://quixzoom.dev/slack
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Changelog
|
||
|
|
|
||
|
|
| Version | Date | Changes |
|
||
|
|
|---------|------|---------|
|
||
|
|
| 1.0.0 | 2026-07-14 | Initial release — Orders, Missions, Photos, Analytics endpoints |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*quiXzoom Developer API is a product of Landvex Inc. All rights reserved.*
|