# Buscar productos

> Búsqueda por palabras o por significado, con filtros como parámetros o escritos en la consulta.

URL: https://boelabs.com/en/docs/bazar/casos/buscar
Language: Español

`GET /v1/search` (MCP: `search_products`) busca por palabras, por una descripción, una marca, un
modelo o un código de barras.

```bash
curl "https://bazar.boelabs.com/v1/search?q=licuadora%20oster%20hasta%2080%20d%C3%B3lares&limit=2"
```

```json
{
  "results": [
    {
      "id": "lst_f1b7ca6365ff3f08",
      "title": "Licuadora Oster BLSTKAPWRD",
      "brand": "Oster",
      "store": { "id": "damasco-ve", "name": "Damasco" },
      "url": "https://www.damascovzla.com/licuadora-oster-blstkapwrd-d0001227/p",
      "categories": ["Electrodomésticos", "Línea Menor", "Licuadoras"],
      "price": { "amount": "53.00", "minor": 5300, "currency": "USD" },
      "converted": {
        "amount": "46739.48",
        "minor": 4673948,
        "currency": "VES",
        "rate": 881.8769,
        "rateDate": "2026-10-20"
      },
      "availability": "in_stock",
      "alsoSoldBy": 0,
      "observedAt": "2026-10-20T06:06:49.896Z",
      "stale": false,
      "match": "all_terms"
    }
  ],
  "nextCursor": "MjplMGJjYmM2YzQwYTI",
  "facets": {
    "stores": [{ "id": "damasco-ve", "name": "Damasco", "results": 40 }],
    "categories": [{ "name": "Licuadoras", "results": 17 }]
  },
  "applied": {
    "q": "licuadora oster",
    "currency": "USD",
    "maxPrice": 80,
    "sort": "relevance",
    "limit": 2,
    "semantic": true,
    "interpreted": { "from": "licuadora oster hasta 80 dólares", "phrases": ["hasta 80 dólares"] }
  }
}
```

## Filtros escritos en la consulta

Bazar entiende una tienda ("en Damasco"), un rango de precio ("hasta 80 dólares", "entre 100 y
200 USD"), un orden ("más barato", "más caro") y "disponible". Lo que leyó lo quita de `q` y lo
informa en `applied.interpreted`.

- Un número suelto no es un precio: "televisor 55 pulgadas" se busca tal cual.
- Los parámetros explícitos siempre ganan sobre lo leído.
- `interpret=false` busca `q` exactamente como se escribió.

## Filtros como parámetros

| Parámetro                                                | Para qué                                                                                                                                                          |
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `q`                                                      | Palabras, una descripción ("algo para enfriar el cuarto"), una marca, un modelo o un código de barras. Máximo 200 caracteres.                                     |
| `stores`                                                 | Ids de tienda separados por coma (ver [Tiendas](https://boelabs.com/docs/bazar/casos/tiendas)): una para una sola tienda, varias para comparar. Máximo 20.                                 |
| `category`                                               | Solo productos cuya categoría propia (el último nivel) contiene el texto. Usa los nombres de `facets.categories`.                                                 |
| `inStock`                                                | `true`: solo ofertas en stock según la tienda.                                                                                                                    |
| `currency`, `minPrice`, `maxPrice`                       | Rango de precio en unidades mayores (`maxPrice=100`). Necesita `currency` (USD o VES).                                                                            |
| `convert`                                                | Con `currency`: las ofertas en la otra moneda se convierten a la tasa BCV para filtrarlas y ordenarlas juntas (por defecto). `false` deja solo las de `currency`. |
| `sort`                                                   | `relevance` (por defecto), `price_asc` o `price_desc`. Los órdenes por precio necesitan `currency` y solo incluyen resultados que nombran todas las palabras.     |
| `maxPerStore`                                            | Como mucho N resultados por tienda. La relevancia ya mezcla tiendas; úsalo para variedad estricta (por ejemplo, `2` con `price_asc`).                             |
| `city`, `subdivision`, `latitude`/`longitude`/`radiusKm` | Solo ofertas de una sucursal o zona en ese lugar (ver [Filtrar por lugar](https://boelabs.com/docs/bazar/casos/lugar)).                                                                    |
| `country`                                                | ISO 3166-1, por ejemplo `VE`.                                                                                                                                     |
| `limit`                                                  | Resultados por página, de 1 a 50 (10 por defecto).                                                                                                                |
| `cursor`                                                 | La página siguiente (ver [Paginación](https://boelabs.com/docs/bazar/casos/paginacion)).                                                                                                   |

## Recetas

- _"La licuadora más barata"_: `q=licuadora&sort=price_asc&currency=USD`, o simplemente
  `q=licuadora más barata`.
- _Si aparecen accesorios_ (controles para "televisor"): repite con `category` tomado de
  `facets.categories`, por ejemplo `category=Televisores`.
- _Variedad entre tiendas_: `maxPerStore=2`.
- _Un código de barras_: `q=7591196006479` devuelve solo coincidencias exactas
  (`match: identifier`).

<Callout type="info">
  Cuando un resultado tiene `alsoSoldBy` mayor que 0, otras tiendas venden el mismo código de
  barras: [compáralo](https://boelabs.com/docs/bazar/casos/comparar).
</Callout>

