Vinted's internal API returns structured JSON — listings, prices, seller info — but requires a browser-minted session token protected by DataDome. Sessemi handles both in two API calls.
Load the homepage with a named session. This solves the DataDome challenge and captures the access_token_web cookie.
curlcurl -X POST https://api.sessemi.com/scrape \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.vinted.fr",
"pool": "residential",
"country": "FR",
"session": "my-vinted-fr"
}'
Takes ~6 seconds on the first call. The session is now alive — cookies stored, IP pinned to France.
Scrape the product search endpoint with the same session. Sessemi replays the cookies through its fast path — no browser needed.
curlcurl -X POST https://api.sessemi.com/scrape \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.vinted.fr/api/v2/catalog/items?search_text=nike&per_page=20",
"pool": "residential",
"country": "FR",
"session": "my-vinted-fr"
}'
Returns the JSON response in ~4 seconds. Every additional API call on the same session reuses the token.
Same endpoint structure across all 26 Vinted domains. Swap the TLD and country code:
domainsvinted.fr → country: FR vinted.de → country: DE
vinted.es → country: ES vinted.it → country: IT
vinted.nl → country: NL vinted.be → country: BE
vinted.pl → country: PL vinted.pt → country: PT
vinted.co.uk → country: GB vinted.lt → country: LT
...
Scrape Nike listings from Vinted France and Germany in one script:
pythonimport requests, json
API_KEY = "YOUR_KEY"
API_URL = "https://api.sessemi.com/scrape"
headers = {"X-API-Key": API_KEY, "Content-Type": "application/json"}
markets = [("fr", "FR"), ("de", "DE")]
# Step 1: Mint sessions (one per market)
for domain, country in markets:
requests.post(API_URL, headers=headers, json={
"url": f"https://www.vinted.{domain}",
"pool": "residential",
"country": country,
"session": f"vinted-{domain}"
})
# Step 2: Search across markets
for domain, country in markets:
resp = requests.post(API_URL, headers=headers, json={
"url": f"https://www.vinted.{domain}/api/v2/catalog/items"
f"?search_text=nike&per_page=20&order=newest_first",
"pool": "residential",
"country": country,
"session": f"vinted-{domain}"
})
data = resp.json()
items = json.loads(data["content"]).get("items", [])
for item in items:
print(f"[{domain.upper()}] {item['title']}"
f" — {item['price']['amount']} {item['price']['currency_code']}"
f" — {item.get('brand_title', 'N/A')}")
Sessions expire after 5 minutes of inactivity or 1 hour total. On a 401, re-mint by loading the homepage again — Sessemi handles the challenge solve automatically.
endpoints/api/v2/catalog/items?search_text={query} — product search
/api/v2/users/{id}/items — seller's listings
/api/v2/items/{id} — product details
/api/v2/users/{id} — seller profile
500 free credits — enough to test this example end to end.
Get your API key →