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.

GEThttps://api.soldgraph.com/v1/vinted/listings

Search 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.

ParameterTypeDefaultDescription
qstringRequiredSearch keywords, 1–200 characters, as you'd type them into the marketplace's search box. Be specific: model, size, grade, edition.
pageinteger, 1–101Page 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_priceinteger, 0–1000000Lowest 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_priceinteger, 0–1000000Highest price, in whole units of the country's currency (US dollars for us). Optional. You can send it without min_price.
marketplacevintedvintedOptional. If sent, it must be vinted.
countryus, 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 eeusWhich 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.
sortbest_match, newest, price_asc or price_descbest_matchVinted'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.
conditionOne or more of new_with_tags, new_without_tags, very_good, good, satisfactory, comma-separatedVinted's own conditions. Send one or more, separated by commas, like new_with_tags,very_good. Vinted applies the filter.
brand_idinteger, 1–2147483647Vinted 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_idinteger, 1–2147483647Vinted 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=newest

A 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.

countryVinted siteCurrency
usvinted.comUSD
ukvinted.co.ukGBP
fr, de, it, es, nl, be, pt, at, luvinted.fr, vinted.de and so onEUR
ie, fi, lt, sk, hr, gr, si, lv, eevinted.ie, vinted.fi and so onEUR
plvinted.plPLN
sevinted.seSEK
czvinted.czCZK
dkvinted.dkDKK
huvinted.huHUF
rovinted.roRON
  • Prices, min_price and max_price are in that site's currency.
  • link points to the listing on that site.
  • Each country is its own search and costs one request.
  • condition, brand_id and category_id use 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

  • sort takes best_match, newest, price_asc or price_desc.
  • condition takes one or more of new_with_tags, new_without_tags, very_good, good and satisfactory, separated by commas.
  • min_price and max_price are whole units of the site's currency. Either can be sent alone. They filter on the item price, not total_price.
  • brand_id keeps one brand, such as 53 for Nike. category_id keeps one category, such as 1242 for men's trainers. Both are Vinted's own numbers. The item endpoint returns them as brand_id and category.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_applied and 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_total is Vinted's own count. It stops at 960, so read 960 as "960 or more".
  • A page past the last one fails with page_out_of_range and costs nothing.
  • To reach more than 960 listings, run narrower searches: one per condition, price bands such as 0-20, 20-50 and 50+, or sort=newest on a schedule. Remove repeats by id.
  • New listings arrive all the time, so a row can show up again on the next page. Remove repeats by id.

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.

Response
{  "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."  }}
FieldTypeDescription
request_idstringID of this request. Poll it at /v1/jobs/{request_id}.
statusstringpending, complete or failed. Always check it, even on HTTP 200.
creditsintegerRequests charged: 1 when complete, 0 while pending or when failed.
cachedbooleanTrue when the result came from the 15-minute cache.
poll_urlstringOnly while pending. A path like /v1/jobs/{id}: join it to https://api.soldgraph.com, not to the /v1 base URL.
error.codestringOnly when failed. See failed job codes.
resultobjectOnly when complete. One source page from the marketplace.
result.providerstringMarketplace ID, like ebay or poshmark.
result.countrystringThe country searched: us, or on eBay the country you sent.
result.querystringThe q you sent, with extra spaces removed.
result.pageintegerThe page you asked for.
result.countintegerRows in result.data on this page.
result.reported_totalintegerTotal matches the marketplace reports for the search. It may be rounded or capped.
result.next_pageinteger | nullSend this as page to get the next page. Null on the last page, and on page 100, the deepest page served.
result.collected_atstringWhen we collected the page, as an ISO 8601 timestamp.
result.schema_versionintegerVersion of the result's shape for that marketplace: 1 or 2. It only rises when a field changes meaning.
result.completenessstringprovider_page_only: one page as the marketplace served it, not a full history. TCGplayer recent sales say recent_sample_only.
result.field_notesstringPlain-text notes on how to read this page's fields.
result.page_sizeintegerListing rows on the source page, up to 96.
result.summaryobjectPrice 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.countintegerRows returned. Every row on the source page is returned.
result.next_pageinteger | nullThe next page number, or null on the last page. Never more than 10.
result.reported_totalintegerMatches as Vinted reports them. Vinted stops counting at 960, so 960 means "960 or more".
result.data[].idstringVinted item ID. Pass it to /v1/vinted/item for full details.
result.data[].titlestringSeller title, up to 2,000 characters.
result.data[].linkstringPublic listing URL on the Vinted site you searched.
result.data[].promotedbooleanTrue for a paid placement. Vinted mixes these into best_match results.
result.data[].displayed_priceobjectItem 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_textstringFormatted item price, like $14.00, £42.54, €25.00 or PLN 45.00.
result.data[].original_priceobject | nullEarlier item price when Vinted shows a discounted one, else null.
result.data[].buyer_protection_feeobject | nullVinted's buyer protection fee for this item.
result.data[].total_priceobject | nullItem price plus the buyer protection fee: what a buyer pays before shipping.
result.data[].conditionstring | nullnew_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[].brandstring | nullBrand name as shown on the listing card.
result.data[].sizestring | nullSize as shown, like M / US 8-10 or 10. Null for items without sizes.
result.data[].like_countinteger | nullHow many members have favourited the listing.
result.data[].business_sellerbooleanTrue when the seller is a registered business (Vinted Pro).
result.data[].imagestring | nullMain photo on Vinted's CDN. The link is signed and expires.
Try it
Request
curl -G https://api.soldgraph.com/v1/vinted/listings \  -H "Authorization: Bearer $SOLDGRAPH_KEY" \  --data-urlencode "q=levis 501" \  -d sort=newest
Sign in to runFree account, no card.

Overviews: eBay sold listings API · findCompletedItems alternative · Poshmark sold listings API · Mercari sold listings API