> ## Documentation Index
> Fetch the complete documentation index at: https://primer.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# PrimerPaymentMethodsController

> Controller interface for accessing and selecting available payment methods

<Warning>
  Primer Checkout Android SDK is currently in **beta** (v3.0.0-beta.4).
  The API is subject to change before the stable release.
</Warning>

Controller interface for the payment method list. Exposes available methods as observable state and provides selection.

## Creation

```kotlin theme={"dark"}
@Composable
fun rememberPaymentMethodsController(
    checkout: PrimerCheckoutController,
): PrimerPaymentMethodsController
```

| Parameter  | Type                       | Description                                                   |
| ---------- | -------------------------- | ------------------------------------------------------------- |
| `checkout` | `PrimerCheckoutController` | Checkout controller from `rememberPrimerCheckoutController()` |

<Note>
  Must be called inside `PrimerCheckoutHost` content or a `PrimerCheckoutSheet` slot.
</Note>

## Property

| Property  | Type                                   | Description                                                                         |
| --------- | -------------------------------------- | ----------------------------------------------------------------------------------- |
| `methods` | `StateFlow<List<PrimerPaymentMethod>>` | Available payment methods for the current session. Updates on `checkout.refresh()`. |

## Method

| Method                                | Description                                                                                   |
| ------------------------------------- | --------------------------------------------------------------------------------------------- |
| `select(method: PrimerPaymentMethod)` | Selects a payment method to begin its payment flow (card form, redirect, native wallet, etc.) |

## PrimerPaymentMethod

```kotlin theme={"dark"}
data class PrimerPaymentMethod(
    val paymentMethodType: String,
    val paymentMethodName: String?,
    val surcharge: Surcharge?,
    val supportedPrimerSessionIntents: List<PrimerSessionIntent>,
    val paymentMethodManagerCategories: List<PrimerPaymentMethodManagerCategory>,
)
```

| Property                         | Type                                       | Description                                                                    |
| -------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------ |
| `paymentMethodType`              | `String`                                   | Payment method identifier (e.g., `"PAYMENT_CARD"`, `"PAYPAL"`, `"GOOGLE_PAY"`) |
| `paymentMethodName`              | `String?`                                  | Human-readable display name                                                    |
| `surcharge`                      | `Surcharge?`                               | Surcharge amount, or `null` if none                                            |
| `supportedPrimerSessionIntents`  | `List<PrimerSessionIntent>`                | Session intents supported by this payment method                               |
| `paymentMethodManagerCategories` | `List<PrimerPaymentMethodManagerCategory>` | Manager categories for this payment method                                     |

### Common payment method types

| Type             | Description           |
| ---------------- | --------------------- |
| `"PAYMENT_CARD"` | Credit/debit card     |
| `"PAYPAL"`       | PayPal                |
| `"GOOGLE_PAY"`   | Google Pay            |
| `"KLARNA"`       | Klarna                |
| `"APPLE_PAY"`    | Apple Pay             |
| `"IDEAL"`        | iDEAL                 |
| `"BANCONTACT"`   | Bancontact            |
| `"SOFORT"`       | Sofort/Klarna Pay Now |
