# Payment providers (https://prood.com/docs/packages/payments)

All payment providers implement the same `PaymentProvider` interface from `@prood/types`. The checkout state machine and `@prood/commerce` factory work with any registered provider.

## Available providers [#available-providers]

| Provider | Region | Methods | Doc |
| --- | --- | --- | --- |
| **Stripe** | International | Cards, plus Apple Pay and Google Pay where you've enabled them, via the Payment Element | [Stripe](/docs/packages/payments/stripe) |
| **Easypay** | Portugal | Multibanco, MB WAY, card | [Easypay](/docs/packages/payments/easypay) |
| **Ifthenpay** | Portugal | Multibanco, MB WAY, card | [Ifthenpay](/docs/packages/payments/ifthenpay) |

## How providers are loaded [#how-providers-are-loaded]

```mermaid
flowchart LR
  DASH[Dashboard integration_config] --> DEC[decryptConfig]
  DEC --> FACTORY[getTenantPaymentProvider]
  FACTORY --> PP[PaymentProvider instance]
  PP --> CHK[Checkout /c]
  PP --> WH[Webhook verification]
```

Credentials exist only per store, in the dashboard. There is no environment fallback. A session uses one provider: the first the store has connected and turned on, in the order Stripe, Easypay, Ifthenpay. See [Payment integration guide](/docs/guides/payment-integration).

## Interface [#interface]

Every provider implements:

| Method | Purpose |
| --- | --- |
| `createSession()` | Start a charge, Checkout Session or reference |
| `confirmSession()` | Verify after redirect or async completion |
| `refund()` | Full or partial refund |
| `verifyWebhook()` | Validate provider signature on webhook payload |

## Related pages [#related-pages]

<Cards>
  <Card title="Payment integration" href="/docs/guides/payment-integration" description="End-to-end setup guide." />
  <Card title="Checkout payments" href="/docs/apps/checkout/payments" description="Payment UI in the checkout app." />
  <Card title="Dashboard integrations" href="/docs/apps/dashboard/integrations" description="Per-tenant credential storage." />
</Cards>
