{
  "openapi": "3.0.1",
  "info": {
    "title": "Whisper Transcription - Audio to Text, SRT, VTT (mp3 URL)",
    "description": "Transcribe audio, video and podcast RSS to text, SRT or VTT with Whisper. No OpenAI or other API key needed. $0.006 per audio minute on the Free plan, no start fee, failed files never charged. Direct mp3, wav, m4a, mp4 URLs, up to 120 min per file.",
    "version": "0.1",
    "x-build-id": "5OJjVQb3Yx6cLKICu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pennydata~audio-transcriber/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pennydata-audio-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/pennydata~audio-transcriber/runs": {
      "post": {
        "operationId": "runs-sync-pennydata-audio-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/pennydata~audio-transcriber/run-sync": {
      "post": {
        "operationId": "run-sync-pennydata-audio-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": {
          "feedUrl": {
            "title": "Podcast RSS/Atom feed URL",
            "type": "string",
            "description": "Podcast feed (RSS or Atom with audio enclosures). The newest episodes are transcribed, one dataset item per episode with title, pubDate and audio URL. Can be combined with the file URLs below."
          },
          "maxEpisodes": {
            "title": "Max episodes from feed",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many of the newest episodes to transcribe from the feed.",
            "default": 3
          },
          "podcastFeedUrl": {
            "title": "podcastFeedUrl (alias of feedUrl)",
            "type": "string",
            "description": "Alias of feedUrl: podcast RSS/Atom feed URL. The newest maxEpisodes episodes are transcribed, each row carries episodeTitle, pubDate and guid."
          },
          "podcastName": {
            "title": "Podcast name (looked up in Apple Podcasts)",
            "type": "string",
            "description": "Show name, e.g. Planet Money. The best match in the Apple Podcasts directory is resolved to its RSS feed and the newest episodes are transcribed. Ignored if feedUrl is set."
          },
          "podcastUrl": {
            "title": "Apple Podcasts URL",
            "type": "string",
            "description": "A podcasts.apple.com show link (contains /id123456789). Resolved to the show's RSS feed. Ignored if feedUrl is set."
          },
          "urls": {
            "title": "Video or audio file URLs (mp4, webm, mov, mp3, wav ...)",
            "type": "array",
            "description": "Direct http(s) links to audio or video files (mp3, wav, m4a, ogg, flac, mp4, webm, mov ...). Pages such as YouTube or podcast web players are not supported; link the file itself.",
            "default": [
              "https://upload.wikimedia.org/wikipedia/commons/d/d1/En-uk-hello-6.ogg"
            ],
            "items": {
              "type": "string"
            }
          },
          "audioUrls": {
            "title": "Audio URLs (alias of urls)",
            "type": "array",
            "description": "Alias of urls, for compatibility with other transcriber actors. Merged with urls.",
            "items": {
              "type": "string"
            }
          },
          "audioUrl": {
            "title": "Audio URL (alias, single)",
            "type": "string",
            "description": "Alias for a single audio or video file URL. Merged with urls."
          },
          "url": {
            "title": "URL (alias, single)",
            "type": "string",
            "description": "Alias for a single audio or video file URL. Merged with urls."
          },
          "language": {
            "title": "Language",
            "enum": [
              "auto",
              "en",
              "es",
              "fr",
              "de",
              "it",
              "pt",
              "nl",
              "pl",
              "ru",
              "tr",
              "ar",
              "hi",
              "ja",
              "ko",
              "zh",
              "sv",
              "uk",
              "cs",
              "id"
            ],
            "type": "string",
            "description": "Spoken language, or auto to let the model detect it.",
            "default": "auto"
          },
          "task": {
            "title": "Task",
            "enum": [
              "transcribe",
              "translate"
            ],
            "type": "string",
            "description": "transcribe keeps the spoken language; translate outputs English text from any supported language (Whisper translate). Same price.",
            "default": "transcribe"
          },
          "translateToEnglish": {
            "title": "translateToEnglish (alias of task=translate)",
            "type": "boolean",
            "description": "Compatibility with lergassy/mp3-to-text input; true is the same as task translate.",
            "default": false
          },
          "wordTimestamps": {
            "title": "Word timestamps",
            "type": "boolean",
            "description": "Add words: [{word, start, end}] (seconds) to every row. Subtitle segments are then built from the words.",
            "default": false
          },
          "generateChapters": {
            "title": "Generate chapters (+$0.01 per file)",
            "type": "boolean",
            "description": "Adds chapters: [{start, title}] plus chaptersText (00:00 Title lines to paste into a YouTube or podcast description) and youtubeChapters (same, 0:00 style). Built from pauses and topic shifts, 5-12 chapters of at least 60 s (3-4 under 5 minutes), needs about 3+ minutes of speech. Charged $0.01 per file only when chapters are produced.",
            "default": false
          },
          "estimateOnly": {
            "title": "Estimate only (dry run, free)",
            "type": "boolean",
            "description": "Reads the duration of each file or feed episode and returns the estimated cost, without transcribing anything. Nothing is charged and the run finishes in seconds.",
            "default": false
          },
          "autoModel": {
            "title": "Auto-switch to faster model for long audio",
            "type": "boolean",
            "description": "When a run has more than 5 audio minutes, use the tiny model so it finishes before the run timeout. Turn off to always use the selected model.",
            "default": true
          },
          "model": {
            "title": "Model",
            "enum": [
              "base",
              "tiny",
              "small",
              "medium"
            ],
            "type": "string",
            "description": "base is more accurate; tiny is about 1.5x faster. Same price.",
            "default": "tiny"
          },
          "translate": {
            "title": "translate (alias of task=translate)",
            "type": "boolean",
            "description": "Compatibility with media-transcriber input; true is the same as task translate.",
            "default": false
          },
          "mediaUrls": {
            "title": "mediaUrls (alias of urls)",
            "type": "array",
            "description": "Compatibility with sauliusautomatesit/media-transcriber input; merged into urls.",
            "items": {
              "type": "string"
            }
          },
          "source_url": {
            "title": "source_url (alias of urls)",
            "type": "string",
            "description": "Compatibility with donjuan_mime/audio-video-to-text input; one direct file URL, merged into urls."
          },
          "rssFeedUrls": {
            "title": "rssFeedUrls (alias of feedUrl)",
            "type": "array",
            "description": "Compatibility with media-transcriber input; the first feed is used as feedUrl.",
            "items": {
              "type": "string"
            }
          },
          "maxEpisodesPerFeed": {
            "title": "maxEpisodesPerFeed (alias of maxEpisodes)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Compatibility with media-transcriber input."
          },
          "maxDurationMinutes": {
            "title": "maxDurationMinutes (alias of maxMinutesPerFile)",
            "minimum": 1,
            "type": "integer",
            "description": "Alias of maxMinutesPerFile (default 60, capped at 120). Longer files get a skipped row with reason file_too_long, not charged; also the media-transcriber alias of maxMinutesPerFile."
          },
          "outputFormats": {
            "title": "Output formats",
            "type": "array",
            "description": "text always stays in the dataset. Add srt and/or vtt to also get subtitle files (from the segment timestamps) stored in the key-value store, with their URLs on each dataset item.",
            "items": {
              "type": "string",
              "enum": [
                "text",
                "segments",
                "srt",
                "vtt",
                "markdown",
                "rag"
              ],
              "enumTitles": [
                "Plain text",
                "Segments (always included)",
                "SRT subtitles",
                "WebVTT subtitles",
                "markdown (compatibility: ignored)",
                "rag (compatibility: ignored)"
              ]
            },
            "default": [
              "text",
              "srt"
            ]
          },
          "maxMinutesPerFile": {
            "title": "Max minutes per file",
            "minimum": 1,
            "maximum": 120,
            "type": "integer",
            "description": "Files longer than this are skipped (not transcribed, not charged).",
            "default": 60
          },
          "maxCostUsd": {
            "title": "Max cost per run (USD)",
            "minimum": 0.02,
            "type": "number",
            "description": "Spending guard: a file that would exceed this is skipped and the run stops. Leave empty for no cap."
          },
          "subtitleFormat": {
            "title": "subtitleFormat (alias of outputFormats)",
            "enum": [
              "none",
              "srt",
              "vtt",
              "both"
            ],
            "type": "string",
            "description": "Compatibility with lergassy/mp3-to-text input; srt, vtt or both add subtitle files, like outputFormats."
          },
          "quality": {
            "title": "quality (compatibility, ignored)",
            "type": "string",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "diarize": {
            "title": "diarize (compatibility, ignored)",
            "type": "boolean",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "speakerCount": {
            "title": "speakerCount (compatibility, ignored)",
            "type": "integer",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "vocabularyHint": {
            "title": "vocabularyHint (compatibility, ignored)",
            "type": "string",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "includeSubtitles": {
            "title": "includeSubtitles (alias: adds an SRT file)",
            "type": "boolean",
            "description": "Compatibility with tidydata/audio-video-transcription input: true writes an SRT subtitle file per transcript (same as outputFormats containing srt)."
          },
          "includeSegments": {
            "title": "includeSegments (compatibility, ignored)",
            "type": "boolean",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "chunkForRag": {
            "title": "chunkForRag (compatibility, ignored)",
            "type": "boolean",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "chunkSize": {
            "title": "chunkSize (compatibility, ignored)",
            "type": "integer",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "chunkOverlapSeconds": {
            "title": "chunkOverlapSeconds (compatibility, ignored)",
            "type": "integer",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "apiKey": {
            "title": "apiKey (compatibility, ignored)",
            "type": "string",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "maxConcurrency": {
            "title": "maxConcurrency (compatibility, ignored)",
            "type": "integer",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "maxFileSizeMb": {
            "title": "maxFileSizeMb (compatibility, ignored)",
            "type": "integer",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "timeoutPerFileSecs": {
            "title": "timeoutPerFileSecs (compatibility, ignored)",
            "type": "integer",
            "description": "Accepted so lergassy/mp3-to-text input runs unchanged; not used here."
          },
          "maxMinutesPerItem": {
            "title": "maxMinutesPerItem (alias of maxMinutesPerFile)",
            "minimum": 1,
            "type": "integer",
            "description": "Compatibility with memo23/video-audio-transcriber input; capped at 120. Takes precedence over maxMinutesPerFile when set."
          },
          "speakerLabels": {
            "title": "speakerLabels (not supported, ignored)",
            "type": "boolean",
            "description": "Speaker diarization is not supported. Accepted only so inputs written for memo23/video-audio-transcriber run unchanged; the run logs a warning and the transcript has no speaker labels."
          },
          "vocabulary": {
            "title": "vocabulary (compatibility, ignored)",
            "type": "string",
            "description": "Accepted so inputs written for memo23/video-audio-transcriber run unchanged; not used here."
          },
          "summarize": {
            "title": "summarize (compatibility, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs written for memo23/video-audio-transcriber run unchanged; not used here."
          },
          "usePublisherTranscripts": {
            "title": "usePublisherTranscripts (compatibility, ignored)",
            "type": "boolean",
            "description": "Accepted so inputs written for memo23/video-audio-transcriber run unchanged; not used here."
          },
          "cookies": {
            "title": "cookies (compatibility, ignored)",
            "type": "string",
            "description": "Accepted so inputs written for memo23/video-audio-transcriber run unchanged; not used here."
          },
          "watchlistId": {
            "title": "watchlistId (name for the onlyNewSinceLastRun memory)",
            "type": "string",
            "description": "Optional name for the onlyNewSinceLastRun / newItemsOnly memory (letters, digits, dashes). Without one of those flags it is ignored."
          },
          "podcastUrls": {
            "title": "podcastUrls (RSS feeds or Apple Podcasts links)",
            "type": "array",
            "description": "Compatibility with steadyfetch/media-transcriber input; podcast RSS feed URLs or podcasts.apple.com show links; the newest maxEpisodes episodes of each are transcribed.",
            "items": {
              "type": "string"
            }
          },
          "maxEpisodesPerShow": {
            "title": "maxEpisodesPerShow (alias of maxEpisodes)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Compatibility with steadyfetch/media-transcriber input; same as maxEpisodes."
          },
          "maxTotalMinutes": {
            "title": "maxTotalMinutes (run-wide minute cap)",
            "minimum": 1,
            "type": "integer",
            "description": "Compatibility with steadyfetch/media-transcriber input; a file that would take the run past this many audio minutes is skipped (not charged) and the run stops, keeping the results so far."
          },
          "maxRunSeconds": {
            "title": "maxRunSeconds (soft deadline)",
            "minimum": 60,
            "type": "integer",
            "description": "Compatibility with steadyfetch/media-transcriber input; the run stops cleanly after this many seconds and keeps partial results, instead of timing out. The Actor run timeout still applies."
          },
          "datasetId": {
            "title": "datasetId (audio URLs from a dataset)",
            "type": "string",
            "description": "Compatibility with steadyfetch/media-transcriber input; ID or name of a dataset; rows with a url, audioUrl, mediaUrl, audio_url or enclosureUrl field are transcribed (first 1,000 rows)."
          },
          "datasetItems": {
            "title": "datasetItems (inline rows)",
            "type": "array",
            "description": "Compatibility with steadyfetch/media-transcriber input; inline rows (objects with a url / audioUrl field, or plain URL strings) transcribed like datasetId."
          },
          "onlyNewSinceLastRun": {
            "title": "Only new episodes since the last run",
            "type": "boolean",
            "description": "For podcast feeds: transcribe only episodes this Actor has not transcribed before, so you can put it on a daily Schedule and pay only for new episodes. Seen episodes are remembered per feed URL in a named key-value store (see watchlistId). A run with nothing new outputs no rows and charges nothing.",
            "default": false
          },
          "newItemsOnly": {
            "title": "newItemsOnly (skip already transcribed episodes)",
            "type": "boolean",
            "description": "Compatibility with steadyfetch/media-transcriber input; podcast episodes whose guid an earlier run with newItemsOnly already transcribed are skipped. The memory is a named key-value store; set watchlistId to keep separate lists.",
            "default": false
          },
          "podcastFeeds": {
            "title": "podcastFeeds (RSS feeds or Apple Podcasts links)",
            "type": "array",
            "description": "Compatibility with tidytools/audio-transcriber input; same as podcastUrls.",
            "items": {
              "type": "string"
            }
          },
          "newEpisodesOnly": {
            "title": "newEpisodesOnly (skip already transcribed episodes)",
            "type": "boolean",
            "description": "Compatibility with tidytools/audio-transcriber input; same as onlyNewSinceLastRun.",
            "default": false
          },
          "transcriptionEngine": {
            "title": "transcriptionEngine (fast or accurate)",
            "enum": [
              "fast",
              "accurate"
            ],
            "type": "string",
            "description": "Compatibility with tidytools/audio-transcriber input; accurate selects model base, fast keeps the default. An explicit model wins."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}