GAPI

Errors & limits

Status codes

The four error codes and what to do about each
CodeMeaningWhat to do
400URL belongs to another platform, or is malformedCheck the input
401Key missing, unknown or revokedSee authentication
404Post not found, private, or removedDo not retry
429Monthly quota used up, or too many requests per secondWait for the reset, or move up a plan
502Resolver temporarily unavailableRetry once after a second or two

Retrying

Only 502 is worth retrying automatically. A 404 means the post is gone at the source — retrying it just spends quota on something that will never resolve.

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": "Post not found, private, or removed" }

Monthly quotas

PlanRequests / monthPrice
Free500$0
Mini5,000$1.99
Starter10,000$2.99
Plus15,000$3.99
Pro20,000$4.99
Business35,000$6.99
Scale50,000$8.49

Counters reset on the 1st of each month. A carousel of ten files counts once — quota is measured in calls, not files.

Rate limits

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

Two different ceilings answer with 429. A burst that is merely too fast carries a Retry-After header and clears within the second; a spent monthly quota does not, and waits for the 1st. Read the header to tell them apart.

A call refused by either ceiling costs nothing — it never reaches your monthly counter.

Your live usage is on the dashboard.