Two ways to search
- By description:
POST /searchtakes a natural-languagequerysuch as"dark brutalist developer tools"or"warm pastel skincare landing pages". - By similarity:
GET /search/similartakes thesubmission_idof one of your completed extractions and returns its nearest visual neighbours.
Result cards
Each result is a card describing one brand:
Alongside the cards,
POST /search returns query_tags: the engine’s soft reading of your query (detected industry, page_type, hue, aesthetic, and style). It is display metadata, never a constraint on the results.
Results come from the curated corpus, not from your own submissions. A card is a pointer, not an extraction. To get the full design system for a result, submit its
url to POST /design/submissions.Depth
POST /search takes a depth:
fast(default): returns in seconds.deep: when result quality matters more than latency. Can take up to about 3 minutes.
deep consumes more than fast. The charge is refunded automatically if the search fails.
Filters
When a constraint is non-negotiable, move it out of the query and into the optionalfilters object. POST /search accepts four filter fields: page_type, industry, hue, and layout.
Do not confuse
filters with the response’s query_tags: filters narrow retrieval, query tags only describe how the engine read your query.
The corpus
The Search does not read your submissions. It searches a prebuilt corpus of curated brands, prepared ahead of time, which is what makes a search synchronous and fast. A few result slots rotate: the tail of the list brings in fresh exemplars of the style detected in your query, markedbadge: "discovery", so running the same search twice does not return an identical set. Setting any filter disables the rotation, because a rotated-in exemplar could violate the filter.
GET /search/similar compares one of your completed extractions against the corpus and returns its nearest neighbours. The comparison runs fresh on every call, so neighbours can vary slightly between calls for the same submission. See How the engine works.
Search history
GET /search/submissions lists your past searches and similarity lookups, newest first. Listing history is free. Narrow it with:
kind:searchfor query searches,similarfor similarity lookups.status:completed,failed, orin_progress.depth:fastordeep.q: free text over the query.api_key_id: only searches made with one API key.
total counts everything matching the filter and total_by_status breaks the counts down by outcome, both ignoring pagination.
Results are not stored, only the request (including its filters and detected query_tags) and its outcome (status, result_count, latency_ms, credits_consumed, and the credit reference). Run the search again to get the cards back.
Extraction history is separate and lives at GET /design/submissions.
From your agent
The same two searches are exposed as MCP tools:search_brands(query, depth, top_k) and search_similar_brands(submission_id, top_k). An agent can search for a look, pick a result, and extract it with extract_brand(url) in one flow. The brand-search skill packages that flow as installable instructions.
Next steps
Find inspiration
The search, pick, extract workflow end to end.
Search brands
The endpoint reference, with an interactive playground.
MCP server
Give your coding agent the same search tools.

