api-clientPayments calls fail transiently under load (about 0.4% of requests, mostly 503s from the gateway). Today every failure surfaces to the caller. This PR wraps request() in a retry loop with exponential backoff and jitter, opt-in per call.
The mechanics are right (jitter, cap, cleanup in finally). The policy is wrong: retrying everything by default, including non-idempotent writes, is the one thing this change must not do on a payments path. Two changes and this is good to merge:
retryOn to network errors and 408/429/502/503/504.retry to off for POST/PATCH/DELETE unless an idempotency key is present.