Spread Graph API calls evenly: pace a nightly Reel batch
Meta advises spreading queries evenly to avoid traffic spikes. Space publish calls across the hour, and size the Sume render wave from generation_limits.

Meta's Graph API guidance for staying under its limits includes spreading queries evenly to avoid traffic spikes, and its call_count is measured over a rolling hour. For a nightly Reel batch, divide the hour by the number of publish calls and sleep between them, instead of firing the whole batch the moment renders finish.
Pace the render side separately: Sume reports generation_limits on submit responses, and its docs describe wave_size_hint as a submission-wave hint, not a concurrency limit.
Two budgets, two pacers
Keep the render pacer and the publish pacer independent.
| Stage | Signal | Source |
|---|---|---|
| Render on Sume | generation_limits.queue_capacity_remaining, wave_size_hint | Sume generation admission docs |
| Publish to Instagram | Posts limited to 100 API-published per 24-hour moving period | Meta content publishing page |
| Graph calls | X-App-Usage call_count over a rolling hour | Meta rate limiting page |
How do I space the calls?
Compute the gap once, then sleep. The sample spaces a list of items across a window.
import time
def spaced(items: list, window_seconds: int):
gap = window_seconds / max(1, len(items))
for index, item in enumerate(items):
if index:
time.sleep(gap)
yield item
if __name__ == "__main__":
for job_id in spaced(["job_a", "job_b", "job_c"], window_seconds=3):
print("publish", job_id)What about the render wave?
Do not size in-flight Sume work from wave_size_hint; use the effective concurrency_limit minus active and queued jobs, capped by queue_capacity_remaining (Generation admission). The post on pacing bulk Sume submits has the full loop.
Sources
Related posts
More in Developers
- SQLite ledger: a restarted poller never resubmits a 30-second video
Save the Sume job id and Idempotency-Key in SQLite before you poll, so a crash resumes the same $17 render instead of paying twice. Python, stdlib.
- Square YouTube Short at 1080x1080: set Timeline output size
YouTube classifies square or vertical videos up to 3 minutes as Shorts. Set Timeline 1.0 output width and height to 1080 for square; 1080x1920 for vertical.
- Startup plan accepts 48 jobs, not 50: send 50 AI video clips in waves
Sume admits concurrency plus queue jobs per plan: 6, 24, 48 or 120. Fifty 30-second clips fit only on Scale at once. See waves per plan and how to retry.
- Stitch 10-second AI clips into a 3-minute Short with Timeline 1.0
YouTube's AI Shorts clips top out at 10 seconds, but a Short can run 3 minutes. Join clips and a voice track in Timeline 1.0 within its 200 slots and 1,800 s.
Written by Sume