Skip to main content
For United States payments, use the Trustly US connector.
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.

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.

Capabilities

Supported countries

Supported currencies

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.
var transaction = await client.Transactions.CreateAsync(
  transactionCreate: new TransactionCreate()
  {
    Amount = 1299,
    Currency = "EUR",
    Country = "DE",
    PaymentMethod =
      TransactionCreatePaymentMethod.CreateRedirectPaymentMethodCreate(
        new RedirectPaymentMethodCreate()
        {
          Method = "trustlyeurope",
          Country = "DE",
          Currency = "EUR",
          RedirectUrl = "https://example.com/callback",
        }
      ),
  }
);
amount := int64(1299)
currency := "EUR"
country := "DE"
method := components.RedirectPaymentMethodCreateMethodTrustlyeurope
redirectUrl := "https://example.com/callback"

redirectPaymentMethodCreate := components.RedirectPaymentMethodCreate{
  Method: method,
  Country: country,
  Currency: currency,
  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, nil)
CreateTransactionResponse transactionResponse = gr4vyClient.transactions().create()
  .transactionCreate(TransactionCreate.builder()
    .amount(1299L)
    .currency("EUR")
    .country("DE")
    .paymentMethod(TransactionCreatePaymentMethod.of(RedirectPaymentMethodCreate.builder()
      .method(RedirectPaymentMethodCreateMethod.TRUSTLYEUROPE)
      .country("DE")
      .currency("EUR")
      .redirectUrl("https://example.com/callback")
      .build()))
    .build())
  .call();

Transaction transaction = transactionResponse.transaction().orElse(null);
$transactionCreate = new TransactionCreate(
  amount: 1299,
  currency: 'EUR',
  country: 'DE',
  paymentMethod: new RedirectPaymentMethodCreate(
    method: 'trustlyeurope',
    country: 'DE',
    currency: 'EUR',
    redirectUrl: 'https://example.com/callback'
  )
);
$response = $client->transactions->create($transactionCreate);
$transaction = $response->transaction;
transaction: models.Transaction = client.transactions.create(
  amount=1299,
  currency="EUR",
  country="DE",
  payment_method={
    "method": "trustlyeurope",
    "country": "DE",
    "currency": "EUR",
    "redirect_url": "https://example.com/callback",
  }
)
const transaction = await client.transactions.create({
  amount: 1299,
  currency: "EUR",
  country: "DE",
  paymentMethod: {
    method: "trustlyeurope",
    country: "DE",
    currency: "EUR",
    redirectUrl: "https://example.com/callback"
  }
})
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.
{
  "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).