Graph API rate-limit codes 4, 17, 32, 613: stop, reuse the Sume job
Meta documents error codes 4, 17, 32 and 613 for rate limits. Map each to a pause and publish the stored Sume result later instead of re-rendering.

Meta documents four rate-limit error codes for the Graph API: 4 (app limit), 17 (user limit), 32 (Pages API limit) and 613 (custom limit). Treat all four as a signal to stop calling, hold the publish task, and retry later with the video you already rendered.
Meta's advice on reaching a limit is to stop making API calls; it adds that continuing to call increases your call count and extends recovery time.
What does each code mean?
Meta's page lists them as follows.
| Code | Meaning per Meta |
|---|---|
| 4 | The app whose token is used has reached its rate limit |
| 17 | The user whose token is used has reached their rate limit |
| 32 | The user or app whose token is used in the Pages API request has reached its rate limit |
| 613 | A custom rate limit has been reached |
What should the publisher do?
Map the code to an action in one place. The sample parks the task and keeps the Sume job id, so the retry publishes the same video.
LIMIT_CODES = {4: "app", 17: "user", 32: "pages", 613: "custom"}
def next_step(error_code: int, job_id: str) -> dict:
if error_code in LIMIT_CODES:
return {"action": "park", "scope": LIMIT_CODES[error_code], "job_id": job_id, "reuse_render": True}
return {"action": "fail", "job_id": job_id, "reuse_render": True}
if __name__ == "__main__":
print(next_step(4, "job_123"))
print(next_step(100, "job_123"))How is this different from Sume's limits?
On Sume, 429 rate_limited and 429 queue_full are different: rate_limited is request volume, queue_full means accepted work is at capacity. Use retry-after when present, and never retry a paid submit without an Idempotency-Key (Errors and rate limits).
Sources
Related posts
More in Developers
- Graph API X-App-Usage call_count: pause a Reel publisher early
Meta's X-App-Usage header reports call_count, total_cputime and total_time as percentages. Read it after each call and pause your publisher before the limit.
- Griffin 10 ms audio packets vs Sume TTS: async jobs, no streaming
Tavus Griffin emits speech in packets as small as 10 ms. Sume's TTS Router lists streaming TTS as a non-goal, so audio arrives as a finished file for lip sync.
- Grok Imagine Image 2.0 makes 10 images per request; Sume's n cap
xAI says grok-imagine-image-2.0 returns up to 10 images per request at $0.04 each. Sume's n is 1-10 per request, with a lower per-model cap on x-ai/grok-image.
- H3 Max job: poll or webhook? A signed Python receiver
Poll GET /v1/jobs/:id/status for one clip, use a signed webhook for batches. Python receiver that refuses an empty secret and checks the sume-v1 signature.
Written by Sume