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

# Present Offers with RevenueCat

> Trigger an Encore placement from a RevenueCat paywall dismissal.

## Overview

RevenueCat owns the paywall, so the only thing that changes is *where* you call `show()`. Everything else in [Presenting Offers](/publishers/ios/quickstart/present-offers) applies unchanged: the same placement call, the same handlers, the same outcome model.

Pick the hook that matches how you present the RevenueCat paywall.

***

## From `PaywallView`

`onRequestDismiss` fires when the user closes the paywall without converting:

```swift theme={null}
import RevenueCat
import RevenueCatUI
import Encore

PaywallView(
    onRequestDismiss: { paywallInfo, paywallResult in
        Encore.shared.placement("paywall_decline").show()
    }
)
```

***

## From the `presentPaywallIfNeeded` modifier

```swift theme={null}
import RevenueCat
import RevenueCatUI
import Encore

YourView()
    .presentPaywallIfNeeded(
        presentationMode: .sheet,
        onDismiss: {
            Encore.shared.placement("paywall_decline").show()
        }
    )
```

Full contract: [`placement()`](/publishers/ios/sdk-reference/placement).

***

## Next

* [Add Subscription Product](./add-subscription-product) - route the purchase through RevenueCat
