---
title: "Save Or update Mobile app bundle (saveMobileAppBundle)"
method: POST
path: "/api/mobile/bundle"
tags: ["mobile-app-bundle-controller"]
---

# Save Or update Mobile app bundle (saveMobileAppBundle)

`POST /api/mobile/bundle`

Create or update the Mobile app bundle that represents tha pair of ANDROID and IOS app and mobile settings like oauth2 clients, self-registration and layout configuration.When creating mobile app bundle, platform generates Mobile App Bundle Id as [time-based UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_(date-time_and_MAC_address)). The newly created Mobile App Bundle Id will be present in the response. Referencing non-existing Mobile App Bundle Id will cause 'Not Found' error.

Available for users with 'SYS_ADMIN' or 'TENANT_ADMIN' authority.

## Query parameters

- `oauth2ClientIds` string[]

## Request body

- MobileAppBundle — A JSON value representing the Mobile Application Bundle.
  - `id` MobileAppBundleId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT' | 'CUSTOMER' | 'USER' | 'DASHBOARD' | 'ASSET' | 'DEVICE' | 'ALARM' | 'RULE_CHAIN' | 'RULE_NODE' | 'ENTITY_VIEW' | 'WIDGETS_BUNDLE' | 'WIDGET_TYPE' | 'TENANT_PROFILE' | 'DEVICE_PROFILE' | 'ASSET_PROFILE' | 'API_USAGE_STATE' | 'TB_RESOURCE' | 'OTA_PACKAGE' | 'EDGE' | 'RPC' | 'QUEUE' | 'NOTIFICATION_TARGET' | 'NOTIFICATION_TEMPLATE' | 'NOTIFICATION_REQUEST' | 'NOTIFICATION' | 'NOTIFICATION_RULE' | 'QUEUE_STATS' | 'OAUTH2_CLIENT' | 'DOMAIN' | 'MOBILE_APP' | 'MOBILE_APP_BUNDLE' | 'CALCULATED_FIELD' | 'JOB' | 'ADMIN_SETTINGS' | 'AI_MODEL' | 'API_KEY', required
  - `createdTime` integer — Entity creation timestamp in milliseconds since Unix epoch
  - `tenantId` TenantId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT', required — string
  - `title` string, required — Application bundle title. Cannot be empty
  - `description` string — Application bundle description.
  - `androidAppId` MobileAppId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT' | 'CUSTOMER' | 'USER' | 'DASHBOARD' | 'ASSET' | 'DEVICE' | 'ALARM' | 'RULE_CHAIN' | 'RULE_NODE' | 'ENTITY_VIEW' | 'WIDGETS_BUNDLE' | 'WIDGET_TYPE' | 'TENANT_PROFILE' | 'DEVICE_PROFILE' | 'ASSET_PROFILE' | 'API_USAGE_STATE' | 'TB_RESOURCE' | 'OTA_PACKAGE' | 'EDGE' | 'RPC' | 'QUEUE' | 'NOTIFICATION_TARGET' | 'NOTIFICATION_TEMPLATE' | 'NOTIFICATION_REQUEST' | 'NOTIFICATION' | 'NOTIFICATION_RULE' | 'QUEUE_STATS' | 'OAUTH2_CLIENT' | 'DOMAIN' | 'MOBILE_APP' | 'MOBILE_APP_BUNDLE' | 'CALCULATED_FIELD' | 'JOB' | 'ADMIN_SETTINGS' | 'AI_MODEL' | 'API_KEY', required
  - `iosAppId` MobileAppId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT' | 'CUSTOMER' | 'USER' | 'DASHBOARD' | 'ASSET' | 'DEVICE' | 'ALARM' | 'RULE_CHAIN' | 'RULE_NODE' | 'ENTITY_VIEW' | 'WIDGETS_BUNDLE' | 'WIDGET_TYPE' | 'TENANT_PROFILE' | 'DEVICE_PROFILE' | 'ASSET_PROFILE' | 'API_USAGE_STATE' | 'TB_RESOURCE' | 'OTA_PACKAGE' | 'EDGE' | 'RPC' | 'QUEUE' | 'NOTIFICATION_TARGET' | 'NOTIFICATION_TEMPLATE' | 'NOTIFICATION_REQUEST' | 'NOTIFICATION' | 'NOTIFICATION_RULE' | 'QUEUE_STATS' | 'OAUTH2_CLIENT' | 'DOMAIN' | 'MOBILE_APP' | 'MOBILE_APP_BUNDLE' | 'CALCULATED_FIELD' | 'JOB' | 'ADMIN_SETTINGS' | 'AI_MODEL' | 'API_KEY', required
  - `layoutConfig` MobileLayoutConfig
    - `pages` union[] — List of pages
      - union
        - CustomMobilePage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `path` string — Path to custom page
          - `label` string — Page label
          - `icon` string — URL of the page icon
        - DashboardPage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `dashboardId` string — Dashboard id
          - `label` string — Page label
          - `icon` string — URL of the page icon
        - DefaultMobilePage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `id` 'HOME' | 'ALARMS' | 'DEVICES' | 'CUSTOMERS' | 'ASSETS' | 'AUDIT_LOGS' | 'NOTIFICATIONS' | 'DEVICE_LIST' | 'DASHBOARDS' — Identifier for default page
          - `label` string — Page label
          - `icon` string — URL of the page icon
        - WebViewPage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `url` string — Url
          - `label` string — Page label
          - `icon` string — URL of the page icon
  - `oauth2Enabled` boolean — Whether OAuth2 settings are enabled or not
  - `name` string — Mobile app bundle title

## Response `200`

OK

- MobileAppBundle — A JSON value representing the Mobile Application Bundle.
  - `id` MobileAppBundleId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT' | 'CUSTOMER' | 'USER' | 'DASHBOARD' | 'ASSET' | 'DEVICE' | 'ALARM' | 'RULE_CHAIN' | 'RULE_NODE' | 'ENTITY_VIEW' | 'WIDGETS_BUNDLE' | 'WIDGET_TYPE' | 'TENANT_PROFILE' | 'DEVICE_PROFILE' | 'ASSET_PROFILE' | 'API_USAGE_STATE' | 'TB_RESOURCE' | 'OTA_PACKAGE' | 'EDGE' | 'RPC' | 'QUEUE' | 'NOTIFICATION_TARGET' | 'NOTIFICATION_TEMPLATE' | 'NOTIFICATION_REQUEST' | 'NOTIFICATION' | 'NOTIFICATION_RULE' | 'QUEUE_STATS' | 'OAUTH2_CLIENT' | 'DOMAIN' | 'MOBILE_APP' | 'MOBILE_APP_BUNDLE' | 'CALCULATED_FIELD' | 'JOB' | 'ADMIN_SETTINGS' | 'AI_MODEL' | 'API_KEY', required
  - `createdTime` integer — Entity creation timestamp in milliseconds since Unix epoch
  - `tenantId` TenantId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT', required — string
  - `title` string, required — Application bundle title. Cannot be empty
  - `description` string — Application bundle description.
  - `androidAppId` MobileAppId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT' | 'CUSTOMER' | 'USER' | 'DASHBOARD' | 'ASSET' | 'DEVICE' | 'ALARM' | 'RULE_CHAIN' | 'RULE_NODE' | 'ENTITY_VIEW' | 'WIDGETS_BUNDLE' | 'WIDGET_TYPE' | 'TENANT_PROFILE' | 'DEVICE_PROFILE' | 'ASSET_PROFILE' | 'API_USAGE_STATE' | 'TB_RESOURCE' | 'OTA_PACKAGE' | 'EDGE' | 'RPC' | 'QUEUE' | 'NOTIFICATION_TARGET' | 'NOTIFICATION_TEMPLATE' | 'NOTIFICATION_REQUEST' | 'NOTIFICATION' | 'NOTIFICATION_RULE' | 'QUEUE_STATS' | 'OAUTH2_CLIENT' | 'DOMAIN' | 'MOBILE_APP' | 'MOBILE_APP_BUNDLE' | 'CALCULATED_FIELD' | 'JOB' | 'ADMIN_SETTINGS' | 'AI_MODEL' | 'API_KEY', required
  - `iosAppId` MobileAppId
    - `id` string, uuid, required — ID of the entity, time-based UUID v1
    - `entityType` 'TENANT' | 'CUSTOMER' | 'USER' | 'DASHBOARD' | 'ASSET' | 'DEVICE' | 'ALARM' | 'RULE_CHAIN' | 'RULE_NODE' | 'ENTITY_VIEW' | 'WIDGETS_BUNDLE' | 'WIDGET_TYPE' | 'TENANT_PROFILE' | 'DEVICE_PROFILE' | 'ASSET_PROFILE' | 'API_USAGE_STATE' | 'TB_RESOURCE' | 'OTA_PACKAGE' | 'EDGE' | 'RPC' | 'QUEUE' | 'NOTIFICATION_TARGET' | 'NOTIFICATION_TEMPLATE' | 'NOTIFICATION_REQUEST' | 'NOTIFICATION' | 'NOTIFICATION_RULE' | 'QUEUE_STATS' | 'OAUTH2_CLIENT' | 'DOMAIN' | 'MOBILE_APP' | 'MOBILE_APP_BUNDLE' | 'CALCULATED_FIELD' | 'JOB' | 'ADMIN_SETTINGS' | 'AI_MODEL' | 'API_KEY', required
  - `layoutConfig` MobileLayoutConfig
    - `pages` union[] — List of pages
      - union
        - CustomMobilePage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `path` string — Path to custom page
          - `label` string — Page label
          - `icon` string — URL of the page icon
        - DashboardPage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `dashboardId` string — Dashboard id
          - `label` string — Page label
          - `icon` string — URL of the page icon
        - DefaultMobilePage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `id` 'HOME' | 'ALARMS' | 'DEVICES' | 'CUSTOMERS' | 'ASSETS' | 'AUDIT_LOGS' | 'NOTIFICATIONS' | 'DEVICE_LIST' | 'DASHBOARDS' — Identifier for default page
          - `label` string — Page label
          - `icon` string — URL of the page icon
        - WebViewPage
          - `type` 'DEFAULT' | 'DASHBOARD' | 'WEB_VIEW' | 'CUSTOM'
          - `visible` boolean, required — Indicates if page is visible
          - `url` string — Url
          - `label` string — Page label
          - `icon` string — URL of the page icon
  - `oauth2Enabled` boolean — Whether OAuth2 settings are enabled or not
  - `name` string — Mobile app bundle title

---

[API](https://skmtc.net/thingsboard/apis/thingsboard-rest-api.md) · [All operations](https://skmtc.net/thingsboard/apis/thingsboard-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/thingsboard/thingsboard-rest-api/revisions/40169ccdec5c/schema)
