CLAUDE LABJP
FORK — Claude Code 2.1.212 changes what /fork does: it copies your conversation into a new background session with its own row in claude agents, so you can keep working. The old in-session subagent is now /subtaskLIMITS — WebSearch calls are now capped at 200 per session by default, and subagent spawns get the same 200 ceiling, so a runaway search or delegation loop stops on its ownMCPBG — MCP tool calls running past two minutes now move to the background automatically, keeping the session usable. Tune the threshold with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSPLANFIX — Fixed plan mode auto-running file-modifying Bash commands such as touch and rm without a permission prompt or an SDK canUseTool callbackSONNET5 — Claude Sonnet 5 is running on introductory pricing of $2 per million input tokens and $10 per million output. After August 31 it moves to $3 and $15IPO — Bankers are reportedly lining up investor meetings for Anthropic ahead of a possible public listing as soon as OctoberFORK — Claude Code 2.1.212 changes what /fork does: it copies your conversation into a new background session with its own row in claude agents, so you can keep working. The old in-session subagent is now /subtaskLIMITS — WebSearch calls are now capped at 200 per session by default, and subagent spawns get the same 200 ceiling, so a runaway search or delegation loop stops on its ownMCPBG — MCP tool calls running past two minutes now move to the background automatically, keeping the session usable. Tune the threshold with CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSPLANFIX — Fixed plan mode auto-running file-modifying Bash commands such as touch and rm without a permission prompt or an SDK canUseTool callbackSONNET5 — Claude Sonnet 5 is running on introductory pricing of $2 per million input tokens and $10 per million output. After August 31 it moves to $3 and $15IPO — Bankers are reportedly lining up investor meetings for Anthropic ahead of a possible public listing as soon as October
Articles/API & SDK
API & SDK/2026-05-23Advanced

Absorbing Claude API 529 Overloaded in Production — Resilience Patterns from a 50M-Download Indie Studio

529 Overloaded won't go away with a naive exponential backoff. Drawing on lessons from 50 million app downloads, this piece walks through queue-based absorption, model-aware fallback, and circuit-breaker design with working code.

api38overloaded25292resilience10production111fallback8

Premium Article

There are windows in the day when Anthropic's status page is solid blue but my own app is taking 529 after 529. I'm Masaki Hirokawa, an artist and indie developer running a personal app business since 2014 — collectively over 50 million downloads across iOS and Android. Once I started embedding Claude API into production, the most stubborn problem I hit was exactly this: my own quota had plenty of headroom, yet bursts of 529 kept landing on the same users. Wrapping the call in the same exponential backoff I had used for 429 only made it worse — the app felt frozen and users started reporting that buttons "did nothing."

529 Overloaded is an error you don't dodge. You absorb it. Below are the production patterns I run today in my wallpaper, photo, and writing apps, with concrete code and the operational metrics I watch.

529 lives on a different axis from your own congestion

429 and 529 sit next to each other in the status code table but behave very differently. 429 fires when your request rate or token usage hits the limit on your plan — slow yourself down and it resolves. 529 fires when Anthropic's platform is temporarily oversubscribed, so reducing your own traffic does nothing. You have to wait it out, route around it, or pull the user out of the synchronous path.

On my apps the empirical pattern is sharp. Over the last 30 days, 529 events made up 4.2% of failed calls overall, but 78% of those concentrated into the UTC 13:00–16:00 peak window. The 429 rate in the same window was flat. That divergence is the basis for combining model fallback with a time-of-day heuristic, which I'll come back to below.

First, classify the 529s you must NOT retry

The instinct is to wrap every 529 in exponential backoff. That breaks in three concrete cases I have hit:

First, blocking retries inside the synchronous UI path. Users will not sit through three rounds of exponential backoff; their experience is a frozen screen. Second, retrying after a streaming call has already delivered partial output. The follow-up call replays text the user already saw. Third, retrying a 529 that fired during tool_result submission. That path mutates conversation history if you submit a malformed sequence, and you need a dedicated repair branch that preserves tool_result block integrity.

The classifier needs to know which path you're on:

import random
 
class RetryDecision:
    def __init__(self, should_retry: bool, delay: float, reason: str):
        self.should_retry = should_retry
        self.delay = delay
        self.reason = reason
 
def classify_529(err, ctx: dict) -> RetryDecision:
    if ctx.get("partial_streamed"):
        return RetryDecision(False, 0, "partial response already delivered")
 
    if ctx.get("phase") == "tool_result_submit":
        return RetryDecision(False, 0, "tool result phase — repair path")
 
    if ctx.get("sync_ui"):
        attempts = ctx.get("attempts", 0)
        if attempts >= 1:
            return RetryDecision(False, 0, "sync UI — defer to async queue")
        return RetryDecision(True, 1.5 + random.random(), "sync UI — single retry")
 
    attempts = ctx.get("attempts", 0)
    base = min(2 ** attempts, 32)
    return RetryDecision(True, base + random.random() * 2, f"async backoff x{attempts}")

For sync_ui, try once briefly and then hand the job off to the async queue. Pair that handoff with a placeholder UX that tells the user their draft is being processed in the background — covered next.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
The difference between 429 and 529, and the three cases where you must NOT retry
An async queue plus placeholder UX that absorbs 529 without freezing the user
A Sonnet-to-Haiku fallback with per-job-kind quality preservation
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

API & SDK2026-04-22
Handling Frequent 529 Overloaded Errors from the Claude API — A Practical Playbook
A 529 Overloaded response from the Claude API is a very different animal from a 429 rate limit. Here is the retry, fallback, and circuit breaker playbook I actually use in production to keep services responsive when Anthropic's platform is temporarily saturated.
API & SDK2026-03-27
Claude API Production Resilience Patterns — Model Routing, Circuit Breakers, and Fallback Strategies for Indie Teams
Production resilience patterns for Claude API: circuit breakers, intelligent model routing, fallback chains, exponential backoff with jitter, and disaster recovery — with TypeScript implementations and operational lessons from running Dolice Labs across four sites as an indie developer.
API & SDK2026-06-15
When a Model Disappears Without Warning: A State Machine for Retirement, Withdrawal, and Overload
A model can become unusable in hours for reasons that have nothing to do with a technical outage. This guide models three distinct flavors of 'unavailable'—retirement, withdrawal, and transient overload—as one availability state machine, with a router that keeps automated pipelines running. Working TypeScript and Python included.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →