{
  "openapi": "3.0.1",
  "info": {
    "title": "Universal Media Transcriber",
    "description": "Transcribe any video, audio or podcast link: YouTube, TikTok, Instagram, X, Spotify, podcast RSS, cloud files and 1,800+ sites. Get full transcripts, timestamps, speaker labels, SRT/VTT subtitles, summaries and RAG-ready chunks. 99 languages, no API key needed.",
    "version": "1.0",
    "x-build-id": "hfFfFmer6bGPF43mo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/insights_data~universal-media-transcriber/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-insights_data-universal-media-transcriber",
        "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/insights_data~universal-media-transcriber/runs": {
      "post": {
        "operationId": "runs-sync-insights_data-universal-media-transcriber",
        "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/insights_data~universal-media-transcriber/run-sync": {
      "post": {
        "operationId": "run-sync-insights_data-universal-media-transcriber",
        "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": "🔗 Media links",
            "type": "array",
            "description": "Links to transcribe, one per line: videos, Shorts, Reels, TikToks, X / Facebook / Instagram posts, podcast episodes, podcast RSS feeds, Apple Podcasts and Spotify shows or episodes, YouTube channels and playlists, SoundCloud tracks and sets, Google Drive / Dropbox / OneDrive share links and direct audio or video files (mp3, mp4, wav, m4a, ...). Feeds, shows, channels and playlists give their newest items.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "🔎 Search queries",
            "type": "array",
            "description": "Search terms; each one adds the top results (as many as 'Items per feed / channel / search') from the platform chosen below.",
            "items": {
              "type": "string"
            }
          },
          "searchPlatform": {
            "title": "📺 Search on",
            "enum": [
              "youtube",
              "soundcloud"
            ],
            "type": "string",
            "description": "Where the search queries run.",
            "default": "youtube"
          },
          "audioFiles": {
            "title": "📤 Upload audio or video files",
            "type": "array",
            "description": "Audio or video files from your computer (mp3, mp4, wav, m4a, mov, ...). Each file becomes one transcript."
          },
          "inputFile": {
            "title": "📄 File with links",
            "type": "string",
            "description": "A .txt (one link per line), .csv (any column with links) or .json file (rows of another scraper's output) with media links."
          },
          "datasetId": {
            "title": "📥 Dataset (chain another run)",
            "type": "string",
            "description": "Pick a dataset from another run (for example a TikTok, YouTube or podcast scraper), or give its ID through the API. One media link is taken from each row (up to 5,000 rows)."
          },
          "transcriptStrategy": {
            "title": "🪜 Transcript source",
            "enum": [
              "auto",
              "captions",
              "whisper"
            ],
            "type": "string",
            "description": "Auto delivers the best available transcript for each item: a transcript the publisher already published, the platform's captions, or speech recognition when there is neither. 'Captions only' never runs speech recognition (items without captions come back as free no_captions rows). 'Always speech recognition' transcribes the audio itself.",
            "default": "auto"
          },
          "acceptAutoCaptions": {
            "title": "🪄 Accept auto-generated captions",
            "type": "boolean",
            "description": "Count the platform's auto-generated captions as captions. Turn off to use only creator-uploaded captions (other items go to speech recognition in Auto mode).",
            "default": true
          },
          "usePublisherTranscripts": {
            "title": "📰 Use the publisher's own transcript",
            "type": "boolean",
            "description": "When a podcast episode comes with a transcript published by its host, deliver that one (usually edited and with speaker names).",
            "default": true
          },
          "language": {
            "title": "🌍 Spoken language",
            "type": "string",
            "description": "Language code of the recording (en, es, de, pt-BR, ...). Leave empty to detect it automatically. Also picks the caption track in that language when one exists."
          },
          "model": {
            "title": "🧠 Speech model size",
            "enum": [
              "auto",
              "tiny",
              "base",
              "small",
              "medium",
              "large-v3",
              "large-v3-turbo",
              "distil-large-v3"
            ],
            "type": "string",
            "description": "Size of the speech-recognition model. Auto picks a fast model that fits the run's memory. Bigger models are more accurate and slower. Memory needed: tiny and base 1 GB, small 2 GB, medium, distil-large-v3 and large-v3-turbo 4 GB, large-v3 8 GB; when the run has less, the biggest model that fits is used.",
            "default": "auto"
          },
          "vocabulary": {
            "title": "📖 Vocabulary",
            "type": "string",
            "description": "Names, brands and jargon the recording contains, comma-separated, so speech recognition spells them right (for example: OpenAI, Anthropic, Claude, LangChain)."
          },
          "wordTimestamps": {
            "title": "🔤 Word-level timestamps",
            "type": "boolean",
            "description": "Add start/end/confidence for every word inside each segment (karaoke captions, precise cuts). Uses speech recognition for every item.",
            "default": false
          },
          "vadFilter": {
            "title": "🔇 Skip silence and music",
            "type": "boolean",
            "description": "Skip silent and music-only parts: faster and no invented lines over silence.",
            "default": true
          },
          "startAt": {
            "title": "⏩ Start at",
            "pattern": "^$|^\\d+(\\.\\d+)?\\s*(second|sec|minute|min|hour|hr|day|week|month|year)s?$|^\\d+(\\.\\d+)?\\s*(s|m|h)?$|^\\d+(:\\d{1,2}){1,2}(\\.\\d+)?$",
            "type": "string",
            "description": "Transcribe only from this point of the recording, counted from its start. Use a relative value; the picker lists days and weeks, so for minutes and hours type them in JSON input: 90 seconds, 10 minutes, 1 hour, 00:10:00 or 600. A calendar date cannot mark a point in a recording. Empty = from the start."
          },
          "endAt": {
            "title": "🛑 End at",
            "pattern": "^$|^\\d+(\\.\\d+)?\\s*(second|sec|minute|min|hour|hr|day|week|month|year)s?$|^\\d+(\\.\\d+)?\\s*(s|m|h)?$|^\\d+(:\\d{1,2}){1,2}(\\.\\d+)?$",
            "type": "string",
            "description": "Transcribe only up to this point of the recording, counted from its start. Use a relative value; the picker lists days and weeks, so for minutes and hours type them in JSON input: 20 minutes, 1 hour, 00:20:00 or 1200. A calendar date cannot mark a point in a recording. Empty = to the end (or the max minutes below)."
          },
          "maxMinutesPerItem": {
            "title": "⌛ Max minutes per item",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Longer recordings are transcribed up to this many minutes. Long recordings are processed piece by piece; more run memory gives more CPU and faster speech recognition.",
            "default": 120
          },
          "speakerLabels": {
            "title": "👥 Speaker labels",
            "type": "boolean",
            "description": "Mark segments, paragraphs and subtitles with Speaker 1, Speaker 2, ... (who speaks when). The audio is downloaded for this, also when captions exist, so runs take longer.",
            "default": false
          },
          "numSpeakers": {
            "title": "🔢 Number of speakers",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many people speak, when you know it (more accurate labels). 0 = detect automatically.",
            "default": 0
          },
          "speakerNames": {
            "title": "📛 Speaker names",
            "type": "array",
            "description": "Names for Speaker 1, Speaker 2, ... in order of who speaks first (for example: Host, Guest).",
            "items": {
              "type": "string"
            }
          },
          "maxItemsPerSource": {
            "title": "📊 Items per feed / channel / search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Newest items taken from each podcast feed, Apple Podcasts / Spotify show, YouTube channel or playlist, SoundCloud artist or set, and search query (after the filters below).",
            "default": 2
          },
          "publishedAfter": {
            "title": "📅 Published after",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Only items published after this date. Pick a date (2026-09-01) or a relative window (30 days, 2 weeks, 6 months)."
          },
          "publishedBefore": {
            "title": "📆 Published before",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Only items published before this date. Pick a date (2026-09-30) or a relative time (7 days = published more than 7 days ago)."
          },
          "titleContains": {
            "title": "🎯 Title contains",
            "type": "string",
            "description": "Only items whose title contains one of these words, case-insensitive; separate alternatives with | (interview|Q&A)."
          },
          "titleExcludes": {
            "title": "🚫 Title excludes",
            "type": "string",
            "description": "Skip items whose title contains one of these words; separate alternatives with | (trailer|teaser)."
          },
          "minDurationSeconds": {
            "title": "⏳ Minimum duration",
            "minimum": 0,
            "type": "integer",
            "description": "Skip items shorter than this (when the source reports a duration). 0 = no minimum.",
            "default": 0
          },
          "maxDurationSeconds": {
            "title": "⌚ Maximum duration",
            "minimum": 0,
            "type": "integer",
            "description": "Skip items longer than this (when the source reports a duration). 0 = no maximum.",
            "default": 0
          },
          "includeShorts": {
            "title": "📱 Include YouTube Shorts",
            "type": "boolean",
            "description": "For a YouTube channel link, also take the newest Shorts (in addition to the newest videos).",
            "default": false
          },
          "searchTerms": {
            "title": "🔔 Keywords to monitor",
            "type": "array",
            "description": "Brands, names or keywords to find in every transcript. Each hit is listed with its timestamp, the words around it and a link that opens the media at that moment.",
            "items": {
              "type": "string"
            }
          },
          "cleanTranscript": {
            "title": "🧹 Clean transcript",
            "type": "boolean",
            "description": "Add cleanText: the transcript without um/uh, [Music] tags and stutters.",
            "default": true
          },
          "ragChunkWords": {
            "title": "📚 RAG chunk size",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Split each transcript into chunks of about this many words, with timestamps and links (ready for a vector database). 0 = no chunks.",
            "default": 300
          },
          "ragChunkOverlapWords": {
            "title": "🧷 Chunk overlap",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Words repeated between neighbouring chunks so no idea is cut in half.",
            "default": 40
          },
          "subtitleMaxCharsPerLine": {
            "title": "🔠 Subtitle characters per line",
            "minimum": 10,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum characters per subtitle line (42 is the broadcast standard).",
            "default": 42
          },
          "subtitleMaxLines": {
            "title": "📏 Subtitle lines per cue",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Maximum lines shown at once.",
            "default": 2
          },
          "subtitleMaxSeconds": {
            "title": "🕐 Max seconds per subtitle",
            "minimum": 1,
            "maximum": 20,
            "type": "number",
            "description": "Longest time one subtitle stays on screen.",
            "default": 6
          },
          "includeSubtitlesInRecord": {
            "title": "📼 Include SRT / VTT in each row",
            "type": "boolean",
            "description": "Put the SRT and VTT subtitle text on every row. They are always in the Subtitles table too.",
            "default": true
          },
          "includeSegments": {
            "title": "🧩 Include segments & paragraphs",
            "type": "boolean",
            "description": "Put the timestamped segments and readable paragraphs on every row (off = smaller rows). Segments are always in the Segments table too.",
            "default": true
          },
          "includeFailedItems": {
            "title": "🧾 Include failed items",
            "type": "boolean",
            "description": "Add a free row for every item that could not be transcribed, with the reason (no_speech, source_unavailable, bad_input, ...).",
            "default": true
          },
          "exportFormats": {
            "title": "💾 Export files",
            "type": "array",
            "description": "Also save each transcript as files in the run's key-value store; the row's files column links to them.",
            "items": {
              "type": "string",
              "enum": [
                "srt",
                "vtt",
                "txt",
                "md",
                "docx",
                "json"
              ],
              "enumTitles": [
                "SRT subtitles",
                "VTT subtitles",
                "Plain text",
                "Markdown",
                "Word (.docx)",
                "JSON"
              ]
            },
            "default": []
          },
          "combinedReport": {
            "title": "📑 Combined report",
            "type": "boolean",
            "description": "One Markdown and one Word file with every transcript of the run, plus a run summary JSON, in the key-value store.",
            "default": false
          },
          "watchlistId": {
            "title": "👀 Watchlist ID",
            "pattern": "^[\\w-]{0,64}$",
            "type": "string",
            "description": "Name for a memory of transcribed items that is kept between runs (letters, numbers, - and _). Use it with a schedule to follow a feed or channel."
          },
          "newItemsOnly": {
            "title": "🆕 Only new items",
            "type": "boolean",
            "description": "With a Watchlist ID: skip items transcribed by earlier runs, so a scheduled run delivers (and bills) only new uploads.",
            "default": false
          },
          "cacheTranscripts": {
            "title": "💽 Reuse saved transcripts",
            "type": "boolean",
            "description": "Keep each transcript and reuse it when the same item is run again with the same transcript settings, so re-running with new keywords, chunks or export files is fast.",
            "default": true
          },
          "webhookUrl": {
            "title": "📬 Webhook URL",
            "type": "string",
            "description": "Every finished row (without segments, subtitles and chunks) is also POSTed here as JSON (Zapier, Make, n8n, your server)."
          },
          "maxRunMinutes": {
            "title": "⏰ Stop starting new items after",
            "minimum": 0,
            "type": "number",
            "description": "Items not started after this many minutes come back as free deadline rows. 0 = no limit.",
            "default": 0
          },
          "cookies": {
            "title": "🍪 Cookies (cookies.txt)",
            "type": "string",
            "description": "Optional Netscape cookies.txt content for age-restricted or members-only media, or when YouTube asks to sign in. Stored encrypted."
          },
          "maxConcurrency": {
            "title": "⚡ Parallel downloads",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many items are fetched at the same time. Speech recognition runs one item at a time.",
            "default": 3
          },
          "maxRetries": {
            "title": "🔄 Retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries for a failed request.",
            "default": 2
          },
          "autoUpdateYtDlp": {
            "title": "🆙 Refresh site support before the run",
            "type": "boolean",
            "description": "Update the built-in site support to its newest release before transcribing (adds about 10-20 seconds). Turn on if links from a site suddenly fail.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "By default no proxy is used. If a site blocks the requests, the run switches to a datacenter proxy and then to a residential proxy (with up to 3 retries) and keeps it for the rest of the run. Pick a proxy here to start with it.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}