On this page
Single Post (Video/Gallery/Music/Live Stream) Extraction API
Pass a post URL and get direct download links for every media item in it (video, image, audio, live stream), plus its title, caption, cover and author. It covers the 1000+ social and video platforms MeowLoad supports, such as YouTube, TikTok, Instagram, Facebook, Twitter (X), Douyin, Xiaohongshu, Bilibili and Weibo; short links like youtu.be and vt.tiktok.com are accepted as-is.
🎯 Basic Information
| Item | Details |
|---|---|
| Endpoint | https://api.meowload.net/openapi/v1/extract/post |
| 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 post URL; short links are accepted |
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/post \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your API key>" \
-d '{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'🟢 Success Response
Response Example
A successful call returns HTTP 200, and the body is the extraction result itself. The example below is trimmed to the most commonly used fields:
{
"site": "youtube",
"title": "Scenic tour of the Karst mountains",
"text": "A drone flight over the Karst mountains at sunrise. Filmed in 4K.",
"medias": [
{
"media_type": "video",
"resource_url": "https://video.example.com/v/EXAMPLE0001/360p.mp4?expire=1700000000&sig=EXAMPLE",
"preview_url": "https://images.example.com/EXAMPLE0001/cover.jpg",
"duration": 55,
"headers": { "Referer": "https://www.example.com/" },
"variants": [
{
"quality": 1080,
"quality_label": "1080p",
"video_url": "https://video.example.com/v/EXAMPLE0001/1080p.mp4?expire=1700000000&sig=EXAMPLE",
"video_ext": "mp4",
"video_filesize": 25051752,
"audio_url": "https://video.example.com/v/EXAMPLE0001/audio-en.m4a?expire=1700000000&sig=EXAMPLE",
"audio_ext": "m4a",
"audio_filesize": 887229,
"is_default": true
},
{
"quality": 360,
"quality_label": "360p",
"video_url": "https://video.example.com/v/EXAMPLE0001/360p.mp4?expire=1700000000&sig=EXAMPLE",
"video_ext": "mp4",
"video_filesize": 3742315
}
]
}
],
"id": "EXAMPLE0001",
"post_url": "https://www.youtube.com/watch?v=EXAMPLE0001",
"created_at": "2025-06-02T12:00:00.000Z",
"author": { "username": "@travelchannel", "display_name": "Travel Channel" }
}Response Field Descriptions
medias[]holds every media item of the post.media_typeis one ofvideo,image,audio,liveorfile, andresource_urlis a directly downloadable URL.- When a video is available in several resolutions,
variants[]lists them.qualityis the height in pixels (9999means original quality),quality_labelis the display label, and the variant withis_default: trueis the recommended pick. A variant that has bothvideo_urlandaudio_urlis a split stream: download both and merge them. - Media URLs are short-lived, so download promptly. When a media item carries
headers, send them as-is with the download request, or the platform will reject it. - Missing values are omitted entirely, never sent as
nullor an empty string. Bothtitleandtextare optional; usetitle || textfor a display caption.
The full list of parameters and response fields is in the API reference.
🔴 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.