API del motor de búsqueda

Más allá del calendario automático de Reindexación del feed, SoloSearch expone una pequeña API pública para disparar una reindexación bajo demanda y para enviar cambios de un solo producto de forma inmediata —sin esperar a la siguiente ejecución programada, y sin necesidad de regenerar todo tu archivo de feed por el cambio de un solo producto.

Todas las peticiones se hacen directamente a api.solosearch.app (no al panel, ni al host del widget), y todas operan sobre un único motor de búsqueda, identificado por su UUID.

Autenticación

Cada petición necesita una cabecera Authorization: Bearer {token}, usando el token que aparece en la sección General → API Token de tu motor de búsqueda. Si todavía no has generado ninguno, pulsa Generate —el token en texto plano solo se muestra una vez, justo al generarlo, así que guárdalo en un lugar seguro.

Authorization: Bearer your-api-token-here
💡 Generar un token nuevo invalida el anterior de inmediato. Si llamas a estos endpoints desde un módulo de plataforma (Magento, WooCommerce...), actualiza su token configurado nada más regenerarlo.

Un token ausente o inválido devuelve:

{ "message": "Invalid or missing API token." }

con estado HTTP 401.

Reindexar un feed

POST /api/v1/search-engines/{uuid}/reindex

Dispara una Reindexación del feed completa de forma inmediata, en vez de esperar al calendario propio del feed (Daily/Weekly). Es lo que llaman automáticamente nuestros módulos oficiales de plataforma (por ejemplo, Magento) cada vez que se regenera tu archivo de feed, para que el índice se mantenga sincronizado sin ninguna acción manual. Consulta Cómo funciona el sistema para saber qué hace exactamente una Reindexación del feed.

No hace falta cuerpo en la petición.

curl -X POST "https://api.solosearch.app/api/v1/search-engines/{uuid}/reindex" \
  -H "Authorization: Bearer your-api-token-here"
Estado Significado
200 Reindexación programada.
401 Token inválido o ausente.
404 Motor de búsqueda no encontrado.
422 El motor de búsqueda no tiene ningún feed descargable configurado (por ejemplo, su feed está en modo Upload).
429 Demasiadas peticiones de reindexación —limitado a 5 por hora y motor de búsqueda, ya que cada una descarga y vuelve a analizar todo tu archivo de feed.

Añadir o actualizar un producto

PUT /api/v1/search-engines/{uuid}/products/{id}

Crea o reemplaza un único producto en el índice de búsqueda al instante. No existe un "añadir" separado de un "actualizar" —enviar un id que todavía no existe lo crea, enviar uno que ya existe lo reemplaza por completo con el cuerpo que envíes.

{id} es el id de SoloSearch del producto (el mismo valor que se muestra como campo id en tu feed) —se toma de la URL, nunca del cuerpo de la petición.

El cuerpo de la petición es un objeto JSON que usa los mismos nombres de campo que ya usa tu feed —los que están configurados en Configuration → Feeds → [tu feed] → Feed Fields, no los nombres internos de SoloSearch. Dicho de otro modo, envía los mismos datos que pondrías en una fila/item de tu archivo de feed, en JSON:

curl -X PUT "https://api.solosearch.app/api/v1/search-engines/{uuid}/products/1042" \
  -H "Authorization: Bearer your-api-token-here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Running Shoes",
    "link": "https://myshop.com/running-shoes",
    "image": "https://myshop.com/images/shoes.jpg",
    "price": "89.99",
    "sale_price": "69.99",
    "categories": "Footwear %% Running"
  }'

Los campos marcados como obligatorios en tu configuración de Feed Fields también son obligatorios aquí —la petición se rechaza si falta alguno, igual que un producto al que le falte ese campo se saltaría durante una Reindexación del feed completa.

💡 El motor de búsqueda debe tener ya un índice publicado —es decir, al menos una Reindexación del feed tiene que haberse completado con éxito antes de poder usar este endpoint. Un motor de búsqueda recién creado que nunca se ha indexado rechazará esta llamada hasta que dispares una primera Reindexación del feed.
Estado Significado
200 Producto indexado.
401 Token inválido o ausente.
404 Motor de búsqueda no encontrado.
422 No hay feed configurado, el motor de búsqueda todavía no se ha indexado, o falta un campo obligatorio (la respuesta indica cuál).
429 Demasiadas peticiones —limitado a 60 por minuto.

Añadir o actualizar productos en lote

POST /api/v1/search-engines/{uuid}/products/batch

Igual que Añadir o actualizar un producto, pero para muchos productos en una sola petición —una única escritura en OpenSearch en vez de una llamada HTTP por producto. Útil para operaciones masivas (por ejemplo, una actualización de precios de todo el catálogo) donde llamar al endpoint individual cientos o miles de veces sería más lento y más propenso a toparse con su límite de peticiones.

El cuerpo es un objeto JSON con un array products. A diferencia del endpoint individual, cada item lleva su propio campo id —no hay una URL por producto de la que tomarlo:

curl -X POST "https://api.solosearch.app/api/v1/search-engines/{uuid}/products/batch" \
  -H "Authorization: Bearer your-api-token-here" \
  -H "Content-Type: application/json" \
  -d '{
    "products": [
      { "id": "1042", "title": "Running Shoes", "link": "https://myshop.com/running-shoes", "image": "https://myshop.com/images/shoes.jpg", "price": "89.99" },
      { "id": "1043", "title": "Trail Shoes", "link": "https://myshop.com/trail-shoes", "image": "https://myshop.com/images/trail.jpg", "price": "99.99" }
    ]
  }'

Un lote no es todo o nada —cada item obtiene su propio resultado, así que un producto inválido no bloquea al resto:

{
  "indexed": 1,
  "failed": 1,
  "results": [
    { "id": "1042", "success": true, "error": null },
    { "id": "1043", "success": false, "error": "Missing required field: title." }
  ]
}

Máximo 500 productos por petición —divide los lotes más grandes en varias llamadas.

Estado Significado
200 Petición procesada —revisa results para el resultado de cada producto; un 200 no significa que todos los productos se indexaran correctamente.
401 Token inválido o ausente.
404 Motor de búsqueda no encontrado.
422 No hay feed configurado, el motor de búsqueda todavía no se ha indexado, el cuerpo no es un array products, o el lote supera los 500 productos.
429 Demasiadas peticiones —limitado a 20 por minuto.

Eliminar un producto

DELETE /api/v1/search-engines/{uuid}/products/{id}

Elimina un único producto del índice de búsqueda. No hace falta cuerpo en la petición.

curl -X DELETE "https://api.solosearch.app/api/v1/search-engines/{uuid}/products/1042" \
  -H "Authorization: Bearer your-api-token-here"

Es idempotente —eliminar un producto que ya no está (o que nunca existió) sigue devolviendo 200, ya que el resultado final es el que pedías en cualquier caso.

Estado Significado
200 Producto eliminado (o ya ausente).
401 Token inválido o ausente.
404 Motor de búsqueda no encontrado.
422 El motor de búsqueda todavía no se ha indexado.
429 Demasiadas peticiones —limitado a 60 por minuto.