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

# Presenting Offers

> Present Encore's reward sheet at a moment the player just earned, such as a cleared level or a kept streak, in your Unity game.

## Overview

Encore presents a premium brand offer (a real perk a brand funds to acquire customers, such as a free trial, discount, or credit) at a moment you choose. In a game, that is a moment the player just earned: a cleared level, a daily streak, a completed purchase. This is the [Reward Users](https://docs.encorekit.com/publishers/use-cases/post-action-reward.md) use case, and it costs you nothing to give.

Call `.UseCase(UseCase.RewardUsers)` for this. A placement with no `UseCase` call is `UseCase.ReduceChurn`, the [Reduce Churn](https://docs.encorekit.com/publishers/use-cases/churn-intervention.md) use case.

***

## Present an offer

Build a placement with an ID that names the moment, set the copy, and await `ShowAsync()`. The Encore SDK draws the sheet above your game. `ShowAsync()` **never throws**: every outcome, including "nothing was presented", is a value on the returned `PresentationResult`.

```csharp theme={null}
using EncoreKit;
using UnityEngine;

public class LevelComplete : MonoBehaviour
{
    public async void OnLevelCleared(int level)
    {
        var result = await Encore.Placement("level_complete")
            .UseCase(UseCase.RewardUsers)
            .Headline($"Level {level} cleared!")      // optional
            .Subheadline("Here is a thank you from us") // optional
            .ShowAsync();

        if (result.Claim?.TransactionId is string transactionId)
        {
            // The player claimed an offer. Keep the transaction ID; it carries the attribution.
            SaveClaim(transactionId);
        }
        // Every other result: carry on with your own celebration screen.
    }

    private void SaveClaim(string transactionId) { /* your storage */ }
}
```

For a call site that can't await, `Show(Action<PresentationResult>)` takes a callback instead. The result, from either form, arrives on the Unity main thread. Contract: [`Placement()`](https://docs.encorekit.com/publishers/unity/sdk-reference/placement).

Your game keeps running under the sheet on every platform. On Android the sheet draws in your game's own window, so `OnApplicationPause` does not fire while it is open. If your game stops timers or audio on pause, stop them yourself while a sheet is open, for example from [`OnLoadingStateChange`](https://docs.encorekit.com/publishers/unity/sdk-reference/placement) and the result.

***

## Read the result

`result.Claim` is the offer the player claimed, or null. It means the player went to the brand, not that they finished the offer. Keep `Claim.TransactionId`: it carries the attribution. When no sheet appeared, `result.Reason` says why; `NoOffers`, `UseCaseUnavailable`, and `Error` are the common reasons. Treat each as a normal outcome for a reward moment: show your own celebration and carry on. Every field is on [`PresentationResult`](https://docs.encorekit.com/publishers/unity/sdk-reference/presentation-result).

> [!WARNING]
>
> **A claim is not a conversion.** Never pay out or grant access on a claim alone. Encore's servers confirm the completion later, joined on the transaction ID.

To see every result in one place, for analytics, subscribe to [`Encore.Outcomes`](https://docs.encorekit.com/publishers/unity/sdk-reference/outcomes).

***

## Next steps

> [card] [Reward placements](https://docs.encorekit.com/publishers/guides/reward-placements.md)
>
> Where the copy comes from, and the gotchas

> [card] [Gifts Button](https://docs.encorekit.com/publishers/triggers/gifts-button.md)
>
> Let the player open the sheet when they choose


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.