Vinted APIvinted.de ↗
Access Vinted.de listings via API. Search by keyword, price, brand, and category. Retrieve full product details including condition, color, and seller info.
What is the Vinted API?
The Vinted.de API exposes 2 endpoints for searching and retrieving secondhand product listings from the German Vinted marketplace. The search_products endpoint returns up to 96 items per page, each including price, brand, size, condition, photos, seller info, and engagement metrics. The get_item_detail endpoint provides granular data per listing: full description, color, category, and condition.
curl -X GET 'https://api.parse.bot/scraper/16ff8198-b96a-4b20-912b-c81c74b39bc7/search_products?page=1&order=relevance&query=Nike&per_page=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace vinted-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Vinted SDK — search the marketplace, filter by price and brand."""
from parse_apis.vinted_product_search_api import Vinted, Sort, SearchFailed
client = Vinted()
# Search for Nike products sorted by price, capped at 5 total items.
for product in client.catalogs.search(query="Nike", order=Sort.PRICE_LOW_TO_HIGH, limit=5):
print(product.title, product.price, product.currency, product.size)
# Drill-down: take one result and inspect seller info.
product = client.catalogs.search(query="Adidas shoes", limit=1).first()
if product:
print(product.title, product.total_price, product.status)
print(product.user.login, product.user.business)
# Typed error handling around a search call.
try:
results = client.catalogs.search(query="vintage jacket", price_from="10", price_to="50", limit=3)
for item in results:
print(item.brand, item.title, item.favourite_count)
except SearchFailed as exc:
print(f"Search failed: {exc}")
print("exercised: catalogs.search with sort / price filters / seller access")
Search or browse the Vinted catalog. Returns product listings with price, brand, size, condition, photos, seller info, and engagement metrics. Supports pagination, price range filters, sorting, and category/brand filtering. Results are capped at 960 total entries by the upstream API regardless of actual catalog depth.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). |
| order | string | Sort order for results. |
| query | string | Search text to find products (e.g., 'Nike shoes'). Leave empty to browse all listings. |
| per_page | integer | Number of results per page (max 96). |
| price_to | string | Maximum price filter in EUR. |
| brand_ids | string | Comma-separated brand IDs to filter by. |
| price_from | string | Minimum price filter in EUR. |
| catalog_ids | string | Comma-separated catalog/category IDs to filter by. |
{
"type": "object",
"fields": {
"items": "array of product objects with id, title, url, price, currency, service_fee, total_price, brand, size, status, promoted, favourite_count, view_count, main_photo, photo_urls, and user info",
"per_page": "integer, number of results per page",
"total_pages": "integer, total number of pages available",
"current_page": "integer, current page number",
"total_entries": "integer, total number of matching entries"
},
"sample": {
"data": {
"items": [
{
"id": 9074370874,
"url": "https://www.vinted.de/items/9074370874-nike-pullover",
"size": "S / 36 / 8",
"user": {
"id": 46388594,
"login": "marit_ply",
"business": false,
"profile_url": "https://www.vinted.de/member/46388594-maritply"
},
"brand": "Nike",
"price": "5.0",
"title": "Nike Pullover",
"status": "Gut",
"currency": "EUR",
"promoted": true,
"main_photo": "https://images1.vinted.net/t/05_00fa6_example/f800/1780473927.webp",
"photo_urls": [
"https://images1.vinted.net/t/05_00fa6_example/f800/1780473927.webp"
],
"view_count": 0,
"service_fee": "0.95",
"total_price": "5.95",
"favourite_count": 15
}
],
"per_page": 3,
"total_pages": 320,
"current_page": 1,
"total_entries": 960
},
"status": "success"
}
}About the Vinted API
Search and Browse Listings
The search_products endpoint accepts a free-text query (e.g. 'Adidas Jacke') alongside structured filters: price_from and price_to in EUR, brand_ids as comma-separated IDs, and catalog_ids to narrow by category. Results are paginated via page and per_page (max 96 per page), and sortable with the order parameter using values like newest_first, price_low_to_high, or relevance. Each item in the response carries id, title, url, price, currency, service_fee, total_price, brand, size, status, promoted, and favourite_count. The pagination object in the response exposes current_page, total_pages, total_entries, and per_page for reliable cursor management.
Product Detail Retrieval
The get_item_detail endpoint accepts either an item_id (numeric string) or a full item_path such as /items/123456789-nike-air-max. The item_path format is returned directly in search_products results, making it straightforward to chain the two endpoints. The detail response includes name, brand, color, image, price, currency, category, condition, and description — fields absent from the search result objects.
Data Coverage
All pricing fields are denominated in EUR, reflecting Vinted.de's German marketplace. The service_fee and total_price fields in search results allow downstream applications to display buyer-facing costs without extra calculation. Condition is returned as a string (e.g. 'Sehr gut' / 'Neu mit Etikett') as shown on the listing itself.
The Vinted API is a managed, monitored endpoint for vinted.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when vinted.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official vinted.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price tracker for specific brands using
brand_idsandprice_from/price_tofilters insearch_products - Aggregate secondhand fashion inventory by category using
catalog_idsto power a resale comparison tool - Monitor new listings for a keyword with
order: newest_firstand paginate through results using thepaginationobject - Enrich search results with full item descriptions and color data by chaining
get_item_detailusingitem_pathfrom search output - Calculate true buyer cost by exposing
service_feeandtotal_pricealongside the basepriceper listing - Build a condition-based filter layer using the
conditionfield fromget_item_detailfor buyers who only want near-new items
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Vinted have an official public developer API?+
What does `search_products` return beyond the item price?+
service_fee and total_price in addition to the base price, so you can display buyer-facing totals directly. It also returns brand, size, status, promoted, and favourite_count per listing. Full description and color are only available via get_item_detail.How do I get detailed fields like color and description from a search result?+
search_products response includes a url field (and implicitly the item path) for each listing. Pass that path as item_path to get_item_detail to retrieve color, description, category, condition, and the full image URL.Does the API cover seller profiles or transaction/review data?+
search_products and item-level detail via get_item_detail, including seller info embedded in search results. Standalone seller profiles, feedback scores, and transaction history are not exposed as separate endpoints. You can fork this API on Parse and revise it to add a seller profile endpoint.Is pagination reliable for large result sets?+
pagination object returns total_pages and total_entries so you can determine the full result set size before iterating. The per_page parameter caps at 96 per request. For very broad queries, total_entries can be large; apply catalog_ids or brand_ids filters to narrow results to a manageable set.