> ## 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.

# Trustly (Europe)

> Connect to Trustly Europe to accept redirect bank payments in Europe.

<Note>
  For United States payments, use the [Trustly US](./trustly-trustly) connector.
</Note>

Trustly Europe supports redirect-based bank payments for buyers across Europe.

## Setup

A Trustly account can be requested by contacting their sales team via the
[Trustly website](https://www.trustly.com/contact-sales).

## Credentials

When setting up Trustly in the dashboard, configure the
following credentials, which you can obtain from the Trustly team.

* **Username** - The username used to authenticate API requests.
* **Password** - The password used to authenticate API requests.
* **Private key** - The private key used to sign Trustly requests.

## Features

Trustly Europe supports the following features:

* **Direct capture** - Authorize and capture in a single step
* **Refunds** - Refund transactions in full
* **Partial refunds** - Refund a portion of a captured transaction
* **Credential verification** - Validate configured connector credentials

## Supported countries

Trustly Europe 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`         | `CZ`         | `DE`         | `DK`         | `EE`         | `ES`         | `FI`         | `GB`         |
| `LT`         | `LV`         | `NL`         | `NO`         | `PL`         | `SE`         |              |              |

## Supported currencies

Trustly Europe supports processing payments in the following currencies:

| Currency code | Currency code | Currency code | Currency code | Currency code | Currency code | Currency code | Currency code |
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| `AED`         | `AFN`         | `ALL`         | `AMD`         | `AOA`         | `ARS`         | `AUD`         | `AWG`         |
| `AZN`         | `BAM`         | `BBD`         | `BDT`         | `BHD`         | `BIF`         | `BMD`         | `BND`         |
| `BRL`         | `BSD`         | `BWP`         | `BZD`         | `CAD`         | `CDF`         | `CHF`         | `CNY`         |
| `CRC`         | `CUP`         | `CVE`         | `CZK`         | `DJF`         | `DKK`         | `DOP`         | `DZD`         |
| `EGP`         | `ERN`         | `ETB`         | `EUR`         | `FJD`         | `FKP`         | `GBP`         | `GEL`         |
| `GHS`         | `GIP`         | `GMD`         | `GNF`         | `GTQ`         | `GYD`         | `HKD`         | `HNL`         |
| `IDR`         | `ILS`         | `INR`         | `IQD`         | `IRR`         | `ISK`         | `JMD`         | `JOD`         |
| `JPY`         | `KES`         | `KGS`         | `KHR`         | `KMF`         | `KPW`         | `KRW`         | `KWD`         |
| `KYD`         | `KZT`         | `LAK`         | `LBP`         | `LKR`         | `LRD`         | `LYD`         | `MAD`         |
| `MDL`         | `MGA`         | `MKD`         | `MMK`         | `MNT`         | `MOP`         | `MUR`         | `MVR`         |
| `MWK`         | `MYR`         | `MZN`         | `NGN`         | `NIO`         | `NOK`         | `NPR`         | `NZD`         |
| `OMR`         | `PEN`         | `PGK`         | `PHP`         | `PKR`         | `PLN`         | `PYG`         | `QAR`         |
| `RON`         | `RSD`         | `RUB`         | `RWF`         | `SAR`         | `SBD`         | `SCR`         | `SDG`         |
| `SEK`         | `SGD`         | `SHP`         | `SOS`         | `SRD`         | `SYP`         | `SZL`         | `THB`         |
| `TJS`         | `TMT`         | `TOP`         | `TRY`         | `TTD`         | `TWD`         | `TZS`         | `UAH`         |
| `UGX`         | `USD`         | `UZS`         | `VND`         | `VUV`         | `WST`         | `XCD`         | `XCG`         |
| `XPF`         | `YER`         | `ZAR`         |               |               |               |               |               |

## Limitations

The following features are not supported by this connector:

* **Delayed capture** - Authorization and capture must happen together
* **Partial capture** - Capturing only part of the authorized amount is not supported
* **Void** - Voiding authorized transactions is not supported
* **Payment method tokenization** - Storing payment methods for recurring use is not supported
* **Create token** - Creating standalone payment method tokens is not supported
* **Settlement reporting** - Settlement reporting is not supported

## Required fields

Trustly Europe requires the following checkout fields:

* Billing address country
* Billing address line 1
* Billing address postal code

Optionally, you can pass up to 249 cart items with a transaction.

## Integration

The default integration for Trustly Europe uses 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 = "EUR",
      Country = "DE",
      PaymentMethod =
        TransactionCreatePaymentMethod.CreateCheckoutSessionWithUrlPaymentMethodCreate(
          new RedirectPaymentMethodCreate()
          {
            Method = "trustlyeurope",
            RedirectUrl = "https://example.com/callback",
          }
        ),
    }
  );
  ```

  ```go Go theme={"system"}
  amount := int64(1299)
  currency := "EUR"
  country := "DE"
  method := "trustlyeurope"
  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("EUR")
      .country("DE")
      .paymentMethod(TransactionCreatePaymentMethod.of(RedirectPaymentMethodCreate.builder()
        .method("trustlyeurope")
        .redirectUrl("https://example.com/callback")
        .build()))
      .build())
    .call();

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

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

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

  ```ts TypeScript theme={"system"}
  const transaction = await client.transactions.create({
    amount: 1299,
    currency: "EUR",
    country: "DE",
    paymentMethod: {
      method: "trustlyeurope",
      redirectUrl: "https://example.com/callback"
    }
  })
  ```
</CodeGroup>

After the transaction is created, the API response includes a `payment_method.approval_url` and the status is set to `buyer_approval_pending`. The approval URL expires after 30 minutes.

```json theme={"system"}
{
  "type": "transaction",
  "id": "ea1efdd0-20f9-44d9-9b0b-0a3d71e9b625",
  "payment_method": {
    "type": "payment-method",
    "approval_url": "https://cdn.gr4vy.com/connectors/..."
  },
  "method": "trustlyeurope"
}
```

Redirect the buyer to the `approval_url` so they can complete bank 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).
