Settings let operator-built user apps read tenant-managed configuration from the platform. Operators can add their own settings in the APP area, and the app can retrieve those settings through the User API. This gives operators freedom to configure feature flags, app behavior, thresholds, URLs, labels, rollout switches, or white-label content without shipping a new app build.
The User API reads settings for the app. Creating, updating, deleting, or importing settings is handled through Operations API/admin settings management.
| Related reference: User API | User API Guide | Localization Guide |
A setting is identified by a stable key. The app references the key in code and reads the configured value from the API.
Example app-owned keys:
app.home.show_wallet_banner
app.rental.end.require_parking_hint
app.wallet.show_minutes
app.support.chat_url
app.feature.new_vehicle_sheet_enabled
Use namespaced keys for app-specific settings. A good convention is to prefix custom app settings with app. and then the product area, such as app.rental.*, app.wallet.*, app.support.*, or app.feature.*.
The User API settings endpoint returns settings from app-relevant areas only:
| Area | Use |
|---|---|
APP |
Mobile app and user web app settings. Use this for operator-created app configuration. |
SHARED |
Settings intentionally shared across user-facing surfaces. |
Dashboard-only and core-only settings are not exposed as normal user-app configuration. If an operator wants a setting to be available to a white-label app, create it in APP or, if appropriate, SHARED.
Settings can be global defaults or branch-specific overrides. The response includes branchIds, and fallback values can be represented with branch ID 0.
Use branch-scoped settings when app behavior differs by operating branch, for example:
Fetch settings by key:
GET /settings?keys=app.wallet.show_minutes&keys=app.support.chat_url
Fetch settings for specific branches:
GET /settings?keys=app.wallet.show_minutes&keys=app.support.chat_url&branchIds=3&branchIds=7
The endpoint returns an array of SettingSimple objects:
[
{
"key": "app.wallet.show_minutes",
"area": "APP",
"branchIds": [0],
"value": {
"enabled": true
}
},
{
"key": "app.support.chat_url",
"area": "APP",
"branchIds": [3],
"value": {
"url": "https://support.example.com/chat"
}
}
]
The value is an object. The app and operator must agree on the shape of each custom setting value.
Treat settings as configuration, not as trusted client-side enforcement. Settings are good for UI behavior and feature decisions, but business-critical checks must still come from dedicated endpoints.
Recommended client behavior:
Example:
setting = findSetting("app.wallet.show_minutes", activeBranchId)
showMinutes = setting.value.enabled if boolean, else appDefault.showMinutes
Settings and localization work well together:
Example:
{
"key": "app.wallet.empty_state",
"value": {
"enabled": true,
"titleKey": "app.wallet.empty.title",
"descriptionKey": "app.wallet.empty.description"
}
}
The app then resolves titleKey and descriptionKey through GET /resources/messages?locale=....
The User API reads settings. Operators manage settings through Operations API/admin settings management.
| Management task | API surface |
|---|---|
| Create a new app setting | Operations settings management |
| Update setting value or type | Operations settings management |
| Delete a setting | Operations settings management |
| Read app settings in the customer app | User API GET /settings |
When adding custom app settings:
APP area unless it is intentionally shared.Avoid putting secrets, credentials, or enforcement-critical rules into app-readable settings. Anything returned by the User API can be inspected by the app user.
| Area | Endpoints |
|---|---|
| Read app settings | GET /settings |
| Read localized text for setting-driven copy | GET /resources/messages |
| List available localization languages | GET /resources/messages/languages |
| Manage settings | Operations settings management endpoints |
APP settings for white-label mobile and user web app behavior.