{
  "openapi": "3.0.1",
  "info": {
    "title": "Vinted Scraper - New Listings Monitor & Price Drop Alerts",
    "description": "For resellers, deal alerts and n8n or Telegram bots: Vinted listings from 26 countries by keyword, brand, size, condition and price, with title, price plus buyer fee, photo and seller type. Monitor mode returns only new listings and price drops, never old ones bumped to the top. JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "EspoE12F9GamMha99"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~vinted-new-listings-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-vinted-new-listings-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/neverempty~vinted-new-listings-monitor/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-vinted-new-listings-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/neverempty~vinted-new-listings-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-vinted-new-listings-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchQueries": {
            "title": "Search terms",
            "type": "array",
            "description": "What you would type into the Vinted search box, for example nike air max, levis 501, lego star wars, stone island. Each search term is searched in each country. Leave Search terms, Category IDs, Brand IDs and Search URLs all empty to run the example search nike on vinted.fr.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Which Vinted sites to search. Empty = France (vinted.fr). Prices, the price filter and the currency follow each site (EUR, GBP on vinted.co.uk, USD on vinted.com, PLN on vinted.pl, and so on).",
            "items": {
              "type": "string",
              "enum": [
                "fr",
                "de",
                "uk",
                "us",
                "it",
                "es",
                "nl",
                "be",
                "at",
                "pl",
                "pt",
                "cz",
                "sk",
                "lt",
                "lv",
                "ee",
                "se",
                "dk",
                "fi",
                "ie",
                "lu",
                "ro",
                "hu",
                "hr",
                "si",
                "gr"
              ],
              "enumTitles": [
                "France (vinted.fr)",
                "Germany (vinted.de)",
                "United Kingdom (vinted.co.uk)",
                "United States (vinted.com)",
                "Italy (vinted.it)",
                "Spain (vinted.es)",
                "Netherlands (vinted.nl)",
                "Belgium (vinted.be)",
                "Austria (vinted.at)",
                "Poland (vinted.pl)",
                "Portugal (vinted.pt)",
                "Czechia (vinted.cz)",
                "Slovakia (vinted.sk)",
                "Lithuania (vinted.lt)",
                "Latvia (vinted.lv)",
                "Estonia (vinted.ee)",
                "Sweden (vinted.se)",
                "Denmark (vinted.dk)",
                "Finland (vinted.fi)",
                "Ireland (vinted.ie)",
                "Luxembourg (vinted.lu)",
                "Romania (vinted.ro)",
                "Hungary (vinted.hu)",
                "Croatia (vinted.hr)",
                "Slovenia (vinted.si)",
                "Greece (vinted.gr)"
              ]
            }
          },
          "categoryIds": {
            "title": "Category IDs",
            "type": "array",
            "description": "Optional. Vinted category numbers, the digits after catalog[]= in a Vinted search address (for example 1231 for men's shoes on vinted.fr). A category alone, without a search term, lists everything new in it.",
            "items": {
              "type": "string"
            }
          },
          "brandIds": {
            "title": "Brand IDs",
            "type": "array",
            "description": "Optional. Vinted brand numbers, the digits after brand_ids[]= in a Vinted search address (for example 53 for Nike). A number Vinted does not know comes back as a free not-found row, not as an empty result.",
            "items": {
              "type": "string"
            }
          },
          "sizeIds": {
            "title": "Size IDs",
            "type": "array",
            "description": "Optional. Vinted size numbers, the digits after size_ids[]= in a Vinted search address (sizes are numbered per category, so choose the size once in your browser and copy the number).",
            "items": {
              "type": "string"
            }
          },
          "conditions": {
            "title": "Conditions",
            "type": "array",
            "description": "Optional. Only listings in these conditions. Empty = all conditions.",
            "items": {
              "type": "string",
              "enum": [
                "new_with_tags",
                "new_without_tags",
                "very_good",
                "good",
                "satisfactory"
              ],
              "enumTitles": [
                "New with tags",
                "New without tags",
                "Very good",
                "Good",
                "Satisfactory"
              ]
            }
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Only listings at or above this price, in the currency of each Vinted site. Vinted's own price filter is used (the price without the buyer protection fee)."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "number",
            "description": "Optional. Only listings at or below this price, in the currency of each Vinted site (the price without the buyer protection fee)."
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Optional. Vinted search pages copied from your browser after choosing filters there, for example https://www.vinted.de/catalog?search_text=lego&brand_ids[]=89162. The sort order is always set to newest first and the page number is dropped. Countries, category, brand, size, condition and price inputs above do not change these URLs.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerSearch": {
            "title": "Max listings per search",
            "minimum": 1,
            "maximum": 960,
            "type": "integer",
            "description": "Most listings returned for one search (96 per Vinted page). Vinted shows at most 960 listings for any search, so 960 is the maximum. Empty = 50. In monitor mode it limits the new listings and price drops returned per search in one run; the rest come in the next run while they are still on the pages the watch reads."
          },
          "requireAllSearchWords": {
            "title": "Only listings with every search word in the title or brand",
            "type": "boolean",
            "description": "Off (default): return what Vinted returns. Vinted matches search terms loosely (a nonsense term still returns listings), so every row has matchesSearchWords. On: listings whose title and brand do not contain every search word are left out and not charged."
          },
          "onlyNew": {
            "title": "Monitor mode: only new listings and price drops",
            "type": "boolean",
            "description": "On: every run reads the newest page of each search (up to 3 pages when a lot changed) and returns only listings that are new since the previous check (changeType new) and listings whose price went down (changeType price-drop, with previousPrice). Older listings that Vinted moved back to the top, or that moved up from further down, are not sold as new. The first run returns up to Max listings per search (changeType first-check) and remembers the list as the starting point. Each run that reads the list is charged the run start fee even when nothing changed; runs where nothing changed return a free row saying so."
          },
          "includePriceDrops": {
            "title": "Monitor mode: return price drops",
            "type": "boolean",
            "description": "On (default): in monitor mode, also return listings on the pages read whose price is lower than at the previous check. Off: only new listings.",
            "default": true
          },
          "includeResurfaced": {
            "title": "Monitor mode: return older listings moved back to the top",
            "type": "boolean",
            "description": "Off (default): an older listing that shows up above newer listings (a paid bump, a relisting, or a publication Vinted delayed) and that this watch had not seen is not returned. On: return it with changeType resurfaced. It is never called new.",
            "default": false
          },
          "watchName": {
            "title": "Watch name",
            "type": "string",
            "description": "Optional. Keeps separate memories for monitor mode, for example one per client (letters, digits, dot, dash, underscore; up to 40). Runs with the same watch name and the same search share what has already been returned."
          },
          "resetMonitoringState": {
            "title": "Start the watch again",
            "type": "boolean",
            "description": "On: forget what this watch has seen for these searches before running, so this run is a first check again."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}