MeowLoad Docs
On this page

Subtitle Extraction API

Pass a YouTube or Bilibili video URL to get available subtitle tracks and video metadata. YouTube tracks may offer several download formats.

🎯 Basic Information

ItemDetails
Endpointhttps://api.meowload.net/openapi/v1/extract/subtitles
MethodPOST with a JSON body
AuthenticationAuthorization: Bearer <your API key> header, with a key from the Developer Console
BillingCharged only on success (200); rules are listed in the Developer Console

New to the API? Start with the Quickstart.

📋 Request Parameters

ParameterTypeRequiredDescription
urlstringYesThe video URL

Error messages are in English by default; send an Accept-Language header (for example zh or ja) to localize them.

Request Example

curl -X POST https://api.meowload.net/openapi/v1/extract/subtitles \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <your API key>" \
  -d '{"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw"}'

🟢 Success Response

Response Example

A successful call returns HTTP 200, and the body is the video metadata plus every subtitle track. The example below is trimmed:

{
  "site": "youtube",
  "id": "EXAMPLE0004",
  "title": "Me at the zoo",
  "duration": 19,
  "thumbnail_url": "https://images.example.com/EXAMPLE0004/cover.jpg",
  "subtitles": [
    {
      "language_name": "English",
      "language_tag": "en",
      "urls": [
        { "url": "https://www.youtube.com/api/timedtext?v=EXAMPLE0004&fmt=srt&sig=EXAMPLE", "format": "srt" },
        { "url": "https://www.youtube.com/api/timedtext?v=EXAMPLE0004&fmt=vtt&sig=EXAMPLE", "format": "vtt" }
      ]
    },
    {
      "language_name": "English (auto-generated)",
      "language_tag": "en",
      "urls": [
        { "url": "https://www.youtube.com/api/timedtext?v=EXAMPLE0004&kind=asr&fmt=srt&sig=EXAMPLE", "format": "srt" }
      ]
    }
  ]
}

Response Field Descriptions

  • Each entry in subtitles[] is one language track. language_name is the language's display name in its own language (for example English or 中文) and language_tag is a lowercase BCP 47 style tag (for example en or zh-hans). Auto-generated tracks are included.
  • urls[] lists download links by format. For YouTube, pick srt for general players, vtt for web playback or json3 for programmatic processing. Bilibili offers only json (BCC), which differs from JSON3. The links are short-lived, so download promptly.
  • A video without subtitles either returns an empty subtitles array or fails with HTTP 400. Handle both.

The full list of parameters and response fields is in the API reference.

Bilibili integration

Supports BV/av videos on bilibili.com, individual video parts, series episodes and b23.tv short links. Dynamic posts, /opus/ and international bilibili.tv are not supported. Parts of a video share the same id: preserve the complete input URL including ?p=. Episode IDs start with ep.

Example Bilibili track (placeholder download URL):

{
  "language_tag": "zh",
  "language_name": "中文 (auto-generated)",
  "urls": [{ "format": "json", "url": "https://aisubtitle.hdslb.com/example.json?auth_key=EXAMPLE" }]
}
  • Manual and automatic tracks may share a language_tag; do not deduplicate by language alone. The (auto-generated) suffix includes both speech recognition and translation tracks; the API does not distinguish them further.
  • Links expire after about 30 minutes.
  • BCC JSON differs from YouTube JSON3. Its body array contains cues with from and to in seconds and content as text. Convert this data when you need SRT/VTT.

🔴 Error Response

A failed extraction returns HTTP 400 and is never charged. The body carries a machine-readable code and a retryable flag (whether retrying the same URL later might succeed):

{ "message": "The content has been deleted or does not exist", "code": "content_deleted", "retryable": false }

401 (invalid API key), 402 (out of credits), 422 (invalid request body), 429 (rate limited) and every extraction error code are covered in Error Codes.