To get Vinted listing data programmatically, use Scavio's Vinted API. POST /api/v1/vinted/search with a country and a query returns 96 listings per call, each with the price, the Vinted fee, the total the buyer pays before shipping, size, condition, photos and the seller's id. Resolve brands, categories and conditions to ids with /brands, /categories and /filters first, read one listing in full (description, every photo, sold or reserved) with /product, and check the seller with /seller and /seller-feedback. Every call is 1 credit on any of the 27 Vinted sites.
Vinted's own API, Vinted Pro Integrations, is open only to allowlisted Vinted Pro businesses and manages their own items and orders, with no marketplace search. The steps below get the marketplace side as JSON with one Scavio key. Every response was captured on November 9, 2026 on vinted.co.uk, and the example is a pair of Levi's 501s in men's size W32.
Step 1: Turn names into ids
Search filters take ids, not names. Start with what shoppers type:
curl -s https://api.scavio.dev/api/v1/vinted/suggestions \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "query": "levis 5"}'Captured data (6 of 10 suggestions trimmed):
{
"country": "uk",
"query": "levis 5",
"count": 10,
"suggestions": [
{ "text": "levi's 501 men", "type": "popular_search" },
{ "text": "levi's 511 men", "type": "popular_search" },
{ "text": "levis 502 men", "type": "popular_search" },
{ "text": "levis 501 90s", "type": "popular_search" }
]
}Then the brand id:
curl -s https://api.scavio.dev/api/v1/vinted/brands \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "query": "levis"}'Captured data (8 of 10 brands trimmed):
{
"country": "uk",
"query": "levis",
"count": 10,
"brands": [
{ "id": 10, "title": "Levi's", "slug": "levis", "url": "https://www.vinted.co.uk/brand/10-levis", "item_count": 15361045, "is_luxury": true, "requires_authenticity_check": true },
{ "id": 6413639, "title": "Levi Strauss & Co.", "slug": "levi-strauss-co", "url": "https://www.vinted.co.uk/brand/6413639-levi-strauss-co", "item_count": 784078, "is_luxury": false, "requires_authenticity_check": false }
]
}Matching is fuzzy: the same answer lists Levi's Vintage Clothing, Levi's Made & Crafted and collaborations such as Supreme x Levi's. Pick the exact title. item_count is the brand's listing count on that site, 15,361,045 for Levi's, which makes /brands a quick way to size a brand. The category comes from /categories: {"country": "uk", "parent_id": 5} returned the Men tree, 189 categories, with Jeans as 257 and its four children (ripped, skinny, slim fit and straight fit).
Step 2: Get condition ids, with counts
curl -s https://api.scavio.dev/api/v1/vinted/filters \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "filter": "status", "query": "levis 501", "category_id": 257}'Captured data (descriptions trimmed), in 0.4 seconds:
{
"country": "uk",
"filter": "status",
"search_param": "status_ids",
"query": "levis 501",
"category_id": 257,
"count": 5,
"options": [
{ "id": 6, "title": "New with tags", "item_count": 9345 },
{ "id": 1, "title": "New without tags", "item_count": 10396 },
{ "id": 2, "title": "Very good", "item_count": 58028 },
{ "id": 3, "title": "Good", "item_count": 18078 },
{ "id": 4, "title": "Satisfactory", "item_count": 2271 }
]
}search_param names the search parameter the ids go into. The counts are live: 98,118 listings match "levis 501" in Men > Jeans on vinted.co.uk, and 58,028 of them are in very good condition. The same endpoint takes "filter": "size", "color" or "material"; in the size list, W32 in the "Men > Men's trousers" group is id 1640. Titles come back in each site's language, while the ids are the same on every site.
Step 3: Search with the filters
curl -s https://api.scavio.dev/api/v1/vinted/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "query": "levis 501", "brand_ids": [10], "category_id": 257, "size_ids": [1640], "status_ids": [2], "price_to": 20, "sort": "newest_first"}'Captured data in 3.8 seconds (94 of 96 items trimmed, and the private sellers' ids removed):
{
"country": "uk",
"currency": "GBP",
"query": "levis 501",
"page": 1,
"per_page": 96,
"count": 96,
"listed_results": 960,
"total_is_capped": true,
"total_pages": 10,
"has_more": true,
"filters": {
"query": "levis 501",
"category_ids": [257],
"brand_ids": [10],
"status_ids": [2],
"size_ids": [1640],
"color_ids": [],
"material_ids": [],
"price_from": null,
"price_to": 20,
"currency": "GBP",
"sort": "newest_first"
},
"items": [
{
"id": 10696569889,
"title": "Vintage 501 Levi’s jeans",
"url": "https://www.vinted.co.uk/items/10696569889-vintage-501-levis-jeans",
"price": 15.14,
"currency": "GBP",
"price_with_discount": null,
"service_fee": 1.46,
"total_price": 16.6,
"brand": "Levi's",
"size": "W32",
"condition": "Very good",
"favourite_count": 4,
"is_promoted": false,
"image": "https://images1.vinted.net/t/05_00127_8FFMV4STEHom2HLqJMhBm6Xt/f800/b620e4e1.webp?s=b6b7444f734618afa4eceb9303b7ab8a6a752ea6",
"thumbnail": "https://images1.vinted.net/t/05_00127_8FFMV4STEHom2HLqJMhBm6Xt/310x430/b620e4e1.webp?s=4838fc5f197fb247f9b191f9b128891f84bd1848",
"photos": ["https://images1.vinted.net/t/05_00127_8FFMV4STEHom2HLqJMhBm6Xt/f800/b620e4e1.webp?s=b6b7444f734618afa4eceb9303b7ab8a6a752ea6"],
"seller": { "is_business": false }
},
{
"id": 10731904643,
"title": "Levi’s 501 jeans",
"url": "https://www.vinted.co.uk/items/10731904643-levis-501-jeans",
"price": 7.5,
"currency": "GBP",
"price_with_discount": null,
"service_fee": 1.08,
"total_price": 8.58,
"brand": "Levi's",
"size": "W32",
"condition": "Very good",
"favourite_count": 0,
"is_promoted": false,
"image": "https://images1.vinted.net/t/06_011e9_gGiMUYYtUhupsD6VMfYY4QPP/f800/6f473066.webp?s=3d851400e0b0a3c889f4714ac6dff41dc3dfdaf6",
"thumbnail": "https://images1.vinted.net/t/06_011e9_gGiMUYYtUhupsD6VMfYY4QPP/310x430/6f473066.webp?s=9b670932ec4ade6dd819ea4c0f4c1d31fd9dae1a",
"photos": ["https://images1.vinted.net/t/06_011e9_gGiMUYYtUhupsD6VMfYY4QPP/f800/6f473066.webp?s=3d851400e0b0a3c889f4714ac6dff41dc3dfdaf6"],
"seller": { "is_business": false }
}
]
}Read a row as: the seller asks £7.50, the Vinted fee (service_fee) is £1.08, so the buyer pays £8.58 before shipping. In 480 Levi's 501 listings we pulled that day, the fee was always £0.70 plus 5% of the price; shipping is not returned. The filters block is what Vinted applied: every id we sent is there, so the 96 rows really are W32, very good and at most £20. listed_results: 960 with total_is_capped: true means at least 960 matches, not exactly 960: Vinted serves 10 pages of 96 and no more, so narrow further to see the rest. For price research, one search per condition gives you the spread; on this query the median ask ran from £26.49 new with tags to £8.54 in satisfactory condition:
Step 4: Read one listing, and check whether it sold
curl -s https://api.scavio.dev/api/v1/vinted/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "item_id": 10017863818}'This listing showed as £10.43 in a vinted.co.uk search. Captured data (2 of 3 photos trimmed; the seller's login, id and profile URL removed):
{
"country": "uk",
"id": 10017863818,
"url": "https://www.vinted.co.uk/items/10017863818-vintage-levis-501-denim-jeans",
"title": "Vintage Levi’s 501 denim jeans",
"description": "Vintage Levi’s 501 \nBrand new with tags \nW28",
"description_translated": false,
"price": 20,
"currency": "AUD",
"brand": { "id": 10, "name": "Levi's" },
"size": "W28",
"condition": "New with tags",
"color": "Blue",
"material": "Cotton, Denim",
"uploaded_relative": "7 weeks ago",
"category": {
"id": 1819,
"name": "Straight fit jeans",
"path": [
{ "id": 5, "title": "Men", "url": "https://www.vinted.co.uk/catalog/5-men" },
{ "id": 2050, "title": "Clothing", "url": "https://www.vinted.co.uk/catalog/2050-clothing" },
{ "id": 257, "title": "Jeans", "url": "https://www.vinted.co.uk/catalog/257-jeans" },
{ "id": 1819, "title": "Straight fit jeans", "url": "https://www.vinted.co.uk/catalog/1819-straight-fit-jeans" }
]
},
"photos": ["https://images1.vinted.net/t/04_007bb_W2vcNM4Rpe77PbM3qvKehaEb/f800/607f99bc.webp?s=7e64453d93ec29c8aa163b9695203754c1969a5f"],
"favourite_count": 5,
"is_reserved": false,
"is_sold": false,
"status_label": null,
"can_buy": true,
"instant_buy": true,
"is_hidden": false,
"seller": { "is_business": false, "feedback_count": 61, "feedback_reputation": 1, "badges": ["ACTIVE_LISTER"] }
}The product price is the seller's: 20 AUD, which the UK search showed as £10.43. So listings from Australian sellers can appear on vinted.co.uk, converted to pounds; the EU sites likewise share one listing pool shown in each site's currency. Compare search prices with search prices. feedback_reputation is a 0-1 score, and uploaded_relative is Vinted's own wording, not a timestamp. The product response has no fee; take service_fee from the search row.
A listing that has sold still answers, with its last price. A TU rain coat (item_id 10560892020) came back as (other fields trimmed):
{ "price": 25, "currency": "GBP", "is_reserved": false, "is_sold": true, "status_label": "Sold", "can_buy": false, "instant_buy": false }That is how a watcher knows to stop: re-check the item, and when is_sold or is_reserved turns true, drop it. Search never returns sold listings, so this is one item at a time, not a sales history.
Step 5: Check the seller
seller.id from a search row or product feeds three endpoints. The example is the business seller dw_clothing (65958245):
curl -s https://api.scavio.dev/api/v1/vinted/seller \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "user_id": 65958245}'Captured data in 0.8 seconds:
{
"country": "uk",
"id": 65958245,
"login": "dw_clothing",
"profile_url": "https://www.vinted.co.uk/member/65958245-dwclothing",
"is_business": true,
"feedback_count": 240,
"feedback_reputation": 1,
"positive_feedback_count": 239,
"neutral_feedback_count": 0,
"negative_feedback_count": 1,
"item_count": 16,
"country_code": "UK",
"country_name": "United Kingdom",
"city": null,
"verification": { "email": true, "facebook": false, "google": true },
"avg_response_time": null,
"is_on_holiday": false,
"last_seen_date": "2026-11-09"
}feedback_reputation: 1 sits next to one negative review, so quote the counts, not the score, when complaints matter. Then the reviews, up to 50 a page:
curl -s https://api.scavio.dev/api/v1/vinted/seller-feedback \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "uk", "user_id": 65958245, "limit": 50}'Captured data (48 of 50 rows trimmed):
{
"country": "uk",
"user_id": 65958245,
"page": 1,
"per_page": 50,
"total_results": 240,
"total_pages": 5,
"count": 50,
"has_more": true,
"feedback": [
{ "id": 4711451671, "rating": 5, "text": "Auto-feedback: Sale completed successfully", "created_at": "2026-11-09T09:53:49.000Z", "is_automatic": true, "seller_reply": null },
{ "id": 4705059523, "rating": 5, "text": "Excellent jacket and great seller very happy with my purchase", "created_at": "2026-11-07T22:02:28.000Z", "is_automatic": false, "seller_reply": null }
]
}34 of the 50 rows were Vinted's automatic feedback, so filter on is_automatic before you summarize what buyers said; the other 16, from October 15 to November 7, were all 5 stars. Rows carry no reviewer and no item, by design. /seller-products with the same user_id and "limit": 96 returned all 16 of the shop's listings in one call, from a £28 waxed hood to a £225 Barbour Beaufort, each with the fee and total and is_sold and is_reserved flags.
Step 6: Turn the search into a new-listing alert
import time
import requests
KEY = "sk_live_your_key" # from the Scavio dashboard
BODY = {"country": "uk", "query": "levis 501", "brand_ids": [10], "category_id": 257,
"size_ids": [1640], "status_ids": [2], "price_to": 20, "sort": "newest_first"}
seen = set()
while True:
r = requests.post("https://api.scavio.dev/api/v1/vinted/search", json=BODY,
headers={"Authorization": f"Bearer {KEY}"}, timeout=60)
for item in r.json()["data"]["items"]:
if item["id"] not in seen:
seen.add(item["id"])
print(item["total_price"], item["currency"], item["title"], item["url"])
time.sleep(300) # one check every 5 minutes: 288 credits a dayThe first run fills seen with the current 96; after that, only new listings print. Send them to Discord, Telegram or Slack instead of printing. The API returns data only: it does not buy, make offers or message sellers.
All 9 endpoints
| Endpoint | What it returns | Credits |
|---|---|---|
/api/v1/vinted/search | 96 listings a page, pages 1-10, with price, Vinted fee, total, size, condition, photos and seller id, plus the filters applied | 1 |
/api/v1/vinted/product | One listing by id or URL: description, every photo, category path, sold and reserved state, seller rating | 1 |
/api/v1/vinted/seller | A member's public profile: rating, positive, neutral and negative counts, items listed, verifications | 1 |
/api/v1/vinted/seller-products | A member's listings, up to 96 a page, with fee, total and sold and reserved flags | 1 |
/api/v1/vinted/seller-feedback | Reviews, up to 50 a page, newest first, with the automatic flag and the seller's reply | 1 |
/api/v1/vinted/brands | Brand ids with listing counts and the luxury and authenticity-check flags | 1 |
/api/v1/vinted/suggestions | Up to 10 search-box suggestions in the site's language | 1 |
/api/v1/vinted/filters | Size, condition, color or material ids with live counts | 1 |
/api/v1/vinted/categories | The category tree in the site's language, or one subtree | 1 |
Errors are not charged: an unknown item, member or category is a 404, and a temporary failure a 502. Every endpoint takes country: fr (the default) and the other EU sites, uk, us or au. There is no sold-listing search, no shipping price and no similar-items endpoint. For a side-by-side of every Vinted option, see the best Vinted APIs; for resale comps on another marketplace, see eBay sold listings by API.
Getting started
- Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required, enough for 50 Vinted calls.
- Copy your API key from the dashboard.
- Send a POST to
/api/v1/vinted/searchwith{"country": "uk", "query": "levis 501"}and your key in theAuthorizationheader.
Try the Vinted API free in the playground first, use the Python SDK, or call it from Claude and other agents through the MCP server.
Reference: Vinted API overview · search · product · seller · seller products · seller feedback · brands · filters · categories · suggestions
Frequently asked questions
How do I find a Vinted brand id or category id?
Call /api/v1/vinted/brands with a name: "levis" returned Levi's as brand id 10, with 15,361,045 listings on vinted.co.uk on November 9, 2026. /api/v1/vinted/categories returns the category tree with ids (Men > Clothing > Jeans is 257), and /api/v1/vinted/filters returns condition, size, color and material ids with live counts. Ids are shared across all 27 sites.
Why is a Vinted price different on the product page than in search?
Search shows every listing in the site's currency, and the product endpoint shows the seller's own. A Levi's 501 listed at £10.43 in a vinted.co.uk search came back from /product at 20 AUD, because the seller is in Australia. Use the search price to compare listings on one site.
How many results can one Vinted search return?
96 per page and 10 pages, so 960 at most. When total_is_capped is true there are more matches than that; narrow the search with a category, brand, size, condition or price range and run each slice separately.
Can I tell if a Vinted item has sold?
Yes, one item at a time. Scavio's /api/v1/vinted/product returns is_sold true, status_label "Sold" and can_buy false for a sold listing, with its last price. Search only returns listings that are still for sale, so there is no list of sold items to page through.
How much does it cost to get Vinted data with Scavio?
Every Vinted endpoint is 1 credit per call, $1 per 1,000 requests at the Growth rate of $1 per 1,000 credits. A search returns 96 listings for that 1 credit. Errors such as an unknown item (404) are not charged, and new accounts get 50 free credits with no card.