Introduction
The Watch Scanner API provides AI-powered identification of luxury watches and bags from image URLs. Send an image, get detailed information including brand, model, reference number, similar models, and pricing estimates in four currencies.
Base URL: https://identification.nepita.io
Authentication
All API requests require an API key. Include your API key in the request body:
{
"api_key": "your-32-character-api-key",
"image_url": "https://example.com/watch.jpg"
}
Contact the API administrator to obtain your API key.
Endpoints
POST /scan
Identify a watch or luxury bag from an image URL.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
image_url |
string (URL) | Yes | Direct URL to the image (JPEG, PNG, WebP) |
api_key |
string | Yes | Your API authentication key (32+ chars) |
pricing |
integer | No | Include pricing estimates (1 = yes, 0 = no). Default: 1 |
bags |
integer | No | Identify a luxury bag instead of a watch (1 = bag, 0 = watch). Default: 0 |
Example Request (Watch)
curl -X POST https://identification.nepita.io/scan \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/rolex-submariner.jpg",
"api_key": "YOUR_API_KEY",
"pricing": 1
}'
Example Request (Bag)
curl -X POST https://identification.nepita.io/scan \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/chanel-flap.jpg",
"api_key": "YOUR_API_KEY",
"pricing": 1,
"bags": 1
}'
GET /health
Check API health status.
Example Request
curl https://identification.nepita.io/health
Example Response
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00Z",
"service": "Watch Scanner API",
"supabase": "connected"
}
Response Format
Successful responses return a JSON object with the following structure:
| Field | Type | Description |
|---|---|---|
status |
string | "success" or "error" |
session_id |
string (UUID) | Unique identifier for this scan |
timestamp |
string (ISO 8601) | When the scan was processed |
input_url |
string | The image URL you provided |
results |
object | Identification results (see below) |
processing_time_ms |
integer | Processing time in milliseconds |
Results Object
| Field | Type | Description |
|---|---|---|
detected_brand |
string | Brand name (e.g., "Rolex", "Chanel") |
detected_model |
string | Model reference (e.g., "116610LN") or model name for bags |
detected_collection |
string | null | Collection name for watches (e.g., "Submariner"). Null for bags. |
additional_comments |
string | null | Brief descriptive notes (materials, colors, size) |
top_tokens |
array[string] | Top 5 key features extracted from image analysis |
similar_models |
array[object] | null | Top 3 similar watches from database (reference, image, similarity). Watch scans only. |
pricing |
object | null | Market price estimates in USD, EUR, RMB, GBP. Null when pricing=0. |
detected_material |
string | null | Detected material (bag scans only, e.g., "Lambskin") |
detected_color |
string | null | Detected color (bag scans only, e.g., "Black") |
similar_bags |
array[object] | null | Top 3 similar bags from database. Bag scans only. |
Examples
Watch Response
{
"status": "success",
"session_id": "74ba5e7b-61d8-4c7c-a958-4bfa6dc93714",
"timestamp": "2026-04-06T15:21:23.644360",
"input_url": "https://example.com/watch.jpg",
"results": {
"detected_model": "3510.50.00",
"detected_brand": "Omega",
"detected_collection": "Speedmaster",
"additional_comments": "39mm, stainless steel, chronograph",
"top_tokens": ["3510.50", "speedmaster", "omega", "3510.50.00", "39"],
"similar_models": [
{
"reference": "3510.50.00",
"image": "https://...supabase.co/.../3510.50.00.png",
"similarity": 0.85
}
],
"pricing": {
"price_min_usd": 3500,
"price_median_usd": 4800,
"price_max_usd": 6500,
"price_min_eur": 3300,
"price_median_eur": 4500,
"price_max_eur": 6100,
"price_min_rmb": 24000,
"price_median_rmb": 33000,
"price_max_rmb": 44000,
"price_min_gbp": 2900,
"price_median_gbp": 4000,
"price_max_gbp": 5400
},
"detected_material": null,
"detected_color": null,
"similar_bags": null
},
"processing_time_ms": 6295
}
Bag Response
{
"status": "success",
"session_id": "88bcc737-e562-47de-a46e-c88a75fc6ead",
"timestamp": "2026-04-06T15:21:50.727850",
"input_url": "https://example.com/chanel-bag.jpg",
"results": {
"detected_model": "Classic Flap Mini",
"detected_brand": "Chanel",
"detected_collection": null,
"additional_comments": "Quilted, chain strap, gold hardware",
"top_tokens": ["chanel", "flap", "mini", "lambskin", "black"],
"similar_models": null,
"pricing": {
"price_min_usd": 4500,
"price_median_usd": 6500,
"price_max_usd": 9000,
...
},
"detected_material": "Lambskin",
"detected_color": "Black",
"similar_bags": [
{
"sku": "CH-12345",
"designer": "Chanel",
"model": "Classic Flap",
"style": "Quilted",
"size": "Mini",
"image": "https://...supabase.co/.../image.jpg",
"similarity": 0.73
}
]
},
"processing_time_ms": 5780
}
Tip: Pricing is computed in real-time via AI. Set pricing=0 to skip pricing and reduce response time significantly.
Error Response
{
"status": "error",
"message": "Invalid API key",
"session_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"timestamp": "2024-01-15T10:30:45.123Z"
}
Try It Out
Use the interactive API explorer below to test endpoints directly from your browser: