Code by Zapier 225 requests per 10 seconds and Sume 429s
Zapier lists 225 requests per 10 seconds for Code by Zapier on Pro and Team. Sume has its own 429 rate_limited: honor retry-after and send an Idempotency-Key.

A Zap using Code by Zapier faces two separate limits: Zapier's 225 requests per 10 seconds on Professional and Team, and Sume's own 429 rate_limited on submit endpoints. They are independent. For Sume's, wait for retry-after when present and resend the same Idempotency-Key, so a retry cannot create a second paid job.
Zapier's numbers are from its Code by Zapier article; Sume's from Generation admission and Errors and credits. Read 2026-10-01.
What does Zapier list?
| Plan | Limit |
|---|---|
| Free | 10 requests every 60 seconds |
| Trial | 75 requests every 10 seconds |
| Professional and Team | 225 requests every 10 seconds |
| Enterprise | 225 requests every 10 seconds |
What does a Sume 429 look like?
Submit rate limits fail with 429 rate_limited, which the error table describes as request volume exceeding an abuse-protection limit. Responses can carry ratelimit-limit, ratelimit-remaining, ratelimit-reset and retry-after. This differs from 429 queue_full, which means the workspace has no queue capacity left; see HeyGen vs Sume 429 handling.
How do I retry safely in a Code step?
The docs say to use an Idempotency-Key for every paid submit that may be retried, and not to retry unsafe submits without one. Reuse the key only for exact retries; a different payload under the same key is a 409 idempotency_conflict.
const key = "zap-" + inputData.row_id;
async function submit(attempt) {
const res = await fetch("https://api.sume.com/v1/videos", {
method: "POST",
headers: {
// Map your Sume API key into an input field of the Code step.
Authorization: "Bearer " + inputData.sume_api_key,
"Content-Type": "application/json",
"Idempotency-Key": key,
},
body: JSON.stringify({ model: "sume/auto", prompt: inputData.prompt }),
});
const body = await res.json();
// Retry only rate_limited; queue_full is a different 429.
if (res.status === 429 && body.error?.code === "rate_limited" && attempt < 3) {
const wait = Number(res.headers.get("retry-after")) || 5;
await new Promise((r) => setTimeout(r, wait * 1000));
return submit(attempt + 1);
}
return body;
}
return await submit(0);Why keep the retry count small?
Each retry spends request budget on both sides, and a Code step has its own runtime ceiling. Cap attempts, return the job id once you have it, and finish the rest in a later step.
Sources
Related posts
More in Integrations
- Code by Zapier 10-minute runtime vs Sume's 30-second sync wait
Code by Zapier can run 10 minutes on action steps, but Sume's sync wait caps at 30 seconds. Submit async, keep the job id, and poll instead of holding the step.
- Codex network policy now follows redirects: allow Sume's hosts
Codex 0.157.0 enforces network restrictions across redirects and cancels traffic when a policy change revokes access. Which Sume hosts to allow.
- Codex 0.158 approval review retry: what it means for a Sume call
Codex 0.158.0 retries an approval review when new user input arrives instead of aborting the pending action. Keep the Sume call's idempotency_key stable.
- Codex default_tools_approval_mode writes with Sume tools
With default_tools_approval_mode = "writes", Codex prompts for tools not marked read-only. Sume marks reads readOnlyHint true and writes false.
Written by Sume