GAPI

VK Video Downloader API

Resolves any public VK video or clip into direct media links — every rendition VK holds, from 144p to 1080p, in a single response.

GEThttps://api.gapi.dev/v2/vk

Requires the X-API-Key header · responds in JSON

Parameters

urlrequiredstring

Public VK video or clip: vkvideo.ru/video-…, vkvideo.ru/clip-…, vk.com/video-…, vk.ru and m.vk.com too.

e.g. https://vkvideo.ru/video-122033519_456246913

Responses

{
  "platform": "vk",
  "type": "video",
  "title": "Я тебя отыщу",
  "author": null,
  "thumbnail": "https://…",
  "duration": null,
  "media": [
    { "type": "video", "url": "https://…", "quality": "144p",  "ext": "mp4" },
    { "type": "video", "url": "https://…", "quality": "240p",  "ext": "mp4" },
    { "type": "video", "url": "https://…", "quality": "360p",  "ext": "mp4" },
    { "type": "video", "url": "https://…", "quality": "480p",  "ext": "mp4" },
    { "type": "video", "url": "https://…", "quality": "720p",  "ext": "mp4" },
    { "type": "video", "url": "https://…", "quality": "1080p", "ext": "mp4" }
  ]
}

Try it

GEThttps://api.gapi.dev/v2/vk
Try
No key yet? Create one free
curl -G 'https://api.gapi.dev/v2/vk' \
  --data-urlencode 'url=https://vkvideo.ru/video-122033519_456246913' \
  -H 'X-API-Key: YOUR_KEY'

What each link gives you

You sendtypemedia contains
vkvideo.ru/video-…videoone entry per height VK holds, usually six
vkvideo.ru/clip-…videothe same, clips are videos here

What is not covered

Wall posts, playlists, community video lists, embedded player links and VK Play Live. A wall post usually carries photographs, and this endpoint downloads video; the rest are broken in the extractor itself. All five are refused with the reason rather than half-answered.

Field-by-field detail is on the response shape page.

Picking a quality

VK returns several renditions of the same video. Read quality and take the one you want; there is no second call and no URL pattern to guess at. The value is a label rather than a number, so strip the trailing p before you compare.

data = response.json()

# quality is a label, not a number: "1080p", not 1080.
best = max(
    (m for m in data["media"] if m["type"] == "video"),
    key=lambda m: int(m["quality"].rstrip("p")),
)
download(best["url"])

Code examples

The same request in four languages. Swap in the key from your dashboard and it runs as it is.

curl -G 'https://api.gapi.dev/v2/vk' \
  --data-urlencode 'url=https://vkvideo.ru/video-122033519_456246913' \
  -H 'X-API-Key: gapi_live_your_key_here'

One call, one request

A carousel with ten slides costs the same as a single photo: one charge against your balance. You pay for calls, not for files.

Other platforms