{
  "openapi": "3.0.1",
  "info": {
    "title": "Podcast & Video Clip Finder (AI Shorts Moments + SRT)",
    "description": "Find the best 20-60 s moments in a podcast RSS episode or audio/video file for TikTok, Reels and Shorts. Returns ranked clip timestamps, transcript excerpts, per-clip SRT/VTT subtitles and hook title ideas. Transcription via your own Groq API key (Whisper).",
    "version": "0.1",
    "x-build-id": "IuUAGLERK5yJpEboq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/prime619~podcast-clip-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-prime619-podcast-clip-finder",
        "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/prime619~podcast-clip-finder/runs": {
      "post": {
        "operationId": "runs-sync-prime619-podcast-clip-finder",
        "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/prime619~podcast-clip-finder/run-sync": {
      "post": {
        "operationId": "run-sync-prime619-podcast-clip-finder",
        "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": {
          "rssFeedUrls": {
            "title": "Podcast RSS feed URL(s)",
            "type": "array",
            "description": "Public podcast RSS feed(s). Episodes are taken from the audio/video enclosures. Use the settings below to pick which episodes.",
            "items": {
              "type": "string"
            }
          },
          "episodeSelection": {
            "title": "Which episodes",
            "enum": [
              "latest",
              "oldest",
              "titleContains"
            ],
            "type": "string",
            "description": "Pick the newest episodes, the oldest ones, or episodes whose title contains a text.",
            "default": "latest"
          },
          "episodeTitleFilter": {
            "title": "Episode title contains",
            "type": "string",
            "description": "Only used with \"Title contains…\". Case-insensitive."
          },
          "maxEpisodesPerFeed": {
            "title": "Max episodes per feed",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many episodes to process from each feed.",
            "default": 1
          },
          "mediaUrls": {
            "title": "Direct audio/video file URL(s)",
            "type": "array",
            "description": "Direct, publicly accessible links to media files (mp3, m4a, wav, mp4, mov, webm …). Page links from YouTube, Spotify, TikTok, Instagram etc. are not supported. The prefilled link is a free 1:40 min public-domain demo (LibriVox, Gettysburg Address): it runs without a Groq key, is never charged, and is also used when you leave all sources empty.",
            "items": {
              "type": "string"
            }
          },
          "confirmRights": {
            "title": "I own this content or have the right to use it",
            "type": "boolean",
            "description": "Required for your own sources. Only process media you own, have licensed, or are otherwise allowed to transcribe and clip. You are responsible for how you use the output. Not needed for the built-in public-domain demo sample.",
            "default": false
          },
          "transcriptionProvider": {
            "title": "Transcription engine",
            "enum": [
              "groq",
              "local"
            ],
            "type": "string",
            "description": "Groq (recommended): fast Whisper large-v3-turbo with your own Groq API key - Groq bills you directly (about $0.04 per audio hour at the time of writing). Local: open-source Whisper running inside the Actor, no key needed, but slower, less accurate with small models, limited to 60 minutes per episode and billed at a higher per-minute event price (see Pricing).",
            "default": "groq"
          },
          "groqApiKey": {
            "title": "Groq API key",
            "type": "string",
            "description": "Your own key from https://console.groq.com/keys. Stored encrypted by Apify, only used for calls to api.groq.com. Also used for optional LLM clip scoring."
          },
          "language": {
            "title": "Spoken language (optional)",
            "type": "string",
            "description": "Two-letter ISO code like \"en\" or \"de\". Leave empty for automatic detection. Setting it improves accuracy."
          },
          "localModel": {
            "title": "Local Whisper model",
            "enum": [
              "tiny",
              "base",
              "small",
              "tiny.en",
              "base.en",
              "small.en"
            ],
            "type": "string",
            "description": "Only for the local engine. Bigger = better but slower and needs more memory: base needs at least 2 GB, small at least 4 GB run memory (tiny works with 1 GB).",
            "default": "base"
          },
          "groqWhisperModel": {
            "title": "Groq Whisper model",
            "enum": [
              "whisper-large-v3-turbo",
              "whisper-large-v3"
            ],
            "type": "string",
            "description": "whisper-large-v3-turbo is cheaper and faster; whisper-large-v3 is a bit more accurate.",
            "default": "whisper-large-v3-turbo"
          },
          "maxClipsPerEpisode": {
            "title": "Max clips per episode",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Upper limit of clips returned per episode (each delivered clip is a billable event).",
            "default": 5
          },
          "minClipSeconds": {
            "title": "Minimum clip length (seconds)",
            "minimum": 5,
            "maximum": 170,
            "type": "integer",
            "description": "Clips start and end on sentence boundaries; no clip will be shorter than this.",
            "default": 20
          },
          "maxClipSeconds": {
            "title": "Maximum clip length (seconds)",
            "minimum": 10,
            "maximum": 180,
            "type": "integer",
            "description": "No clip will be longer than this. 60 s fits TikTok, Reels and Shorts.",
            "default": 60
          },
          "maxAudioMinutesPerEpisode": {
            "title": "Max audio minutes per episode",
            "minimum": 1,
            "maximum": 600,
            "type": "integer",
            "description": "Only the first N minutes of each episode are processed (cost cap). Billable audio minutes never exceed this.",
            "default": 180
          },
          "useLlmScoring": {
            "title": "Re-rank clips with an LLM",
            "type": "boolean",
            "description": "Uses your Groq key to let an LLM rate the top candidates and write hook titles (a few tenths of a cent per episode on Groq). Without a key, heuristic ranking and simple title suggestions are used.",
            "default": true
          },
          "llmModel": {
            "title": "LLM model on Groq",
            "type": "string",
            "description": "Any Groq chat model ID that supports JSON mode. Default openai/gpt-oss-120b gave clearly better clip ratings and hook titles than openai/gpt-oss-20b in our tests and still costs well under one cent per episode on your Groq key.",
            "default": "openai/gpt-oss-120b"
          },
          "hookTitlesPerClip": {
            "title": "Hook titles per clip",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many title/hook ideas to return per clip.",
            "default": 3
          },
          "minLlmScore": {
            "title": "Minimum AI clip score (0-10)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Clips the AI rates below this score are not delivered and therefore not charged, so you may get fewer than 'Max clips per episode'. Set 0 to always receive the maximum number of clips. Ignored when AI scoring is off or fails.",
            "default": 5
          },
          "subtitleFormats": {
            "title": "Subtitle formats",
            "type": "array",
            "description": "Subtitle files created for every clip (timestamps start at 00:00 of the clip).",
            "items": {
              "type": "string",
              "enum": [
                "srt",
                "vtt"
              ],
              "enumTitles": [
                "SRT",
                "WebVTT"
              ]
            },
            "default": [
              "srt",
              "vtt"
            ]
          },
          "maxWordsPerCue": {
            "title": "Max words per subtitle line",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Short lines (5-8 words) work best for vertical video.",
            "default": 7
          },
          "saveFullTranscript": {
            "title": "Save full transcript",
            "type": "boolean",
            "description": "Store the full episode transcript (JSON with word timestamps, TXT and SRT) in the key-value store.",
            "default": true
          },
          "maxFileSizeMb": {
            "title": "Max media file size (MB)",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Larger files are rejected before processing (protects you from accidental huge downloads).",
            "default": 500
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}