# Payments module initialisation

Initialise the SDK with your public API key to access individual payment method buttons.

Payments module initialisation creates a `RevolutPaymentsModuleInstance` with separate payment methods. Use this method when you need individual payment method buttons with granular control over UI placement and create orders on-demand during checkout.

**Payment methods available:**

| Payment method         | Reference                                                                         | Integration guide                                                              |
| ---------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Revolut Pay            | [SDK reference](/docs/sdks/merchant-web-sdk/payment-methods/revolut-pay)          | [Guide](/docs/guides/merchant/accept-payments/online-payments/revolut-pay/web)          |
| Apple Pay / Google Pay | [SDK reference](/docs/sdks/merchant-web-sdk/payment-methods/apple-pay-google-pay) | [Guide](/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/web) |
| Pay by Bank            | [SDK reference](/docs/sdks/merchant-web-sdk/payment-methods/pay-by-bank)          | [Guide](/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/web)          |

## Type signature

```typescript
RevolutCheckout.payments(options: {
  publicToken: string
  mode?: 'prod' | 'sandbox'
  locale?: Locale | 'auto'
}): Promise<RevolutPaymentsModuleInstance>
```

## Parameters

| Parameter     | Description                        | Type                  | Required |
| ------------- | ---------------------------------- | --------------------- | -------- |
| `publicToken` | Your Merchant API public key       | `string`              | Yes      |
| `mode`        | API environment. Default: `'prod'` | `'prod' \| 'sandbox'` | No       |
| `locale`      | Widget language. Default: `'auto'` | `Locale \| 'auto'`    | No       |

:::tip
The `mode` parameter must match the environment used for your public API key. Production keys work only in `'prod'` mode, and sandbox keys only in `'sandbox'` mode.
:::

## Returns

Returns a `Promise<RevolutPaymentsModuleInstance>` with the following methods:

```typescript
interface RevolutPaymentsModuleInstance {
  revolutPay: PaymentsModuleRevolutPayInstance
  paymentRequest: PaymentsModulePaymentRequest
  payByBank: PaymentsModulePayByBank
  setDefaultLocale: (locale: Locale) => void
  destroy: () => void
}
```

- **[`revolutPay`](/docs/sdks/merchant-web-sdk/payment-methods/revolut-pay)** - Accept payments via Revolut Pay
- **[`paymentRequest`](/docs/sdks/merchant-web-sdk/payment-methods/apple-pay-google-pay)** - Accept payments via Apple Pay and Google Pay
- **[`payByBank`](/docs/sdks/merchant-web-sdk/payment-methods/pay-by-bank)** - Accept payments via Pay by Bank
- **[`setDefaultLocale`](/docs/sdks/merchant-web-sdk/types/locale#with-payments-module)** - Change widget language dynamically
- **`destroy`** - Manually destroy the instance

## Example

```typescript
import RevolutCheckout from '@revolut/checkout'

const paymentsInstance = await RevolutCheckout.payments({
  publicToken: 'pk_...',
  mode: 'prod',
  locale: 'auto',
})
```