Skip to main content
POST
Text Search: Prepare Search
This endpoint asynchronously prepares expensive personalization for a given query, returning a ULID search_id that you can use with the Search API to execute the search.
  • Use with: Search API via the search_id body parameter

Authorization

string
required
Token-based authentication header in the form of <YOUR_LAYERS_TOKEN>. Same requirements as the Search API.

Headers

string
default:"application/json"
required
string
default:"application/json"
required

Path parameters

string
required
The url-encoded search query to prepare. Layers normalizes the query before validating it, stripping invisible characters and converting Unicode punctuation to ASCII equivalents. After normalization, the query must be 2 to 255 characters. Queries outside this range return HTTP 422.

Body

string[]
Optional hint for which product attributes you intend to include in the eventual Search response. Available attributes include: id, title, handle, body_html, vendor, product_type, tags, images, available, created_at, updated_at, published_at, price_range, options, original_options, metafields, named_tags, calculated, category, featured_media, is_gift_card, has_variants_that_require_components, combined_listing_parent_product_id, combined_listing_role, and first_or_matched_variant. See the Product Schema for detailed descriptions.
object
Refer to the dedicated Filter Expressions guide to learn more about filter expressions.
Pagination Object
string[]
Facets to be included. Accepts both exact facet codes (e.g., "vendor", "options.Size") and wildcard patterns (e.g., "options.*", "metafields.product.*").Wildcard patterns expand to all matching attribute codes. For example, "options.*" expands to all option facets like "options.Size" and "options.Color". Wildcards must match at least one attribute code to be valid.Examples:
boolean
If the count of each facet value should be calculated.
boolean
If you want a min/max range for numeric facets such as price.
boolean
When true, any facet backed by a metaobject_reference or list.metaobject_reference metafield is returned with a companion facetDisplay object. Each entry maps a facet value (the metaobject handle) to the referenced metaobject’s display_name and fields. When the metaobject defines a color or image field, the entry also carries a resolved swatch object.Use this when your storefront filter UI needs human-readable labels or nested field data (for example, a color name or swatch hex) instead of the raw handle. When false or omitted, only the handles are returned in facets.Values are looked up from the local metaobject cache. Handles with no matching cached metaobject are omitted from facetDisplay and remain as plain values in facets. See Metaobjects and reference metafields for the normalized shape of each entry.
object
User identity information for tracking and personalization. Automatically managed by the Storefront Pixel; required for headless integrations.
object
Contextual information about the customer’s session, behavior, and environment. Automatically collected by the Storefront Pixel; must be manually provided for headless integrations. See Contextual Information for implementation guidance.

Behavior

  • Returns HTTP 202 (Accepted) immediately with a search_id
  • Generates a ULID search_id that identifies the prepared search
  • Starts additional search preparation asynchronously
  • Pre-computes query understanding and personalization inputs
  • Prepared data is cached for up to 15 minutes; after TTL, Search falls back to normal processing
  • If Layers is temporarily serving keyword-only results platform-wide, prepare still returns 202 with a usable search_id but skips semantic preparation. The execute call then returns keyword-only results with _meta.search_lane set to "prefix_only". No client changes are required.

Response

202 Accepted

string
ULID identifier for the prepared search. Valid for 15 minutes.

Response headers

Error conditions

  • 401 Unauthorized: Missing/invalid X-Storefront-Access-Token
  • 402 Payment Required: The store is suspended. Every storefront API request returns this status until the suspension is lifted
  • 422 Unprocessable Entity: Invalid body or parameters

Next steps

Use the returned search_id with the Search API in the search_id body parameter to execute an optimized search.