{
  "openapi": "3.0.1",
  "info": {
    "title": "Vinted Smart Scraper - Cross-Country Arbitrage Scanner",
    "description": "Find profitable Vinted arbitrage across 26 markets, compare buy-low / sell-higher country price gaps, schedule deal alerts, monitor sellers, and export structured data to CSV, API, or webhooks.",
    "version": "1.0",
    "x-build-id": "wQKJUlgxOOfeXcoUC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kazkn~vinted-smart-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kazkn-vinted-smart-scraper",
        "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/kazkn~vinted-smart-scraper/runs": {
      "post": {
        "operationId": "runs-sync-kazkn-vinted-smart-scraper",
        "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/kazkn~vinted-smart-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-kazkn-vinted-smart-scraper",
        "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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "🎯 Workflow: daily monitor or one-time search",
            "enum": [
              "SEARCH",
              "CROSS_COUNTRY",
              "ITEM_DETAIL",
              "SELLER_PROFILE",
              "SOLD_ITEMS",
              "TRENDING",
              "PRICE_TRACK",
              "SELL_THROUGH_TRACKER"
            ],
            "type": "string",
            "description": "For recurring reseller monitoring, choose Daily Sell-Through Tracker: search -> save tracker -> schedule daily -> webhook/Telegram/CSV. Use Search only for one-time exports.",
            "default": "SEARCH"
          },
          "query": {
            "title": "🔍 Search Query",
            "type": "string",
            "description": "Enter the keywords you're looking for. Works with Search, Cross-Country, Sold Signals, Sell-Through Tracker, and Trending modes."
          },
          "countries": {
            "title": "🌍 Countries",
            "maxItems": 5,
            "type": "array",
            "description": "Select which Vinted markets to search. For Cross-Country mode, pick 2+ countries to compare prices side by side (max 5 countries per run).",
            "items": {
              "type": "string",
              "enum": [
                "fr",
                "de",
                "uk",
                "it",
                "es",
                "nl",
                "pl",
                "pt",
                "be",
                "at",
                "lt",
                "cz",
                "sk",
                "hu",
                "ro",
                "hr",
                "fi",
                "dk",
                "se",
                "ee",
                "gr",
                "ie",
                "lu",
                "lv",
                "si",
                "us"
              ],
              "enumTitles": [
                "🇫🇷 France",
                "🇩🇪 Germany",
                "🇬🇧 United Kingdom",
                "🇮🇹 Italy",
                "🇪🇸 Spain",
                "🇳🇱 Netherlands",
                "🇵🇱 Poland",
                "🇵🇹 Portugal",
                "🇧🇪 Belgium",
                "🇦🇹 Austria",
                "🇱🇹 Lithuania",
                "🇨🇿 Czech Republic",
                "🇸🇰 Slovakia",
                "🇭🇺 Hungary",
                "🇷🇴 Romania",
                "🇭🇷 Croatia",
                "🇫🇮 Finland",
                "🇩🇰 Denmark",
                "🇸🇪 Sweden",
                "🇪🇪 Estonia",
                "🇬🇷 Greece",
                "🇮🇪 Ireland",
                "🇱🇺 Luxembourg",
                "🇱🇻 Latvia",
                "🇸🇮 Slovenia",
                "🇺🇸 United States"
              ]
            },
            "default": [
              "fr",
              "de"
            ]
          },
          "maxItems": {
            "title": "📊 Max Results / Daily Budget Cap",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "Set how many items to return and cap billable dataset rows. Use 100 for a focused daily monitor, 300 for a serious reseller watchlist. Hard cap: 300 per run.",
            "default": 100
          },
          "itemUrls": {
            "title": "📦 Item URLs",
            "type": "array",
            "description": "Paste one or more Vinted item URLs. Required for Item Detail and Price Track modes. In Sell-Through Tracker, URL watchlists are capped by maxItems for billing control. Accepts any Vinted domain. If you leave mode on Search and only provide item URLs, the actor will auto-switch to Item Detail:",
            "items": {
              "type": "string"
            }
          },
          "sellerUrls": {
            "title": "👤 Seller URLs",
            "type": "array",
            "description": "Paste one or more Vinted seller profile URLs. Required for Seller Profile mode. Works with any Vinted domain (vinted.fr, vinted.de, vinted.co.uk, etc.). If you leave mode on Search and only provide seller URLs, the actor will auto-switch to Seller Profile mode.",
            "items": {
              "type": "string"
            }
          },
          "condition": {
            "title": "✨ Condition",
            "type": "array",
            "description": "Filter results by item condition. Leave empty to include 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"
              ]
            }
          },
          "priceMin": {
            "title": "💶 Min Price",
            "type": "number",
            "description": "Set a minimum price in local currency (€ for most countries, £ for UK). Leave empty for no minimum."
          },
          "priceMax": {
            "title": "💶 Max Price",
            "type": "number",
            "description": "Set a maximum price in local currency. Leave empty for no maximum."
          },
          "sortBy": {
            "title": "📈 Sort By",
            "enum": [
              "relevance",
              "price_low_to_high",
              "price_high_to_low",
              "newest_first"
            ],
            "type": "string",
            "description": "Choose how to sort your results.",
            "default": "relevance"
          },
          "categoryId": {
            "title": "📁 Category ID",
            "type": "integer",
            "description": "Enter a Vinted category number to filter by type. Find it in the URL when browsing a category on vinted.fr (e.g. catalog[]=5 → enter 5). Leave empty for all categories."
          },
          "brandIds": {
            "title": "🏷️ Brand IDs",
            "type": "array",
            "description": "Enter brand numbers to filter by brand. Find them in the Vinted URL after selecting a brand filter (e.g. brand_ids[]=53 → 53 = Nike). Leave empty for all brands.",
            "items": {
              "type": "integer"
            }
          },
          "sizeIds": {
            "title": "📏 Size IDs",
            "type": "array",
            "description": "Enter size numbers to filter by size. Find them in the Vinted URL after selecting a size filter. Leave empty for all sizes.",
            "items": {
              "type": "integer"
            }
          },
          "includeSellerDetails": {
            "title": "👤 Also fetch seller ratings & reviews for each item",
            "type": "boolean",
            "description": "Enable to get seller verification status, rating, review count, and response time for every item. Makes the run slower but gives richer data.",
            "default": false
          },
          "includePhotos": {
            "title": "📸 Include Photo URLs",
            "type": "boolean",
            "description": "Enable to include all item photo URLs in the output. Disable for smaller, faster exports.",
            "default": false
          },
          "trackingStoreName": {
            "title": "🧠 Tracking Store Name",
            "type": "string",
            "description": "Named key-value store used by Sell-Through Tracker and Price Track to persist history across scheduled runs. Keep the same value for the same tracker.",
            "default": "vinted-sell-through-tracker"
          },
          "trackerId": {
            "title": "🏷️ Tracker ID",
            "type": "string",
            "description": "Optional stable ID for this tracker. Leave empty to auto-generate from query, countries, filters, maxItems, and item URLs. Use a custom value when creating scheduled trackers for clients."
          },
          "missingRunsThreshold": {
            "title": "📉 Missing Runs Before Likely Sold",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many consecutive scheduled runs an item must disappear before it is marked likely_sold. Use 2 to reduce false positives from ranking changes.",
            "default": 2
          },
          "emitActiveItems": {
            "title": "📤 Output Active Items Too",
            "type": "boolean",
            "description": "When enabled, Sell-Through Tracker outputs active baseline items too. Disable after the first run if you only want missing/likely_sold/sold changes and lower daily result charges.",
            "default": true
          },
          "emitRunSummary": {
            "title": "📋 Output Daily Summary Row",
            "type": "boolean",
            "description": "Adds one SELL_THROUGH_DAILY_SUMMARY row at the end of each Sell-Through Tracker run. Keep enabled for daily schedules, webhooks, Telegram alerts, and CSV reports. Disable only if you need item rows only.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy",
            "type": "object",
            "description": "Leave empty for small scheduled runs. Only change proxy settings if your run fails, slows down, or needs a larger multi-task setup."
          },
          "maxConcurrency": {
            "title": "⚡ Parallel Requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Set how many pages to scrape at once. Use 3-5 without proxy, 10-20 with residential proxy.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "🔄 Max Retries",
            "type": "integer",
            "description": "Set how many times to retry a failed request before skipping it.",
            "default": 3
          },
          "requestDelayMs": {
            "title": "⏱️ Delay Between Requests (ms)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Set wait time between requests in milliseconds. Use 0 with proxy, 500-1000 without. Helps avoid rate limits.",
            "default": 500
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}