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
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.
| 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. |