Skip to main content

Payments

Switch transactions are cross-application paytag-to-paytag payments.

Transaction states

A transaction moves through one of these paths:
A payment only affects wallet balances when it becomes COMPLETED.

Initiate a payment

POST /v1/transactions

Best practices

  • Prefer qualified paytag addresses such as alice@walletapp.
  • Always send an Idempotency-Key for retriable requests.
  • Expect an asynchronous webhook to the receiving application.
  • Do not treat initiation as settlement; settlement happens after acceptance.

Accept a transaction

The receiving application accepts the transaction with: POST /v1/transactions/{reference}/accept On success, the switch:
  • marks the transaction as COMPLETED
  • debits the sender wallet
  • credits the receiver wallet
  • writes immutable ledger entries
  • sends the sender callback asynchronously

Reject a transaction

The receiving application rejects the transaction with: POST /v1/transactions/{reference}/reject Rejections do not create ledger movements.

Expiry behavior

Transactions that stay in AWAITING_ACCEPTANCE beyond the configured window are expired by a scheduled job.

Settlement finality

Completed transactions flow into the application wallet and settlement reports at end of day. That is the point where the switch turns routed volume into financial position.