Search for products across merchant catalogs using keyword-based queries with optional filters
x-firmly-authorization header. See Browser Session Authentication for complete details on:
100[] when no results found (HTTP 200).null when there are no more results.| Status Code | Error | Description |
|---|---|---|
400 | InvalidRequest | Missing required query parameter or invalid parameter values |
401 | Unauthorized | Missing or invalid x-firmly-authorization header |
401 | TokenExpired | Authentication token has expired. Refresh and retry. |
403 | Forbidden | Token does not have permission for this operation |
429 | RateLimitExceeded | Too many requests. Check Retry-After header. |
500 | ErrorStoreUnavailable | Search service is temporarily unavailable |
503 | ServiceUnavailable | System maintenance in progress |
200 with an empty products array. This is standard REST behavior—404 is reserved for “resource not found” (e.g., invalid endpoints), not “no results found”.filters.domains array to search specific merchants:"domains": ["benchmademodern.com"]"domains": ["merchant1.com", "merchant2.com", "merchant3.com"]domains field entirelyfilters.variants array to filter by product attributes like color, size, or material. Each variant filter specifies an option name and an array of allowed values. Use the Options endpoint to discover available options and values."Blue" will not match "blue" or "Navy")."min_price": 100000 filters for 2,499.99 USD. To display: (price / 100).toFixed(2).price_range.min, price_range.max are always integers in cents (e.g., 249999 for $2,499.99). has_available_variants is always a boolean (true or false). These are never returned as strings.0.1 + 0.2 !== 0.3 in JavaScript). This is the industry standard used by Stripe, PayPal, and other payment APIs.