Skip to main content
A collection is a saved catalog scope: brands, websites, categories, and/or specific products. Create it once, then pass config.collection_id on search, browse, image search, find-products-in-image, and conversations. Collections endpoints are free.

Clause semantics

A collection is a list of clauses. Clauses are ORed. Inside a clause, each list (brand_ids, website_ids, category_ids) is ORed, and those lists are ANDed with each other. product_ids in the same clause also AND — they pin the clause to those products. Request filters on search/browse/conversation narrow the collection. They cannot widen it. Caps: 100 clauses, 100 ids per list per clause, 500 product_ids across the whole collection.

Create a collection

Resolve brand, website, and category ids first (those lookups are free), then create the collection.
website_ids accept merchant ids or domains (nike.com); domains are stored as merchant ids. You can create an empty collection (clauses: []) and add clauses later with PATCH. Optional user_id scopes the collection to one end user. If you omit x-user-id on a later collection-scoped search, Channel3 uses that user_id for click attribution. Pass the id on config.collection_id. Browse does not need filters.brand_ids / category_ids / website_ids when a collection is set.
The same config.collection_id field works on POST /v1/image-search and POST /experimental/find-products-in-image. A 404 means the id is missing or not owned by this API key. /v1/similar and /v1/lookup do not take a collection.

List collections

List is paginated. Pass user_id to see one user’s collections.

Get a collection

Fetch one collection by id. The response includes name, description, user_id, and the full clause list.
A 404 means the id is missing or not owned by this API key.

Update a collection

PATCH replaces clauses in place by clause_id, removes by id, and/or appends new clauses.