GAPI

Errors & limits

Status codes

CodeMeaningWhat to do
400The link is not for this platform, or the format value is not one we acceptCheck the input; retrying will not change it
401Key missing, unknown or revokedSee authentication
404Deleted, private, or nothing at that linkDo not retry
410A download link served from our own domain has expiredAsk for the media again and use the new link straight away
429Token balance exhausted, or too many requests per secondWait for the reset, or move up a plan
502The platform could not be reachedRetry once after a second or two

Retrying

Only 502 is worth retrying automatically. Everything else is a statement about the link or the account, and a retry spends another token to be told the same thing.

res = call_api(url)

if res.status_code == 502:          # transient — one retry clears most of them
    time.sleep(1.5)
    res = call_api(url)

if res.status_code == 404:          # the post is gone; retrying only burns quota
    skip(url)

Error format

{ "detail": "Media not found or unable to download" }

Monthly tokens

PlanTokens / month
Free200
Mini5,000
Starter10,000
Plus15,000
Pro20,000
Business35,000
Scale50,000
Max100,000
Max 200200,000

Counters reset on the 1st. One call is one charge whatever comes back: six renditions of the same VK video, or ten files in a carousel, cost exactly what a single file costs.

Prices, and what each platform costs per call, are on the pricing page.

Rate limits

PlanPer secondPer hour
Free1500
Mini21,500
Starter32,500
Plus43,500
Pro54,500
Business87,000
Scale109,000
Max1515,000
Max 2002530,000

Bursts are counted per key, not per account, so two integrations cannot throttle each other. Over the ceiling you get 429 with a Retry-After header.

A call refused by the rate limiter costs no tokens.

Your balance and what has been spent this month are in the dashboard.