Why use JSON for mobile?
Mobile apps render content with native UI components — there’s no HTML injection, no iframes, no webviews needed. The JSON API approach is the natural fit:Native rendering
Receive structured data and render it with SwiftUI, Jetpack Compose, Flutter widgets, or React Native components.
Lightweight
A single HTTP call returns exactly the fields your app needs — no SDK to install, no JavaScript runtime overhead.
Offline-friendly
Cache JSON responses locally for offline display. Refresh when connectivity returns.
Cross-platform
Same endpoint works for iOS, Android, Flutter, React Native, KMP — any client that can make HTTP requests.
Runner endpoint
| Parameter | Type | Description |
|---|---|---|
workflowId | path | The workflow ID (visible in the workflow editor URL or integration modal) |
entrypointId | path | The entrypoint ID within the workflow |
rlvt-u | query | User identifier for personalisation — email, internal user ID, or device ID |
Response format
The response body is the resolved template data directly — no wrapper envelope. Static fields are returned as-is and dependency fields are replaced with real values from datasources:HTTP status codes
| Status | Meaning |
|---|---|
| 200 | Workflow executed successfully. Body contains the JSON payload. |
| 204 | Workflow executed but no content was produced (all branches were empty). |
| 404 | Workflow not found or not published. |
Code examples
Swift (iOS)
Kotlin (Android)
Flutter (Dart)
React Native
Identity management
Pass a stable user identifier in therlvt-u query parameter:
| Identifier type | When to use |
|---|---|
| Internal user ID or email | User is logged in — best personalisation accuracy |
| Device ID (IDFV, Android ID) | Anonymous users — maintains session continuity |
| Custom ID | Any stable identifier your app generates |
Best practices
Cache responses for offline use
Cache responses for offline use
Store the last successful JSON response locally (e.g., UserDefaults, SharedPreferences, or a local database). Display cached data when offline and refresh when connectivity returns.
Handle empty responses gracefully
Handle empty responses gracefully
A
204 response means no personalised content is available. Display a sensible default or hide the personalisation zone entirely.Call early, render when ready
Call early, render when ready
Initiate the API call as early as possible (e.g., on app launch or screen appear) so data is ready by the time the user scrolls to the personalised zone.
Use typed models
Use typed models
Define a struct/class matching your JSON Template schema. This catches schema mismatches at compile time and makes refactoring safe.
JSON Template configuration
JSON Templates are configured in the Reelevant platform. See the Websites > API (JSON) > Technical Integration page for full details on:- Template schema definition
- Variable types (scalar vs array)
- Template management API
- Publish-time validation