{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk YouTube Transcript Scraper & Transcript API",
    "description": "Get transcripts of all videos in a YouTube channel, playlist or Shorts feed, or any list of video URLs. Bulk YouTube transcript API: timestamped segments, plain text, captions and subtitles, language, views, AI-ready chunks. Clear reason for every video without captions, never charged. No login.",
    "version": "0.1",
    "x-build-id": "TfQMyEnE2q1FxaClN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apimint~youtube-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apimint-youtube-transcript-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/apimint~youtube-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apimint-youtube-transcript-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/apimint~youtube-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apimint-youtube-transcript-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": {
          "urls": {
            "title": "YouTube URLs",
            "type": "array",
            "description": "One per line, mixed freely: video URLs (watch, youtu.be, Shorts, live, embed) or 11-character video IDs, channel URLs (@handle, /channel/UC…, /c/…, /user/…) and playlist URLs. A channel URL ending in /shorts or /streams lists those instead of regular videos.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerChannel": {
            "title": "Max videos per channel or playlist",
            "minimum": 0,
            "type": "integer",
            "description": "Newest first for channels, playlist order for playlists. 0 = all of them.",
            "default": 50
          },
          "channelContent": {
            "title": "Channel videos to include",
            "enum": [
              "videos",
              "shorts",
              "streams",
              "all"
            ],
            "type": "string",
            "description": "Which uploads of a channel to list. A /shorts or /streams channel URL overrides this for that channel.",
            "default": "videos"
          },
          "publishedAfter": {
            "title": "Published after",
            "pattern": "^$|^\\d{4}-?\\d{2}-?\\d{2}$|^\\d+\\s*(day|week|month|year)s?(\\s+ago)?$",
            "type": "string",
            "description": "Channels and playlists only. A date (2026-09-01) or a period back from today (\"30 days\", \"6 months\"). Inclusive."
          },
          "publishedBefore": {
            "title": "Published before",
            "pattern": "^$|^\\d{4}-?\\d{2}-?\\d{2}$|^\\d+\\s*(day|week|month|year)s?(\\s+ago)?$",
            "type": "string",
            "description": "Channels and playlists only. Same format as \"Published after\". Inclusive."
          },
          "maxVideos": {
            "title": "Max transcripts in total",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many charged transcripts across all URLs. 0 = no limit (the run's maximum charge still applies).",
            "default": 0
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Caption languages in order of preference, as codes: \"en\", \"es\", \"pt-BR\". Leave empty to get the language spoken in the video (YouTube's own speech recognition tells us which it is). The first track YouTube lists is often not the spoken one.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "captionType": {
            "title": "Caption type",
            "enum": [
              "any",
              "manual",
              "auto"
            ],
            "type": "string",
            "description": "Creator captions are typed by the uploader; auto-generated ones come from YouTube's speech recognition and often lack punctuation.",
            "default": "any"
          },
          "fallbackToAnyLanguage": {
            "title": "Fall back to another language",
            "type": "boolean",
            "description": "When none of your languages exists, return the spoken language (charged, marked languageMatched: false). Off: return a free \"language-not-available\" row instead.",
            "default": true
          },
          "includeTimestamps": {
            "title": "Timestamped segments",
            "type": "boolean",
            "description": "Each caption line with its start and end in seconds (field segments).",
            "default": true
          },
          "includePlainText": {
            "title": "Plain text",
            "type": "boolean",
            "description": "The whole transcript as one string (field text).",
            "default": true
          },
          "chunkWords": {
            "title": "AI chunks: words per chunk",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "For RAG and embeddings: split the transcript into chunks of about this many words, on caption boundaries, each with start, end and a link to that moment. 0 = off. 200–500 is typical.",
            "default": 0
          },
          "extraFormats": {
            "title": "Subtitle files",
            "type": "array",
            "description": "Add the transcript as SRT and/or WebVTT text in each row.",
            "items": {
              "type": "string",
              "enum": [
                "srt",
                "vtt"
              ],
              "enumTitles": [
                "SRT",
                "WebVTT"
              ]
            },
            "default": []
          },
          "includeFailures": {
            "title": "Rows for videos without a transcript",
            "type": "boolean",
            "description": "Add a free row with a status (no-captions, private, age-restricted, members-only, unavailable, live, region-blocked, blocked) for every video that has no transcript. They are never charged.",
            "default": true
          },
          "onlyNewVideos": {
            "title": "Only new videos (monitoring)",
            "type": "boolean",
            "description": "Skip videos this Actor already returned for the same URL and settings in your earlier runs. Use with a schedule to collect each new upload once. Skipped videos are not charged.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Residential is needed: YouTube answers data-center IPs with \"Sign in to confirm you're not a bot\". Proxy traffic is included in the price. If you pick another proxy and YouTube blocks it, the Actor switches to residential by itself.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}