API documentation

Snyf API Reference

Use these endpoints to manage API keys, upload catalogs, poll ingestion jobs, and search enriched collections.

https://xydj4rm9eg.execute-api.us-east-1.amazonaws.com

Authentication

Catalog upload, job polling, and search use the customer API key in the x-api-key header.

x-api-key: $API_KEY
POST

/collections/{collection_id}/upload

Uploads a catalog CSV to the collection named in the URL and queues accepted rows for enrichment.

Required for every upload. Send only the file name, not an S3 URI.

curl -sS -X POST "$API_URL/collections/coll_ss25/upload" \
  -H "x-api-key: $API_KEY" \
  -F "csv_file=@catalog.csv" \
  -F "attribute_list_id=fashion-v1"
InputRequiredNotes
csv_fileYesCSV file with product rows.
attribute_list_idYesAttribute-list file name, not an S3 URI.

Required CSV columns: product_id, name, image_urls. Do not include collection_id in the CSV; the upload URL supplies it.

Optional CSV columns: category, description, price, currency, brand, _deleted. Use attribute_list_id in the upload form/API instead of an attributes CSV column.

Response

{
  "job_id": "job_coll_ss25_a1b2c3d4e5f6",
  "accepted_rows": 3,
  "rejected_rows": 0,
  "warnings": 0,
  "status": "QUEUED",
  "issues": []
}
GET

/ingestion-jobs/{job_id}

Polls an upload job until products become searchable.

curl -sS "$API_URL/ingestion-jobs/$JOB_ID" \
  -H "x-api-key: $API_KEY"

Response

{
  "job_id": "job_coll_ss25_a1b2c3d4e5f6",
  "status": "READY",
  "accepted_rows": 3,
  "queued_rows": 0,
  "processing_rows": 0,
  "enriched_rows": 3,
  "failed_rows": 0,
  "deleted_rows": 0,
  "products": [
    {
      "collection_id": "coll_ss25",
      "product_id": "prod_001",
      "name": "Linen Wrap Dress",
      "status": "ENRICHED"
    }
  ]
}
GET

/ingestion-jobs/{job_id}/errors

curl -sS "$API_URL/ingestion-jobs/$JOB_ID/errors" \
  -H "x-api-key: $API_KEY"
POST

/search/keyword

Runs a lexical baseline over product names, descriptions, categories, brands, enriched text, and extracted attributes. Request and response shape match /search.

curl -sS -X POST "$API_URL/search/keyword" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $API_KEY" \
  -d '{
    "collection_id": "coll_ss25",
    "query": "linen dress",
    "top_k": 5
  }'
POST

/search/demo

Public website demo search. It does not take an API key or collection ID; the backend locks it to the demo collection so no secret is exposed in browser code. Public demo requests are still rate limited.

curl -sS -X POST "$API_URL/search/demo" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "flowy beach wedding look"
  }'
POST

/search/demo/keyword

Public keyword baseline for the same demo collection. Customer apps should use the protected endpoints above.

Errors And Limits

Plan Searches / month Ingestion rows / month Active API keys
FREE1001,0001
PRO10,000100,0005
ENTERPRISE1,000,00010,000,00025

CSV headers are not counted toward ingestion row limits. API keys can be regenerated, but each plan caps the number of active keys.

Error Shape

{
  "detail": "Invalid email or password."
}

Plan Limit Error

{
  "detail": "search_requests_per_month exceeded for FREE plan. Please upgrade your plan."
}