{
  "openapi": "3.0.1",
  "info": {
    "title": "Twitch & Kick VOD Transcript Scraper - SRT & Text",
    "description": "Transcribe Twitch and Kick VODs, clips and full broadcasts to text with AI speech recognition. Word-level timestamps, speaker labels for co-streams, SRT and VTT subtitles, 90+ languages, up to 10 hours per recording. Mix Twitch and Kick in one bulk run. No login, no API key, no downloads.",
    "version": "0.1",
    "x-build-id": "qbkWn6T5Sqbpnb5mH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/deapi~twitch-kick-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-deapi-twitch-kick-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/deapi~twitch-kick-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-deapi-twitch-kick-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/deapi~twitch-kick-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-deapi-twitch-kick-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",
        "required": [
          "videoUrls"
        ],
        "properties": {
          "videoUrls": {
            "title": "Twitch or Kick video URLs",
            "minItems": 1,
            "type": "array",
            "description": "Links to **finished** recordings. Twitch VODs (`twitch.tv/videos/1234567890`), Twitch clips (`twitch.tv/channel/clip/ClipSlug`) and Kick VODs (`kick.com/channel/videos/<video-id>`) all work, mixed freely in one run. Short forms — `m.twitch.tv`, `clips.twitch.tv/Slug`, `kick.com/video/<id>` — are rewritten for you. A **channel page is rejected**: a live broadcast has no final length and cannot be transcribed. Maximum 10 hours per recording. Dead, private, subscriber-only and expired VODs are detected before anything is charged. **Free plan: 1 recording per run, 20 minutes maximum, 20 transcribed minutes per calendar month (resets 00:00 UTC on the 1st). Paid plans remove all three limits.**",
            "items": {
              "type": "string"
            }
          },
          "timestampLevel": {
            "title": "Timestamp level",
            "enum": [
              "none",
              "segment",
              "word"
            ],
            "type": "string",
            "description": "How finely the transcript is timed. **Segment** gives one timestamp per sentence — right for subtitles, reading and jumping into a stream at the moment something was said, and included in the base price. **Word** times every single word — right for clip cutting, highlight detection and search. **None** returns plain text only. Word moves the recording onto the precision rate ($0.017 a minute against $0.010), and choosing speaker labels as well costs nothing extra on top.",
            "default": "segment"
          },
          "diarize": {
            "title": "Label speakers (diarization)",
            "type": "boolean",
            "description": "Detect who is speaking and tag every line with a speaker (SPEAKER_00, SPEAKER_01, …). Use it for co-streams, podcasts, interviews, watch-alongs and any broadcast with guests in the call. Speaker labels need timing to attach to, so switching this on together with **None** still returns sentence-level timing. Moves the recording onto the precision rate ($0.017 a minute against $0.010); if you already picked Word timestamps, adding speakers costs nothing extra.",
            "default": false
          },
          "language": {
            "title": "Spoken language",
            "enum": [
              "auto",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "uk",
              "ru",
              "tr",
              "ar",
              "he",
              "hi",
              "id",
              "ms",
              "vi",
              "th",
              "ja",
              "ko",
              "zh",
              "sv",
              "da",
              "no",
              "fi",
              "cs",
              "ro",
              "el",
              "hu"
            ],
            "type": "string",
            "description": "Leave on auto-detect unless the broadcast mixes languages or the audio sits under loud game sound — naming the language then makes the transcript noticeably more accurate. Auto-detect covers 90+ languages; the dropdown lists the 29 most requested, and anything outside it is still transcribed on auto-detect.",
            "default": "auto"
          },
          "includeSubtitles": {
            "title": "Add SRT and VTT subtitles",
            "type": "boolean",
            "description": "Return ready-to-use subtitle files as `srt` and `vtt` fields — paste them straight into a video editor, a player or a CMS. Free of charge. Subtitles need timing to exist, so they are produced at every timestamp level except None, and also at None when speaker labels are switched on. On very long broadcasts the files are saved to the run's key-value store and linked as `srtUrl` and `vttUrl` instead of being inlined, so nothing is ever truncated.",
            "default": true
          },
          "includeMetadata": {
            "title": "Add broadcast metadata",
            "type": "boolean",
            "description": "Attach the recording's own data to each row: title, channel, description, stream date, thumbnail, view count and — on Twitch — the game or category the broadcast was listed under. Which fields are present varies by platform; Twitch and Kick do not expose the same set. Turns one run into transcript + broadcast context for content research. Charged as an add-on of $0.005 per recording.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Recordings in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many recordings are transcribed at the same time. Higher finishes a large batch sooner. It has no effect on price — you are charged per minute of source either way, and platform usage is on us.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}