This matrix is generated from code (built-in capability claims on gateway manifests). Do not invent cells. Upstream source: packages/core/docs/gateway-capabilities.md, regenerated with:
bun run docs:capabilitiesSource of truth: packages/core/src/gateways/builtin-capabilities.ts via generateGatewayCapabilitiesMarkdown + BUILTIN_GATEWAY_MANIFESTS.
Generated from published sources (core 1.0.0). All gateway capabilities are from code.
Built-ins only: Stripe, Moyasar, PayPal, Paymob. Tap, MyFatoorah, and Hesabe are extra packages (Tap, MyFatoorah, Hesabe) and are not in this table — do not copy cells onto them.
Cells are ✓ when the adapter claims the capability on its GatewayManifest.capabilities / instance snapshot, otherwise ✗. Claims are conservative: method presence alone does not imply true.
Providers
- Stripe (
stripe)1.0.0(built-in) - Moyasar (
moyasar)1.0.0(built-in) - PayPal (
paypal)1.0.0(built-in) - Paymob (
paymob)1.0.0(built-in)
Capability matrix
| Capability | Stripe | Moyasar | PayPal | Paymob |
|---|---|---|---|---|
| payments | ✓ | ✓ | ✓ | ✓ |
| immediateCapture | ✓ | ✓ | ✓ | ✓ |
| authorization | ✓ | ✓ | ✓ | ✓ |
| partialCapture | ✓ | ✓ | ✓ | ✓ |
| refunds | ✓ | ✓ | ✓ | ✓ |
| partialRefunds | ✓ | ✓ | ✓ | ✓ |
| voids | ✓ | ✓ | ✓ | ✓ |
| hostedCheckout | ✓ | ✗ | ✗ | ✗ |
| tokenization | ✗ | ✗ | ✗ | ✗ |
| customers | ✓ | ✗ | ✗ | ✗ |
| paymentMethods | ✓ | ✗ | ✗ | ✗ |
| marketplaceSplits | ✗ | ✓ | ✗ | ✗ |
| disputes | ✓ | ✗ | ✗ | ✗ |
| paymentLinks | ✓ | ✗ | ✗ | ✗ |
| providerRecurring | ✗ | ✗ | ✗ | ✗ |
Keys match GATEWAY_CAPABILITY_KEYS in @paykernel/core.
Key notes (from the generated file)
- partialCapture / partialRefunds: optional
amountoncapturePayment/refundPayment. Omittingamountis a full capture/refund and does not require the partial flag. - PayPal partialCapture: claimed
truebecause authorization captures acceptamountwhenpaypalCaptureType: "authorization". PayPal order captures reject amount; callers must usepaypalCaptureType: "authorization"(authorize-then-capture). - hostedCheckout: first-class
createCheckoutSession(Stripe Checkout Session product), not every provider redirect URL. - marketplaceSplits: create-time split / transfer surface (e.g. Moyasar
splits). - providerRecurring: extension-only; default
false. Checkout subscription mode alone does not forcetrue. - customers / paymentMethods: Stripe implements first-class Customer create/get and PaymentMethod attach/list/detach. Other built-ins stay false until they expose the same surface.
- disputes: Stripe implements get/list/submit evidence. Other built-ins stay false (PayPal Customer Dispute webhooks still dual-write).
- paymentLinks: Stripe Payment Links product only. Not Checkout Sessions and not PayPal Pay Links.
- tokenization: claimed only when the adapter exposes first-class setup / save-payment-method APIs. Stripe
tok_…on attach ispaymentMethods, not this key (built-ins stay false).
Inspecting support at runtime
import { createPaymentClient, stripeGateway } from "@paykernel/core";
const client = createPaymentClient({
gateways: { stripe: stripeGateway({ /* closed-over credentials */ }) },
defaultGateway: "stripe",
});
const gateway = client.gateway("stripe");
if (gateway.supports("partialRefunds")) {
// partial amount is a viable path on this adapter
} else {
// do not pass a partial amount — OperationNotSupportedError
}Missing optional method, or supports(capability) === false, throws OperationNotSupportedError (code: "OPERATION_NOT_SUPPORTED"). See errors.
Capability claims are not a fulfillment signal. Fulfill from outcomes (isPaidOutcome) and claimed webhooks (events), never from ✓ in this table.