Get Item Details
curl --request GET \
--url https://scrapebadger.com/v1/vinted/items/{item_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/vinted/items/{item_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/vinted/items/{item_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/vinted/items/{item_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/vinted/items/{item_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/vinted/items/{item_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/vinted/items/{item_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"item": {
"id": 123,
"title": "<string>",
"price": {
"amount": "<string>",
"currency_code": "<string>"
},
"service_fee": "<string>",
"total_item_price": "<string>",
"brand_title": "<string>",
"size_title": "<string>",
"status": "<string>",
"photo": {
"id": 123,
"url": "<string>",
"full_size_url": "<string>",
"width": 123,
"height": 123,
"dominant_color": "<string>",
"is_main": true
},
"photos": [
{
"id": 123,
"url": "<string>",
"full_size_url": "<string>",
"width": 123,
"height": 123,
"dominant_color": "<string>",
"is_main": true
}
],
"url": "<string>",
"path": "<string>",
"user": {
"id": 123,
"login": "<string>",
"photo_url": "<string>",
"business": true
},
"favourite_count": 123,
"view_count": 123,
"is_visible": true,
"promoted": true,
"content_source": "<string>",
"seller_country_code": "<string>",
"display_title": "<string>",
"display_subtitle": "<string>",
"description": "<string>",
"catalog_id": 123,
"brand_id": 123,
"category": [
"<string>"
],
"size_id": 123,
"status_id": 123,
"color1": "<string>",
"color2": "<string>",
"upload_date": "<string>",
"can_buy": true,
"instant_buy": true,
"can_bundle": true,
"can_reserve": true,
"is_favourite": true,
"is_reserved": true,
"is_closed": true,
"is_hidden": true,
"seller": {
"id": 123,
"login": "<string>",
"photo_url": "<string>",
"business": true,
"feedback_count": 123,
"feedback_reputation": 123,
"item_count": 123,
"location": "<string>",
"last_seen": "<string>",
"badges": [
"<string>"
]
}
},
"market": "<string>"
}Items
Get Item Details
Get detailed information about a Vinted item.
GET
/
v1
/
vinted
/
items
/
{item_id}
Get Item Details
curl --request GET \
--url https://scrapebadger.com/v1/vinted/items/{item_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://scrapebadger.com/v1/vinted/items/{item_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://scrapebadger.com/v1/vinted/items/{item_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrapebadger.com/v1/vinted/items/{item_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://scrapebadger.com/v1/vinted/items/{item_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scrapebadger.com/v1/vinted/items/{item_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scrapebadger.com/v1/vinted/items/{item_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"item": {
"id": 123,
"title": "<string>",
"price": {
"amount": "<string>",
"currency_code": "<string>"
},
"service_fee": "<string>",
"total_item_price": "<string>",
"brand_title": "<string>",
"size_title": "<string>",
"status": "<string>",
"photo": {
"id": 123,
"url": "<string>",
"full_size_url": "<string>",
"width": 123,
"height": 123,
"dominant_color": "<string>",
"is_main": true
},
"photos": [
{
"id": 123,
"url": "<string>",
"full_size_url": "<string>",
"width": 123,
"height": 123,
"dominant_color": "<string>",
"is_main": true
}
],
"url": "<string>",
"path": "<string>",
"user": {
"id": 123,
"login": "<string>",
"photo_url": "<string>",
"business": true
},
"favourite_count": 123,
"view_count": 123,
"is_visible": true,
"promoted": true,
"content_source": "<string>",
"seller_country_code": "<string>",
"display_title": "<string>",
"display_subtitle": "<string>",
"description": "<string>",
"catalog_id": 123,
"brand_id": 123,
"category": [
"<string>"
],
"size_id": 123,
"status_id": 123,
"color1": "<string>",
"color2": "<string>",
"upload_date": "<string>",
"can_buy": true,
"instant_buy": true,
"can_bundle": true,
"can_reserve": true,
"is_favourite": true,
"is_reserved": true,
"is_closed": true,
"is_hidden": true,
"seller": {
"id": 123,
"login": "<string>",
"photo_url": "<string>",
"business": true,
"feedback_count": 123,
"feedback_reputation": 123,
"item_count": 123,
"location": "<string>",
"last_seen": "<string>",
"badges": [
"<string>"
]
}
},
"market": "<string>"
}Path Parameters
integer
required
The unique Vinted item ID. You can find this in search results or extract it from a Vinted listing URL.
Query Parameters
string
default:"fr"
Vinted market where the item is listed. Must match the market the item belongs to.Examples:
fr, de, uk, it, es, pl, usResponse
The payload is wrapped in an envelope:item holds the listing, market echoes
the market it was read from.
string
Echo of the requested market.
object
Show Item object
Show Item object
integer
Item ID.
string
Item title.
string
Full item description text.
object
Price object:
amount (decimal string, e.g. "45.0") and currency_code (ISO 4217, e.g. "EUR").string
Buyer-protection fee as a decimal string, in
price.currency_code. null when the listing page doesn’t quote one.string
Price + buyer protection as a decimal string, in
price.currency_code.string
Brand name.
integer
Vinted catalog (category) ID of the leaf category — the value you pass to
catalog_ids on search.array
Category breadcrumb, root first (e.g.
["Femmes", "Vêtements", "Hauts et t-shirts", "T-shirts"]). Localized to the market.string
Size label.
integer
Vinted size ID.
string
Item condition, localized to the market (e.g.
"Très bon état").integer
Vinted condition ID — see
/v1/vinted/statuses.string
Primary color, localized. May list several, comma-separated.
string
Secondary color (nullable).
object
Primary photo (
id, url, full_size_url, width, height, dominant_color, is_main).array
All photos, same object shape as
photo.string
Full URL to the Vinted listing.
integer
Number of views.
integer
Number of favourites.
string
Vinted’s own relative “listed” label, localized (e.g.
"Il y a une semaine") — not an ISO timestamp.boolean
Whether the item can be bought right now.
boolean
Whether Buy Now is available.
boolean
Whether the seller accepts bundles.
boolean
Whether the item can be reserved.
boolean
Whether the item is currently reserved.
boolean
Whether Vinted renders the listing as no longer available (the “Sold” banner page). See Listing states — check
is_hidden before reading this as “sold”.boolean
Whether the listing is hidden by the seller (manually or via holiday mode). Hidden listings render the same “Sold” banner on Vinted — this flag is the only way to tell them apart from sold ones.
boolean
false when the listing is hidden from the catalog (!is_hidden).object
Seller summary (
id, login, photo_url, business).object
Richer seller record:
id, login, photo_url, business, feedback_count, feedback_reputation, item_count, location, last_seen, badges.Listing states
Every response is read live from the Vinted listing page at request time — there is no cache. The state flags combine as follows:| State | HTTP | is_closed | can_buy | is_hidden | is_reserved |
|---|---|---|---|---|---|
| Active | 200 | false | true | false | false |
| Sold | 200 | true | false | false | false |
| Hidden by seller (incl. holiday mode) | 200 | true | false | true | false |
| Reserved for a buyer | 200 | — | false | false | true |
| Deleted / withdrawn | 404 | — | — | — | — |
is_closed && !can_buy && !is_hidden && !is_reserved.
Vinted shows the same “Sold” banner for seller-hidden listings, so is_closed
alone over-counts; a hidden listing can come back on the market.
Listings the seller withdraws or deletes stop rendering entirely — they return
a fast 404, never a closed page.
On a sold or hidden listing, price.amount is the seller’s asking price
(Vinted keeps showing it). The realised sale price is not present anywhere in
Vinted’s public payload, so we cannot expose it.
Example Response
{
"item": {
"id": 9492962028,
"title": "Tee shirt",
"description": "Tee shirt Nike noir",
"price": { "amount": "1.0", "currency_code": "EUR" },
"service_fee": "0.75",
"total_item_price": "1.75",
"brand_title": "Nike Air",
"brand_id": 5977,
"catalog_id": 221,
"category": ["Femmes", "Vêtements", "Hauts et t-shirts", "T-shirts", "Nike Air T-shirts"],
"size_title": "S / 36 / 8",
"size_id": 506,
"status": "Très bon état",
"status_id": 50,
"color1": "Noir, Blanc",
"color2": null,
"photos": [
{
"id": 40179825222,
"url": "https://images1.vinted.net/t/...",
"full_size_url": "https://images1.vinted.net/tc/...",
"width": 600,
"height": 800,
"dominant_color": "#36363D",
"is_main": true
}
],
"url": "https://www.vinted.fr/items/9492962028-tee-shirt",
"view_count": 0,
"favourite_count": 4,
"upload_date": "Il y a une semaine",
"can_buy": true,
"instant_buy": true,
"is_closed": false,
"user": {
"id": 20298345,
"login": "majy.p",
"photo_url": "https://images1.vinted.net/t/...",
"business": false
},
"seller": {
"id": 20298345,
"login": "majy.p",
"business": false,
"feedback_count": 356,
"feedback_reputation": 1.0,
"last_seen": "Vu la dernière fois : il y a une heure",
"badges": ["ACTIVE_LISTER", "SPEEDY_SHIPPING"]
}
},
"market": "fr"
}
Search results do not carry
catalog_id or brand_id — Vinted’s catalog
endpoint doesn’t return them, so they’re only available here, one call per item.
To narrow results by category or brand, filter at search time with
catalog_ids / brand_ids instead.Each item detail request costs 10 credits. Failed requests are not charged. The exact charge for any call is returned in the
X-Credits-Used response header.Mobile item details
This endpoint reads mobile JSON for the description, photos, seller and item attributes. Fields unavailable upstream remain null. In particular, size-guide FAQ IDs are not size IDs. See mobile data for raw plugins, related items and service prices.Authorizations
Path Parameters
The unique Vinted item ID.
Query Parameters
Vinted market where the item is listed (e.g. fr, de, uk).

