{
  "openapi": "3.0.1",
  "info": {
    "title": "Audio & Video Transcription: Whisper, SRT & RAG Chunks",
    "description": "Transcribe audio, video files and podcast RSS feeds to timestamped text, SRT/VTT subtitles and token-counted RAG chunks with time ranges. Whisper speech to text runs inside the Actor, no API key, about 100 languages. No speaker labels. Not affiliated with OpenAI.",
    "version": "1.0",
    "x-build-id": "ZPTqOtom1VhXiMsB4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mmdincer~audio-video-transcriber/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mmdincer-audio-video-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/mmdincer~audio-video-transcriber/runs": {
      "post": {
        "operationId": "runs-sync-mmdincer-audio-video-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/mmdincer~audio-video-transcriber/run-sync": {
      "post": {
        "operationId": "run-sync-mmdincer-audio-video-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 URLs",
            "maxItems": 100,
            "type": "array",
            "description": "Direct links to audio or video files (MP3, M4A, WAV, OGG, FLAC, MP4, WEBM, MOV and more), or to a podcast RSS feed, one per line. Up to 100 per run. The link must return the file itself, not a web page that plays it. Dropbox share links work. YouTube, TikTok and Instagram page links are not supported.",
            "items": {
              "type": "string"
            }
          },
          "datasetId": {
            "title": "Read media links from a dataset",
            "type": "string",
            "description": "Optional. Pick an Apify dataset whose items contain audio, video or feed links. The Actor looks for <code>audioUrl</code>, <code>mediaUrl</code>, <code>videoUrl</code>, <code>enclosureUrl</code>, <code>fileUrl</code>, <code>url</code>, <code>link</code> and similar fields, which is how you chain it after another Actor without copying links by hand. The dataset is opened read-only."
          },
          "mode": {
            "title": "What to return",
            "enum": [
              "both",
              "chunks",
              "transcript"
            ],
            "type": "string",
            "description": "<b>Transcript and chunks</b> writes one transcript row plus its chunk rows. <b>Chunks only</b> skips the transcript row, so the dataset is exactly what an embedding job wants. <b>Transcript only</b> returns the text, segments and subtitles without chunking.",
            "default": "both"
          },
          "model": {
            "title": "Speech model",
            "enum": [
              "small",
              "base",
              "tiny"
            ],
            "type": "string",
            "description": "<b>Small</b> (default) is the most accurate and handles accents and noisy audio best. <b>Base</b> and <b>Tiny</b> are faster and cheaper per minute, fine for clean studio speech. All three understand about 100 languages.",
            "default": "small"
          },
          "language": {
            "title": "Spoken language",
            "type": "string",
            "description": "Leave on <code>auto</code> and the model detects the language from the first 30 seconds. Set a two-letter code such as <code>en</code>, <code>de</code>, <code>es</code>, <code>fr</code> or <code>tr</code> when you know it: it is a little faster and avoids a wrong guess on a short or noisy start.",
            "default": "auto"
          },
          "vocabulary": {
            "title": "Names and jargon",
            "type": "array",
            "description": "Words the recording uses that a general speech model would misspell: product names, people, acronyms. They are given to the model as a spelling hint for the first window of audio. This does not translate and it does not label speakers. Up to 40 entries, 60 characters each. Leave empty to change nothing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "initialPrompt": {
            "title": "Context for the first minute",
            "type": "string",
            "description": "Optional sentence describing the recording, for example \"A product demo of the Apify platform.\" It is passed to the speech model as context, not as words that were spoken. At most 240 characters. Combined with Names and jargon it is capped at 500 characters.",
            "default": ""
          },
          "chunkSize": {
            "title": "Chunk size (tokens)",
            "minimum": 64,
            "maximum": 4096,
            "type": "integer",
            "description": "Token budget per chunk, counted with the cl100k_base tokenizer that OpenAI embedding and chat models use. 512 is a good default for retrieval; use 256 for narrow facts and 1024 or more for long arguments.",
            "default": 512
          },
          "chunkOverlap": {
            "title": "Chunk overlap (tokens)",
            "minimum": 0,
            "maximum": 2048,
            "type": "integer",
            "description": "How much text from the end of one chunk is repeated at the start of the next, so an answer that straddles a boundary is still findable. 64 is the default (an eighth of the chunk size). At most half the chunk size.",
            "default": 64
          },
          "subtitleFormat": {
            "title": "Subtitle file",
            "enum": [
              "srt",
              "vtt",
              "both",
              "none"
            ],
            "type": "string",
            "description": "Adds the subtitles to the transcript row as text you can save as a <code>.srt</code> or <code>.vtt</code> file. Pick <b>None</b> to keep rows smaller.",
            "default": "srt"
          },
          "includeSegments": {
            "title": "Include timestamped segments",
            "type": "boolean",
            "description": "Adds a <code>segments</code> array with the start, end and text of every spoken segment to the transcript row.",
            "default": true
          },
          "maxEpisodesPerFeed": {
            "title": "Episodes per podcast feed",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "When a link is a podcast RSS feed, transcribe this many of the newest episodes. Up to 50.",
            "default": 3
          },
          "onlyNewEpisodes": {
            "title": "Skip files already transcribed",
            "type": "boolean",
            "description": "Remembers every link this Actor has transcribed for you (in a named key-value store in your account) and skips it next time. Turn it on for a scheduled run on a podcast feed so you only pay for new episodes.",
            "default": false
          },
          "maxFiles": {
            "title": "Maximum files per run",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Upper bound on audio or video files transcribed in one run, counting podcast episodes. Extra links are left untouched.",
            "default": 20
          },
          "maxDurationMinutes": {
            "title": "Maximum minutes per file",
            "minimum": 1,
            "maximum": 360,
            "type": "integer",
            "description": "Files longer than this are skipped without a charge. Up to 360. Long files need memory: about 1 GB per 90 minutes of audio on top of the model.",
            "default": 120
          },
          "maxFileSizeMb": {
            "title": "Maximum file size (MB)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Skip files larger than this instead of downloading them.",
            "default": 500
          },
          "maxChunksPerDocument": {
            "title": "Maximum chunks per transcript",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Safety cap on chunk rows for one file, so a tiny chunk size on a very long recording cannot flood your storage.",
            "default": 2000
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Off by default. Only turn it on when the host of your files blocks datacenter IPs."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}