MeowLoad Docs
On this page

YouTube proxy download API

A server downloading a YouTube media URL directly may receive 403. This endpoint returns the same post structure as single post extraction, with temporary proxy download links added for eligible files. Use those links to download the files after receiving the result.

Basic information

ItemDetails
Endpointhttps://api.meowload.net/openapi/v1/youtube/proxy-download
MethodPOST with a JSON body
AuthenticationAuthorization: Bearer <your API key>
BillingCharged only on success (HTTP 200); see the Developer Console for billing rules
MCPyoutube_proxy_download, with the same parameters as REST

Your API key, balance and top-ups are in the Developer Console. REST and MCP share the same key, credits and rate-limit quota.

Request

The body has one required string, url. YouTube links on youtube.com and youtu.be are accepted. Other platforms, youtube-nocookie.com embeds and third-party short links redirecting to YouTube are not accepted. Whether a channel, playlist, live stream or restricted item can be extracted depends on the actual content.

curl --fail-with-body -sS \
  https://api.meowload.net/openapi/v1/youtube/proxy-download \
  -H "Authorization: Bearer <your API key>" \
  -H "Content-Type: application/json" \
  --data '{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'

Error messages are in English by default. Send Accept-Language: zh for Chinese.

Success response

HTTP 200 returns the post object directly, retaining the original direct links and media metadata. This example is trimmed; every download URL is a placeholder:

{
  "site": "youtube",
  "id": "EXAMPLE0001",
  "post_url": "https://www.youtube.com/watch?v=EXAMPLE0001",
  "title": "Scenic tour",
  "created_at": "2026-10-06T13:37:04.123Z",
  "medias": [
    {
      "media_type": "video",
      "duration": 754,
      "resource_url": "https://video.example.com/360p.mp4",
      "resource_proxy_url": "https://proxy.example/proxy?payload=RESOURCE",
      "variants": [
        {
          "quality": 1080,
          "quality_label": "1080p",
          "video_url": "https://video.example.com/1080p.mp4",
          "video_ext": "mp4",
          "video_proxy_url": "https://proxy.example/proxy?payload=VIDEO",
          "audio_url": "https://video.example.com/audio.m4a",
          "audio_ext": "m4a",
          "audio_proxy_url": "https://proxy.example/proxy?payload=AUDIO"
        }
      ]
    }
  ]
}
FieldLocationPurpose
resource_proxy_urlmedias[]Download the media itself: usually a complete video at a lower resolution, or the audio file for audio media
video_proxy_urlmedias[].variants[]Download the video for this variant
audio_proxy_urlmedias[].variants[]Download the separate audio for this variant, including language tracks on audio media

Exact times use UTC ISO 8601 with millisecond precision; relative times retain the platform's text; missing time fields are omitted. See single post extraction for the post fields and time rules, and the API reference for the complete endpoint schema.

Proxy eligibility

  • Video proxies are available up to an identified resolution of 1080p. Higher-resolution variants may still include direct links, but no video proxy or paired audio proxy. Language tracks on separate audio media are not subject to the video resolution limit.
  • Files larger than 3 GiB (3 × 1024³ bytes) have no proxy link; files exactly at the limit remain eligible. Missing size or resolution data alone does not make a file ineligible.
  • Content without eligible proxy files may still return a successful ordinary post result, such as a YouTube community post. If proxy links were expected but all are missing, the endpoint returns 503 / proxy_unavailable without a charge.

Downloading, merging and resuming

Choose the highest available variant that has video_proxy_url. Choosing by the highest quality alone can select a variant that only has a direct link.

A variant with both original video_url and audio_url fields is a split stream: download the video and audio separately, then merge them. A missing audio_proxy_url does not prove the video includes audio; the audio file may be ineligible for a proxy. In that case, choose a variant or track with an available audio proxy. If the original variant has no separate audio_url, download its video proxy directly.

ffmpeg -i video.mp4 -i audio.m4a -c copy merged.mp4

For a ready-to-use video file, use the video media's resource_proxy_url. For audio only, use the audio media's resource_proxy_url or the audio_proxy_url for the desired language track.

The proxy URL itself is the download credential. Do not add your developer API key when downloading, or send it to the download domain. Proxies support Range, so downloads can resume on the same valid link:

curl --fail-with-body -sS -D range-headers.txt \
  -H "Range: bytes=0-1023" \
  --output range.bin "<returned proxy URL>"

A range request should return 206 with the correct Content-Range. To resume, set the range start to the number of bytes already saved. Check the HTTP status before streaming a response to a file, so error JSON is not saved as media. Use GET to inspect an error body; HEAD does not return error JSON.

Expiry and billing boundaries

Proxy links are temporary signed URLs with a maximum lifetime of one hour. They are also limited by the expiry of the YouTube file URL itself. There is no guaranteed minimum usable lifetime; download promptly after receiving the result.

The successful extraction is charged. Downloading and resuming within the link's validity do not use additional credits. Calling the extraction endpoint again for a new link is charged again. There is no idempotency key, so repeating a call after a timeout can also incur another charge. A failed download after a successful extraction does not automatically refund the extraction charge.

The endpoint checks a minimum balance before extraction, then deducts the actual cost before returning a successful result. If the actual cost exceeds the available balance, it returns 402 without deducting credits or delivering the result. Prices and the minimum balance are maintained only in the Developer Console, under Billing rules.

Error handling

Extraction endpoint errors

HTTP status / codeAction
422Check the required url and the JSON body
400 / invalid_urlurl is not a valid URL; correct it before trying again
400 / unsupported_siteUse a supported YouTube URL
401Check your API key and Bearer header
402Top up before trying again; no credits are deducted and no result is delivered
429The request rate limit was reached; try again later
503 / proxy_unavailableProxies are temporarily unavailable, with retryable: true; this call is not charged and can be retried later

See Errors for other extraction codes. MCP returns the same codes and retry semantics in tool error results.

Proxy download errors

These errors come from the download link and should be handled separately from extraction endpoint errors:

HTTP status / codeAction
404 / payload_expiredThe old link has expired; extracting a new link is charged again. Retrying the old link will not help
YouTube rejects the request, such as 403 / upstream_errorCheck upstream_status; when retryable: true, use bounded retries or resume. A retry is not guaranteed to succeed
502 / proxy_failedUse bounded retries on the same link
403 / content_unavailableThe content cannot be downloaded; stop repeated retries

To read this page through MCP, call get_docs with page: "youtube-proxy-download-api" and lang: "en".