{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin 抖音 Transcripts Scraper - 50+ Languages, .srt + MP4",
    "description": "Get Douyin (抖音) transcripts with timestamps. Keep Chinese speech or translate into 50 languages. Export separate .srt subtitles and optionally save the original MP4, with available creator and post details. Up to 5 videos per run.",
    "version": "0.0",
    "x-build-id": "Y3ObajUoLaxmXzZu0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~douyin-transcripts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-douyin-transcripts-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/zen-studio~douyin-transcripts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-douyin-transcripts-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/zen-studio~douyin-transcripts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-douyin-transcripts-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": [
          "videoUrls"
        ],
        "properties": {
          "videoUrls": {
            "title": "Douyin video URLs",
            "maxItems": 5,
            "uniqueItems": true,
            "type": "array",
            "description": "One or more Douyin video URLs. Most URL forms work — paste the desktop URL, the mobile share link, the discovery-feed URL with <code>?modal_id=…</code>, or even the entire app share text (the URL is extracted from any surrounding noise). Bare numeric IDs also work.",
            "items": {
              "type": "string"
            }
          },
          "targetLanguage": {
            "title": "Output language",
            "enum": [
              "zh",
              "en",
              "es",
              "hi",
              "ar",
              "pt",
              "ru",
              "ja",
              "de",
              "fr",
              "ko",
              "id",
              "tr",
              "it",
              "vi",
              "th",
              "pl",
              "nl",
              "bn",
              "ur",
              "fa",
              "uk",
              "ms",
              "tl",
              "bg",
              "ca",
              "cs",
              "da",
              "el",
              "et",
              "fi",
              "gu",
              "he",
              "hr",
              "hu",
              "is",
              "kn",
              "lt",
              "lv",
              "ml",
              "mr",
              "nb",
              "pa",
              "ro",
              "sk",
              "sl",
              "sr",
              "sv",
              "sw",
              "ta",
              "te"
            ],
            "type": "string",
            "description": "Choose one output language per run. <code>zh</code> keeps the original Chinese transcript; the other 50 choices translate the transcript and requested subtitles at the translated-minute rate.",
            "default": "zh"
          },
          "shouldDownloadVideos": {
            "title": "📥 Also save the MP4 video",
            "type": "boolean",
            "description": "Save the original MP4 to your key-value store and get <code>mp4Url</code> in the result. No separate actor charge for saving media; standard Apify usage and storage charges still apply. Subtitles remain a separate file.",
            "default": false
          },
          "shouldDownloadCovers": {
            "title": "🖼️ Also save the cover image",
            "type": "boolean",
            "description": "Save the video cover image to your key-value store. No separate actor charge; standard Apify usage and storage charges still apply.",
            "default": false
          },
          "outputSrt": {
            "title": "Also produce a subtitle file (.srt)",
            "type": "boolean",
            "description": "Export a separate SubRip (.srt) subtitle file in the chosen language. The result includes <code>srtUrl</code> when export succeeds. A generated file has a separate export charge. Captions are not added to the MP4.",
            "default": false
          },
          "videoKvStoreName": {
            "title": "Custom key-value store name (videos & covers)",
            "type": "string",
            "description": "Save videos and covers to a named key-value store shared across runs. Use lowercase letters, digits and dashes. Leave empty for the run’s default store. Storage availability and retention depend on your Apify account and settings.",
            "default": ""
          },
          "srtKvStoreName": {
            "title": "Custom key-value store name (SRT files)",
            "type": "string",
            "description": "Save subtitle files to a named key-value store shared across runs. Use lowercase letters, digits and dashes. Leave empty for the run’s default store. Storage availability and retention depend on your Apify account and settings.",
            "default": ""
          },
          "feedback": {
            "title": "Feedback to the maintainers",
            "type": "string",
            "description": "For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}