QA checklist
Credentials
- Keys live in a secret manager; none in source control, client code or logs.
- The base URL and the key come from configuration, together.
- One secret key per service, so revoking one stops one service.
- The key's checksum is validated at start-up.
- You can rotate a key without downtime — create, deploy, revoke.
Payouts
- Every payout carries an
Idempotency-Keyderived from your own record, reused on retry. - Retries after a timeout or
5xxreuse the key, and the replay'sstatusis read. - Nothing treats
202as "paid";settledis the only success. -
failed,cancelledandreturnedare handled as final. - Payout status is polled with backoff until final.
-
payee_name_mismatchshows the payer the bank's answer beforeaccept-verificationis called, and the payout is resent under the sameIdempotency-Key. -
corridor_unsupportedis final — it is not retried. - A payout left
createdafter a5xxor timeout is polled, not resent. -
invalidpayee outcomes lead to corrected details, not a retry. -
referencefits in 18 characters. -
plan_limit_exceededis shown to the user with its message. - Cross-currency payouts use a locked quote (
fx_quote_id), and expiry is handled.
Verification
- Payouts and conversions are not offered until the account is
active. - The KYB referral status is polled; nothing waits on
kyb.updatedfor it.
Errors
- Branching uses the status and
error, nevermessage. - Plain-text
400/415/422responses are handled without a JSON parse failure. -
X-Request-Idis logged with every call. - Production's
400 bad_request, and a payout or conversion that turnsfailedafter it was accepted, are handled where the sandbox returnsinsufficient_balanceor, on conversions,quote_expired/quote_consumed. -
503 platform_pausedand403 account_on_holdare shown, not retried in a tight loop.
Webhooks
- Signatures are verified over the raw body, with a 300-second tolerance.
- The receiver answers
2xxwithin 10 seconds and works asynchronously. - Duplicates are ignored by event id.
- The endpoint's
statusis monitored; adisabledendpoint is noticed. - Secret rotation is tested.
Production readiness
- Your production account is verified (
active). - You know your production accounts' pay-in details for funding.
- Support contacts and an escalation path are agreed.