Create or Update Profile

Creates a new profile or updates an existing one. Profiles can contain multiple content items (apps, files, commands, settings) and support versioning, batch rollout configuration, device targeting conditions, and execution scheduling.

Creating a profile that installs an app (the app was previously saved with the Files APIs and you have its repositoryFileMetaDataID):

{
  "name": "Install Sales App",
  "desc": "Installs the sales APK",
  "typeOfAllowMultiProfile": false,
  "profileCondition": { "profileConditionItems": [] },
  "profileExecution": { "when": "WHEN_IMMEDIATE" },
  "profileSubItems": [
    {
      "id": "665f1c2ab77e4a3d9c0e8b12",
      "type": "packages",
      "persistent": true,
      "stopAfterExecution": false,
      "repoItem": {
        "@class": "com.viso.entities.AppRepoItem",
        "repositoryItemId": "665f1c2ab77e4a3d9c0e8b12",
        "repositoryItemName": "Sales App",
        "repositoryFileMetaData": { "repositoryFileMetaDataID": "665f1c2ab77e4a3d9c0e8b12" }
      }
    }
  ]
}

All three IDs are the app's repositoryFileMetaDataID returned by savefiledata; only the ID is needed - the server resolves the full app details from the repository. Always include profileCondition (at least with an empty profileConditionItems list) - devices skip a profile that has no condition object.

Which profile a device runs (important when more than one profile is attached to a device's groups):

  • Profiles with typeOfAllowMultiProfile: false (the default) are priority profiles: on each device only ONE of them runs - the one with the lowest orderIndex whose profileCondition is met. Other priority profiles attached to that device's groups are delivered but not applied.
  • Profiles with typeOfAllowMultiProfile: true ('Run with other templates') run on every matching device in addition to the active priority profile.
  • A new profile is appended at the lowest priority (highest orderIndex). Reorder with POST /rest/manager/profiles/updateprofilespriorities.
  • Nothing enforces this at attach time - attaching a second priority profile to a group succeeds, and the device simply keeps running the higher-priority one. If the app must be installed regardless of other profiles, set typeOfAllowMultiProfile: true.

Rolling out a new version of the app (the same flow the management console uses):

  1. Upload the new APK (getpresignurl -> PUT -> getpresignfinal) and save it as a new repository item with savefiledata (no repositoryFileMetaDataID), same packageName, strictly higher versionCode. Note the new ID.
  2. Read the current profile with GET /rest/manager/profiles/getprofilebyid?profileID=<id> and replace the three IDs of the packages sub-item with the new item's ID.
  3. Save it as a draft: POST createorupdate with draftVersion: true, linkedProfileId: <id> and no top-level id. Optionally review with GET /rest/manager/profiles/getprofiledraftversion?profileID=<id>.
  4. Publish: GET /rest/manager/profiles/activateremoteprofileversion?currentProfileID=<id>&draftProfileID=<draft id>&isViewProfile=false. The profile version increments and devices upgrade the app in place (Android upgrade - app data is kept; devices already on that version report no change).
    Updating the existing repository item in place (savefiledata with its repositoryFileMetaDataID) also bumps every profile that contains it, but it is a full replace of the item, sends no push, and the console blocks it for items linked to a profile - prefer the flow above.

Detaching or deleting a profile does not uninstall its apps or revert its settings on devices; it only stops the profile from being applied and enforced.

Create vs. update vs. draft:

  • Create: omit id. The new profile is saved as version 0 and becomes active immediately; attach it to device groups with attachprofiletogroups to start distribution.
  • Draft update (recommended): send the modified profile with draftVersion: true and linkedProfileId set to the active profile's id, and omit the top-level id (leaving id in while draftVersion is true overwrites the active profile instead of creating a draft). The response returns the draft's profileID. The draft does not reach devices until you call activateremoteprofileversion.
  • Direct update: send the profile with its existing id (no draft fields). The version increments immediately, but no push is sent - devices pick the change up on their next sync. Prefer the draft flow.

Response example:

{ "result": "SUCCESS", "data": { "profileID": "665f2a91c33e5b4ea1d7f003", "profileVersion": 0 } }
Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params

Profile object to create or update. For new profiles, omit the 'id' field. For updates, include the 'id' of the existing profile.

Device configuration profile. A profile is a collection of content items (apps, files, commands, messages, etc.) that can be distributed to managed devices. Profiles support versioning (draft, active, historical), batch rollout with configurable settings, device group targeting, and execution scheduling. Profiles track distribution status and can be stopped mid-rollout.

string

Unique identifier for the profile. Not required when creating a new profile (server generates it automatically). Required when updating an existing profile.

int32

Version number of the profile. Each time a profile is activated from draft, the version increments. Used to track profile history and rollout status.

string
required

Name of the profile. Must be unique within the account. Required field.

string

Description of the profile. Optional field that provides additional details about the profile's purpose.

profileCondition
object

Device targeting conditions for the profile, evaluated on the device (device model, tags, serial, app version, Android settings, etc.). Always send this object - at least {"profileConditionItems": []} for no conditions; devices skip a profile that has no condition object. A priority profile whose conditions are not met on a device does not run there and does not block lower-priority profiles.

profileExecution
object

Execution settings that control when the profile should run on devices. Options include immediate execution, time-based scheduling, first registration, on-demand, or when device is idle.

profileRolloutConfig
object

Batch rollout configuration. Controls gradual rollout settings including batch size, wait time between batches, and success threshold requirements.

int32

Priority of the profile among priority (non-'run with others') profiles: LOWER value = HIGHER priority. On each device only ONE priority profile runs - the one with the lowest orderIndex whose profileCondition is met; other priority profiles attached to the device's groups are delivered but not applied. Assigned by the server on create (a new profile is appended at the lowest priority); change the order with updateprofilespriorities. Ignored for profiles with typeOfAllowMultiProfile = true.

properties
object

Additional custom properties for the profile. Can store metadata or configuration specific to profile behavior.

boolean

Whether this profile is disabled. Disabled profiles are not distributed to devices.

moreData
object

Additional metadata storage for the profile.

string

Profile category, set by the server for special profiles (e.g. 'cms' for content views). Omit for regular app/settings profiles.

profileMessages
object

Advanced messaging items associated with this profile. Maps message identifiers to AdvancedMessagingItem objects for displaying rich media on devices.

boolean

Whether this profile is read-only. Read-only profiles cannot be modified.

usersGroups
array of strings

List of user group IDs that have access to this profile. Used for SAML-based access control.

usersGroups
boolean

Whether this profile has been stopped. Stopped profiles halt their rollout and don't distribute to new devices.

string

ID of the linked active profile when this is a draft version. Links draft versions to their corresponding active profiles.

profileSubItems
array of objects

List of content items included in this profile. ProfileSubItems wrap repository items (apps, files, commands, etc.) with execution settings like retry logic, persistence, and device-specific conditions.

profileSubItems
boolean

false (default) = a PRIORITY profile: on each device only one priority profile runs, the one with the lowest orderIndex whose conditions are met. true = 'Run with other templates': the profile runs on every matching device alongside the active priority profile and other 'run with others' profiles, regardless of orderIndex. Set true when the profile should apply in addition to whatever other profile the device already runs.

boolean
boolean

Default for the profile's sub-items (each sub-item can override it). true = the device re-applies an item whenever its state drifts from the desired state (e.g. reinstalls a removed app); false = the item is applied once and not enforced afterwards. Persistence does not affect what happens on detach: detaching or deleting a profile never uninstalls apps or reverts settings on the device.

Responses

400

Bad Request

401

Unauthorized

403

Forbidden

429

Too Many Requests

503

Service Unavailable

Language
Credentials
Bearer
JWT
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json