Search

Pixee PIM search is backed by Meilisearch, with an automatic fallback to PostgreSQL when Meilisearch is unavailable. Facet filters keep working under the fallback — only ranking quality and autocomplete degrade.


GET/search

Multi-index search across products, brands, categories, and suppliers in one call, grouped by index.

Query parameters

  • Name
    q
    Type
    string
    Description

    Search query.

  • Name
    limit
    Type
    integer
    Description

    Max results per index, 1–50 (default: 5).

  • Name
    indexes
    Type
    string
    Description

    Comma-separated list of indexes to search: products, brands, categories, suppliers (default: products,brands,categories).

  • Name
    exact_match
    Type
    boolean
    Description

    Require all words to match (default: false, approximate matching).

  • Name
    active
    Type
    boolean
    Description

    Filter by is_active. Applied to every requested index.

  • Name
    level
    Type
    integer
    Description

    Category depth (0–20). Only applied to the categories index.

  • Name
    country
    Type
    string
    Description

    ISO 3166-1 alpha-2 country code. Only applied to the suppliers index.

  • Name
    lang
    Type
    string
    Description

    ISO 639-1 language code for tokenization and localized titles. Defaults to the locale from Accept-Language. Returns 422 LANGUAGE_NOT_ENABLED if the language isn't enabled on your tenant.

Request

GET
/search
curl "https://api.pixeepim.com/api/v1/search?q=casque+bluetooth&indexes=products,brands&limit=10&active=true" \
  -H "Authorization: Bearer {api_key}"

Response

{
  "query": "casque bluetooth",
  "processing_time_ms": 4.2,
  "provider": "meilisearch",
  "results": {
    "products": {
      "hits": [
        { "id": "550e8400-e29b-41d4-a716-446655440000", "title": "Casque Bluetooth XR200", "ean": "3760000000001" }
      ],
      "count": 1,
      "facets": null
    },
    "brands": { "hits": [], "count": 0, "facets": null }
  }
}

GET/search/products

Search products

Faceted product search with native identifier filters. A query needs either text (q) or at least one filter — an empty request is rejected rather than silently returning the entire catalog.

Query parameters

  • Name
    q
    Type
    string
    Description

    Search query. May be omitted if at least one filter below is set.

  • Name
    limit
    Type
    integer
    Description

    Max results, 1–100 (default: 20).

  • Name
    offset
    Type
    integer
    Description

    Pagination offset (default: 0).

  • Name
    brand
    Type
    array
    Description

    Filter by brand name. Repeatable (brand=Acme&brand=Globex) — values within brand combine with OR, different facets combine with AND. Max 20 values.

  • Name
    is_active
    Type
    boolean
    Description

    Filter by active status.

  • Name
    has_asin
    Type
    boolean
    Description

    Filter by presence of an ASIN.

  • Name
    has_image
    Type
    boolean
    Description

    Filter by presence of a gallery image.

  • Name
    ean
    Type
    string
    Description

    Exact-match filter on EAN/GTIN. Native filter as of 17/09/2026 — it no longer matches partial/substring text elsewhere in the title.

  • Name
    sku
    Type
    string
    Description

    Exact-match filter on SKU / reference.

  • Name
    asin
    Type
    string
    Description

    Exact-match filter on ASIN.

  • Name
    sort
    Type
    string
    Description

    relevance (default, engine ranking), title:asc, or title:desc.

  • Name
    exact_match
    Type
    boolean
    Description

    Require all words to match (default: false).

  • Name
    lang
    Type
    string
    Description

    ISO 639-1 language code. Defaults to the locale from Accept-Language.

Request

GET
/search/products
curl "https://api.pixeepim.com/api/v1/search/products?ean=3760000000001" \
  -H "Authorization: Bearer {api_key}"

Request — text + facets

curl "https://api.pixeepim.com/api/v1/search/products?q=casque&brand=Acme&is_active=true&sort=title:asc&limit=20" \
  -H "Authorization: Bearer {api_key}"

Response

{
  "hits": [
    { "id": "550e8400-e29b-41d4-a716-446655440000", "title": "Casque Bluetooth XR200", "ean": "3760000000001", "brand_name": "Acme" }
  ],
  "count": 1,
  "facets": { "brand_name": { "Acme": 1 }, "has_asin": { "true": 1 } }
}

GET/search/products/{product_id}/similar

Get similar products

Vector-similarity recommendations for a product, computed from the Qdrant embedding index. Unlike Relations, these are computed, not curated, and change as the index is refreshed.

Path parameters

  • Name
    product_id
    Type
    string
    Description

    The reference product's UUID.

Query parameters

  • Name
    limit
    Type
    integer
    Description

    Max results to return.

  • Name
    score_threshold
    Type
    number
    Description

    Minimum similarity score (0–1) required to include a match.

Request

GET
/search/products/{product_id}/similar
curl "https://api.pixeepim.com/api/v1/search/products/550e8400-e29b-41d4-a716-446655440000/similar?limit=5&score_threshold=0.75" \
  -H "Authorization: Bearer {api_key}"

GET/search/suggestions

Suggestions

Autocomplete suggestions as the user types.

Query parameters

  • Name
    q
    Type
    string
    Description

    Partial search query.

  • Name
    limit
    Type
    integer
    Description

    Max suggestions to return.

Request

GET
/search/suggestions
curl "https://api.pixeepim.com/api/v1/search/suggestions?q=cas&limit=8" \
  -H "Authorization: Bearer {api_key}"

GET/search/health

Health check

Public endpoint (no auth required) reporting which search provider is currently serving traffic.

  • Name
    provider
    Type
    string
    Description

    meilisearch, postgresql (fallback engaged), none, or error.

  • Name
    healthy
    Type
    boolean
    Description

    Whether the active provider responded successfully.

  • Name
    meilisearch_available
    Type
    boolean
    Description

    true only when provider is meilisearch and it's healthy. false whenever the PostgreSQL fallback is serving requests — this is the field to alert on, not healthy alone.

Request

GET
/search/health
curl https://api.pixeepim.com/api/v1/search/health

Response — degraded

{
  "provider": "postgresql",
  "healthy": true,
  "meilisearch_available": false
}

GET/search/saved

Saved searches

Per-user saved search criteria for the /search screen. The server never interprets query_string — it stores and returns it opaquely; only the client reads it. A saved search belongs to its creator: accessing someone else's returns 404, never 403, so a UUID can't be used to probe existence.

  • Name
    GET /search/saved
    Description

    Lists the current user's saved searches.

  • Name
    POST /search/saved
    Description

    Creates a saved search.

  • Name
    PUT /search/saved/{recherche_id}
    Description

    Updates a saved search you own.

  • Name
    DELETE /search/saved/{recherche_id}
    Description

    Deletes a saved search you own.

Body parameters — POST / PUT

  • Name
    name
    Type
    string
    Description

    Display name for the saved search.

  • Name
    query_string
    Type
    string
    Description

    Opaque, client-defined criteria string (max 4,000 characters).

  • Name
    scope
    Type
    string
    Description

    Search scope, e.g. products (default: products, max 32 characters).

Request

POST
/search/saved
curl -X POST https://api.pixeepim.com/api/v1/search/saved \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Casques sans stock",
    "query_string": "q=casque&is_active=true&has_image=false",
    "scope": "products"
  }'

Response

{
  "id": "9f8e7d6c-5b4a-3210-9876-543210fedcba",
  "name": "Casques sans stock",
  "query_string": "q=casque&is_active=true&has_image=false",
  "scope": "products",
  "created_at": "2026-09-17T09:00:00Z"
}

Indexing & reindex

Administrative endpoints for the Meilisearch and Qdrant indexes.

Method & pathPurpose
GET /search/statsDocument count per index, provider, and last reindex time.
GET /search/indexing-statusCombined Meilisearch stats and indexing configuration.
PATCH /search/indexing-configUpdates reindex_interval_hours, auto_reindex_enabled, reindex_after_import.
POST /search/reindexTriggers a full Meilisearch reindex. Body: { "index": "products" | "brands" | "categories" | "suppliers" | null } (null = all).
POST /search/reindex-differentialTriggers a Meilisearch differential (incremental) reindex.
GET /search/qdrant/statusQdrant collection status for vector search.
POST /search/qdrant/reindexTriggers a full Qdrant reindex. Query: recreate_collection, resume.
POST /search/qdrant/reindex-differentialTriggers an incremental Qdrant reindex.
GET /search/semanticSemantic (vector) search over products (q, limit, score_threshold).

POST/product-search/

Product Search (external providers)

A separate feature from catalog search above: it queries external product-data providers (EAN/GTIN databases, marketplaces) to find or resolve product information, typically to fill in a missing EAN or enrich a record.

  • Name
    POST /product-search/
    Description

    Unified search across enabled providers for one query (free text or explicit EAN).

  • Name
    POST /product-search/bulk
    Description

    Runs multiple queries against the providers in one call.

  • Name
    POST /product-search/from-catalog
    Description

    Searches providers for catalog products matching a filter, e.g. no_ean (products missing an EAN).

  • Name
    GET /product-search/providers
    Description

    Lists available search providers.

  • Name
    POST /product-search/resolve-pending
    Description

    Synchronously resolves pending EAN lookups for a supplier.

  • Name
    POST /product-search/resolve-pending/jobs
    Description

    Creates an asynchronous EAN-resolution job for larger batches.

  • Name
    GET /product-search/resolve-pending/jobs/{job_id}
    Description

    Polls job progress.

  • Name
    DELETE /product-search/resolve-pending/jobs/{job_id}
    Description

    Cancels a running job.

Body parameters — POST /product-search/

  • Name
    query
    Type
    string
    Description

    Free-text search query (type auto-detected).

  • Name
    ean
    Type
    string
    Description

    Explicit EAN/GTIN for a direct barcode lookup.

  • Name
    brand
    Type
    string
    Description

    Brand filter.

  • Name
    providers
    Type
    array
    Description

    Limit the search to specific provider IDs.

  • Name
    max_results
    Type
    integer
    Description

    Max results to return.

Request

POST
/product-search/
curl -X POST https://api.pixeepim.com/api/v1/product-search/ \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "ean": "3760000000001",
    "max_results": 5
  }'

Request

POST
/product-search/resolve-pending/jobs
curl -X POST https://api.pixeepim.com/api/v1/product-search/resolve-pending/jobs \
  -H "Authorization: Bearer {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "supplier_codes": ["ACME"],
    "limit": 500,
    "auto_apply": false
  }'

Was this page helpful?