Claude Code routine limit of 30 fires an hour: use a bulk run
Run now and API fires share 30 an hour per routine. For 40 videos, fire the routine once and let one Sume bulk run of up to 100 items do the fan-out.

Claude Code routines count Run now, API fires and one-off re-runs together at 30 an hour per routine, and the action fails until the window resets. If your plan is to fire a routine once per video, the 31st video in an hour is the one that fails. Fire the routine once instead, and let that one run start a single Sume bulk run: one POST queues up to 100 Format runs with a concurrency window of 1 to 16.
The limits are from the routines page, read on 2026-10-03; the bulk-run contract is Sume's Format bulk runs page.
What are the routine limits?
Anthropic documents separate hourly limits by how a run starts, and says none of them has overage.
| Action | Limit | Counted for |
|---|---|---|
| Scheduled runs, including one-off | 100 per hour | Your account |
| Run now, API fires, one-off re-run | 30 per hour | Each routine, one shared count |
| Run now and one-off re-run | 100 per hour | Your account |
| API fires | 100 per hour | Your account, counted apart from Run now |
How does a bulk run fit?
A Sume bulk run takes concurrency (an integer from 1 to 16) and items, 1 to 100 entries, each the same body as a single Format run. Every item can carry its own generation_spend_cap_usd, and the create call returns 202 with a queue you poll at GET /v1/format-run-queues/{id}. A bad item fails the whole create with 400 and details.index before any queue exists.
Workspace generation concurrency still applies to the children: Free 1, Pro 4, Startup 8, Scale 20. Extra accepted jobs wait as queued until a slot opens, and a full queue returns 429 queue_full, so a bulk run of 100 on a small plan is paced, not rejected.
What does the routine's single call look like?
This script builds the body for a 40-item batch and prints the envelope. It runs offline, so you can check the shape before the routine sends it with an Idempotency-Key minted for the batch.
import json, uuid
products = [f'sku-{n:03d}' for n in range(1, 41)]
body = {
'concurrency': 4,
'items': [
{
'instruction': f'Make the promo video for {sku}.',
'input': {'sku': sku},
'generation_spend_cap_usd': 5,
}
for sku in products
],
}
assert 1 <= len(body['items']) <= 100
print(json.dumps({k: body[k] for k in ('concurrency',)}))
print(len(body['items']), 'items, header:', str(uuid.uuid4()))What should the routine do after it queues the batch?
Before you size a batch, remember that a bulk run create fails whole with a 400 and details.index if any item is invalid, so validate items in your own code first. The queue's completed state means every item is terminal, not that every item succeeded; read each item's status before reporting. Use a fresh Idempotency-Key for each batch, and the same key only when you are retrying the identical batch.
- Read
countson the queue:completedmeans every item is terminal, not that every item succeeded, so branch oncounts.failed. - Put
communication.webhook_urlon each item; the queue itself has no webhook. - Mint a fresh
Idempotency-Keyper batch, because replaying a spent key returns the old queue. - Keep the routine's own prompt short: one fire, one batch, one summary.
Sources
Related posts
More in Developers
- Claude Code routine 403 host_not_allowed: allow Sume's hosts
A routine's curl to api.sume.com fails with 403 and x-deny-reason host_not_allowed on Trusted network. Which hosts to add, and why the connector is exempt.
- Claude Code routines run hourly at most: use a Sume webhook
A routine's minimum schedule interval is one hour, so a polling loop wastes runs. Submit the Sume job once and let the terminal webhook trigger the next step.
- Claude Code routine skips approvals: cap Sume calls with script_run
A routine can use every tool without asking. Sume's script_run bounds a batch of calls with max_calls and max_paid_calls, so one run cannot fan out.
- Where to keep a Sume API key in a Claude Code routine
Environment variables are readable by anyone using the environment. On Pro and Max an API credential hides the key from Claude. What changes on Team plans.
Written by Sume