Documentación
Guía rápida
Todo lo necesario para hacer tu primera consulta en cinco minutos. La API es de solo lectura y responde en JSON. URL base:
https://marketscrap.myp.com.es/api/v1Autenticación
Crea una clave en tu panel. Empieza por msd_ y solo se muestra una vez: guárdala en un gestor de secretos o en una variable de entorno. Envíala en cada petición con la cabecera:
Authorization: Bearer msd_…No uses la clave en código que se ejecute en el navegador de tus usuarios: cualquiera podría leerla y gastar tus créditos. Si se filtra, revócala en el panel y crea otra.
Primera consulta
La consulta más habitual: el último precio de una ficha de producto.
curl -G "https://marketscrap.myp.com.es/api/v1/ofertas" \
-H "Authorization: Bearer $MSD_CLAVE" \
--data-urlencode "url=https://www.mediamarkt.es/es/product/_lavadora-ejemplo-8-kg-0000000.html"Respuesta (datos ficticios):
{
"url": "https://mediamarkt.es/es/product/_lavadora-ejemplo-8-kg-0000000.html",
"canal": "mediamarkt",
"pais": "ES",
"capturado_en": "2026-10-08T07:12:03Z",
"edad_s": 5400,
"lector": "mediamarkt@1.4",
"sospechosa": false,
"fuente": "compartido",
"oferta": {
"titulo": "Lavadora de ejemplo 8 kg 1400 rpm",
"precio": 449.0,
"precio_tachado": 599.0,
"moneda": "EUR",
"disponible": true,
"ean": "0000000000000",
"marca": "Marca Ejemplo",
"modelo": "EJ-8140",
"vendedor": "MediaMarkt",
"precio_unidad": null,
"unidad": null,
"categoria": "Lavadoras",
"imagen": "https://…/ejemplo.jpg",
"atributos": { "capacidad_kg": 8, "clase_energetica": "A" }
}
}edad_s son los segundos desde que se leyó el precio. sospechosa se marca cuando el precio ha cambiado más de un 60 % respecto a la lectura anterior en menos de 24 horas: no se descarta, pero conviene revisarlo. Los campos que la tienda no publica llegan a null.
Endpoints
| Ruta | Qué devuelve | Créditos |
|---|---|---|
GET /ofertas?url= | Última oferta leída de una URL de producto.
| 1 |
GET /ofertas?ean= | Lista con la última oferta del EAN en cada canal donde lo leemos.
| 2 |
GET /historico | Serie de precios, del más antiguo al más reciente (por defecto, 90 días; máx. 5.000 puntos).
| 5 |
GET /enlaces?ean= | URLs conocidas de un EAN, con su canal y cuándo se vieron.
| 2 |
GET /canales | Cobertura: canales, URLs, frescura media y países de cada uno.
| Gratis |
GET /cuenta | Tu saldo, el consumo del mes, tu límite por minuto y las tarifas. | Gratis |
Los costes vigentes están en Precios y en GET /cuenta.
curl -G "https://marketscrap.myp.com.es/api/v1/ofertas" \
-H "Authorization: Bearer $MSD_CLAVE" \
--data-urlencode "ean=0000000000000" \
--data-urlencode "max_edad_h=24"Errores
Los errores devuelven un código HTTP estándar y un cuerpo {"detail": "…"} con la causa.
| Código | Significado | Qué hacer |
|---|---|---|
| 400 / 422 | Parámetros incorrectos | Revisa la consulta: falta url o ean, o un valor no es válido. |
| 401 | Sin autenticar | Falta la clave, está mal escrita o se ha revocado. |
| 402 | Saldo insuficiente | Recarga créditos desde el panel. No se cobra (tampoco cuenta como consulta sin dato). |
| 403 | No permitido | La clave no puede usar esa ruta (por ejemplo, una de escritura). |
| 404 | No encontrado | No tenemos ese dato o es más viejo que max_edad_h. No se cobra, salvo 1 de cada 10 consultas sin dato (mira X-Consultas-Sin-Dato-Hasta-Cobro). |
| 429 | Demasiadas peticiones | Has superado el límite por minuto. Espera lo que diga Retry-After. |
| 5xx | Error del servicio | Reintenta con espera exponencial; si persiste, avísanos. |
Límites y cabeceras
Cada cuenta tiene un número máximo de peticiones por minuto (lo ves en tu panel y en GET /cuenta). Todas las respuestas incluyen:
X-RateLimit-Limit: peticiones permitidas por minuto.X-RateLimit-Remaining: las que te quedan en el minuto actual.X-RateLimit-Reset: segundos hasta que se reinicia el contador.X-Creditos-Restantes: tu saldo después de esta petición.X-Consultas-Sin-Dato-Hasta-Cobro: solo en consultas sin dato (404 o lista vacía): cuántas consultas sin dato faltan para la siguiente que se cobra (1 = la próxima).Retry-After: solo en 429: segundos que debes esperar.
Buenas prácticas
- Usa
max_edad_hpara no pagar por datos más viejos de lo que tu caso necesita. - Si buscas el mismo producto en varias tiendas, una consulta por EAN (2 créditos) suele salir más a cuenta que varias por URL.
- Guarda en tu lado lo que ya has consultado: el dato no cambia hasta la siguiente lectura (mira
capturado_en). - Ante 429 o 5xx, reintenta con espera; nunca en un bucle sin pausa.
- Consulta
GET /canales(gratis) antes de preguntar por tiendas que quizá no leemos: las consultas sin dato no se cobran, salvo 1 de cada 10, para evitar consultas masivas a ciegas. Lo que nos pedís y no tenemos nos ayuda a decidir qué webs añadir. - Si vigilas varios países, pasa
pais(ISO 3166-1 alfa-2: ES, PT, FR…). Una misma tienda puede servir varios países con la misma URL y precios distintos: cada oferta es de una URL y un país, con su moneda. Sinpais, España. - Usa una clave por aplicación: si una se filtra, revocas solo esa.
Referencia OpenAPI
El esquema completo, con todos los campos y tipos, está publicado en formato OpenAPI. Puedes explorarlo aquí o importarlo en Postman, Insomnia o tu generador de clientes.