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

# Mobile SDKs

Integrate Sezzle directly into your native iOS and Android apps. The Sezzle Mobile SDKs provide two core features:

1. **Promotional Messaging** — drop-in widgets that show installment pricing on product pages
2. **Checkout** — launch a Sezzle checkout session from your app and handle the result

<CardGroup cols={2}>
  <Card title="iOS SDK" icon="apple" href="/docs/guides/mobile/ios">
    Swift Package Manager, CocoaPods. iOS 15+.
  </Card>

  <Card title="Android SDK" icon="android" href="/docs/guides/mobile/android">
    Maven Central, Gradle. Android 6.0+ (API 23).
  </Card>
</CardGroup>

## How It Works

```mermaid theme={"system"}
sequenceDiagram
    participant App as Merchant App
    participant SDK as Sezzle SDK
    participant API as Sezzle API
    participant Browser as Browser / WebView

    App->>SDK: 1. Configure (public key)
    App->>SDK: 2. Show promotional widget (price)
    SDK-->>App: Renders installment messaging

    App->>SDK: 3. Start checkout (order details)
    SDK->>API: POST /v2/session
    API-->>SDK: Session + checkout URL
    SDK->>Browser: 4. Open checkout
    Browser-->>SDK: 5. Customer completes / cancels
    SDK-->>App: 6. Callback (order UUID)
    App->>API: 7. Capture payment (server-side)
```

<Note>
  **Server-driven integration?** If you'd rather keep your public key off-device and have your backend create the Sezzle session directly, the SDK also exposes a pass-URL `startCheckout` overload (`1.2.0`+). Your server creates the session, your app hands the resulting `checkout_url` to the SDK, and the SDK reports back via the same delegate. See the **Server-Driven Integration** section in the [iOS](/docs/guides/mobile/ios#8-server-driven-integration) or [Android](/docs/guides/mobile/android#8-server-driven-integration) guide.
</Note>

## Checkout Modes

The SDK supports two ways to present the Sezzle checkout:

|                     | System Browser                                                              | WebView                            |
| ------------------- | --------------------------------------------------------------------------- | ---------------------------------- |
| **How it opens**    | iOS: `ASWebAuthenticationSession` / Android: Chrome Custom Tab              | In-app WKWebView / Android WebView |
| **Recommended**     | Yes (default)                                                               | Opt-in                             |
| **Security**        | Runs in a separate browser process                                          | Runs inside your app's process     |
| **Cookie sharing**  | Shares cookies with Safari/Chrome (faster login for returning Sezzle users) | No cookie sharing                  |
| **User experience** | Brief context switch to browser                                             | Stays inside your app              |

<Tabs>
  <Tab title="System Browser">
    <Frame caption="iOS (ASWebAuthenticationSession) and Android (Chrome Custom Tab)">
      <img src="https://mintcdn.com/sezzle/klJ95KzsWuUWpHvl/images/docs/guides/mobile/ios-system-browser-checkout.png?fit=max&auto=format&n=klJ95KzsWuUWpHvl&q=85&s=afe3f023e26e05c3ac879c3ef4bbd009" alt="iOS System Browser" width="1206" height="2622" data-path="images/docs/guides/mobile/ios-system-browser-checkout.png" />
    </Frame>
  </Tab>

  <Tab title="WebView">
    <Frame caption="iOS (WKWebView) and Android (WebView) — close button only, no browser chrome">
      <img src="https://mintcdn.com/sezzle/klJ95KzsWuUWpHvl/images/docs/guides/mobile/ios-webview-checkout.png?fit=max&auto=format&n=klJ95KzsWuUWpHvl&q=85&s=4a5606d37ee85f0616ced7ba1ff440a8" alt="iOS WebView" width="1206" height="2622" data-path="images/docs/guides/mobile/ios-webview-checkout.png" />
    </Frame>
  </Tab>
</Tabs>

## Promotional Messaging

The SDK includes a drop-in promotional widget that automatically displays the right installment messaging based on the product price:

| Price Range                                   | Message                                            |
| --------------------------------------------- | -------------------------------------------------- |
| Below minimum (\$35 default)                  | Widget hidden                                      |
| $35 -- $49.99                                 | "or 4 payments of \$X.XX with Sezzle"              |
| $50 -- $2,500                                 | "or 5 payments of \$X.XX with Sezzle"              |
| Above short-term max (with long-term enabled) | "or monthly payments as low as \$X.XX with Sezzle" |

Tapping the widget opens an educational modal showing the full payment schedule:

<Tabs>
  <Tab title="Installment Modal">
    <Frame caption="4-payment schedule with dates and amounts">
      <img src="https://mintcdn.com/sezzle/klJ95KzsWuUWpHvl/images/docs/guides/mobile/ios-modal-light.png?fit=max&auto=format&n=klJ95KzsWuUWpHvl&q=85&s=e2ec2b111501e19226bd532098d33caa" alt="Installment Modal" width="1206" height="2622" data-path="images/docs/guides/mobile/ios-modal-light.png" />
    </Frame>
  </Tab>

  <Tab title="Long-Term Modal">
    <Frame caption="Monthly payment options with APR terms">
      <img src="https://mintcdn.com/sezzle/klJ95KzsWuUWpHvl/images/docs/guides/mobile/android-modal-dark.png?fit=max&auto=format&n=klJ95KzsWuUWpHvl&q=85&s=6ea62986351ad5cbd449670ee8e88bbd" alt="Long-Term Modal" width="1080" height="2400" data-path="images/docs/guides/mobile/android-modal-dark.png" />
    </Frame>
  </Tab>
</Tabs>

## Dark Mode

Both SDKs automatically adapt to the device's appearance setting. The promotional widget, installment modal, and all brand colors adjust for light and dark mode.

<Tabs>
  <Tab title="Light Mode">
    <Frame>
      <img src="https://mintcdn.com/sezzle/klJ95KzsWuUWpHvl/images/docs/guides/mobile/android-product-page-light.png?fit=max&auto=format&n=klJ95KzsWuUWpHvl&q=85&s=bc0e457b769cf63b414fb126c1ec6691" alt="Light Mode" width="1080" height="2400" data-path="images/docs/guides/mobile/android-product-page-light.png" />
    </Frame>
  </Tab>

  <Tab title="Dark Mode">
    <Frame>
      <img src="https://mintcdn.com/sezzle/klJ95KzsWuUWpHvl/images/docs/guides/mobile/android-product-page-dark.png?fit=max&auto=format&n=klJ95KzsWuUWpHvl&q=85&s=56b489efd32cc0448e47463e0ac694f6" alt="Dark Mode" width="1080" height="2400" data-path="images/docs/guides/mobile/android-product-page-dark.png" />
    </Frame>
  </Tab>
</Tabs>

## Prerequisites

Before you begin, make sure you have:

1. A Sezzle merchant account — <a href="https://dashboard.sezzle.com/merchant/signup" target="_blank">sign up here</a> if you don't have one
2. Your <a href="https://dashboard.sezzle.com/merchant/settings/apikeys" target="_blank">Public API Key</a> from the Sezzle Merchant Dashboard
3. A backend server that can call the Sezzle API to capture payments after checkout

<Note>
  The SDK uses your **public** API key only. Your private key stays on your server and is used to capture payments after the customer completes checkout.
</Note>

## Source Code

Both SDKs are open source on GitHub:

* <a href="https://github.com/sezzle/sezzle-merchant-sdk-ios" target="_blank">sezzle/sezzle-merchant-sdk-ios</a>
* <a href="https://github.com/sezzle/sezzle-merchant-sdk-android" target="_blank">sezzle/sezzle-merchant-sdk-android</a>
