{
  "openapi": "3.0.1",
  "info": {
    "title": "VK Video Scraper — VKVideo, Channels, Clips & Playlists",
    "description": "Extract public VK and VKVideo video metadata from channels, searches, Clips, playlists or URLs. Export titles, views, owners and source media references to CSV, Excel or JSON. No VK login required; access and media limits apply.",
    "version": "1.2",
    "x-build-id": "Wi4Cr2arHfNnFYzcg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/funny_ground~vk-video-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-funny_ground-vk-video-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/funny_ground~vk-video-scraper/runs": {
      "post": {
        "operationId": "runs-sync-funny_ground-vk-video-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/funny_ground~vk-video-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-funny_ground-vk-video-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",
        "properties": {
          "startUrls": {
            "title": "VK / VKVideo URLs — auto-detect",
            "uniqueItems": true,
            "type": "array",
            "description": "Mix VK or VKVideo channel, direct-video, clip-tab, playlist, and search URLs. The Actor routes each URL automatically.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "channels": {
            "title": "Channels / communities",
            "uniqueItems": true,
            "type": "array",
            "description": "VK Video channel names, VK screen names, numeric owner IDs, or full profile/community/channel URLs. Bare channel names scrape the Videos tab; append /clips to a VKVideo URL to scrape clips.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchKeywords": {
            "title": "Search keywords",
            "uniqueItems": true,
            "type": "array",
            "description": "Free-text VK Video searches. Cyrillic and Latin queries are supported.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "videoUrls": {
            "title": "Direct video URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Public vk.com or vkvideo.ru video URLs containing a VK owner ID and video ID.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "resultsPerInput": {
            "title": "Results per input",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum videos returned for each channel, catalog URL, or keyword. Direct video URLs return one row. Set to 0 to continue until the feed ends or maxPagesPerInput is reached. A separate global 50-row cap applies to Apify Free-plan runs.",
            "default": 50
          },
          "includeClips": {
            "title": "Include clips in mixed results",
            "type": "boolean",
            "description": "Include short_video rows when a search or catalog response contains clips. Explicit /clips channel URLs are always respected.",
            "default": true
          },
          "failOnPartialFailure": {
            "title": "Fail on partial input errors",
            "type": "boolean",
            "description": "If false, saved rows are preserved and input errors or unsupported inputs cause warnings; if no rows are saved and any input fails, the run fails. If true, any input failure marks the run FAILED. Successful responses with 0 results are successful in both modes.",
            "default": false
          },
          "shouldDownloadVideos": {
            "title": "Download MP4 files",
            "type": "boolean",
            "description": "Store the selected MP4 in the run Key-Value Store. This can greatly increase runtime, storage, and platform usage. Metadata already includes temporary direct media URLs when VK exposes them.",
            "default": false
          },
          "videoQuality": {
            "title": "Downloaded video quality",
            "enum": [
              "best",
              "2160",
              "1440",
              "1080",
              "720",
              "480",
              "360",
              "240",
              "144"
            ],
            "type": "string",
            "description": "Preferred MP4 quality. Best selects the highest available MP4; if a requested quality is unavailable, the next-best MP4 is used.",
            "default": "best"
          },
          "shouldDownloadCovers": {
            "title": "Download cover images",
            "type": "boolean",
            "description": "Store the largest exposed thumbnail in the run Key-Value Store.",
            "default": false
          },
          "maxDownloadMegabytes": {
            "title": "Maximum size per downloaded file (MB)",
            "minimum": 1,
            "maximum": 2048,
            "type": "integer",
            "description": "Safety limit for each optional video download. Files larger than this are skipped while their metadata row is preserved.",
            "default": 250
          },
          "downloadConcurrency": {
            "title": "Download concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum simultaneous optional video or cover downloads.",
            "default": 2
          },
          "maxPagesPerInput": {
            "title": "Maximum API pages per input",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard pagination guard, including the first page. Increase only for large paid-plan exports.",
            "default": 100
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 300,
            "type": "integer",
            "description": "Timeout for each VK API or optional media request.",
            "default": 30
          },
          "maxRequestRetries": {
            "title": "Maximum request retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for transient rate limits, network failures, and VK server errors.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}