More Like This — one endpoint, many recommendation strategies
Give the API a product you already know — a URL or an Octogen UUID — and it returns similar products from your catalogs. A handful of parameters turn the same endpoint into distinct recommendation surfaces. Every example below is a real request shape with live results from indexed catalogs.
How a request becomes a query
The source product is looked up in your granted catalogs by source.url or source.uuid. Scope to one catalog with catalog, or omit it to search across everything you have access to.
Facet matching is automatic. When you don't pass include_facets or exclude_facets, the server reads the source product's enriched facets — styles, tags, attributes — and matches on them for you: audience facets (product type, gender, age group) are applied as exact filters, and the rest are matched softly through their embeddings, with exact facet matching coming to this default over time. Your own facets and price_preference layer on top when you want explicit control.
Candidates are retrieved by vector similarity over the chosen embedding columns, then re-scored for final ordering. Which embeddings drive each stage is now under your control.
Embedding columns new
Every indexed product carries several embeddings. Two new request parameters — retrieval_embedding_columns (which embeddings pull candidates in) and ranking_embedding_columns (which embeddings order them) — let you mix and match. Send debug: true and the response echoes the effectiveQuery the server actually ran, so you can see exactly what any combination did.
| Column | Captures | Use it for |
|---|---|---|
style_embedding | Aesthetic and styling signals | "Same look" — the default retrieval when the product has styles/tags |
tags_embedding | Descriptive tags (details, materials, features) | Pairs with style for the default strategy |
attributes_embedding | Structured attributes (closure, hardware, fit…) | Maximum concrete attribute overlap |
embedding | General-purpose product representation | Broad semantic discovery; the default ranking signal |
Default — same look
No tuning parameters
The server composes everything: query text from the source product's enriched styles and tags, retrieval over the style and tags embeddings, plus automatic audience facets (product type, gender, age group). This is the “same look” behavior the platform's Similar by style and tags rail uses.
{
"source": {
"uuid": "19daa0d1-8d4a-4cb8-aaa6-11a98b005e10"
},
"catalog": "lagence_merchant",
"limit": 6
}
Attribute-focused retrieval new
retrieval_embedding_columns
Retrieval runs over the attributes embedding, so candidates are pulled in by concrete product attributes — construction, hardware, closures, silhouette — rather than overall styling.
{
"source": {
"uuid": "19daa0d1-8d4a-4cb8-aaa6-11a98b005e10"
},
"catalog": "lagence_merchant",
"limit": 6,
"retrieval_embedding_columns": ["attributes_embedding"]
}
Broad semantic matches new
retrieval_embedding_columns
Retrieval runs over the general-purpose base embedding for wider, discovery-style results — the same strategy as the platform's Broad semantic matches rail.
{
"source": {
"uuid": "19daa0d1-8d4a-4cb8-aaa6-11a98b005e10"
},
"catalog": "lagence_merchant",
"limit": 6,
"retrieval_embedding_columns": ["embedding"]
}
Attribute retrieval, style-ranked new
retrieval + ranking
Two stages working together: candidates are retrieved by attribute closeness, then re-scored by style-embedding similarity. Maximum attribute matches, ordered by closeness of look.
{
"source": {
"uuid": "19daa0d1-8d4a-4cb8-aaa6-11a98b005e10"
},
"catalog": "lagence_merchant",
"limit": 6,
"retrieval_embedding_columns": ["attributes_embedding"],
"ranking_embedding_columns": ["style_embedding"]
}
Same look, lower price
price_preference
The default “same look” strategy constrained to products priced below the source. “higher” works the same way in the other direction.
{
"source": {
"uuid": "19daa0d1-8d4a-4cb8-aaa6-11a98b005e10"
},
"catalog": "lagence_merchant",
"limit": 6,
"price_preference": "lower"
}
Default — same look
No tuning parameters
The server composes everything: query text from the source product's enriched styles and tags, retrieval over the style and tags embeddings, plus automatic audience facets (product type, gender, age group). This is the “same look” behavior the platform's Similar by style and tags rail uses.
{
"source": {
"url": "https://www.fashionphile.com/products/louis-vuitton-epi-mabillon-backpack-tassil-64262"
},
"catalog": "fashionphile",
"limit": 6
}
Attribute-focused retrieval new
retrieval_embedding_columns
Retrieval runs over the attributes embedding, so candidates are pulled in by concrete product attributes — construction, hardware, closures, silhouette — rather than overall styling.
{
"source": {
"url": "https://www.fashionphile.com/products/louis-vuitton-epi-mabillon-backpack-tassil-64262"
},
"catalog": "fashionphile",
"limit": 6,
"retrieval_embedding_columns": ["attributes_embedding"]
}
Broad semantic matches new
retrieval_embedding_columns
Retrieval runs over the general-purpose base embedding for wider, discovery-style results — the same strategy as the platform's Broad semantic matches rail.
{
"source": {
"url": "https://www.fashionphile.com/products/louis-vuitton-epi-mabillon-backpack-tassil-64262"
},
"catalog": "fashionphile",
"limit": 6,
"retrieval_embedding_columns": ["embedding"]
}
Attribute retrieval, style-ranked new
retrieval + ranking
Two stages working together: candidates are retrieved by attribute closeness, then re-scored by style-embedding similarity. Maximum attribute matches, ordered by closeness of look.
{
"source": {
"url": "https://www.fashionphile.com/products/louis-vuitton-epi-mabillon-backpack-tassil-64262"
},
"catalog": "fashionphile",
"limit": 6,
"retrieval_embedding_columns": ["attributes_embedding"],
"ranking_embedding_columns": ["style_embedding"]
}
Same look, lower price
price_preference
The default “same look” strategy constrained to products priced below the source. “higher” works the same way in the other direction.
{
"source": {
"url": "https://www.fashionphile.com/products/louis-vuitton-epi-mabillon-backpack-tassil-64262"
},
"catalog": "fashionphile",
"limit": 6,
"price_preference": "lower"
}
Beyond these examples
- Facet steering.
include_facets/exclude_facetsaccept any indexed facet — pincolor_family, block a brand, force a category — on top of any strategy above. - Cross-catalog. Omit
catalogand source resolution and search run across all catalogs granted to your API key — e.g. recommend from your whole network against one merchant's product. - Pagination. Responses include
nextCursor; pass it back ascursorfor the next page.limitaccepts 1–100. - Transparency.
debug: truereturns theeffectiveQuery— text, embedding columns, facets, and price bounds the server executed. - On the roadmap. Image input as a source (URL or upload), and automatic fallback to just-in-time extraction when a source URL isn't in an Octogen catalog yet — with the response flagging when a fallback was used.