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

# Offers

> How to integrate the Almedia SDK — synced from the source repository.

An offer is an extra monetization webview surface for a linked player. Open it with:

```csharp theme={"theme":{"light":"github-light","dark":"night-owl"}}
Almedia.ShowOffer();
```

## Availability comes and goes

The offer screen opens only for a linked player who currently has an offer, and that can change between syncs: an offer available at launch may be gone an hour later, and one that was absent may appear. Check `CanShowOffer` on the `Linked` status before calling. Calling in any state is still safe - when there is no offer, the call does nothing and the reason is logged through `OnLog`.

Because availability is transient, **do not cache a "this player has an offer" flag of your own** - it will go stale. Gate your UI on the SDK's live snapshot instead:

```csharp theme={"theme":{"light":"github-light","dark":"night-owl"}}
offerButton.SetActive(Almedia.Status is AlmediaStatus.Linked { CanShowOffer: true });
Almedia.OnStatusChanged += status =>
    offerButton.SetActive(status is AlmediaStatus.Linked { CanShowOffer: true });
```

The event fires whenever the flag changes, also while the player stays linked - see [What can actually be shown](https://docs.almedia.dev/technical/integration-guide/status-and-lifecycle.md#what-can-actually-be-shown). Availability can still change between rendering the button and the tap; such a tap does nothing and is harmless.

## Offer lifecycle

The offer screen reports its lifecycle through the same unified events, carrying `AlmediaScreen.Offer` and the same [`AlmediaInAppScreenResult`](https://docs.almedia.dev/technical/api-reference/almedia/models#almediainappscreenresult) semantics as the reward hub:

```csharp theme={"theme":{"light":"github-light","dark":"night-owl"}}
Almedia.OnScreenDismissed += (screen, result) =>
{
    if (screen == AlmediaScreen.Offer && result is AlmediaInAppScreenResult.Failed failed)
        Debug.LogWarning(failed.Error.Message);
};
```

Only one in-app screen can be open at a time - calling `ShowOffer()` while the reward hub (or the linking flow) is showing is ignored with a log, and no lifecycle event fires for the ignored call.

***


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