Claude Code 529 retry delay setting is not a Sume 429/503 retry

Claude Code 2.1.290 added a base delay setting for 529 retries. It does not govern Sume calls; follow retry-after and keep the Idempotency-Key.

4 min readSume
All posts

CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS sets the base delay for Claude Code's own retries of an overloaded (529) request, and it has no effect on how a Sume call is retried. The Claude Code changelog for 2.1.290 (October 5, 2026) says it was added to set a longer base delay for the backoff when retrying an overloaded (529) request. Sume answers with 429 and 503, and tells you how long to wait.

Two different retry loops

The Claude Code line comes from the Claude Code changelog (read 2026-10-07). The Sume facts come from Errors and rate limits and Authentication.

A status-to-action function

The loop you write for Sume should read the response, not a client setting. This function maps a status and code to the next step.

def action(status, code, headers=None):
    """Map a Sume HTTP error to what the client should do next."""
    headers = headers or {}
    if status == 429 and code == "queue_full":
        return "wait: a queued or processing job must finish or be canceled, then resend with the same Idempotency-Key"
    if status in (429, 503) and code != "provider_not_configured":
        wait = headers.get("retry-after", "backoff")
        return f"retry after {wait} with the same Idempotency-Key"
    table = {
        400: "fix the request; do not retry",
        401: "fix the credential (send exactly one of x-api-key or Authorization)",
        402: "add funds or lower the cost; do not retry",
        404: "check the id and the workspace; do not retry",
        409: "read the job; do not resubmit",
        413: "shrink the body; do not retry",
        415: "send application/json; do not retry",
        503: "do not retry aggressively; check runtime status",
    }
    return table.get(status, "log the request_id and stop")


if __name__ == "__main__":
    print(action(429, "rate_limited", {"retry-after": "7"}))
    print(action(429, "queue_full"))
    print(action(503, "provider_capacity_exceeded"))
    print(action(409, "job_not_completed"))

What Sume tells you

The table lists the Sume signals that the code reads.

Sume retry signals (read 2026-10-07)
SignalMeaningDo this
429 with retry-afterRequest budget usedWait that long, then resend with the same key
429 with queue_fullConcurrency and queue both fullWait for a job to finish or cancel one; do not hammer
503, provider_capacity_exceededProvider dispatch queue fullRetry later with the same key
ratelimit-remainingBudget left in the windowSlow down before it reaches 0

Keep the key

The docs say not to retry unsafe submit requests without an Idempotency-Key. With the key, a retry after a 429 or a lost reply returns the original job and does not bill twice. Reads and writes have separate budgets, so a status-poll loop cannot cause a 429 on your own submits.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume