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

# Mobile Personalisation

> Deliver personalised content in your mobile apps using Reelevant as a headless personalisation API

## Overview

Reelevant brings the same personalisation engine that powers web experiences to your **native mobile apps**. Since mobile apps render their own UI with native components, the integration model is headless — Reelevant provides the personalised **data**, and your app handles the **rendering**.

<CardGroup cols={2}>
  <Card title="Reelevant Mobile SDK" icon="code" href="/developer-docs/mobile-integration/sdk/overview">
    Native SDKs for Android, iOS, and Flutter with unified analytics and personalization. Typed responses, auto-identity, click tracking.
  </Card>

  <Card title="Reelevant as API (JSON)" icon="mobile" href="/developer-docs/mobile-integration/api-json/overview">
    Call the Reelevant runner from your mobile app and receive structured JSON data. Render it with your native iOS, Android, or cross-platform components.
  </Card>
</CardGroup>

## Why personalise mobile?

| Benefit                                 | Description                                                                                       |
| --------------------------------------- | ------------------------------------------------------------------------------------------------- |
| **Higher engagement**                   | Personalised content drives more taps, scrolls, and conversions than generic content              |
| **Consistent cross-channel experience** | Same personalisation logic across web, email, push, and in-app — powered by the same workflows    |
| **Real-time decisions**                 | Reelevant evaluates conditions, datasources, and splits at request time — content is always fresh |
| **No app release required**             | Change personalisation logic in the workflow editor without shipping a new app version            |

## How it works

Your mobile app integrates with Reelevant the same way a headless web frontend does:

<Steps>
  <Step title="Create a JSON Template">
    Define the schema and variables in the Reelevant platform. The schema describes the fields your app expects (product names, prices, image URLs, etc.).
  </Step>

  <Step title="Build a workflow">
    Connect datasources, add conditions and splits, and use a **JSON Template** output node. Bind each variable to a datasource field.
  </Step>

  <Step title="Call the runner from your app">
    Make a simple HTTP GET request from your iOS/Android/Flutter app. Pass the user identity for personalisation.
  </Step>

  <Step title="Render natively">
    Parse the JSON response and render it with your native UI components — SwiftUI views, Jetpack Compose composables, Flutter widgets, or React Native components.
  </Step>
</Steps>

## Push and in-app surfaces

Push notifications and in-app surfaces are served by your push provider, not by Reelevant. Two integration modes exist, and they can be combined in the same app.

| Surface                                          | Integration mode           | What the provider needs                                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Lock screen notification**                     | Image URL                  | The Runner URL as the rich media attachment. iOS requires a [notification service extension](https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension) with `mutable-content: 1`; Android reads the [`image` field](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages) of the notification payload. |
| **Lock screen notification (personalised copy)** | JSON, resolved before send | The sending system calls the Runner per recipient and maps the response fields onto `title`, `body`, and `image`.                                                                                                                                                                                                                                            |
| **In-app scene** (banner, pop-up)                | Image URL or JSON          | Same pattern as web: swap a static image for the Runner URL, or fetch JSON and render natively.                                                                                                                                                                                                                                                              |
| **Notification centre**                          | Image URL or JSON          | Same as in-app scenes; cards persist, so prefer JSON when the copy must stay accurate over time.                                                                                                                                                                                                                                                             |

Image-URL mode resolves the Workflow at display time, so content stays fresh after the send. JSON mode resolves it at send time, which is required when the notification copy itself must be personalised — the trade-off is one Runner call per recipient inside the sending window.

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl "https://reelevant.run/{workflowId}/{entrypointId}?rlvt-u={userId}"
```

<Note>
  Some push providers only render plain text on the lock screen. In that case, deliver the personalised visual on the notification centre card or an in-app scene, and keep the lock screen copy generic.
</Note>

Product-side setup for each surface is documented in the [push and in-app integration guide](/advanced-guide/workflows/push-integration).

## Next steps

<Card title="Technical Integration" icon="code" href="/developer-docs/mobile-integration/api-json/overview">
  API endpoints, response format, and mobile-specific code examples (Swift, Kotlin, Flutter, React Native).
</Card>
