Airwallex caps how many Global Accounts a client may open per currency and country, and answers a create past that cap with 400 NO_MORE_VBA_ALLOWED forever — closing an account does not free a slot. That was reaching the user as a generic 502 "please try again", which can only fail again.
- Detect the provider code and answer 503 with wording that names the currency and points at a way out; the same text is stored on the row.
- Carry canRetry alongside the message on the deposit screen, so a permanent failure renders without a Try again button.
- Only treat a 503 as permanent when the API itself explained why: a bodyless 503 from a gateway or a rolling deploy is transient and keeps its retry.
- Log the provider's response body, truncated to 1000 chars, since axiosError.message is always the generic "Request failed with status code N".
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com