Before switching your integration to use live keys, every item on this checklist should be complete. Check off each item as you confirm it in your codebase.
timingSafeEqual / compare_digest (timing-safe comparison)sk_test_ in dev/staging, sk_live_ in production only| HTTP Status | Error type | Action |
|---|---|---|
| 400 | Validation error | Fix request params โ do not retry |
| 401 | Auth failure | Check API key โ do not retry |
| 422 | Business rule violation | Log and surface to user โ do not retry |
| 429 | Rate limit | Retry after Retry-After header value |
| 503 | Service unavailable | Retry with exponential backoff |
transfer.returned webhook โ notifies appropriate party, updates records429) handled with backoff, not immediate retry loopsDocument and implement a key rotation process before going live โ not after your first incident.
sk_live_ key loaded and ping returns {"environment": "live"}