Vinted active listings
GET /v1/vinted/listings searches active Vinted listings on the US, UK or 24 European sites, 96 rows a page, with condition, brand, category, price and sort filters.
https://api.soldgraph.com/v1/vinted/listingsSearch active Vinted listings by keyword. Pick the site with country: us for vinted.com, uk for vinted.co.uk, or a European site such as fr or de. One request returns one page of up to 96 listings. Sold search and completed sale prices are not supported; /v1/vinted/sold is not an API endpoint.
displayed_price is the seller's ask for the item. It is not a sale price, and buyers on Vinted often make offers. total_price adds Vinted's buyer protection fee, so it is what a buyer pays before shipping.
| Parameter | Type | Default | Description |
|---|---|---|---|
q | string | Required | Search keywords, 1–200 characters, as you'd type them into the marketplace's search box. Be specific: model, size, grade, edition. |
page | integer, 1–10 | 1 | Page to fetch, 1 to 10. Vinted serves 96 rows a page and stops at 960 results. Follow next_page until it is null. Optional. |
min_price | integer, 0–1000000 | Lowest price, in whole units of the country's currency (US dollars for us). Optional. Must not be more than max_price. You can send it without max_price. | |
max_price | integer, 0–1000000 | Highest price, in whole units of the country's currency (US dollars for us). Optional. You can send it without min_price. | |
marketplace | vinted | vinted | Optional. If sent, it must be vinted. |
country | us, uk, fr, de, it, es, nl, be, pt, at, lu, ie, pl, se, cz, dk, fi, lt, hu, ro, sk, hr, gr, si, lv or ee | us | Which Vinted site to search: us (vinted.com), uk (vinted.co.uk) or a European site such as fr, de, it, es, nl or pl. Results, prices, min_price and max_price use that site's currency. Optional. |
sort | best_match, newest, price_asc or price_desc | best_match | Vinted's own ranking, newest listed first, or item price low to high or high to low. best_match mixes in promoted listings, flagged with promoted. |
condition | One or more of new_with_tags, new_without_tags, very_good, good, satisfactory, comma-separated | Vinted's own conditions. Send one or more, separated by commas, like new_with_tags,very_good. Vinted applies the filter. | |
brand_id | integer, 1–2147483647 | Vinted numeric brand ID, such as 53 for Nike or 10 for Levi's. Keeps only that brand. Find one as brand_id on /v1/vinted/item. Optional. | |
category_id | integer, 1–2147483647 | Vinted numeric category ID, such as 1242 for men's trainers. Keeps only listings in that category. Find one as category.id on /v1/vinted/item. Optional. |
curl -G https://api.soldgraph.com/v1/vinted/listings \ -H "Authorization: Bearer $SOLDGRAPH_KEY" \ --data-urlencode "q=levis 501" \ -d sort=newestA cache miss returns 202 with a job to poll. A completed search costs one request, including a cached result. Failed searches are free. Results are cached for 15 minutes. See search jobs.
#Countries
country picks the Vinted site. Leave it out for Vinted US.
country | Vinted site | Currency |
|---|---|---|
us | vinted.com | USD |
uk | vinted.co.uk | GBP |
fr, de, it, es, nl, be, pt, at, lu | vinted.fr, vinted.de and so on | EUR |
ie, fi, lt, sk, hr, gr, si, lv, ee | vinted.ie, vinted.fi and so on | EUR |
pl | vinted.pl | PLN |
se | vinted.se | SEK |
cz | vinted.cz | CZK |
dk | vinted.dk | DKK |
hu | vinted.hu | HUF |
ro | vinted.ro | RON |
- Prices,
min_priceandmax_priceare in that site's currency. linkpoints to the listing on that site.- Each country is its own search and costs one request.
condition,brand_idandcategory_iduse the same values on every site. Titles and brand names stay in the seller's language.- Every row on a page is priced in the site's currency. A seller who listed in another currency is shown converted by Vinted. The item endpoint shows the seller's own currency.
#Many European sites share the same listings
Vinted runs most of Europe as shared pools. In our tests, the same search returned mostly the same items across each group:
- West:
fr,de,it,es,nl,be,pt,at,lu - East and north:
pl,se,cz,dk,fi,lt,hu,ro,sk,hr - By themselves:
us,uk,ie,gr
So inside a group, country changes the currency and the link more than the items. Search one country per group to cover it, and pick the country whose currency you want. Search more than one group to see different listings.
#Filters
sorttakesbest_match,newest,price_ascorprice_desc.conditiontakes one or more ofnew_with_tags,new_without_tags,very_good,goodandsatisfactory, separated by commas.min_priceandmax_priceare whole units of the site's currency. Either can be sent alone. They filter on the item price, nottotal_price.brand_idkeeps one brand, such as53for Nike.category_idkeeps one category, such as1242for men's trainers. Both are Vinted's own numbers. The item endpoint returns them asbrand_idandcategory.id, so look up one listing you like and reuse its IDs.- Vinted reports the search it ran on every page. If it didn't apply a filter you sent, the search fails with
filter_not_appliedand costs nothing. We never return unfiltered results as if they were filtered.
#Pages
Vinted serves 96 rows a page and stops at 960 results, so page runs from 1 to 10. Follow next_page until it is null. There is no cursor.
reported_totalis Vinted's own count. It stops at 960, so read960as "960 or more".- A page past the last one fails with
page_out_of_rangeand costs nothing. - To reach more than 960 listings, run narrower searches: one per
condition, price bands such as0-20,20-50and50+, orsort=neweston a schedule. Remove repeats byid. - New listings arrive all the time, so a row can show up again on the next page. Remove repeats by
id.
#Promoted listings
Vinted mixes paid placements into best_match results. Each row says so with promoted. In our tests a quarter to a half of a best_match page was promoted, and sorted or filtered searches carried far fewer. Nothing is removed: filter on promoted yourself if you want organic rows only.
Image links are signed by Vinted and expire. Save the image itself if you need it later.
#Price summary
summary is plain maths over the rows on the page: how many show a price, the median asking price, the lowest and the highest.
- It uses
displayed_price, the item price before the buyer protection fee. - Promoted rows are counted like any other row.
- Nothing is removed from
data. The summary counts rows; it never filters them. - It covers one page. Fetch more pages to cover more listings.
#Example response
The example shows two of the 96 rows.
{ "request_id": "example-vinted-listings", "status": "complete", "credits": 1, "cached": false, "result": { "provider": "vinted", "country": "us", "query": "levis 501", "page": 1, "page_size": 96, "count": 96, "reported_total": 960, "next_page": 2, "next_cursor": null, "collected_at": "2026-10-05T19:48:25.104841+00:00", "schema_version": 1, "completeness": "provider_page_only", "summary": { "priced_count": 96, "currency": "USD", "median": 15, "low": 5, "high": 175 }, "data": [ { "id": "10260644800", "title": "Levi's 501 skinny", "link": "https://www.vinted.com/items/10260644800-levis-501-skinny", "promoted": false, "displayed_price": { "amount": 14, "currency": "USD" }, "displayed_price_text": "$14.00", "original_price": null, "buyer_protection_fee": { "amount": 1.4, "currency": "USD" }, "total_price": { "amount": 15.4, "currency": "USD" }, "condition": "very_good", "brand": "Levi's", "size": "XS / US 2", "like_count": 0, "business_seller": false, "image": "https://images1.vinted.net/t/02_003a5_m8wHry85poJA28UAyJCr1WA2/f800/13e5d734.webp?s=e6df922e1a9798f57bdee467f53a8f345ef4523f" }, { "id": "10260585714", "title": "Vintage Y2K Levi's 501 XX Men's 32x24 Light Wash Blue Denim Button Fly Classic", "link": "https://www.vinted.com/items/10260585714-vintage-y2k-levis-501-xx-mens-32x24-light-wash-blue-denim-button-fly-classic", "promoted": true, "displayed_price": { "amount": 20, "currency": "USD" }, "displayed_price_text": "$20.00", "original_price": null, "buyer_protection_fee": { "amount": 1.7, "currency": "USD" }, "total_price": { "amount": 21.7, "currency": "USD" }, "condition": "good", "brand": "Levi's", "size": "W32", "like_count": 0, "business_seller": false, "image": "https://images1.vinted.net/t/05_0238b_gBhkADedty1WH89vgyEmA7Cs/f800/b78d0cb0.webp?s=b8931ac312a9e7bd1a2f707340ecdecdb74481f2" } ], "field_notes": "Active Vinted listings from the chosen country site. Prices are seller asks, not sale prices. displayed_price is the item price; total_price adds Vinted's buyer protection fee and is what a buyer pays before shipping. Items listed in another currency are shown converted by Vinted. promoted marks paid placements, which Vinted mixes into best_match results. Vinted serves 96 rows a page and at most 10 pages, so reported_total stops at 960. Image links are signed by Vinted and expire. No sold search or final sale prices are provided." }}| Field | Type | Description |
|---|---|---|
request_id | string | ID of this request. Poll it at /v1/jobs/{request_id}. |
status | string | pending, complete or failed. Always check it, even on HTTP 200. |
credits | integer | Requests charged: 1 when complete, 0 while pending or when failed. |
cached | boolean | True when the result came from the 15-minute cache. |
poll_url | string | Only while pending. A path like /v1/jobs/{id}: join it to https://api.soldgraph.com, not to the /v1 base URL. |
error.code | string | Only when failed. See failed job codes. |
result | object | Only when complete. One source page from the marketplace. |
result.provider | string | Marketplace ID, like ebay or poshmark. |
result.country | string | The country searched: us, or on eBay the country you sent. |
result.query | string | The q you sent, with extra spaces removed. |
result.page | integer | The page you asked for. |
result.count | integer | Rows in result.data on this page. |
result.reported_total | integer | Total matches the marketplace reports for the search. It may be rounded or capped. |
result.next_page | integer | null | Send this as page to get the next page. Null on the last page, and on page 100, the deepest page served. |
result.collected_at | string | When we collected the page, as an ISO 8601 timestamp. |
result.schema_version | integer | Version of the result's shape for that marketplace: 1 or 2. It only rises when a field changes meaning. |
result.completeness | string | provider_page_only: one page as the marketplace served it, not a full history. TCGplayer recent sales say recent_sample_only. |
result.field_notes | string | Plain-text notes on how to read this page's fields. |
result.page_size | integer | Listing rows on the source page, up to 96. |
result.summary | object | Price maths over the rows on this page: priced_count, currency, median, low, high. No row is removed from data. Rows with no single readable price are left out of the maths. |
result.count | integer | Rows returned. Every row on the source page is returned. |
result.next_page | integer | null | The next page number, or null on the last page. Never more than 10. |
result.reported_total | integer | Matches as Vinted reports them. Vinted stops counting at 960, so 960 means "960 or more". |
result.data[].id | string | Vinted item ID. Pass it to /v1/vinted/item for full details. |
result.data[].title | string | Seller title, up to 2,000 characters. |
result.data[].link | string | Public listing URL on the Vinted site you searched. |
result.data[].promoted | boolean | True for a paid placement. Vinted mixes these into best_match results. |
result.data[].displayed_price | object | Item asking price as { amount, currency }, in the site's currency. Before the buyer protection fee and shipping. Never a sale price. |
result.data[].displayed_price_text | string | Formatted item price, like $14.00, £42.54, €25.00 or PLN 45.00. |
result.data[].original_price | object | null | Earlier item price when Vinted shows a discounted one, else null. |
result.data[].buyer_protection_fee | object | null | Vinted's buyer protection fee for this item. |
result.data[].total_price | object | null | Item price plus the buyer protection fee: what a buyer pays before shipping. |
result.data[].condition | string | null | new_with_tags, new_without_tags, very_good, good or satisfactory, as the seller chose, in the same codes on every site. Null if Vinted shows another value. |
result.data[].brand | string | null | Brand name as shown on the listing card. |
result.data[].size | string | null | Size as shown, like M / US 8-10 or 10. Null for items without sizes. |
result.data[].like_count | integer | null | How many members have favourited the listing. |
result.data[].business_seller | boolean | True when the seller is a registered business (Vinted Pro). |
result.data[].image | string | null | Main photo on Vinted's CDN. The link is signed and expires. |
Overviews: eBay sold listings API · findCompletedItems alternative · Poshmark sold listings API · Mercari sold listings API