Catalog API

New

Bring your own products. Upload your catalog, we generate the embeddings, and you can search by visual similarity across your entire inventory in under 50ms.

Overview

The Catalog API enables you to:

  • Upload products — Single or batch upload with automatic embedding generation
  • Search visually — Find similar products by image in your own catalog
  • Full feature extraction — CLIP, silhouette, colors, and attributes automatically extracted
  • Scale as needed — From 1,000 to 100,000+ products depending on your tier

Endpoints

EndpointDescription
POST /v1/catalog/productsUpload products (single or batch)
GET /v1/catalog/productsList products with pagination
GET /v1/catalog/products/:idGet a single product
DELETE /v1/catalog/products/:idDelete a product
POST /v1/catalog/searchSearch by image similarity

Upload Products

Single Product Upload

curl -X POST https://www.dupifyapp.com/v1/catalog/products \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Classic Black Leather Jacket",
"image_url": "https://example.com/jacket.jpg",
"external_id": "SKU-12345",
"price": 299.99,
"category": "Outerwear"
}'

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "external_id": "SKU-12345",
  "status": "created",
  "embedding_status": "processing"
}

Batch Upload

Upload multiple products in a single request. Batch size limits vary by tier.

curl -X POST https://www.dupifyapp.com/v1/catalog/products \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"products": [...]}'

Product Fields

FieldTypeRequiredDescription
titlestringYesProduct title
image_urlstringYesURL to product image
external_idstringNoYour product ID (for upsert)
skustringNoProduct SKU
descriptionstringNoProduct description
brandstringNoBrand name
categorystringNoProduct category
pricenumberNoPrice amount
currencystringNoCurrency code (default: USD)
product_urlstringNoLink to product page
metadataobjectNoCustom key-value data

Search by Image

Find visually similar products in your catalog using an image URL or base64-encoded image.

curl -X POST https://www.dupifyapp.com/v1/catalog/search \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"image_url": "https://example.com/query.jpg"}'

Response

{
  "results": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "external_id": "SKU-12345",
      "title": "Classic Black Leather Jacket",
      "image_url": "https://example.com/jacket.jpg",
      "price": 299.99,
      "similarity_score": 0.94
    },
    ...
  ],
  "query": {
    "type": "image"
  },
  "total_found": 15,
  "processing_time_ms": 42
}

Search Options

FieldTypeDescription
image_urlstringURL of image to search with
image_base64stringBase64-encoded image data
product_idstringFind similar to existing product
max_resultsnumberMax results (default: 20)
similarity_thresholdnumberMin similarity (default: 0.70)
categorystringFilter by category
min_pricenumberMinimum price filter
max_pricenumberMaximum price filter

Tier Limits

TierMax ProductsSearches/MonthBatch Size
Free1,00050010
Starter10,0005,00050
Pro100,00050,000100
UnlimitedNo limitNo limit100

Best Practices

  • Use external_id — Enables upsert behavior; re-uploading updates the existing product
  • Wait for embeddings — Products become searchable after embedding_status: completed
  • Use high-quality images — Clear product images yield better similarity results
  • Add metadata — Store custom fields in metadata for filtering in your app
  • Batch uploads — Use batch endpoint for bulk imports to reduce API calls

Pro tip: The embedding generation happens asynchronously. Poll the product endpoint or use a webhook (coming soon) to know when embeddings are ready.

Embedding Status

After uploading, products go through embedding generation:

StatusDescription
pendingQueued for processing
processingGenerating embeddings
completedReady for search
failedError occurred (check embedding_error)