# SDK Client Reference

This reference maps every SDK Demo App client interface to the SDK call it wraps. Use it to find the exact call for a capability you want to integrate.

## Package layout

The app is split into two clearly separated areas. Only the first one is material for your integration.

| Layer | Package | Role |
| :--- | :--- | :--- |
| SDK clients | `com.pagonxt.apolo.devkit.sdk` | Thin wrappers that call the SDK — exactly the calls you need to integrate. |
| Demo app internals | `com.pagonxt.apolo.devkit.internal` | The demo application itself (UI, state, storage, DI). Useful as inspiration, not required to integrate the SDK. |

## Client interfaces

Each SDK capability is exposed by a small interface in the `sdk/` package. What matters for your integration is the body of each client method, which holds the exact SDK call.

| Client interface | SDK responsibility | Underlying SDK call |
| :--- | :--- | :--- |
| `ISetupClient` | SDK lifecycle: `setup(…)`, `reinitialize(…)`, `shutdown()` | `ApoloSdk.Builder(…).build()` and `ApoloSdk.shutdown()` |
| `ISaleClient` | Start a payment (default, amount-only, or fully parameterized) | `ApoloSdk.getClient().initSale(context, setup, onPaymentResult)` |
| `IRefundClient` | Refund a payment (by id or via the SDK screen) | `ApoloSdk.getClient().initRefund(context, refundData, onResult)` |
| `IPrinterClient` | Print a `Bitmap` | `ApoloSdk.getClient().printBitmap(bitmap, onStatus)` |
| `INavCustomizationClient` | Insert or replace screens in the SDK flow | `ApoloSdk.getClient().customizeNavigation(config)` |
| `IPaymentTypesClient` | Query the payment types enabled for the terminal | `ApoloSdk.getClient().getAvailablePaymentTypes()` |

## Source set layout

The interfaces and the country-specific implementations live in different source sets.

| Location | Holds |
| :--- | :--- |
| `src/main/.../sdk/` | The shared client interfaces, plus the `ApoloPrinterClient` and `PaymentTypesClient` implementations. |
| `src/brazil/.../sdk/Br*.kt` | Country-specific client implementations, bound by a Koin module. |

Initialization is the one step every integration must do first. In the demo app it is driven by `BrSetupClient`.

## Related resources

* [Quick Start](/en/getnet-toolbox/sdk-demo-app/first-steps-demo/quickstart) — get the app running before tracing its calls.
* [Initialization Reference](/en/getnet-toolbox/sdk-white-label/reference-sdk/initialization) — the SDK contract behind `ISetupClient`.
* [Transaction Result Reference](/en/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) — what `ISaleClient` and `IRefundClient` return.