Vinted APIvinted.com ↗
Fetch Vinted user profiles with wardrobe listings, or search active items by keyword. Returns prices, condition, photos, and pagination metadata.
What is the Vinted API?
The Vinted API provides 2 endpoints covering user profiles and catalogue search on vinted.com. The get_user_profile endpoint returns a member's profile details alongside their active wardrobe listings, while search_listings lets you query Vinted's active inventory by free-text keyword and retrieve up to 96 results per page, each with pricing, condition, images, and direct listing URLs.
curl -X GET 'https://api.parse.bot/scraper/5bc56f4f-c3b0-4879-9415-3b4bb2995509/get_user_profile?user=strwbrrycakee' \ -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-com-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 listings, view profiles, browse wardrobes."""
from parse_apis.vinted_com_api import Vinted, UserNotFound
client = Vinted()
# Search for listings by keyword, capped at 5 results.
for listing in client.listings.search(query="nike hoodie", limit=5):
print(listing.title, listing.price, listing.currency, listing.brand)
# Drill into the first search result's seller profile.
hit = client.listings.search(query="vintage denim jacket", limit=1).first()
if hit is not None:
try:
profile_data = client.user_profiles.get(user=hit.seller_username)
except UserNotFound:
print("Seller no longer exists")
else:
user = profile_data.profile
print(user.username, user.city, user.country)
print("Feedback:", user.positive_feedback_count, "positive,", user.negative_feedback_count, "negative")
print("Verified email:", user.verification.email)
# Browse the seller's full wardrobe with pagination.
for item in client.user_listings.list(user=hit.seller_username, limit=10):
print(item.title, item.price, item.currency, item.size)
print("exercised: listings.search / user_profiles.get / user_listings.list")Fetch a Vinted member's profile information and their current active wardrobe listings. Accepts a Vinted username, numeric user ID, or full profile URL (e.g. https://www.vinted.com/member/12345-username). Returns the user's profile details (location, feedback, verification status) and a paginated list of their wardrobe items with id, title, price, currency, URLs, images, brand, size, and status. Makes two upstream requests per call: one for the user profile and one for the wardrobe page. Pagination is controlled by page and per_page parameters; omitting them returns the first 20 items.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for wardrobe listings pagination. |
| userrequired | string | Vinted member identifier. Accepts a username (e.g. 'strwbrrycakee'), a numeric user ID (e.g. '3180501945'), or a full Vinted profile URL (e.g. 'https://www.vinted.com/member/3180501945-strwbrrycakee'). |
| per_page | integer | Number of wardrobe listings per page. Maximum 96. |
{
"type": "object",
"fields": {
"profile": "User profile object containing user_id, username, profile_url, photo_url, about, city, country_code, country, item_count, followers_count, following_count, feedback stats, verification status, and online/business flags",
"listings": "Array of active wardrobe listing objects, each with id, title, price, currency, url, image_url, thumbnail_url, status (condition), brand, size, favourite_count, is_reserved, and is_closed",
"pagination": "Pagination metadata with current_page, total_pages, total_entries, and per_page"
},
"sample": {
"data": {
"profile": {
"city": "Powder Springs",
"about": "Affordable toddler boy clothes & some women clothes as well!",
"country": "United States",
"user_id": 3180501945,
"username": "strwbrrycakee",
"is_online": false,
"photo_url": "https://images1.vinted.net/t/06_01238_nKbfkJ1VVkh5EGZ9Hfbj3jtQ/f800/1787949423.jpeg",
"item_count": 9,
"is_business": false,
"profile_url": "https://www.vinted.com/member/3180501945-strwbrrycakee",
"country_code": "US",
"verification": {
"email": true,
"google": true,
"facebook": false
},
"feedback_count": 0,
"last_logged_on": "2026-09-01T10:37:59-06:00",
"followers_count": 0,
"following_count": 0,
"feedback_reputation": 0,
"neutral_feedback_count": 0,
"negative_feedback_count": 0,
"positive_feedback_count": 0
},
"listings": [
{
"id": 9856996732,
"url": "https://www.vinted.com/items/9856996732-gap-collared-shirt",
"size": "3T/3",
"brand": "GAP",
"price": "2.0",
"title": "Gap collared shirt",
"status": "Very good",
"currency": "USD",
"image_url": "https://images1.vinted.net/t/02_00311_54941uFApMooe9C1Y1ZfY5yS/f800/1788283217.jpeg",
"is_closed": false,
"is_reserved": false,
"thumbnail_url": "https://images1.vinted.net/t/02_00311_54941uFApMooe9C1Y1ZfY5yS/310x430/1788283217.jpeg",
"favourite_count": 0
}
],
"pagination": {
"per_page": 20,
"total_pages": 1,
"current_page": 1,
"total_entries": 9
}
},
"status": "success"
}
}About the Vinted API
User Profiles and Wardrobe Listings
The get_user_profile endpoint accepts a Vinted username (e.g. strwbrrycakee), a numeric user ID (e.g. 3180501945), or a full profile URL. The profile object in the response includes user_id, username, profile_url, photo_url, about, city, country_code, country, item_count, and follower-related fields. Alongside the profile, the listings array returns that member's currently active wardrobe items, each carrying id, title, price, currency, url, image_url, thumbnail_url, and status (item condition). Pagination is controlled via the page and per_page parameters, with a maximum of 96 listings per page, and the pagination field in the response reports current_page, total_pages, total_entries, and per_page.
Searching Active Listings
The search_listings endpoint takes a query string matched against listing titles, brands, and descriptions on Vinted. Each result object includes id, title, price, total_price (the buyer-facing amount including any fees), currency, url, and image fields. Results are ordered by Vinted's own relevance ranking. The total_entries figure in the pagination object is site-reported and capped at 960, so deep pagination beyond that point is not available. Like the profile endpoint, per_page tops out at 96.
Data Coverage Notes
Both endpoints reflect only currently active listings — sold, reserved, or removed items do not appear. The search_listings endpoint returns the query string as applied (trimmed) in the response, which is useful for confirming how multi-word or whitespace-heavy queries were interpreted. The total_price field distinguishes the seller-set listing price from the total the buyer would pay, which matters for any price-comparison or market-rate analysis.
The Vinted API is a managed, monitored endpoint for vinted.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when vinted.com 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.com 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?+
- Track a reseller's active inventory by polling
get_user_profileon a schedule and diffing thelistingsarray - Monitor listing prices for a specific brand or item type using
search_listingswith targeted keywords - Compare
pricevstotal_priceacross search results to understand buyer cost versus seller ask - Build a wardrobe analytics tool that aggregates
item_count, location, and feedback from multiple user profiles - Alert on new listings matching a keyword by comparing
idfields across periodicsearch_listingscalls - Aggregate geographic supply data by collecting
countryandcityfields from seller profiles returned in search results
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Vinted have an official developer API?+
What does `get_user_profile` return beyond basic profile info?+
user_id, username, city, country, about, photo_url, and verification status — the endpoint returns a paginated listings array of that member's currently active items. Each listing includes id, title, price, currency, url, image_url, thumbnail_url, and status (condition). Items that are sold or hidden do not appear.How does `total_price` differ from `price` in search results?+
price is the amount the seller set for the item. total_price is the amount the buyer would pay, which includes Vinted's buyer protection fee. Both are returned as decimal strings in the same currency field.Is there a limit to how many search results I can retrieve?+
total_entries figure reported in the pagination object is capped at 960 by the site, so pagination beyond that point is not available regardless of how many actual listings exist. Each page returns at most 96 results. If you need deeper catalogue coverage, you can fork this API on Parse and revise it to implement category or filter-based crawling to work around the cap.Can I filter search results by category, size, brand, or price range?+
search_listings endpoint currently accepts only a free-text query string; structured filters like category, size, brand, or price range are not exposed as parameters. You can fork this API on Parse and revise it to add those filter parameters to the endpoint.