Clear walkthrough of the lost-reply case on POST /orders, that's the one people only learn about after a duplicate charge. Small note on the Retry-After handling: the header can also be an HTTP date instead of seconds, so isdigit() skips it and the loop falls back to the jitter delay. That's a safe default, just worth knowing when a 503 says to come back at a specific time. Retries stacked in several layers (client, SDK, proxy) also multiply fast, so the 3 to 5 tries budget is best set in one place.