Docs Open Console

Bank Payments

Offer bank transfer as a checkout method - nineteen named rails plus your own custom rails, with instructions, a unique payment reference, and a 30-day pending window.

How it works#

Bank rails are merchant-mediated: the buyer is shown your account details plus a unique payment reference, sends the transfer from their bank outside the platform, and you flip the order to completed when the money lands. Orders stay pending for 30 days or until you complete or expire them.

  1. Buyer picks bank transfer at checkout and chooses a rail
  2. The checkout freezes a snapshot of your rail instructions onto the order - later edits to your bank settings never change existing orders
  3. The buyer sees each instruction row with a copy button, the amount, and their payment reference
  4. You confirm arrival in Payments - completion runs the full ceremony (receipt email, webhook, fulfillment, license keys), just like an on-chain payment

Rails#

RailRegion
ACHUnited States
X MoneyUnited States (X app @handle or ACH)
Cash AppUnited States ($cashtag, instant)
VenmoUnited States (@handle, instant)
ZelleUnited States (email or phone)
Domestic WireUnited States
SWIFTInternational
SEPAEurozone (IBAN)
Interac e-TransferCanada
Faster PaymentsUnited Kingdom (sort code)
PayIDAustralia (NPP)
PIXBrazil (PIX key, instant 24/7)
UPIIndia (UPI ID / VPA, instant)
AlipayChina (Alipay ID)
WeChat PayChina (WeChat ID)
PayNowSingapore (mobile or UEN, instant)
PromptPayThailand (ID or mobile, instant)
HK FPSHong Kong (FPS proxy, instant)
M-PesaKenya and East Africa (Paybill or Till)
Custom railsYour own label + fields, for local rails we have not named

Each rail carries your bank name, account holder, account number, routing/IBAN/sort-code field (labeled per rail), and notes. Instant rails additionally carry a handle the buyer pays from their app: X Money uses your X @handle (with ACH account details as the second route), Cash App your $cashtag, Venmo your @handle, PIX your PIX key, UPI your UPI ID, and so on. A rail is only offered at checkout when it is active and actually configured - half-filled rails stay hidden.

Every order gets a unique reference in the form B- plus the order number, so you can match incoming transfers to orders without guesswork.

Lifecycle and edge cases#

  • No countdown: bank orders never show the crypto checkout timer and the visible cancel button cannot delete a pending bank order
  • Expiry: bank orders expire to rejected status after 30 days (or early, if you expire them); the buyer's page explains the expiry
  • Stale checkouts: if a rail is turned off or unconfigured after a checkout was created, that checkout errors instead of issuing dead instructions
  • Identity: like every fiat rail, bank transfer is hidden on crypto-denominated checkouts; bank rails are fully translated in all 68 languages

Custom rails#

Need a rail we have not named - a local instant-transfer scheme, a money order process, anything with instructions? Create a custom rail with your own label and instruction fields. Custom rails live beside the named ones; deleting one never reuses its internal id, so orders that snapshot it stay valid forever.