Vinted APIvinted.pl ↗
Search Vinted Poland listings by keyword, brand, condition, and price. Returns item titles, prices in PLN, seller info, images, and pagination metadata.
What is the Vinted API?
The Vinted.pl API exposes 1 endpoint — search_listings — that queries the Vinted Poland catalog and returns up to 11 structured fields per listing, including title, price in PLN, condition, brand, size, seller details, images, and a direct listing URL. Developers can filter results by keyword, brand name, item condition, and maximum price, with full pagination support to walk through large result sets.
curl -X GET 'https://api.parse.bot/scraper/03d6b53c-a11b-4e25-ac3d-ce71bff769b6/search_listings?brand=Nike&order=newest_first&keyword=nike&condition=good&max_price=100' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace vinted-pl-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Vinted Poland SDK — search second-hand listings with filters."""
from parse_apis.vinted_pl_api import VintedPl, Order, Condition, InputFormatInvalid
client = VintedPl()
# Search for Nike items under 100 PLN in good condition, newest first.
for listing in client.listings.search(
keyword="nike",
brand="Nike",
condition=Condition.GOOD,
order=Order.NEWEST_FIRST,
max_price="100",
limit=5,
):
print(listing.title, listing.price, listing.currency, listing.size)
# Drill into the cheapest listing for "adidas shoes".
try:
cheapest = client.listings.search(
keyword="adidas shoes",
order=Order.PRICE_LOW_TO_HIGH,
limit=1,
).first()
except InputFormatInvalid as e:
# Raised when a filter value is rejected (e.g. invalid order).
print("Bad filter:", e.message)
cheapest = None
if cheapest is not None:
print(cheapest.title, cheapest.price, cheapest.condition)
print("Seller:", cheapest.seller)
print("URL:", cheapest.url)
if cheapest.images:
print("Thumbnail:", cheapest.images[0])
print("exercised: listings.search")
Search Vinted.pl listings by keyword with optional filters for price, condition, brand, and sort order. Returns paginated results. Each request makes one API call to Vinted's catalog; pagination is controlled by the page and per_page parameters.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (starts at 1). |
| brand | string | Brand name to filter by (e.g. 'Nike', 'Adidas', 'Zara'). Resolved to a brand ID via Vinted's brand search; the first exact case-insensitive match is used. |
| order | string | Sort order for results. |
| keywordrequired | string | Search text to find listings (e.g. 'nike', 'dress', 'adidas shoes'). |
| per_page | integer | Number of listings per page (1-96). |
| condition | string | Filter by item condition. Omitted returns all conditions. |
| max_price | string | Maximum price filter in PLN. Only listings at or below this price are returned. Numeric string (e.g. '100', '50.5'). |
{
"type": "object",
"fields": {
"listings": "array of listing objects with id, title, price, currency, condition, brand, size, images, seller, url, listed_timestamp",
"per_page": "integer listings per page",
"total_pages": "integer total number of pages",
"current_page": "integer current page number",
"total_entries": "integer total number of matching listings"
},
"sample": {
"data": {
"listings": [
{
"id": 9730842506,
"url": "https://www.vinted.pl/items/9730842506-nike-tshirt",
"size": "S / 36 / 8",
"brand": "Nike",
"price": "23.38",
"title": "nike tshirt",
"images": [
"https://images1.vinted.net/t/01_02507_D7yNp8KJze4ggnc43Jw8j6rB/f800/1787322554.jpeg?s=0131b12b9265eef2d444e0ac24d89ac591a17c91"
],
"seller": "John Doe",
"currency": "PLN",
"condition": "Bardzo dobry",
"listed_timestamp": 1787322554
}
],
"per_page": 5,
"total_pages": 192,
"current_page": 1,
"total_entries": 960
},
"status": "success"
}
}About the Vinted API
What the API Returns
The search_listings endpoint queries the Vinted.pl catalog and returns an array of listing objects. Each object includes id, title, price, currency (PLN), condition, brand, size, images, seller, url, and listed_timestamp. Alongside the listings array, the response includes total_entries, total_pages, current_page, and per_page — giving you everything needed to paginate through a result set programmatically.
Filtering and Sorting
The keyword parameter is required and drives the core search. Optional filters include brand (accepts plain-text brand names like Nike or Zara, which are resolved to internal brand identifiers), condition (filters to a specific item state), and max_price (a numeric string in PLN that caps results at or below that price). The order parameter controls sort order. Pagination is handled via page (1-indexed) and per_page (1–96 listings per response).
Coverage and Scope
This API covers listings on vinted.pl, the Polish-market instance of Vinted. Prices are denominated in PLN. The catalog spans second-hand clothing, footwear, accessories, and other items listed by individual sellers. Result freshness reflects the current live catalog, so listed_timestamp on each listing indicates when that item was posted.
The Vinted API is a managed, monitored endpoint for vinted.pl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when vinted.pl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official vinted.pl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price trends for specific brands on the Polish second-hand market using
priceandlisted_timestampfields. - Build a deal-finder that alerts users when items matching a keyword drop below a
max_pricethreshold. - Aggregate Vinted.pl inventory data by
brandandconditionfor reseller sourcing workflows. - Populate a comparison tool showing sizes and prices for a given item type across multiple pages of results.
- Monitor new listings for rare or high-demand items using
listed_timestampand keyword searches. - Build a category browser that surfaces available sizes and conditions for a given brand or clothing type.
- Analyze seller activity by collecting
sellerdata across paginated search results for a keyword.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Vinted have an official public developer API?+
What does each listing object in the `search_listings` response include?+
id, title, price, currency (PLN), condition, brand, size, images, seller, url, and listed_timestamp. The seller field provides basic seller identity data, and images contains one or more image references for the listing.Can I retrieve seller profile pages or individual listing detail pages?+
search_listings, but there are no dedicated endpoints for full seller profiles or expanded listing detail pages. You can fork this API on Parse and revise it to add those endpoints.Is there a limit on how many listings I can retrieve per request?+
per_page parameter accepts values from 1 to 96, so a single request returns at most 96 listings. Use the total_pages and current_page fields in the response to iterate through additional pages when the result set exceeds one page.