<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="androidenterprise_v1.html">Google Play EMM API</a> . <a href="androidenterprise_v1.managedconfigurationsfordevice.html">managedconfigurationsfordevice</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(enterpriseId, userId, deviceId, managedConfigurationForDeviceId, x__xgafv=None)</a></code></p>
<p class="firstline">Removes a per-device managed configuration for an app for the specified</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, userId, deviceId, managedConfigurationForDeviceId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves details of a per-device managed configuration.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, userId, deviceId, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all the per-device managed configurations for the specified device.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, userId, deviceId, managedConfigurationForDeviceId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Adds or updates a per-device managed configuration for an app for the</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(enterpriseId, userId, deviceId, managedConfigurationForDeviceId, x__xgafv=None)</code>
  <pre>Removes a per-device managed configuration for an app for the specified
device.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  managedConfigurationForDeviceId: string, The ID of the managed configuration (a product ID), e.g.
&quot;app:com.google.android.gm&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, userId, deviceId, managedConfigurationForDeviceId, x__xgafv=None)</code>
  <pre>Retrieves details of a per-device managed configuration.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  managedConfigurationForDeviceId: string, The ID of the managed configuration (a product ID), e.g.
&quot;app:com.google.android.gm&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A managed configuration resource contains the set of managed properties
      # defined by the app developer in the app&#x27;s managed configurations schema,
      # as well as any configuration variables defined for the user.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product that the managed configuration is for, e.g.
        # &quot;app:com.google.android.gm&quot;.
    &quot;configurationVariables&quot;: { # A configuration variables resource contains the managed configuration # Contains the ID of the managed configuration profile and the set of
        # configuration variables (if any) defined for the user.
        # settings ID to be applied to a single user, as well as the variable set that
        # is attributed to the user. The variable set will be used to replace
        # placeholders in the managed configuration settings.
      &quot;mcmId&quot;: &quot;A String&quot;, # The ID of the managed configurations settings.
      &quot;variableSet&quot;: [ # The variable set that is attributed to the user.
        { # A variable set is a key-value pair of EMM-provided placeholders and
            # its corresponding value, which is attributed to a user. For example,
            # $FIRSTNAME could be a placeholder, and its value could be Alice. Placeholders
            # should start with a &#x27;$&#x27; sign and should be alphanumeric only.
          &quot;userValue&quot;: &quot;A String&quot;, # The value of the placeholder, specific to the user.
          &quot;placeholder&quot;: &quot;A String&quot;, # The placeholder string; defined by EMM.
        },
      ],
    },
    &quot;managedProperty&quot;: [ # The set of managed properties for this configuration.
      { # A managed property of a managed configuration. The property must match one of
          # the properties in the app restrictions schema of the product. Exactly one of
          # the value fields must be populated, and it must match the property&#x27;s type in
          # the app restrictions schema.
        &quot;valueInteger&quot;: 42, # The integer value - this will only be present if type of the property is
            # integer.
        &quot;valueBool&quot;: True or False, # The boolean value - this will only be present if type of the property is
            # bool.
        &quot;valueString&quot;: &quot;A String&quot;, # The string value - this will only be present if type of the property is
            # string, choice or hidden.
        &quot;valueBundle&quot;: { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the
            # property is bundle.
          &quot;managedProperty&quot;: [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
        &quot;valueBundleArray&quot;: [ # The list of bundles of properties - this will only be present if type of
            # the property is bundle_array.
          { # A bundle of managed properties.
            &quot;managedProperty&quot;: [ # The list of managed properties.
              # Object with schema name: ManagedProperty
            ],
          },
        ],
        &quot;valueStringArray&quot;: [ # The list of string values - this will only be present if type of the
            # property is multiselect.
          &quot;A String&quot;,
        ],
        &quot;key&quot;: &quot;A String&quot;, # The unique key that identifies the property.
      },
    ],
    &quot;kind&quot;: &quot;A String&quot;, # Deprecated.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(enterpriseId, userId, deviceId, x__xgafv=None)</code>
  <pre>Lists all the per-device managed configurations for the specified device.
Only the ID is set.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;managedConfigurationForDevice&quot;: [ # A managed configuration for an app on a specific device.
      { # A managed configuration resource contains the set of managed properties
          # defined by the app developer in the app&#x27;s managed configurations schema,
          # as well as any configuration variables defined for the user.
        &quot;productId&quot;: &quot;A String&quot;, # The ID of the product that the managed configuration is for, e.g.
            # &quot;app:com.google.android.gm&quot;.
        &quot;configurationVariables&quot;: { # A configuration variables resource contains the managed configuration # Contains the ID of the managed configuration profile and the set of
            # configuration variables (if any) defined for the user.
            # settings ID to be applied to a single user, as well as the variable set that
            # is attributed to the user. The variable set will be used to replace
            # placeholders in the managed configuration settings.
          &quot;mcmId&quot;: &quot;A String&quot;, # The ID of the managed configurations settings.
          &quot;variableSet&quot;: [ # The variable set that is attributed to the user.
            { # A variable set is a key-value pair of EMM-provided placeholders and
                # its corresponding value, which is attributed to a user. For example,
                # $FIRSTNAME could be a placeholder, and its value could be Alice. Placeholders
                # should start with a &#x27;$&#x27; sign and should be alphanumeric only.
              &quot;userValue&quot;: &quot;A String&quot;, # The value of the placeholder, specific to the user.
              &quot;placeholder&quot;: &quot;A String&quot;, # The placeholder string; defined by EMM.
            },
          ],
        },
        &quot;managedProperty&quot;: [ # The set of managed properties for this configuration.
          { # A managed property of a managed configuration. The property must match one of
              # the properties in the app restrictions schema of the product. Exactly one of
              # the value fields must be populated, and it must match the property&#x27;s type in
              # the app restrictions schema.
            &quot;valueInteger&quot;: 42, # The integer value - this will only be present if type of the property is
                # integer.
            &quot;valueBool&quot;: True or False, # The boolean value - this will only be present if type of the property is
                # bool.
            &quot;valueString&quot;: &quot;A String&quot;, # The string value - this will only be present if type of the property is
                # string, choice or hidden.
            &quot;valueBundle&quot;: { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the
                # property is bundle.
              &quot;managedProperty&quot;: [ # The list of managed properties.
                # Object with schema name: ManagedProperty
              ],
            },
            &quot;valueBundleArray&quot;: [ # The list of bundles of properties - this will only be present if type of
                # the property is bundle_array.
              { # A bundle of managed properties.
                &quot;managedProperty&quot;: [ # The list of managed properties.
                  # Object with schema name: ManagedProperty
                ],
              },
            ],
            &quot;valueStringArray&quot;: [ # The list of string values - this will only be present if type of the
                # property is multiselect.
              &quot;A String&quot;,
            ],
            &quot;key&quot;: &quot;A String&quot;, # The unique key that identifies the property.
          },
        ],
        &quot;kind&quot;: &quot;A String&quot;, # Deprecated.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, userId, deviceId, managedConfigurationForDeviceId, body=None, x__xgafv=None)</code>
  <pre>Adds or updates a per-device managed configuration for an app for the
specified device.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  deviceId: string, The Android ID of the device. (required)
  managedConfigurationForDeviceId: string, The ID of the managed configuration (a product ID), e.g.
&quot;app:com.google.android.gm&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A managed configuration resource contains the set of managed properties
    # defined by the app developer in the app&#x27;s managed configurations schema,
    # as well as any configuration variables defined for the user.
  &quot;productId&quot;: &quot;A String&quot;, # The ID of the product that the managed configuration is for, e.g.
      # &quot;app:com.google.android.gm&quot;.
  &quot;configurationVariables&quot;: { # A configuration variables resource contains the managed configuration # Contains the ID of the managed configuration profile and the set of
      # configuration variables (if any) defined for the user.
      # settings ID to be applied to a single user, as well as the variable set that
      # is attributed to the user. The variable set will be used to replace
      # placeholders in the managed configuration settings.
    &quot;mcmId&quot;: &quot;A String&quot;, # The ID of the managed configurations settings.
    &quot;variableSet&quot;: [ # The variable set that is attributed to the user.
      { # A variable set is a key-value pair of EMM-provided placeholders and
          # its corresponding value, which is attributed to a user. For example,
          # $FIRSTNAME could be a placeholder, and its value could be Alice. Placeholders
          # should start with a &#x27;$&#x27; sign and should be alphanumeric only.
        &quot;userValue&quot;: &quot;A String&quot;, # The value of the placeholder, specific to the user.
        &quot;placeholder&quot;: &quot;A String&quot;, # The placeholder string; defined by EMM.
      },
    ],
  },
  &quot;managedProperty&quot;: [ # The set of managed properties for this configuration.
    { # A managed property of a managed configuration. The property must match one of
        # the properties in the app restrictions schema of the product. Exactly one of
        # the value fields must be populated, and it must match the property&#x27;s type in
        # the app restrictions schema.
      &quot;valueInteger&quot;: 42, # The integer value - this will only be present if type of the property is
          # integer.
      &quot;valueBool&quot;: True or False, # The boolean value - this will only be present if type of the property is
          # bool.
      &quot;valueString&quot;: &quot;A String&quot;, # The string value - this will only be present if type of the property is
          # string, choice or hidden.
      &quot;valueBundle&quot;: { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the
          # property is bundle.
        &quot;managedProperty&quot;: [ # The list of managed properties.
          # Object with schema name: ManagedProperty
        ],
      },
      &quot;valueBundleArray&quot;: [ # The list of bundles of properties - this will only be present if type of
          # the property is bundle_array.
        { # A bundle of managed properties.
          &quot;managedProperty&quot;: [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
      ],
      &quot;valueStringArray&quot;: [ # The list of string values - this will only be present if type of the
          # property is multiselect.
        &quot;A String&quot;,
      ],
      &quot;key&quot;: &quot;A String&quot;, # The unique key that identifies the property.
    },
  ],
  &quot;kind&quot;: &quot;A String&quot;, # Deprecated.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A managed configuration resource contains the set of managed properties
      # defined by the app developer in the app&#x27;s managed configurations schema,
      # as well as any configuration variables defined for the user.
    &quot;productId&quot;: &quot;A String&quot;, # The ID of the product that the managed configuration is for, e.g.
        # &quot;app:com.google.android.gm&quot;.
    &quot;configurationVariables&quot;: { # A configuration variables resource contains the managed configuration # Contains the ID of the managed configuration profile and the set of
        # configuration variables (if any) defined for the user.
        # settings ID to be applied to a single user, as well as the variable set that
        # is attributed to the user. The variable set will be used to replace
        # placeholders in the managed configuration settings.
      &quot;mcmId&quot;: &quot;A String&quot;, # The ID of the managed configurations settings.
      &quot;variableSet&quot;: [ # The variable set that is attributed to the user.
        { # A variable set is a key-value pair of EMM-provided placeholders and
            # its corresponding value, which is attributed to a user. For example,
            # $FIRSTNAME could be a placeholder, and its value could be Alice. Placeholders
            # should start with a &#x27;$&#x27; sign and should be alphanumeric only.
          &quot;userValue&quot;: &quot;A String&quot;, # The value of the placeholder, specific to the user.
          &quot;placeholder&quot;: &quot;A String&quot;, # The placeholder string; defined by EMM.
        },
      ],
    },
    &quot;managedProperty&quot;: [ # The set of managed properties for this configuration.
      { # A managed property of a managed configuration. The property must match one of
          # the properties in the app restrictions schema of the product. Exactly one of
          # the value fields must be populated, and it must match the property&#x27;s type in
          # the app restrictions schema.
        &quot;valueInteger&quot;: 42, # The integer value - this will only be present if type of the property is
            # integer.
        &quot;valueBool&quot;: True or False, # The boolean value - this will only be present if type of the property is
            # bool.
        &quot;valueString&quot;: &quot;A String&quot;, # The string value - this will only be present if type of the property is
            # string, choice or hidden.
        &quot;valueBundle&quot;: { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the
            # property is bundle.
          &quot;managedProperty&quot;: [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
        &quot;valueBundleArray&quot;: [ # The list of bundles of properties - this will only be present if type of
            # the property is bundle_array.
          { # A bundle of managed properties.
            &quot;managedProperty&quot;: [ # The list of managed properties.
              # Object with schema name: ManagedProperty
            ],
          },
        ],
        &quot;valueStringArray&quot;: [ # The list of string values - this will only be present if type of the
            # property is multiselect.
          &quot;A String&quot;,
        ],
        &quot;key&quot;: &quot;A String&quot;, # The unique key that identifies the property.
      },
    ],
    &quot;kind&quot;: &quot;A String&quot;, # Deprecated.
  }</pre>
</div>

</body></html>