Watch Scanner API

AI-powered watch identification from images

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: