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
| Item | Details |
|---|---|
| Endpoint | https://api.meowload.net/openapi/v1/extract/subtitles |
| Method | POST with a JSON body |
| Authentication | Authorization: Bearer <your API key> header, with a key from the Developer Console |
| Billing | Charged only on success (200); rules are listed in the Developer Console |
New to the API? Start with the Quickstart.
📋 Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | Yes | The 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_nameis the language's display name in its own language (for example English or 中文) andlanguage_tagis a lowercase BCP 47 style tag (for exampleenorzh-hans). Auto-generated tracks are included. urls[]lists download links by format. For YouTube, picksrtfor general players,vttfor web playback orjson3for programmatic processing. Bilibili offers onlyjson(BCC), which differs from JSON3. The links are short-lived, so download promptly.- A video without subtitles either returns an empty
subtitlesarray or fails with HTTP400. 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
bodyarray contains cues withfromandtoin seconds andcontentas 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.