OptionalcancelResolves "canceled" only when the PSP confirms it. Under getCapabilities().modificationOutcome "asynchronous" the PSP merely acknowledges the request and the outcome arrives by webhook, so the returned status is "processing" — never an unconfirmed terminal state.
OptionalcaptureOnly present if getCapabilities().supportsManualCapture. Capture is the canonical double-charge operation — the idempotency key is REQUIRED, and under supportsMultiCapture each partial capture is its own charge with its own key.
OptionalchargeOff-session charge of a stored token — the recurring-payments primitive.
OptionalcompleteRequired when getCapabilities().requiresServerCompletion is true (Paysafe). Finalizes a payment using a client-produced token. Never called for confirm-on-client PSPs (Stripe).
OptionalcreateCreates the PSP-side customer that saved instruments attach to.
OptionalcreateServer-only creation against an already-vaulted instrument.
OptionaldeleteDeletes by SavedPaymentMethod.token — the token is dead afterwards.
OptionalfetchMissed-webhook recovery: page through the PSP's recent events as the same normalized UnifiedWebhookEvents a webhook delivery would produce. Only present if getCapabilities().supportsEventPolling.
Optionalinput: FetchEventsInputOptionallistPages the PSP's native subscriptions (cursor/limit) as unified records.
Optionalinput: ListNativeSubscriptionsInputOptionallistReconciliation passthrough. Only present if getCapabilities().supportsListing.
Optionalinput: ListPaymentsInputOptionallistReconciliation passthrough. Only present if getCapabilities().supportsListing.
Optionalinput: ListRefundsInputOptionallistThrows PayFanoutError (code "invalid_request") on unparseable payloads; maps genuinely unknown-but-valid event types to type "unknown" rather than throwing.
OptionalretrieveOptionalretrieveOnly present if getCapabilities().supportsPaymentRetrieval. Push-only PSPs expose no read for a single payment — their hosts follow payment state through webhook deliveries instead.
OptionalretrievePoll a refund to a terminal state. Required whenever getCapabilities().supportsRefundRetrieval — refundPayment can return "pending". PSPs with no refund read declare the flag false and deliver the outcome by webhook instead.
OptionalsaveTokenize-first PSPs only: converts a single-use clientToken into a
permanent stored instrument. Confirm-on-client PSPs vault during checkout
(session savePaymentMethod) and don't implement this.
OptionalupdateOnly present if getCapabilities().supportsSessionUpdate. May re-issue the session — callers must continue with the returned PaymentSession.
OptionalverifyOptional side-effect-free credential probe — the engine behind a host "Test connection" button. Makes ONE read-only PSP call and classifies the outcome; never mutates PSP state. Absence means the adapter offers no probe.
OptionalverifyZero-amount validation, no charge, no storage — see the vaulting caveat in the README.
Webhook handling — same adapter, separate concerns. Both async: future PSPs may need remote key retrieval; the contract stays uniform. MUST operate on the RAW request body bytes/string — re-serializing a parsed body breaks signatures (the conformance suite tests this).
Stops PSP-side billing. Verified-idempotent: an already-terminal subscription resolves as success (adapters re-fetch on cancel rejections where needed), never as an error — adoption flows replay cancels.