<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.managedconfigurationsforuser.html">managedconfigurationsforuser</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(enterpriseId, userId, managedConfigurationForUserId)</a></code></p>
<p class="firstline">Removes a per-user managed configuration for an app for the specified user.</p>
<p class="toc_element">
  <code><a href="#get">get(enterpriseId, userId, managedConfigurationForUserId)</a></code></p>
<p class="firstline">Retrieves details of a per-user managed configuration for an app for the specified user.</p>
<p class="toc_element">
  <code><a href="#list">list(enterpriseId, userId)</a></code></p>
<p class="firstline">Lists all the per-user managed configurations for the specified user. Only the ID is set.</p>
<p class="toc_element">
  <code><a href="#patch">patch(enterpriseId, userId, managedConfigurationForUserId, body)</a></code></p>
<p class="firstline">Adds or updates the managed configuration settings for an app for the specified user. If you support the Managed configurations iframe, you can apply managed configurations to a user by specifying an mcmId and its associated configuration variables (if any) in the request. Alternatively, all EMMs can apply managed configurations by passing a list of managed properties. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(enterpriseId, userId, managedConfigurationForUserId, body)</a></code></p>
<p class="firstline">Adds or updates the managed configuration settings for an app for the specified user. If you support the Managed configurations iframe, you can apply managed configurations to a user by specifying an mcmId and its associated configuration variables (if any) in the request. Alternatively, all EMMs can apply managed configurations by passing a list of managed properties.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(enterpriseId, userId, managedConfigurationForUserId)</code>
  <pre>Removes a per-user managed configuration for an app for the specified user.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  managedConfigurationForUserId: string, The ID of the managed configuration (a product ID), e.g. "app:com.google.android.gm". (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(enterpriseId, userId, managedConfigurationForUserId)</code>
  <pre>Retrieves details of a per-user managed configuration for an app for the specified user.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  managedConfigurationForUserId: string, The ID of the managed configuration (a product ID), e.g. "app:com.google.android.gm". (required)

Returns:
  An object of the form:

    { # A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.
    "kind": "androidenterprise#managedConfiguration", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfiguration".
    "configurationVariables": { # A configuration variables resource contains the managed configuration 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. # Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.
      "kind": "androidenterprise#configurationVariables", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#configurationVariables".
      "variableSet": [ # 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 '$' sign and should be alphanumeric only.
          "userValue": "A String", # The value of the placeholder, specific to the user.
          "kind": "androidenterprise#variableSet", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#variableSet".
          "placeholder": "A String", # The placeholder string; defined by EMM.
        },
      ],
      "mcmId": "A String", # The ID of the managed configurations settings.
    },
    "managedProperty": [ # 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's type in the app restrictions schema.
        "key": "A String", # The unique key that identifies the property.
        "valueInteger": 42, # The integer value - this will only be present if type of the property is integer.
        "valueStringArray": [ # The list of string values - this will only be present if type of the property is multiselect.
          "A String",
        ],
        "valueBool": True or False, # The boolean value - this will only be present if type of the property is bool.
        "valueBundleArray": [ # The list of bundles of properties - this will only be present if type of the property is bundle_array.
          { # A bundle of managed properties.
            "managedProperty": [ # The list of managed properties.
              # Object with schema name: ManagedProperty
            ],
          },
        ],
        "valueBundle": { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the property is bundle.
          "managedProperty": [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
        "valueString": "A String", # The string value - this will only be present if type of the property is string, choice or hidden.
      },
    ],
    "productId": "A String", # The ID of the product that the managed configuration is for, e.g. "app:com.google.android.gm".
  }</pre>
</div>

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

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)

Returns:
  An object of the form:

    { # The managed configuration resources for the user.
    "kind": "androidenterprise#managedConfigurationsForUserListResponse", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfigurationsForUserListResponse".
    "managedConfigurationForUser": [ # A managed configuration for an app for a specific user.
      { # A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.
        "kind": "androidenterprise#managedConfiguration", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfiguration".
        "configurationVariables": { # A configuration variables resource contains the managed configuration 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. # Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.
          "kind": "androidenterprise#configurationVariables", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#configurationVariables".
          "variableSet": [ # 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 '$' sign and should be alphanumeric only.
              "userValue": "A String", # The value of the placeholder, specific to the user.
              "kind": "androidenterprise#variableSet", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#variableSet".
              "placeholder": "A String", # The placeholder string; defined by EMM.
            },
          ],
          "mcmId": "A String", # The ID of the managed configurations settings.
        },
        "managedProperty": [ # 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's type in the app restrictions schema.
            "key": "A String", # The unique key that identifies the property.
            "valueInteger": 42, # The integer value - this will only be present if type of the property is integer.
            "valueStringArray": [ # The list of string values - this will only be present if type of the property is multiselect.
              "A String",
            ],
            "valueBool": True or False, # The boolean value - this will only be present if type of the property is bool.
            "valueBundleArray": [ # The list of bundles of properties - this will only be present if type of the property is bundle_array.
              { # A bundle of managed properties.
                "managedProperty": [ # The list of managed properties.
                  # Object with schema name: ManagedProperty
                ],
              },
            ],
            "valueBundle": { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the property is bundle.
              "managedProperty": [ # The list of managed properties.
                # Object with schema name: ManagedProperty
              ],
            },
            "valueString": "A String", # The string value - this will only be present if type of the property is string, choice or hidden.
          },
        ],
        "productId": "A String", # The ID of the product that the managed configuration is for, e.g. "app:com.google.android.gm".
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(enterpriseId, userId, managedConfigurationForUserId, body)</code>
  <pre>Adds or updates the managed configuration settings for an app for the specified user. If you support the Managed configurations iframe, you can apply managed configurations to a user by specifying an mcmId and its associated configuration variables (if any) in the request. Alternatively, all EMMs can apply managed configurations by passing a list of managed properties. This method supports patch semantics.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  managedConfigurationForUserId: string, The ID of the managed configuration (a product ID), e.g. "app:com.google.android.gm". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.
  "kind": "androidenterprise#managedConfiguration", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfiguration".
  "configurationVariables": { # A configuration variables resource contains the managed configuration 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. # Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.
    "kind": "androidenterprise#configurationVariables", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#configurationVariables".
    "variableSet": [ # 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 '$' sign and should be alphanumeric only.
        "userValue": "A String", # The value of the placeholder, specific to the user.
        "kind": "androidenterprise#variableSet", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#variableSet".
        "placeholder": "A String", # The placeholder string; defined by EMM.
      },
    ],
    "mcmId": "A String", # The ID of the managed configurations settings.
  },
  "managedProperty": [ # 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's type in the app restrictions schema.
      "key": "A String", # The unique key that identifies the property.
      "valueInteger": 42, # The integer value - this will only be present if type of the property is integer.
      "valueStringArray": [ # The list of string values - this will only be present if type of the property is multiselect.
        "A String",
      ],
      "valueBool": True or False, # The boolean value - this will only be present if type of the property is bool.
      "valueBundleArray": [ # The list of bundles of properties - this will only be present if type of the property is bundle_array.
        { # A bundle of managed properties.
          "managedProperty": [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
      ],
      "valueBundle": { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the property is bundle.
        "managedProperty": [ # The list of managed properties.
          # Object with schema name: ManagedProperty
        ],
      },
      "valueString": "A String", # The string value - this will only be present if type of the property is string, choice or hidden.
    },
  ],
  "productId": "A String", # The ID of the product that the managed configuration is for, e.g. "app:com.google.android.gm".
}


Returns:
  An object of the form:

    { # A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.
    "kind": "androidenterprise#managedConfiguration", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfiguration".
    "configurationVariables": { # A configuration variables resource contains the managed configuration 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. # Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.
      "kind": "androidenterprise#configurationVariables", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#configurationVariables".
      "variableSet": [ # 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 '$' sign and should be alphanumeric only.
          "userValue": "A String", # The value of the placeholder, specific to the user.
          "kind": "androidenterprise#variableSet", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#variableSet".
          "placeholder": "A String", # The placeholder string; defined by EMM.
        },
      ],
      "mcmId": "A String", # The ID of the managed configurations settings.
    },
    "managedProperty": [ # 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's type in the app restrictions schema.
        "key": "A String", # The unique key that identifies the property.
        "valueInteger": 42, # The integer value - this will only be present if type of the property is integer.
        "valueStringArray": [ # The list of string values - this will only be present if type of the property is multiselect.
          "A String",
        ],
        "valueBool": True or False, # The boolean value - this will only be present if type of the property is bool.
        "valueBundleArray": [ # The list of bundles of properties - this will only be present if type of the property is bundle_array.
          { # A bundle of managed properties.
            "managedProperty": [ # The list of managed properties.
              # Object with schema name: ManagedProperty
            ],
          },
        ],
        "valueBundle": { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the property is bundle.
          "managedProperty": [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
        "valueString": "A String", # The string value - this will only be present if type of the property is string, choice or hidden.
      },
    ],
    "productId": "A String", # The ID of the product that the managed configuration is for, e.g. "app:com.google.android.gm".
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(enterpriseId, userId, managedConfigurationForUserId, body)</code>
  <pre>Adds or updates the managed configuration settings for an app for the specified user. If you support the Managed configurations iframe, you can apply managed configurations to a user by specifying an mcmId and its associated configuration variables (if any) in the request. Alternatively, all EMMs can apply managed configurations by passing a list of managed properties.

Args:
  enterpriseId: string, The ID of the enterprise. (required)
  userId: string, The ID of the user. (required)
  managedConfigurationForUserId: string, The ID of the managed configuration (a product ID), e.g. "app:com.google.android.gm". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.
  "kind": "androidenterprise#managedConfiguration", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfiguration".
  "configurationVariables": { # A configuration variables resource contains the managed configuration 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. # Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.
    "kind": "androidenterprise#configurationVariables", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#configurationVariables".
    "variableSet": [ # 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 '$' sign and should be alphanumeric only.
        "userValue": "A String", # The value of the placeholder, specific to the user.
        "kind": "androidenterprise#variableSet", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#variableSet".
        "placeholder": "A String", # The placeholder string; defined by EMM.
      },
    ],
    "mcmId": "A String", # The ID of the managed configurations settings.
  },
  "managedProperty": [ # 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's type in the app restrictions schema.
      "key": "A String", # The unique key that identifies the property.
      "valueInteger": 42, # The integer value - this will only be present if type of the property is integer.
      "valueStringArray": [ # The list of string values - this will only be present if type of the property is multiselect.
        "A String",
      ],
      "valueBool": True or False, # The boolean value - this will only be present if type of the property is bool.
      "valueBundleArray": [ # The list of bundles of properties - this will only be present if type of the property is bundle_array.
        { # A bundle of managed properties.
          "managedProperty": [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
      ],
      "valueBundle": { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the property is bundle.
        "managedProperty": [ # The list of managed properties.
          # Object with schema name: ManagedProperty
        ],
      },
      "valueString": "A String", # The string value - this will only be present if type of the property is string, choice or hidden.
    },
  ],
  "productId": "A String", # The ID of the product that the managed configuration is for, e.g. "app:com.google.android.gm".
}


Returns:
  An object of the form:

    { # A managed configuration resource contains the set of managed properties defined by the app developer in the app's managed configurations schema, as well as any configuration variables defined for the user.
    "kind": "androidenterprise#managedConfiguration", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#managedConfiguration".
    "configurationVariables": { # A configuration variables resource contains the managed configuration 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. # Contains the ID of the managed configuration profile and the set of configuration variables (if any) defined for the user.
      "kind": "androidenterprise#configurationVariables", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#configurationVariables".
      "variableSet": [ # 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 '$' sign and should be alphanumeric only.
          "userValue": "A String", # The value of the placeholder, specific to the user.
          "kind": "androidenterprise#variableSet", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#variableSet".
          "placeholder": "A String", # The placeholder string; defined by EMM.
        },
      ],
      "mcmId": "A String", # The ID of the managed configurations settings.
    },
    "managedProperty": [ # 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's type in the app restrictions schema.
        "key": "A String", # The unique key that identifies the property.
        "valueInteger": 42, # The integer value - this will only be present if type of the property is integer.
        "valueStringArray": [ # The list of string values - this will only be present if type of the property is multiselect.
          "A String",
        ],
        "valueBool": True or False, # The boolean value - this will only be present if type of the property is bool.
        "valueBundleArray": [ # The list of bundles of properties - this will only be present if type of the property is bundle_array.
          { # A bundle of managed properties.
            "managedProperty": [ # The list of managed properties.
              # Object with schema name: ManagedProperty
            ],
          },
        ],
        "valueBundle": { # A bundle of managed properties. # The bundle of managed properties - this will only be present if type of the property is bundle.
          "managedProperty": [ # The list of managed properties.
            # Object with schema name: ManagedProperty
          ],
        },
        "valueString": "A String", # The string value - this will only be present if type of the property is string, choice or hidden.
      },
    ],
    "productId": "A String", # The ID of the product that the managed configuration is for, e.g. "app:com.google.android.gm".
  }</pre>
</div>

</body></html>