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

# Nuvei - Klarna

> Configure Klarna via Nuvei as a payment method in Gr4vy.

Nuvei is a global payment provider that provides comprehensive payment processing solutions across multiple payment methods and regions.

Klarna is a buy now, pay later (BNPL) payment method that lets buyers pay over time through a redirect approval flow.

## Setup

Please follow the [common Nuvei instructions](./nuvei) to get set up with Nuvei.

After setting up your Nuvei account, ask Nuvei to complete the following Klarna-specific account configuration:

1. Enable Klarna as a payment method on your merchant account.
2. Enable sale mode for all Klarna transactions on your merchant account. Nuvei defaults Klarna to auth-settle mode, and Gr4vy supports only sale mode.

## Features

Nuvei Klarna payments support the following features:

* **Refunds** - Refund transactions in full or in part
* **Partial refunds** - Issue multiple partial refunds up to the captured amount
* **Transaction synchronization** - Keep payment statuses synchronized with Nuvei
* **Redirect checkout** - Redirect buyers to approve the payment

## Supported countries

Nuvei supports transactions from buyers in the following countries:

| Country code | Country code | Country code | Country code | Country code | Country code | Country code | Country code |
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
| `AT`         | `BE`         | `CH`         | `CZ`         | `DE`         | `DK`         | `ES`         | `FI`         |
| `FR`         | `GB`         | `GR`         | `HU`         | `IE`         | `IT`         | `NL`         | `NO`         |
| `PL`         | `PT`         | `RO`         | `SE`         | `SK`         |              |              |              |

## Supported currencies

Nuvei supports processing payments in the following currencies:

| Currency code | Currency code | Currency code | Currency code | Currency code | Currency code | Currency code | Currency code |
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| `CHF`         | `CZK`         | `DKK`         | `EUR`         | `GBP`         | `NOK`         | `PLN`         | `RON`         |
| `SEK`         |               |               |               |               |               |               |               |

## Limitations

The following features are not supported by this connector:

* **Auth-settle mode** - Klarna transactions require sale mode
* **Delayed capture** - Authorization and capture must happen together
* **Partial capture** - Cannot capture a portion of the authorized amount
* **Void** - Cannot cancel transactions once initiated
* **Payment method tokenization** - Cannot store payment methods for recurring transactions
* **Zero auth** - Zero-dollar verification transactions are not supported
* **Settlement reporting** - Settlement reporting is not available

## Integration

For Klarna, the default integration for Nuvei is through a redirect to a hosted payments page.

Start by creating a new transaction with the following required fields.

<CodeGroup>
  ```csharp C# theme={"system"}
  var transaction = await client.Transactions.CreateAsync(
    transactionCreate: new TransactionCreate()
    {
      Amount = 1299,
      Currency = "GBP",
      Country = "GB",
      PaymentMethod =
        TransactionCreatePaymentMethod.CreateCheckoutSessionWithUrlPaymentMethodCreate(
          new RedirectPaymentMethodCreate()
          {
            Method = "klarna",
            RedirectUrl = "https://example.com/callback",
          }
        ),
    }
  );
  ```

  ```go Go theme={"system"}
  amount := int64(1299)
  currency := "GBP"
  country := "GB"
  method := "klarna"
  redirectUrl := "https://example.com/callback"

  redirectPaymentMethodCreate := components.RedirectPaymentMethodCreate{
    Method: method,
    RedirectUrl: redirectUrl,
  }
  paymentMethod := components.CreateTransactionCreatePaymentMethodRedirectPaymentMethodCreate(redirectPaymentMethodCreate)

  transactionCreate := components.TransactionCreate{
    Amount:        amount,
    Currency:      currency,
    Country:       &country,
    PaymentMethod: &paymentMethod,
  }

  transaction, err := client.Transactions.Create(ctx, transactionCreate, nil, nil)
  ```

  ```java Java theme={"system"}
  CreateTransactionResponse transactionResponse = gr4vyClient.transactions().create()
    .transactionCreate(TransactionCreate.builder()
      .amount(1299L)
      .currency("GBP")
      .country("GB")
      .paymentMethod(TransactionCreatePaymentMethod.of(RedirectPaymentMethodCreate.builder()
        .method("klarna")
        .redirectUrl("https://example.com/callback")
        .build()))
      .build())
    .call();

  Transaction transaction = transactionResponse.transaction().orElse(null);
  ```

  ```php PHP theme={"system"}
  $transactionCreate = new TransactionCreate(
    amount: 1299,
    currency: 'GBP',
    country: 'GB',
    paymentMethod: new RedirectPaymentMethodCreate(
      method: 'klarna',
      redirectUrl: 'https://example.com/callback'
    )
  );
  $response = self::$sdk->transactions->create($transactionCreate);
  $transaction = $response->transaction;
  ```

  ```python Python theme={"system"}
  transaction: models.Transaction = client.transactions.create(
    amount=1299,
    currency="GBP",
    country="GB",
    payment_method={
      "method": "klarna",
      "redirect_url": "https://example.com/callback",
    }
  )
  ```

  ```ts TypeScript theme={"system"}
  const transaction = await gr4vy.transactions.create({
    amount: 1299,
    currency: "GBP",
    country: "GB",
    paymentMethod: {
      method: "klarna",
      redirectUrl: "https://example.com/callback",
    },
  });
  ```
</CodeGroup>

After the transaction is created, the API response includes `payment_method.approval_url` and the `buyer_approval_pending` status.

```json theme={"system"}
{
  "type": "transaction",
  "id": "ea1efdd0-20f9-44d9-9b0b-0a3d71e9b625",
  "payment_method": {
    "type": "payment-method",
    "approval_url": "https://cdn.sandbox.spider.gr4vy.app/connectors/nuvei/apm.html?token=..."
  },
  "method": "klarna"
}
```

Redirect the buyer to the `approval_url` so they can complete authentication and approve the payment. After approval the buyer is redirected to the `redirect_url` you provided when creating the transaction. Do not rely solely on the redirect - either poll the transaction or (recommended) rely on webhooks to detect the final status (for example `capture_succeeded` or failure states).

### Required fields

Nuvei requires the following fields to be collected during checkout for Klarna transactions:

* First name and last name
* Billing country
* Email address
