> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Buscar productos

> Filtra, busca y ordena productos, y opcionalmente expórtalos a XLSX.

A diferencia de [listar](/guides/integraciones/e-commerce/api-productos/listar), este endpoint sí aplica filtros, búsqueda, scopes y ordenamiento, enviados en el cuerpo de la solicitud.

<ParamField path="app_id" type="string" required>
  ID de tu tienda en Jelou Shop.
</ParamField>

<ParamField query="page" type="integer" default="1">
  Número de página a retornar.
</ParamField>

<ParamField query="limit" type="integer" default="15">
  Cantidad de resultados por página (máx. 200).
</ParamField>

<ParamField query="download" type="boolean">
  Si está presente, la respuesta es un archivo **XLSX** con los productos que cumplen los filtros, en lugar de JSON.
</ParamField>

<ParamField body="search" type="object">
  Objeto de búsqueda por texto.

  <Expandable title="Propiedades de búsqueda">
    <ParamField body="value" type="string" required>
      Texto a buscar en los campos `name` y `sku`.
    </ParamField>

    <ParamField body="case_sensitive" type="boolean" default="false">
      Define si la búsqueda distingue entre mayúsculas y minúsculas.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="filters" type="object[]">
  Lista de filtros a aplicar.

  <Expandable title="Propiedades de cada filtro">
    <ParamField body="field" type="string" required>
      Campo por el que filtrar: `created_at`, `price`, `has_tax` o `categories.id`.
    </ParamField>

    <ParamField body="operator" type="string" default="=">
      Operador de comparación. Valores soportados: `=`, `!=`, `<`, `<=`, `>`, `>=`, `like`, `not like`, `in`, `not in`.
    </ParamField>

    <ParamField body="value" type="string | number | boolean | array" required>
      Valor del filtro. Usa un arreglo con los operadores `in` y `not in`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="scopes" type="object[]">
  Lista de scopes (filtros predefinidos) a aplicar.

  <Expandable title="Propiedades de cada scope">
    <ParamField body="name" type="string" required>
      Nombre del scope. Disponibles:

      * `withDiscount` — solo productos con descuento.
      * `withoutDiscount` — solo productos sin descuento.
      * `whereDate` — productos creados entre dos fechas. Requiere `parameters: [desde, hasta]`.
    </ParamField>

    <ParamField body="parameters" type="array">
      Parámetros del scope. Para `whereDate`: `["2026-01-01", "2026-01-31"]`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="sort" type="object[]">
  Ordenamiento de resultados.

  <Expandable title="Propiedades de cada sort">
    <ParamField body="field" type="string" required>
      Campo por el que ordenar. Disponible: `created_at`.
    </ParamField>

    <ParamField body="direction" type="string" default="asc">
      Dirección del orden: `asc` o `desc`.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="includes" type="object[]">
  Lista de relaciones a expandir en la respuesta.

  <Expandable title="Propiedades de cada include">
    <ParamField body="relation" type="string" required>
      Nombre de la relación. Disponibles: `media`, `categories`, `attributes`, `prices`, `variations`, `variations.media`, `variations.productAttributes`, `attributeTypes`, `featureValues`.
    </ParamField>
  </Expandable>
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST "https://gateway.jelou.ai/ecommerce/v2/apps/{app_id}/products/search?page=1&limit=20" \
    -H "x-api-key: TU_CLAVE_API" \
    -H "Content-Type: application/json" \
    -d '{
      "search": {
        "value": "camiseta",
        "case_sensitive": false
      },
      "filters": [
        { "field": "price", "operator": ">=", "value": 10 },
        { "field": "has_tax", "operator": "=", "value": true }
      ],
      "scopes": [
        { "name": "withDiscount" }
      ],
      "sort": [
        { "field": "created_at", "direction": "desc" }
      ],
      "includes": [
        { "relation": "variations" }
      ]
    }'
  ```
</RequestExample>

<Tip>
  **Campos buscables:** `name`, `sku`
  **Campos filtrables:** `created_at`, `price`, `has_tax`, `categories.id`
  **Campos ordenables:** `created_at`
  **Scopes:** `withDiscount`, `withoutDiscount`, `whereDate`
  **Relaciones disponibles:** `media`, `categories`, `attributes`, `prices`, `variations`, `variations.media`, `variations.productAttributes`, `attributeTypes`, `featureValues`
</Tip>

<Note>
  Para exportar los resultados a XLSX agrega `?download` a la URL. La respuesta será el archivo en lugar de JSON.
</Note>
