API de Vinted: anuncios y precios de vinted.es en JSON
Para leer su catálogo desde código, Vinted no ofrece ninguna API pública. Esta interfaz lee vinted.es como lo vería cualquier visitante sin iniciar sesión y devuelve en JSON título, marca, talla, estado, precio en euros y fotos de cada anuncio. El precio llega por partida doble: el que pone el vendedor y el total que paga el comprador con la tarifa de Protección al comprador ya sumada. Conviene aclararlo para quien vende como Vinted Pro: con esto no se publican artículos ni se tramitan pedidos. Es la vista del comprador, limitada a anuncios y perfiles públicos.
Endpoints
| endpoint | Qué devuelve | Obligatorios |
|---|---|---|
| catalog_search | Búsqueda por texto y filtros (categoría, talla, color, marca, rango de precio). Cuatro ordenaciones: más recientes, relevancia y precio en ambos sentidos; hasta 96 anuncios por página. Cada fila trae `price`, `total_item_price` y `service_fee` por separado. | todos opcionales |
| item_detail | Todo lo publicado en un anuncio, pedido por id o por URL: descripción, todas las fotos, categoría, color, atributos con su etiqueta en español (Tamaño, Estado, Subido) y si está reservado o se puede comprar al momento. | todos opcionales |
| seller | Lo que muestra la página de un vendedor: valoración, número de opiniones positivas, neutras y negativas, artículos a la venta y país (`country_code`). | id |
| seller_items | El armario del vendedor: lo que tiene publicado ahora, con fecha de subida, visitas, favoritos y si está reservado o cerrado. | id |
| seller_feedback | Las opiniones que ha recibido un vendedor: texto, puntuación y fecha, página a página. | id |
| categories | El árbol de categorías de vinted.es con nombres en español (Mujer › Ropa › Abrigos y cazadoras…) y el id que acepta catalog_search. | todos opcionales |
| sizes | Los grupos de tallas con sus ids, tal como los usa el filtro `size_ids` (XS / 34 / 6, 36, 24-36 meses / 92 cm…). | todos opcionales |
| colors | Los colores con id y código hexadecimal, para `color_ids`. | todos opcionales |
| countries | Los países de Vinted con su código ISO y su moneda. | todos opcionales |
Cada llamada se cobra en créditos. Las llamadas fallidas y bloqueadas son gratuitas.
Ejemplo que funciona
En vinted.es la búsqueda cruza fronteras. De las 20 chaquetas vaqueras más recientes, 10 tenían el título en español; las otras estaban en portugués, italiano, francés o neerlandés. Como todas tienen el precio en euros, la moneda no delata nada: si necesitas solo vendedores de España, el `country_code` está en `seller`, no en la fila de búsqueda. Fíjate también en la diferencia entre `price` y `total_item_price`: en esta muestra la tarifa fue de 1 € sobre 6 € y de 2,20 € sobre 30 €.
curl -X POST https://api.reefapi.com/vinted/v1/catalog_search \
-H "x-api-key: TU_CLAVE" \
-H "content-type: application/json" \
-d '{"query": "chaqueta vaquera", "tld": "es", "per_page": 20, "order": "newest_first"}'{
"ok": true,
"data": {
"items": [
...
{
"id": 10524989021,
"title": "Chaqueta vaquera Pull&Bear talla M",
"url": "/items/10524989021-chaqueta-vaquera-pullbear-talla-m",
"price": { "amount": 15.0, "currency": "EUR" },
"total_item_price": { "amount": 16.45, "currency": "EUR" },
"service_fee": { "amount": 1.45, "currency": "EUR" },
"brand": "Pull & Bear",
"size": "M",
"condition": "Muy bueno",
"uploaded_ts": null,
"promoted": false
},
...
{
"id": 10524990535,
"title": "Blusão de ganga",
"price": { "amount": 30.0, "currency": "EUR" },
"total_item_price": { "amount": 32.2, "currency": "EUR" },
"service_fee": { "amount": 2.2, "currency": "EUR" },
"brand": "Cheyenne",
"size": "S",
"condition": "Muy bueno"
},
{
"id": 10524988247,
"title": "Giubbino jeans bambina/o",
"price": { "amount": 6.0, "currency": "EUR" },
"total_item_price": { "amount": 7.0, "currency": "EUR" },
"service_fee": { "amount": 1.0, "currency": "EUR" },
"brand": "United Colors of Benetton",
"size": "8 años / 128 cm",
"condition": "Muy bueno"
},
...
],
"pagination": { "current_page": 1, "per_page": 20, "total_entries": 960, "total_pages": 48 },
"tld": "es"
},
"meta": {
"record_count": 20,
"cache_hit": false,
"mode": "live",
"tld": "es",
"total_entries": 960,
"window_cap": 960,
"warnings": ["source_fields_unavailable: uploaded_ts, seller.login, seller.profile_url, is_visible, stats_visible, view_count, is_reserved, ..."]
}
}Hacer scraping de Vinted: tres trampas que no dan error
La página de catálogo de Vinted no entrega un JSON limpio. En octubre de 2026 comprobamos que rellena los campos que no tiene con el texto literal "$undefined": en una página de 96 productos, dos campos venían así en todos ellos. Un scraper que guarda lo que encuentra acaba con esa cadena en la base de datos como si fuera un valor. Aquí ese texto se descarta y el campo llega vacío.
La segunda es la búsqueda que no encuentra nada. Vinted no siempre devuelve una página vacía: una cadena inventada que probamos trajo 96 artículos y un total de 123, porque la web completa la cuadrícula con otros anuncios. Una búsqueda que de verdad no tenía resultados volvió con un total de 0 y sin filas, y eso es una respuesta válida, no una avería. Nuestra primera versión la trataba como error; lo corregimos en octubre de 2026, al ver fallar precisamente una consulta así.
La tercera llegó con un cambio de la web en septiembre de 2026: en la nueva ruta de búsqueda, los filtros enviados con el formato antiguo (`brand_ids[]=`) se ignoraban sin avisar y volvía la lista sin filtrar. Desde fuera parece que todo funciona.
Para un vistazo puntual a los precios de una marca, un script propio cumple. Si guardas datos cada día, lo que te interesa es enterarte el mismo día en que Vinted cambia el formato, no un mes después al revisar unas medias que no cuadran.
Más documentación en español
- Mercadona API — documentación
- MercadoLibre API — documentación
- Idealista API — documentación
- Wallapop API — documentación
- Falabella API — documentación
- Fotocasa API — documentación
- Coches.net API — documentación
- AutoScout24 API — documentación
- Milanuncios API — documentación
- API de Amazon.es — documentación
- idealo.es API — documentación
Límites y notas honestas
- Esta API no es de Vinted ni se ofrece en colaboración con Vinted; no hay ningún acuerdo entre ambas partes.
- Sin `"tld": "es"` la consulta va a vinted.fr, que es el valor por defecto.
- Varios endpoints auxiliares fallan ahora mismo (medido el 25 de octubre de 2026, dos o tres intentos cada uno): `autocomplete` y `conditions` devuelven UPSTREAM_HTTP, `catalog_filters` NOT_FOUND y `similar` TARGET_BLOCKED. `brand_search` responde, pero ignora el texto: con «pull», «pull & bear» o «nike» devolvió siempre la misma lista de 12 marcas. Por eso no aparecen en la tabla de arriba. Mientras dure, el filtro `brand_ids` solo sirve con esas 12 marcas o con ids que ya tengas: ni la fila de búsqueda ni `item_detail` traen ahora `brand_id`.
- Por cada combinación de filtros Vinted no da más de 960 resultados (`total_entries` se queda en 960). Para llegar más lejos, acota la búsqueda por categoría, talla o precio.
- La fila de búsqueda no trae fecha de subida, visitas ni estado de reserva: esos campos llegan en null y se enumeran en `meta.warnings`. `seller_items` sí los trae, pero solo para el armario de un vendedor.
- En `item_detail` el estado llega en formato schema.org (`UsedCondition`) y `url` en null; la etiqueta en español («Muy bueno») está en `attributes`.
- El gasto de envío no aparece en ninguna respuesta. `total_item_price` suma la tarifa de Protección al comprador, no el envío.
- Si la consulta no coincide con nada, Vinted puede rellenar la página con otros anuncios y la API los entrega tal como llegan; conviene comprobar que los títulos tienen algo que ver con lo buscado.
- No servimos respuestas guardadas de llamadas anteriores: en nuestras pruebas `cache_hit` fue siempre false.