Search Products
GET/api/products/search
Search products by SKU, name, or barcode. Results are ranked by a 9-tier relevance scheme so typing a full SKU surfaces the exact product first:
- Exact SKU match
- Exact barcode match
- Exact name match
- SKU starts with the query
- Barcode starts with the query
- Name starts with the query
- SKU contains the query (anywhere)
- Name contains the query (anywhere)
- Anything else (barcode contains, etc.)
products:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Only active (non-archived) products are returned.
Authentication: Requires Bearer token.
Minimum query length: 2 characters.
Optional with parameter (allowlist): pass with=inventory to include warehouse-aggregate inventory totals (inventory_available, inventory_allocated, inventory_on_hold) in each result.
Optional simple_assembleable=1 filter: restricts results to products that can actually be assembled or disassembled via Manufacturing Simple Mode (have an active default BOM with component lines, or legacy kit components). Anything else would fail at submit, so the picker blocks it.
Stock UoM fields: When the product's stockProductUom.unitOfMeasure relation is eager-loaded (this endpoint always loads it), each item additionally exposes stock_uom_id, stock_uom_code (e.g. KG), and stock_uom_name. The legacy nested stock_uom object is still emitted via ?with=stock_uom.
Request
Responses
- 200
- 401
- 403
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.