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.
https://api.gapi.dev/v2/vkRequires the X-API-Key header · responds in JSON
Parameters
urlrequiredstringPublic 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_456246913Responses
{
"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
https://api.gapi.dev/v2/vkcurl -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 send | type | media contains |
|---|---|---|
vkvideo.ru/video-… | video | one entry per height VK holds, usually six |
vkvideo.ru/clip-… | video | the 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.