{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Video Downloader - Short Links & Multi-Cloud Storage",
    "description": "$3 per 1,000 TikTok videos, or $0.003 each. Downloads from post URLs, photo posts, and short links, for content teams, compliance teams, and ML pipelines. Re-hosts to Apify, AWS S3, Google Cloud, DigitalOcean, or Azure storage.",
    "version": "0.0",
    "x-build-id": "SeWhPFMw1qspgw70A"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/epctex~tiktok-video-downloader/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-epctex-tiktok-video-downloader",
        "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/epctex~tiktok-video-downloader/runs": {
      "post": {
        "operationId": "runs-sync-epctex-tiktok-video-downloader",
        "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/epctex~tiktok-video-downloader/run-sync": {
      "post": {
        "operationId": "run-sync-epctex-tiktok-video-downloader",
        "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": [
          "startUrls",
          "storageType"
        ],
        "properties": {
          "startUrls": {
            "title": "TikTok video URLs",
            "type": "array",
            "description": "List of TikTok video URLs to download. Both canonical URLs (https://www.tiktok.com/@user/video/{id}) and short links (https://vt.tiktok.com/..., https://vm.tiktok.com/...) are accepted — they are resolved for you, so there is no need to expand them yourself.",
            "items": {
              "type": "string"
            }
          },
          "region": {
            "title": "Region",
            "type": "string",
            "description": "Optional two-letter country code (for example US or DE). Selects which TikTok CDN edge the video is fetched from, which can help with geo-restricted videos."
          },
          "customMapFunction": {
            "title": "Custom map function",
            "type": "string",
            "description": "Function that takes each of the objects as argument and returns data that will be mapped by the function itself. This function is not intended for filtering, please don't use it for filtering purposes or you will get banned automatically. Must be a single function, e.g. (object) => { return {...object} }. Leave empty if you do not need to transform the output - an unusable function is ignored and the original items are saved instead."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of items to output. Leave empty for no limit."
          },
          "storageType": {
            "title": "Storage type",
            "enum": [
              "apify",
              "gcp",
              "aws",
              "digitalocean",
              "azure"
            ],
            "type": "string",
            "description": "Target storage provider. Fill the matching configuration section below.",
            "default": "apify"
          },
          "s3AccessKeyId": {
            "title": "S3 Access Key ID",
            "type": "string",
            "description": "Fill in the following fields if you want to upload the video to an S3 bucket"
          },
          "s3SecretAccessKey": {
            "title": "S3 Secret Access Key",
            "type": "string",
            "description": "Fill in the following fields if you want to upload the video to an S3 bucket"
          },
          "s3Bucket": {
            "title": "S3 Bucket",
            "type": "string",
            "description": "Fill in the following fields if you want to upload the video to an S3 bucket"
          },
          "s3Region": {
            "title": "S3 Region",
            "type": "string",
            "description": "Fill in the following fields if you want to upload the video to an S3 bucket"
          },
          "s3Path": {
            "title": "S3 Path (optional)",
            "type": "string",
            "description": "Optional folder path in the S3 bucket."
          },
          "googleCloudProjectId": {
            "title": "Google Cloud Project ID",
            "type": "string",
            "description": "GCP project ID."
          },
          "googleCloudServiceKeyJson": {
            "title": "Google Cloud Service Key JSON",
            "type": "object",
            "description": "Service account credentials JSON."
          },
          "googleCloudBucketName": {
            "title": "Google Cloud Bucket Name",
            "type": "string",
            "description": "Target Google Cloud Storage bucket name."
          },
          "googleCloudPath": {
            "title": "Google Cloud Path (optional)",
            "type": "string",
            "description": "Optional folder path in the GCS bucket."
          },
          "digitalOceanAccessKeyId": {
            "title": "DigitalOcean Access Key ID",
            "type": "string",
            "description": "DigitalOcean Spaces access key ID."
          },
          "digitalOceanSecretAccessKey": {
            "title": "DigitalOcean Secret Access Key",
            "type": "string",
            "description": "DigitalOcean Spaces secret access key."
          },
          "digitalOceanRegion": {
            "title": "DigitalOcean Region",
            "type": "string",
            "description": "DigitalOcean Spaces region (e.g. nyc3)."
          },
          "digitalOceanBucketName": {
            "title": "DigitalOcean Bucket Name",
            "type": "string",
            "description": "DigitalOcean Spaces bucket name."
          },
          "digitalOceanEndpoint": {
            "title": "DigitalOcean Endpoint (optional)",
            "type": "string",
            "description": "Optional Spaces endpoint URL."
          },
          "digitalOceanAcl": {
            "title": "DigitalOcean ACL (optional)",
            "type": "string",
            "description": "Optional ACL value (defaults to private)."
          },
          "digitalOceanPath": {
            "title": "DigitalOcean Path (optional)",
            "type": "string",
            "description": "Optional folder path in the Spaces bucket."
          },
          "azureAccountName": {
            "title": "Azure Account Name",
            "type": "string",
            "description": "Azure storage account name."
          },
          "azureAccountKey": {
            "title": "Azure Account Key",
            "type": "string",
            "description": "Azure storage account key."
          },
          "azureContainerName": {
            "title": "Azure Container Name",
            "type": "string",
            "description": "Azure container name."
          },
          "azurePath": {
            "title": "Azure Path (optional)",
            "type": "string",
            "description": "Optional folder path in the Azure container."
          },
          "outputConnector": {
            "title": "Send results to Notion, Todoist, … (optional)",
            "type": "string",
            "description": "Pick an MCP connector you authorized in Console → Settings → API & Integrations → MCP connectors (e.g. Notion, Todoist — any service whose MCP server offers non-destructive write tools works best-effort). The scraped results are written through your own connector — the Actor never sees your third-party credentials. Only non-destructive write tools are used; it can never delete or overwrite your existing data."
          },
          "deliverTarget": {
            "title": "Destination target",
            "type": "string",
            "description": "Where to write into the connector — paste the URL or ID. Notion example: https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b. Leave empty for services that need no target (e.g. Todoist Inbox, Slack). For Notion, share the page or database with your connector first (Notion's ••• → Connections menu), and point at a PAGE for structured columns (the Actor builds the database for you) — an empty database receives only the title (the rest of each record goes to the row's body)."
          },
          "deliverMode": {
            "title": "Write mode",
            "enum": [
              "perPost",
              "summary"
            ],
            "type": "string",
            "description": "perPost writes one record per scraped item; summary writes a single roll-up for the run.",
            "default": "perPost"
          },
          "deliverMaxItems": {
            "title": "Max records to deliver — perPost only (optional)",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on how many records perPost mode writes to the connector; ignored in summary mode. Leave empty to deliver everything scraped."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}