{
  "openapi": "3.0.1",
  "info": {
    "title": "TVCMall Wholesale Scraper",
    "description": "Scrape TVCMall.com - a global B2B wholesale marketplace for mobile accessories, consumer electronics, and related categories. Search by keyword, browse by category, or fetch product details by URL, with pricing, bulk discount tiers, images, and stock status.",
    "version": "1.0",
    "x-build-id": "UttaLAlduRlttDowy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawlerbros~tvcmall-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawlerbros-tvcmall-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/crawlerbros~tvcmall-scraper/runs": {
      "post": {
        "operationId": "runs-sync-crawlerbros-tvcmall-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/crawlerbros~tvcmall-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-crawlerbros-tvcmall-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": "Mode",
            "enum": [
              "search",
              "byCategory",
              "byProductUrls"
            ],
            "type": "string",
            "description": "What to fetch.",
            "default": "search"
          },
          "searchQuery": {
            "title": "Search query (mode=search)",
            "type": "string",
            "description": "Free-text keyword search, e.g. `bluetooth earbuds`, `led light`, `phone case`.",
            "default": "bluetooth earbuds"
          },
          "category": {
            "title": "Category",
            "enum": [
              "cellPhoneAccessories",
              "cellPhoneCases",
              "cellPhoneParts",
              "smartwatchAccessories",
              "photoVideo",
              "computerNetworking",
              "consumerElectronics",
              "carAccessories",
              "homeGarden",
              "sportsOutdoors",
              "apple",
              "samsung",
              "huawei",
              "xiaomi",
              "oppo",
              "motorola",
              "honor",
              "lenovo",
              "onePlus",
              "otherBrands"
            ],
            "type": "string",
            "description": "Top-level product category. Required to browse (mode=byCategory); optional as a narrowing filter on top of a keyword search (mode=search)."
          },
          "productUrls": {
            "title": "Product URLs (mode=byProductUrls)",
            "type": "array",
            "description": "Full TVCMall product detail page URLs (e.g. `https://www.tvc-mall.com/details/...-sku123456a.html`).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Min price (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "number",
            "description": "Drop products cheaper than this."
          },
          "maxPrice": {
            "title": "Max price (USD)",
            "minimum": 0,
            "maximum": 1000000,
            "type": "number",
            "description": "Drop products more expensive than this."
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "relevance",
              "priceAsc",
              "priceDesc",
              "ratingDesc",
              "bestSelling",
              "discountDesc",
              "popularity",
              "newest",
              "video"
            ],
            "type": "string",
            "description": "`priceAsc`/`priceDesc`/`bestSelling`/`discountDesc`/`popularity` use TVCMall's own server-side catalog order in `byCategory` mode. In `search` mode (keyword search, with or without a category filter) all sorting is applied client-side instead, over the collected keyword-matching batch, to guarantee results stay relevant to your search query — `priceAsc`/`priceDesc`/`ratingDesc`/`discountDesc`/`newest`/`video` are fully supported this way, while `bestSelling`/`popularity` fall back to relevance order in `search` mode (TVCMall exposes no sales-count/popularity field to sort by client-side).",
            "default": "relevance"
          },
          "freeSamplesOnly": {
            "title": "Free samples only",
            "type": "boolean",
            "description": "Only return products TVCMall marks as eligible for a free sample order.",
            "default": false
          },
          "tag": {
            "title": "Product tag (search / byCategory)",
            "enum": [
              "",
              "newArrivals",
              "bestSellers",
              "bulkBuying",
              "recommended",
              "euTopRanking",
              "clearance",
              "goodReviews",
              "inStockOnly",
              "customizable",
              "specialOffers"
            ],
            "type": "string",
            "description": "Only return products carrying this TVCMall merchandising tag.",
            "default": ""
          },
          "brand": {
            "title": "Brand (search / byCategory)",
            "type": "string",
            "description": "Only return products from this brand, e.g. `RhinoShield`, `Aulumu`, `Baseus`. Matched against TVCMall's brand facet for the current search/category (case-insensitive, exact match preferred, falls back to a substring match). Applies to `search` and `byCategory` modes only."
          },
          "condition": {
            "title": "Part condition (search / byCategory)",
            "enum": [
              "",
              "oem",
              "oemDisassembly",
              "assembly",
              "nonOemHighQuality",
              "other"
            ],
            "type": "string",
            "description": "Only return products of this condition grade. Mainly relevant for replacement-parts categories (screens, flex cables, batteries, charging ports, back covers, etc.) — other categories will simply return 0 matches for a condition filter. Applies to `search` and `byCategory` modes only.",
            "default": ""
          },
          "leadTime": {
            "title": "Dispatch lead time (search / byCategory)",
            "enum": [
              "",
              "0-1",
              "1-3",
              "4-7",
              "7-10",
              "11-30",
              "31-50"
            ],
            "type": "string",
            "description": "Only return products whose estimated dispatch time matches this band.",
            "default": ""
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard cap on emitted records.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}