OptionalcaptureOptionalchargeOff-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.
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: FetchEventsInputOptionallistReconciliation 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.
OptionalretrievePoll a refund to a terminal state. Required whenever getCapabilities().supportsRefunds — refundPayment can return "pending".
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).
Only 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.