OptionalsupportedHard PSP currency constraints (ISO 4217, uppercase). ABSENT means unrestricted. When present, the router pre-screens candidates by it — without it, a PSP-local currency rejection (invalid_request) aborts the failover cascade before an eligible PSP is tried.
fetchEvents() is available for missed-webhook reconciliation.
listPayments()/listRefunds() reconciliation passthroughs are available.
Authorize now, capture later.
More than one partial capture against a single authorization (each with its own idempotency key). Single-capture PSPs settle once and release the rest.
Zero/low-amount validation, no charge, no storage.
PSP-side vaulting: cards are stored by the PSP ONLY (SAQ-A unchanged), PayFanout and the host handle nothing but opaque tokens. When true, the adapter implements the customer/saved-method surface and off-session charging (the foundation of recurring payments / subscriptions).
updatePaymentSession is available (amount/metadata amendments after creation). NOTE: some PSPs re-issue the session — always use the returned PaymentSession's pspSessionId/clientSecret after an update.
True if the PSP flow is client-tokenize-first and the server must finalize the payment via completePayment (Paysafe: true, Stripe: false).