Skip to main content
VIZOCHOK stores your product catalog for AI search and recommendations. Prices and stock availability are not stored here — those come from your backend via webhooks at query time. The catalog API requires a secret API key (sk_...) with catalog scope.

Product Data Format

Each product is described by the ProductInput schema:
string
required
Unique product identifier (Stock Keeping Unit). Used as the primary key — uploading the same SKU again updates the existing product.
string
required
Product name. This is the most important field for search quality.
string
Category hierarchy, e.g. "Dairy > Milk > UHT Milk". Improves search context.
string
Brand name. Customers frequently search by brand.
string
Product description. Included in the embedding for semantic search.
string
Ingredients list. Enables the AI to answer “what’s in this product?” questions.
string
Country of origin.
string
default:"pcs"
Unit of measure: "pcs", "kg", "l", etc.
number
Minimum increment for quantity changes (e.g., 0.1 for items sold by weight).
number
Minimum order quantity.
number
Product weight in grams.
number
Product volume in milliliters.
string
URL to the product image. Displayed in product cards within the chat.
object
Arbitrary key-value metadata stored as JSON.
string
Product barcode (EAN/UPC).
boolean
default:true
Set to false to soft-delete a product from search results.

Content Fields

The following fields are combined into an enriched text and used for embedding generation: name, description, ingredients, brand, category_path, country. Changing any of these triggers re-embedding of the product.

Bulk Upload

Upload products using PUT /api/v1/catalog/products. This endpoint performs an upsert — new products are created, existing products (matched by sku) are updated.
1

Prepare your JSON payload

2

Upload via API

Response (202 Accepted):
Product metadata is saved to the database immediately. Embedding generation runs in the background. Products are searchable once their embeddings are complete.
3

Poll for job completion

Response:
Job statuses: pending -> embedding -> complete (or failed).

Job Status Fields

string
Unique job identifier.
string
Current status: pending, embedding, complete, or failed.
number
Total number of products in the upload.
number
Number of products that have been embedded so far. Use this with total to show progress.
number
Number of new products created.
number
Number of existing products updated (content fields changed).
number
Number of products that were identical to the existing version (no re-embedding needed).
string[]
List of error messages for individual products that failed.

Partial Updates (PATCH)

Update individual product fields without re-uploading the entire catalog:
Response:
Only content fields (name, description, ingredients, brand, category_path, country) trigger re-embedding. Changing non-content fields like image_url, weight, or unit updates metadata instantly without re-embedding.

Soft Delete

Deactivate a product (removes it from search results but keeps the data):
Returns 204 No Content on success. To reactivate, PATCH with "is_active": true.

Force Reindex

Trigger a full re-embedding of all active products. Use this after changing your embedding model or if search quality seems degraded:
Response:
Reindexing re-embeds every active product. For large catalogs, this may take several minutes and will consume embedding API credits.

List Products

Browse your uploaded catalog with pagination and filtering:
Supported query parameters:

List Jobs

View recent catalog upload jobs:
Returns up to 50 most recent jobs, sorted by most recent first. Job data is stored in Redis with a 24-hour TTL.

Tips for Large Catalogs

The API accepts any number of products in a single request, but for catalogs over 5,000 products we recommend splitting into batches of 1,000-2,000. This gives you more granular progress tracking and reduces the risk of timeouts.
VIZOCHOK computes an MD5 hash of each product’s content fields and compares it with the existing record. Products with identical content are skipped entirely — no re-embedding occurs. This makes repeated full catalog syncs efficient.
Embeddings are generated in batches of 50 products. For a 10,000-product catalog, this means 200 embedding API calls. The process runs in the background and does not block your API request.
Set up a daily cron job or webhook from your PIM/ERP to push the full catalog:
Thanks to smart change detection, only modified products are re-embedded.