Introducción
El comercio local, en una API
Leemos cada noche las webs de las tiendas independientes de Madrid y unimos el mismo producto aunque cada tienda lo llame a su manera. La API te da ese catálogo ya limpio: productos con todas sus tiendas y precios, el perfil de cada tienda y dónde se vende cada marca.
Lo que devuelve una búsqueda, resumido
{
"products": [{
"name": "Muga Crianza",
"stores_count": 8,
"price": { "min": 16.11, "median": 19.7, "max": 21.5 }
}],
"results": [{
"store": { "name": "La Caja de Vinos",
"distance_km": 0.4 },
"price_eur": 19.5,
"listed_in_stock": true,
"captured_at": "2026-10-03",
"source_url": "https://lacajadevinos.com/…"
}, …]
}Primeros pasos
Inicio rápido
- 1
Pide una clave
Solicítala en Solicitar acceso. Revisamos cada solicitud a mano y te la enviamos por correo. La prueba es gratis: 100 llamadas al mes, sin tarjeta. - 2
Guárdala en tu servidor
Ponla en una variable de entorno, por ejemploLOVEO_KEY. Las llamadas se hacen desde tu backend: la clave nunca debe llegar al navegador. - 3
Haz tu primera llamada
Busca un producto cerca de la Puerta del Sol. Cada resultado trae la tienda, el precio, la fecha en que lo leímos (captured_at) y la página de origen (source_url).
export LOVEO_KEY="ld_…"curl -G https://data.loveoo.app/v1/products/search \
-H "Authorization: Bearer $LOVEO_KEY" \
--data-urlencode "q=muga crianza" \
-d lat=40.4169 \
-d lng=-3.7035 \
-d radius_km=5Primeros pasos
Autenticación
Envía tu clave en la cabecera Authorization: Bearer <clave> o, si tu herramienta lo prefiere, en X-API-Key. Las claves empiezan por ld_.
Puedes crear y revocar claves en tu área de cliente. Solo te enseñamos cada clave una vez, al crearla: guardamos su hash y no podemos recuperarla. Una petición sin clave válida devuelve 401.
GET /v1/products/prd_rf5v0qjf15 HTTP/1.1
Host: data.loveoo.app
Authorization: Bearer ld_…
# o bien
X-API-Key: ld_…Primeros pasos
Paginación
Las listas se paginan con un cursor. Cada respuesta trae next_cursor: pásalo como cursor para pedir la página siguiente. Cuando vale null, no hay más.
limit fija los resultados por página (10 por defecto, hasta el tope de tu plan). Una búsqueda devuelve como máximo 10 páginas; para recorrer un catálogo entero, usa el catálogo de la tienda o las exportaciones CSV.
// Todo el catálogo de una tienda, página a página
const BASE = "https://data.loveoo.app";
const key = process.env.LOVEO_KEY;
const offers = [];
let cursor = null;
do {
const url = new URL("/v1/stores/str_6gqx689yzr/products", BASE);
url.searchParams.set("limit", "50");
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, {
headers: { Authorization: `Bearer ${key}` },
});
const page = await res.json();
offers.push(...page.results);
cursor = page.next_cursor;
} while (cursor);Primeros pasos
Límites y planes
Cada plan fija cuántas llamadas puedes hacer al mes y por minuto, cuántos resultados trae cada llamada y cuántas tiendas distintas puedes consultar al mes. Las cabeceras X-Quota-Limit y X-Quota-Remaining te dicen cuánto te queda.
| Prueba | Starter | Básico | Profesional | |
|---|---|---|---|---|
| Llamadas / mes | 100 | 10.000 | 50.000 | 250.000 |
| Llamadas / minuto | 5 | 20 | 60 | 300 |
| Resultados / llamada | 10 | 25 | 50 | 50 |
| Tiendas / mes | 50 | 300 | 2000 | Sin límite |
| Filas CSV / mes | — | — | — | 50.000 |
| Marcas seguidas | — | — | — | 10 |
Tiendas / mes: tiendas distintas que pueden aparecer en tus respuestas cada mes. Enterprise: límites a medida.
HTTP/1.1 200 OK
X-Quota-Limit: 10000
X-Quota-Remaining: 9874HTTP/1.1 429 Too Many Requests
Retry-After: 12
{ "error": { "code": "rate_limited",
"message": "too many calls per minute" } }Primeros pasos
Errores
Los errores usan los códigos HTTP habituales y un JSON con un code estable, pensado para tu código, y un message legible, pensado para ti.
| code | HTTP | Cuándo | Qué hacer |
|---|---|---|---|
| invalid_query | 400 | Falta un parámetro o está fuera de rango: sin texto ni categoría, radio de más de 5 km, texto de menos de 3 caracteres. | Lee message: dice qué falla. |
| unauthorized | 401 | Falta la clave o no es válida. | Revisa la cabecera o crea una clave nueva. |
| forbidden | 403 | La cuenta está suspendida o el endpoint no está en tu plan. | Escríbenos o cambia de plan. |
| not_found | 404 | El ID no existe o la tienda se ha retirado. | Vuelve a buscarlo. |
| rate_limited | 429 | Demasiadas llamadas por minuto. | Espera los segundos de Retry-After. |
| quota_exceeded | 429 | Has agotado las llamadas del mes. | Espera al mes siguiente o cambia de plan. |
| store_limit_reached | 429 | Has consultado el máximo de tiendas distintas del mes. | Espera al mes siguiente o cambia de plan. |
HTTP/1.1 400 Bad Request
{
"error": {
"code": "invalid_query",
"message": "radius_km must be 5 or less"
}
}Primeros pasos
Datos y frescura
captured_atdate- El día en que leímos ese precio en la web de la tienda. Releemos cada tienda cada 7 a 30 días y publicamos cambios cada noche.
source_urlstring- La página del producto en la propia tienda: cualquiera puede comprobar el dato.
price_eurnumber- En euros con IVA, tal como lo publica la tienda; si hay precio rebajado, el rebajado.
listed_in_stockboolean- Lo que la tienda publica como disponible, nunca disponibilidad en directo.
stores_countinteger- Comercios distintos que venden el producto: las tiendas de una cadena cuentan una vez.
locations_countcuenta tiendas físicas. match_methodstring- Cómo unimos las fichas de las tiendas, del vínculo más débil:
gtin(mismo código de barras),mpn(marca y referencia del fabricante),name(marca, título y formato),llm(títulos de una marca confirmados por una revisión con IA),manual(revisado a mano) osingle(una sola tienda). Trata un valor nuevo comoname. comparablebooleanfalsecuando las tiendas venden con un mismo nombre tamaños o variantes distintos (precios a más de 1,6 veces): el producto no tiene mediana ni comparación de precio.price_outlierboolean- En una oferta: mismo código de barras pero precio de otro formato (una miniatura, una caja). Se lista, pero no cuenta en las estadísticas de precio.
idstring- Opacos, estables y nunca secuenciales, con prefijo por tipo:
prd_,ofr_,str_,brd_. No los interpretes. name{ en, es }- Categorías y otras etiquetas vienen en inglés y español. La categoría puede ser
null: muchas tiendas no la publican.
Primeros pasos
Objetos
Tres objetos se repiten en todas las respuestas. Un producto agrupa las ofertas de varias tiendas; una oferta es la ficha de una tienda concreta.
idstring- ID del producto (
prd_…). namestring- Nombre del producto.
brandobject | nullidynamede la marca.categoryobject | nullslugynameen inglés y español.editionstring | null- Edición o formato cuando lo distingue de otros productos.
stores_countinteger- Comercios que lo venden.
locations_countinteger- Tiendas físicas que lo venden.
priceobjectmin,medianymaxen euros: un precio por comercio, el más barato.medianesnullsi el producto no es comparable.comparableboolean- Si las tiendas venden lo mismo y su precio se puede comparar.
{
"id": "prd_rf5v0qjf15",
"name": "Muga Crianza",
"brand": { "id": "brd_58jhqp8pj6", "name": "Muga" },
"category": { "slug": "food-drink",
"name": { "en": "Food & Drink", "es": "Comida y bebidas" } },
"edition": null,
"image_url": "https://…",
"stores_count": 8,
"locations_count": 13,
"price": { "min": 16.11, "median": 19.7, "max": 21.5 }
}Productos
Buscar productos
/v1/products/searchOfertas que coinciden con un texto cerca de un punto, ordenadas por relevancia y después por distancia, y los productos a los que pertenecen. Toda búsqueda necesita un texto o una categoría: no hay ningún endpoint que lo liste todo.
Parámetros de consulta
qstring- Texto que se busca en el nombre y la marca, al menos 3 caracteres. Obligatorio salvo que indiques
category. latnumber- Latitud del centro de la búsqueda. Con
lng; o usacity. lngnumber- Longitud del centro de la búsqueda.
radius_kmnumber- Radio en km alrededor del punto, hasta 5. Por defecto, 5.
citystring- Slug de la ciudad. Por defecto,
madrid(incluye su área metropolitana). categorystring- Slug de categoría, p. ej.
food-drink. max_pricenumber- Precio máximo en euros, IVA incluido, tal como se publica.
in_stockboolean- Solo ofertas que la tienda publica como disponibles.
limitnumber- Resultados por página. 10 por defecto, hasta el tope de tu plan.
cursorstring- El
next_cursorde la respuesta anterior.
curl -G https://data.loveoo.app/v1/products/search \
-H "Authorization: Bearer $LOVEO_KEY" \
--data-urlencode "q=muga crianza" \
-d lat=40.4169 \
-d lng=-3.7035 \
-d radius_km=5{
"products": [
{
"id": "prd_rf5v0qjf15",
"name": "Muga Crianza",
"brand": { "id": "brd_58jhqp8pj6", "name": "Muga" },
"category": { "slug": "food-drink",
"name": { "en": "Food & Drink", "es": "Comida y bebidas" } },
"edition": null,
"image_url": "https://vinopremier.com/…/1544760342.jpeg",
"stores_count": 8,
"locations_count": 13,
"price": { "min": 16.11, "median": 19.7, "max": 21.5 }
},
…
],
"results": [
{
"id": "ofr_0f8brqssfw",
"product_id": "prd_rf5v0qjf15",
"store": {
"id": "str_6gqx689yzr", "name": "La Caja de Vinos",
"district": "Centro", "city": "Madrid",
"lat": 40.4164, "lng": -3.7082, "distance_km": 0.4
},
"title": "Muga Crianza",
"price_eur": 19.5,
"listed_in_stock": true,
"captured_at": "2026-10-03",
"source_url": "https://lacajadevinos.com/?post_type=product&p=8514"
},
…
],
"total": 210,
"outside_radius": { "count": 3, "min_price": 18.5 },
"next_cursor": "eyJvIjogMTB9"
}Productos
Obtener un producto
/v1/products/{product_id}Un producto en todas las tiendas: marca, categoría, edición, cuántos comercios lo venden y su rango de precios. match_method dice cómo se unieron las fichas de las tiendas y other_editions enlaza formatos y añadas distintos.
Parámetros de ruta
product_idstringobligatorio- ID del producto, p. ej.
prd_rf5v0qjf15.
curl https://data.loveoo.app/v1/products/prd_rf5v0qjf15 \
-H "Authorization: Bearer $LOVEO_KEY"{
"product": {
"id": "prd_rf5v0qjf15",
"name": "Muga Crianza",
"brand": { "id": "brd_58jhqp8pj6", "name": "Muga" },
"category": { "slug": "food-drink", "name": { … } },
"edition": null,
"image_url": "https://vinopremier.com/…/1544760342.jpeg",
"stores_count": 8,
"locations_count": 13,
"price": { "min": 16.11, "median": 19.7, "max": 21.5 }
},
"offers_count": 8,
"other_editions": [
{ "id": "prd_zmtrse0yhw", "name": "Muga Crianza 37,5 cl" },
…
],
"match_method": "name"
}Productos
Comparar precios
/v1/products/{product_id}/pricesTodos los comercios que venden un producto en una ciudad, del más barato al más caro: una oferta por comercio (la más barata de sus tiendas) con sus otras ubicaciones, más el mínimo, la mediana, el máximo y la diferencia en porcentaje.
Parámetros de ruta
product_idstringobligatorio- ID del producto, p. ej.
prd_rf5v0qjf15.
Parámetros de consulta
citystring- Slug de la ciudad. Por defecto,
madrid(incluye su área metropolitana).
curl -G https://data.loveoo.app/v1/products/prd_rf5v0qjf15/prices \
-H "Authorization: Bearer $LOVEO_KEY" \
-d city=madrid{
"product": { "id": "prd_rf5v0qjf15", "name": "Muga Crianza", … },
"summary": {
"stores": 8, "locations": 13,
"min": 16.11, "median": 19.7, "max": 21.5,
"spread_pct": 33, "listed_in_stock": 8,
"min_store": "Bodega Santa Cecilia",
"max_store": "Barolo Spirits"
},
"offers": [
{
"id": "ofr_y22q5dhsny",
"product_id": "prd_rf5v0qjf15",
"store": { "id": "str_k5ty877qjj", "name": "Bodega Santa Cecilia",
"district": "Chamberí", "city": "Madrid", … },
"title": "MUGA CRIANZA 2022",
"price_eur": 16.11,
"listed_in_stock": true,
"captured_at": "2026-10-02",
"source_url": "https://santacecilia.es/?post_type=product&p=99169",
"other_locations": []
},
…
]
}Productos
Evolución del precio
/v1/products/{product_id}/historyEl precio de un producto a lo largo del tiempo en cada comercio que lo vende: una serie por comercio y un punto cada día que lo leímos con un precio nuevo. Disponible para productos de dos o más comercios; el historial empieza en junio de 2026.
Parámetros de ruta
product_idstringobligatorio- ID del producto, p. ej.
prd_rf5v0qjf15.
curl https://data.loveoo.app/v1/products/prd_rf5v0qjf15/history \
-H "Authorization: Bearer $LOVEO_KEY"{
"product": { "id": "prd_rf5v0qjf15", "name": "Muga Crianza", … },
"from": "2026-07-06",
"to": "2026-10-07",
"series": [
{
"store": { "id": "str_k5ty877qjj", "name": "Bodega Santa Cecilia" },
"points": [
{ "date": "2026-10-01", "price_eur": 16.11 }
]
},
{
"store": { "id": "str_b9bvtv0rm2", "name": "Bodegas Belmonte" },
"points": [
{ "date": "2026-08-03", "price_eur": 18.5 }
]
},
…
]
}Tiendas
Buscar tiendas
/v1/stores/searchTiendas por categoría o por nombre, cerca de un punto, en un distrito o en una ciudad, con su categoría principal, su número de productos y la distancia cuando indicas un punto.
Parámetros de consulta
qstring- Texto que se busca en el nombre de la tienda. O usa
category. categorystring- Slug de la categoría principal, p. ej.
food-drink. districtstring- Slug del distrito, p. ej.
centroosalamanca. latnumber- Latitud del centro de la búsqueda. Con
lng; o usacity. lngnumber- Longitud del centro de la búsqueda.
radius_kmnumber- Radio en km alrededor del punto, hasta 5. Por defecto, 5.
limitnumber- Resultados por página. 10 por defecto, hasta el tope de tu plan.
cursorstring- El
next_cursorde la respuesta anterior.
curl -G https://data.loveoo.app/v1/stores/search \
-H "Authorization: Bearer $LOVEO_KEY" \
-d category=food-drink \
-d district=centro{
"results": [
{
"id": "str_8f95k4gd7v",
"name": "El Rincón",
"district": "Centro",
"main_category": { "slug": "food-drink",
"name": { "en": "Food & Drink", "es": "Comida y bebidas" } },
"products_count": 311,
"distance_km": 0.1
},
…
],
"total": 17,
"next_cursor": "eyJvIjogM30"
}Tiendas
Obtener una tienda
/v1/stores/{store_id}El perfil público de empresa de una tienda y el resumen de su catálogo: productos con precio, cuántos publica como disponibles, precio medio, fecha de la última lectura y sus categorías principales.
Parámetros de ruta
store_idstringobligatorio- ID de la tienda, p. ej.
str_6gqx689yzr.
curl https://data.loveoo.app/v1/stores/str_6gqx689yzr \
-H "Authorization: Bearer $LOVEO_KEY"{
"store": {
"id": "str_6gqx689yzr",
"name": "La Caja de Vinos",
"address": "Calle de San Felipe Neri, Madrid",
"district": "Centro", "city": "Madrid",
"lat": 40.4164, "lng": -3.7082,
"website": "https://lacajadevinos.com",
"main_category": { "slug": "food-drink", "name": { … } },
"distance_from_sol_km": 0.4
},
"catalogue": {
"products": 207,
"listed_in_stock": 201,
"avg_price": 23.18,
"last_captured_at": "2026-10-03",
"categories": [
{ "slug": "pantry",
"name": { "en": "Pantry", "es": "Despensa" }, "count": 46 }
]
}
}Tiendas
Catálogo de una tienda
/v1/stores/{store_id}/productsLos productos que publica una tienda, paginados y filtrables por categoría. Cada elemento es una oferta, con su imagen y su categoría cuando la tienda la publica.
Parámetros de ruta
store_idstringobligatorio- ID de la tienda, p. ej.
str_6gqx689yzr.
Parámetros de consulta
categorystring- Solo productos de este slug de categoría.
limitnumber- Resultados por página. 10 por defecto, hasta el tope de tu plan.
cursorstring- El
next_cursorde la respuesta anterior.
curl -G https://data.loveoo.app/v1/stores/str_6gqx689yzr/products \
-H "Authorization: Bearer $LOVEO_KEY" \
-d limit=2{
"results": [
{
"id": "ofr_r40whtks93",
"product_id": "prd_amv615e4v2",
"store": { "id": "str_6gqx689yzr", "name": "La Caja de Vinos", … },
"title": "DOMINIO DE ATAUTA",
"price_eur": 29.9,
"listed_in_stock": true,
"captured_at": "2026-08-02",
"source_url": "https://lacajadevinos.com/?post_type=product&p=13782",
"image_url": "https://lacajadevinos.com/…/DOMINIO-DE-ATAUTA.jpg",
"category": null
},
…
],
"total": 207,
"next_cursor": "eyJvIjogMn0"
}Marcas
Buscar marcas
/v1/brands/searchLas marcas cuyo nombre coincide con tu texto, con cuántas ofertas y tiendas las tienen. No hay ningún endpoint que liste todas las marcas.
Parámetros de consulta
qstringobligatorio- Texto a buscar en el nombre de la marca, al menos 2 caracteres.
limitnumber- Resultados por página. 10 por defecto, hasta el tope de tu plan.
curl -G https://data.loveoo.app/v1/brands/search \
-H "Authorization: Bearer $LOVEO_KEY" \
-d q=cerave{
"results": [
{ "id": "brd_jnf30hasd7", "name": "CeraVe",
"offers": 82, "stores": 5 }
]
}Marcas
Dónde se vende una marca
/v1/brands/{brand_id}Todas las tiendas de la ciudad que tienen una marca: cuántos de sus productos tiene cada una, cuántos publica como disponibles, su rango de precios y cuándo lo leímos. Además, los totales, la dispersión de precios y el reparto por distrito.
Parámetros de ruta
brand_idstringobligatorio- ID de la marca, p. ej.
brd_jnf30hasd7.
Parámetros de consulta
limitnumber- Resultados por página. 10 por defecto, hasta el tope de tu plan.
cursorstring- El
next_cursorde la respuesta anterior.
curl -G https://data.loveoo.app/v1/brands/brd_jnf30hasd7 \
-H "Authorization: Bearer $LOVEO_KEY" \
-d limit=3{
"brand": { "id": "brd_jnf30hasd7", "name": "CeraVe" },
"offers": 82,
"listed_in_stock": 82,
"stores_count": 5,
"price": { "min": 5.95, "median": 17.92, "max": 27.95 },
"districts": [
{ "district": "Centro", "stores": 2, "offers": 47 },
{ "district": "Ciudad Lineal", "stores": 1, "offers": 15 },
…
],
"stores": [
{
"id": "str_nmvg6sx7br", "name": "Farma Smart",
"district": "Centro", "city": "Madrid",
"offers": 31, "listed_in_stock": 31,
"price": { "min": 6.0, "max": 26.95 },
"captured_at": "2026-10-06"
},
…
],
"next_cursor": "eyJvIjogM30"
}Exportaciones CSVProfesional
Exportar el catálogo de una tienda
/v1/exports/stores/{store_id}.csvTodo el catálogo de una tienda en un CSV, una fila por oferta, con filtro opcional por categoría. Las filas cuentan contra el cupo mensual de exportación de tu plan; hasta 20.000 filas por archivo.
Parámetros de ruta
store_idstringobligatorio- ID de la tienda, p. ej.
str_6gqx689yzr.
Parámetros de consulta
categorystring- Solo productos de este slug de categoría.
curl https://data.loveoo.app/v1/exports/stores/str_6gqx689yzr.csv \
-H "Authorization: Bearer $LOVEO_KEY" \
-o la-caja-de-vinos.csvoffer_id,product_id,title,brand,category,store_id,store_name,district,city,price_eur,regular_price_eur,listed_in_stock,captured_at,source_url,gtin
ofr_r40whtks93,prd_amv615e4v2,DOMINIO DE ATAUTA,,,str_6gqx689yzr,La Caja de Vinos,Centro,Madrid,29.90,,true,2026-08-02,https://lacajadevinos.com/…,
ofr_pcfs6f4pez,prd_wfbd1a7eg2,DEMUERTE,,,str_6gqx689yzr,La Caja de Vinos,Centro,Madrid,8.90,,true,2026-05-08,https://lacajadevinos.com/…,
…Exportaciones CSVProfesional
Exportar las ofertas de una marca
/v1/exports/brands/{brand_id}.csvTodas las ofertas de una marca en la ciudad en un CSV: tienda, precio, stock publicado, fecha de lectura, enlace y código de barras cuando la tienda lo publica.
Parámetros de ruta
brand_idstringobligatorio- ID de la marca, p. ej.
brd_jnf30hasd7.
curl https://data.loveoo.app/v1/exports/brands/brd_jnf30hasd7.csv \
-H "Authorization: Bearer $LOVEO_KEY" \
-o cerave.csvoffer_id,product_id,title,brand,category,store_id,store_name,district,city,price_eur,regular_price_eur,listed_in_stock,captured_at,source_url,gtin
ofr_0ed4wcyd6b,prd_d65psgqjp1,CERAVE GEL LIMPIADOR ESPUMOSO 236 ML,CeraVe,beauty,str_nmvg6sx7br,Farma Smart,Centro,Madrid,10.71,,true,2026-10-02,https://www.farmasmart.es/…,
…Seguimiento de marcaProfesional
Marcas seguidas
/v1/watchesLas marcas que sigues, desde cuándo y la fecha de su último cambio, con el máximo que permite tu plan.
Sin parámetros.
curl https://data.loveoo.app/v1/watches \
-H "Authorization: Bearer $LOVEO_KEY"{
"watches": [
{ "brand": { "id": "brd_jnf30hasd7", "name": "CeraVe" },
"since": "2026-10-01", "last_alert": "2026-10-06" }
],
"limit": 10
}Seguimiento de marcaProfesional
Seguir una marca
/v1/watches/{brand_id}Cada noche comparamos dónde se vende la marca con la noche anterior y te enviamos los cambios por correo: tiendas nuevas, tiendas que dejan de tenerla, bajadas o subidas del precio mínimo de un 2 % o más, y stock que se agota o vuelve. DELETE deja de seguirla.
Parámetros de ruta
brand_idstringobligatorio- ID de la marca, p. ej.
brd_jnf30hasd7.
curl -X PUT https://data.loveoo.app/v1/watches/brd_jnf30hasd7 \
-H "Authorization: Bearer $LOVEO_KEY"
# stop tracking
curl -X DELETE https://data.loveoo.app/v1/watches/brd_jnf30hasd7 \
-H "Authorization: Bearer $LOVEO_KEY"{ "brand_id": "brd_jnf30hasd7", "tracking": true }Seguimiento de marcaProfesional
Cambios de una marca
/v1/watches/{brand_id}/alertsLos cambios detectados en una marca que sigues, del más reciente al más antiguo: una entrada por noche con cambios.
Parámetros de ruta
brand_idstringobligatorio- ID de la marca, p. ej.
brd_jnf30hasd7.
Parámetros de consulta
limitnumber- Cuántas noches con cambios devolver. 10 por defecto, hasta 50.
curl https://data.loveoo.app/v1/watches/brd_jnf30hasd7/alerts \
-H "Authorization: Bearer $LOVEO_KEY"{
"brand_id": "brd_jnf30hasd7",
"alerts": [
{
"day": "2026-10-06",
"changes": [
{ "kind": "new_store", "store_id": "str_…", "store_name": "…",
"after": { "offers": 12, "min_price": 9.95 } },
{ "kind": "price_down", "store_id": "str_…", "store_name": "…",
"before": 17.5, "after": 15.95 }
]
}
]
}Más
Cambios en la API
Dentro de la v1 solo añadimos campos y endpoints. Cualquier cambio incompatible irá en una versión nueva o se avisará a los clientes con 30 días de antelación.
Nuevos campos
comparableen el producto yprice_outlieren la oferta. Los tamaños y formatos distintos (botella y mágnum, sobre y caja) ya no se agrupan como un solo producto.Las medianas de precio de una marca se redondean a céntimos.
Nuevo endpoint de evolución del precio.
match_methodañadempnyllm: más productos comparados entre tiendas.Lanzamiento de la API v1: productos, tiendas, marcas, exportaciones CSV y seguimiento de marca.
¿Te falta algo?
Escríbenos a hola@loveoo.app con lo que quieres construir: te contestamos personas, y la API crece con lo que nos pedís.