Skip to main content

Best practices

Production payment systems require careful engineering and operations.

Use idempotency everywhere it matters

Payment creation, beneficiary creation, and internal transfers should use stable idempotency keys where supported.

Treat webhooks as notifications, not commands

A webhook tells you something changed. Fetch the latest resource if you need authoritative state.

Store CashXChain IDs

Store IDs for accounts, beneficiaries, quotes, payments, ledger entries, and events.

Build for exceptions

Handle:

  • Quote expiry.
  • Required action.
  • Payment failure.
  • Payment return.
  • Account restriction.
  • Webhook duplicate.
  • Partner downtime.
  • Rate limits.

Separate duties

Use approvals for large or sensitive payments. Do not let the same user create and approve high-value transfers without controls.

Secure credentials

Use a secret manager, rotate keys, and never expose production keys in frontend code.

Reconcile daily

High-volume accounts should reconcile at least daily using ledger entries and statements.

Test before production

Use sandbox to simulate success and failure paths. Do not go live with only the happy path implemented.