{
  "openapi": "3.0.1",
  "info": {
    "title": "Audio & Video to Text: YouTube & Podcast Transcription",
    "description": "Audio and video transcription of YouTube videos, podcasts, MP3, MP4, Google Drive and Dropbox links. Speech to text (Whisper) with timestamps, SRT and VTT subtitles, speaker labels, translation into up to 5 languages, mention search. Author captions and podcast transcripts are used at no minute fee.",
    "version": "0.1",
    "x-build-id": "wJewAxKvSRzdweRZi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/firsthand~audio-video-transcription/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-firsthand-audio-video-transcription",
        "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/firsthand~audio-video-transcription/runs": {
      "post": {
        "operationId": "runs-sync-firsthand-audio-video-transcription",
        "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/firsthand~audio-video-transcription/run-sync": {
      "post": {
        "operationId": "run-sync-firsthand-audio-video-transcription",
        "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. Works with: YouTube videos, Shorts, channels and playlists; direct audio and video files (mp3, m4a, wav, ogg, mp4, webm, mov and more) on any public host; Google Drive and Dropbox files shared with anyone who has the link; podcast RSS feeds (the newest episodes are taken); Apple Podcasts show and episode links; and video pages on sites like TikTok, Instagram, Facebook, SoundCloud and Dailymotion. A SoundCloud artist link gives the newest tracks. Vimeo and Spotify are not supported.",
            "items": {
              "type": "string"
            }
          },
          "maxEpisodesPerFeed": {
            "title": "Episodes per podcast feed or channel",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many of the newest episodes to take from each podcast feed or Apple Podcasts show link, newest videos from a YouTube channel or first videos of a playlist, and tracks from a SoundCloud artist link.",
            "default": 3
          },
          "titleIncludes": {
            "title": "Episode title contains",
            "type": "array",
            "description": "Only episodes of feeds, Apple Podcasts shows, YouTube channels and playlists whose title contains one of these texts, one per line, like interview. The text is found anywhere in the title, also inside words (ad also keeps Bad news). Case and accents are ignored; * matches anything, like interview*ceo. Episodes per feed counts only the episodes that pass. Direct links to one episode or video are not filtered.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Episode title does not contain",
            "type": "array",
            "description": "Skip episodes whose title contains one of these texts, one per line, like trailer, rerun or best of. The text is found anywhere in the title, also inside words. Skipped episodes are not charged.",
            "items": {
              "type": "string"
            }
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of the speech as a two-letter code (en, es, de, ru) or a name (Spanish). Leave empty to detect it automatically for every 10-minute piece."
          },
          "usePublisherTranscripts": {
            "title": "Use the podcast's or video's own transcript",
            "type": "boolean",
            "description": "When a podcast feed lists a transcript for an episode (Podcasting 2.0), or a YouTube video has captions uploaded by its author in the video's language (not YouTube's automatic captions), they are used instead of transcribing, and the audio minutes are free. Turn off to always transcribe the audio. Speaker labels always transcribe the audio.",
            "default": true
          },
          "summarize": {
            "title": "Summary, chapters and key points",
            "type": "boolean",
            "description": "Adds a short summary, timestamped chapters, key points, keywords and the names of people mentioned, written by AI from the transcript. Charged per started hour of recording with speech.",
            "default": false
          },
          "speakerLabels": {
            "title": "Speaker labels (who said what)",
            "type": "boolean",
            "description": "Marks every line with the person speaking (Speaker 1, Speaker 2 and so on), also in the subtitles, and adds speakerTranscript with the whole dialogue. Speech is then transcribed by ElevenLabs Scribe instead of Whisper. Adds $0.003 per audio minute.",
            "default": false
          },
          "translateTo": {
            "title": "Translate to",
            "type": "string",
            "description": "Also translate the transcript into up to 5 languages, separated by commas: codes like en, es, de or names like Spanish. The first language fills translatedText and translated SRT and VTT subtitles with the same timestamps; with two or more, translations has text and subtitles for each language. $0.002 per audio minute per language; a language the recording is already in, or one that fails, is not charged. Empty means no translation."
          },
          "searchTerms": {
            "title": "Find mentions of",
            "type": "array",
            "description": "Brands, names or topics to find in the transcripts, one per line, like Apify or customer churn. Each mention comes back in mentions with its time, the phrase around it, the speaker and a link that opens the recording at that moment; mentionCounts has the number per term, and the run's totals and a CSV of the mentions are in the key-value store (MENTIONS, MENTIONS.csv). Case and accents on Latin letters are ignored and whole words are matched (Chinese, Japanese, Korean: anywhere); * matches any letters, like transcri*. Up to 50 terms. Free.",
            "items": {
              "type": "string"
            }
          },
          "subtitles": {
            "title": "SRT and VTT subtitles",
            "type": "boolean",
            "description": "Adds ready subtitle files as text in the srt and vtt fields. Free.",
            "default": true
          },
          "includeSegments": {
            "title": "Timestamped segments",
            "type": "boolean",
            "description": "Adds the transcript split into lines with start and end seconds. Free.",
            "default": true
          },
          "wordTimestamps": {
            "title": "Word timestamps",
            "type": "boolean",
            "description": "Add the start and end time of every word inside each segment (segments[].words), for karaoke captions, clip cutting or word-accurate search. Free. Only for recordings the actor transcribes, not for podcast transcripts taken from the feed or YouTube author captions. Turns segments on.",
            "default": false
          },
          "maxMinutesPerItem": {
            "title": "Max minutes per recording",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Longer recordings are transcribed up to this length and charged only for it; the row says truncated. Empty means up to 600 minutes."
          },
          "maxTotalMinutes": {
            "title": "Max minutes per run",
            "minimum": 1,
            "type": "integer",
            "description": "A recording that would take the run over this many charged audio minutes is skipped; shorter ones that still fit are taken. You can also cap spending with the run's maximum cost."
          },
          "onlyNewEpisodes": {
            "title": "Only new episodes",
            "type": "boolean",
            "description": "Remember what was transcribed and leave it out of later runs with the same list name. Put the actor on a schedule with a podcast feed or a YouTube channel: each run transcribes and charges only episodes it has not seen before, all episodes published since the last run, however many. A recording that failed is tried again while it is among the newest episodes.",
            "default": false
          },
          "monitorName": {
            "title": "List name",
            "type": "string",
            "description": "Runs with the same name share the list of transcribed recordings, for example one name per podcast schedule. Letters, digits, dashes and underscores. Empty means 'default'."
          },
          "publishedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Take only feed episodes published on or after this date (2026-09-01, midnight UTC) or within a window back from now (30 days, 2 weeks, 12 hours; a month is 30 days). Applies to podcast feeds, Apple Podcasts shows and YouTube channels (YouTube gives channel videos approximate dates, like 3 days ago); episodes without a date are kept."
          },
          "datasetId": {
            "title": "Dataset ID from another actor's run",
            "type": "string",
            "description": "Transcribe the links found in a dataset, for example the output of a podcast, TikTok or video scraper. In each row the actor takes the first field that holds a link (audioUrl, mediaUrl, videoUrl, url and similar). Up to 10,000 rows."
          },
          "datasetItems": {
            "title": "Dataset rows",
            "type": "array",
            "description": "Rows of another actor's output pasted as JSON; a link is taken from each row the same way as with Dataset ID."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}