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

# Overview

> Complete reference documentation for the Encore Android SDK

Contracts for the Encore Android SDK: the methods you call, the controller you implement, and the types they exchange.

<Note>
  **Looking for integration guides?**

  * **New to Encore?** Start with the [Getting Started Guide](/quickstart) for portal-guided setup
  * **Step-by-step integration:** See the [Android Quickstart](/publishers/android/quickstart/install) for installation and configuration
  * **Wiring results into your app:** See [Integration Patterns](/publishers/android/guides/integration-patterns)
</Note>

## Core methods

<CardGroup cols={2}>
  <Card title="configure()" icon="gear" href="/publishers/android/sdk-reference/configure">
    Initialize the SDK with your public API key, purchase controller, and unlock mode
  </Card>

  <Card title="identify()" icon="user" href="/publishers/android/sdk-reference/identify">
    Associate your user ID with Encore for cross-device tracking
  </Card>

  <Card title="setUserAttributes()" icon="id-card" href="/publishers/android/sdk-reference/set-user-attributes">
    Set structured attributes for targeting and analytics
  </Card>

  <Card title="reset()" icon="rotate-left" href="/publishers/android/sdk-reference/reset">
    Clear user identification and cached entitlements on logout
  </Card>
</CardGroup>

## Presenting offers

<CardGroup cols={2}>
  <Card title="placement()" icon="wand-magic-sparkles" href="/publishers/android/sdk-reference/placement">
    Fluent builder for presenting offers, with suspending and callback forms
  </Card>

  <Card title="EncorePurchaseController" icon="credit-card" href="/publishers/android/sdk-reference/purchase-controller">
    The controller your app registers so purchases run through your billing code
  </Card>

  <Card title="Encore.outcomes" icon="signal-stream" href="/publishers/android/sdk-reference/outcomes">
    SharedFlow of every placement resolution, for passive observers
  </Card>
</CardGroup>

## Types and configuration

<CardGroup cols={2}>
  <Card title="UserAttributes" icon="user-tag" href="/publishers/android/sdk-reference/user-attributes">
    Structured user attributes for targeting and personalization
  </Card>

  <Card title="PresentationResult" icon="square-check" href="/publishers/android/sdk-reference/presentation-result">
    The factual record a presentation resolves to
  </Card>

  <Card title="DismissReason" icon="xmark-circle" href="/publishers/android/sdk-reference/dismiss-reason">
    How a presented offer sheet went away
  </Card>
</CardGroup>

## Error handling

<CardGroup cols={2}>
  <Card title="EncoreError" icon="triangle-exclamation" href="/publishers/android/sdk-reference/errors">
    Errors the SDK reports, carried as values on the result record
  </Card>
</CardGroup>

## Basic integration

```kotlin theme={null}
// 1. Configure at launch, registering your purchase controller if your
//    app sells a product through Encore offers
Encore.shared.configure(
    context = this,
    apiKey = "pk_live_your_key",
    purchaseController = AppPurchases(billing),
)

// 2. Identify the user after login
Encore.shared.identify(userId = user.id)

// 3. Present an offer and branch on the result
lifecycleScope.launch {
    val result = Encore.placement("cancellation_flow").show()
    if (result.claim != null || result.publisher == PublisherOutcome.Purchased) {
        // The user claimed an offer or completed your purchase.
    } else {
        proceedWithCancellation()   // dismissed, declined, nothing appeared, ...
    }
}
```

<Note>
  `show()` never throws. Failures arrive as `NotPresented(NotPresentedReason.Error(...))` on the [`PresentationResult`](./presentation-result), so fallback logic lives in one place.
</Note>

<Tip>
  For passive observation (analytics, logging, entitlement sync), collect the [`Encore.outcomes`](./outcomes) stream once at startup instead of repeating the work at every call site.
</Tip>
