# Java SDK

import JavaSdkInstallTabs from "@components/content/JavaSdkInstallTabs.astro";

The [`com.sumup:sumup-sdk`](https://github.com/sumup/sumup-java) package is the official Java SDK generated from the SumUp OpenAPI specification. It requires Java 17 or newer and ships both synchronous and asynchronous clients.

## Installation

Add the dependency to your build file.

<JavaSdkInstallTabs />

## Configure Authentication

Set the `SUMUP_API_KEY` environment variable or pass the token directly.

```bash
export SUMUP_API_KEY="sup_sk_MvxmLOl0..."
```

```java
import com.sumup.sdk.SumUpClient;

SumUpClient client = new SumUpClient("sup_sk_MvxmLOl0...");
```

## Examples

### Online Payment Checkout

```java
import com.sumup.sdk.SumUpClient;
import com.sumup.sdk.models.CheckoutCreateRequest;
import com.sumup.sdk.models.Currency;

SumUpClient client = SumUpClient.builder().build();

CheckoutCreateRequest request =
    CheckoutCreateRequest.builder()
        .amount(25.00f)
        .currency(Currency.EUR)
        .checkoutReference("ORDER-1001")
        .merchantCode(System.getenv("SUMUP_MERCHANT_CODE"))
        .description("Online payment via card widget")
        .build();

var checkout = client.checkouts().createCheckout(request);
System.out.println(checkout.id());
```

### Cloud API Checkout

```java
import com.sumup.sdk.SumUpClient;
import com.sumup.sdk.models.CreateReaderCheckoutRequest;
import com.sumup.sdk.models.Money;

SumUpClient client = SumUpClient.builder().build();

String merchantCode = System.getenv("SUMUP_MERCHANT_CODE");
String readerId =
    client.readers().listReaders(merchantCode).items().stream()
        .findFirst()
        .orElseThrow(() -> new IllegalStateException("No paired readers found."))
        .id()
        .value();

CreateReaderCheckoutRequest request =
    CreateReaderCheckoutRequest.builder()
        .description("Reader checkout")
        .totalAmount(
            Money.builder()
                .currency("EUR")
                .minorUnit(2L)
                .value(1500L)
                .build())
        .build();

client.readers().createReaderCheckout(merchantCode, readerId, request);
```