<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="androiddeviceprovisioning_v1.html">Android Device Provisioning Partner API</a> . <a href="androiddeviceprovisioning_v1.customers.html">customers</a> . <a href="androiddeviceprovisioning_v1.customers.configurations.html">configurations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new configuration. Once created, a customer can apply the</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an unused configuration. The API call fails if the customer has</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the details of a configuration.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, x__xgafv=None)</a></code></p>
<p class="firstline">Lists a customer's configurations.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a configuration's field values.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new configuration. Once created, a customer can apply the
configuration to devices.

Args:
  parent: string, Required. The customer that manages the configuration. An API resource name
in the format `customers/[CUSTOMER_ID]`. (required)
  body: object, The request body.
    The object takes the form of:

{ # A configuration collects the provisioning options for Android devices. Each
      # configuration combines the following:
      # 
      # * The EMM device policy controller (DPC) installed on the devices.
      # * EMM policies enforced on the devices.
      # * Metadata displayed on the device to help users during setup.
      # 
      # Customers can add as many configurations as they need. However, zero-touch
      # enrollment works best when a customer sets a default configuration that&#x27;s
      # applied to any new devices the organization purchases.
    &quot;customMessage&quot;: &quot;A String&quot;, # A message, containing one or two sentences, to help device users get help
        # or give them more details about what’s happening to their device.
        # Zero-touch enrollment shows this message before the device is provisioned.
    &quot;configurationId&quot;: &quot;A String&quot;, # Output only. The ID of the configuration. Assigned by the server.
    &quot;contactPhone&quot;: &quot;A String&quot;, # Required. The telephone number that device users can call, using another
        # device, to get help. Zero-touch enrollment shows this number to device
        # users before device provisioning. Accepts numerals, spaces, the plus sign,
        # hyphens, and parentheses.
    &quot;dpcResourcePath&quot;: &quot;A String&quot;, # Required. The resource name of the selected DPC (device policy controller)
        # in the format `customers/[CUSTOMER_ID]/dpcs/*`. To list the supported DPCs,
        # call
        # `customers.dpcs.list`.
    &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the organization. Zero-touch enrollment shows this
        # organization name to device users during device provisioning.
    &quot;contactEmail&quot;: &quot;A String&quot;, # Required. The email address that device users can contact to get help.
        # Zero-touch enrollment shows this email address to device users before
        # device provisioning. The value is validated on input.
    &quot;dpcExtras&quot;: &quot;A String&quot;, # The JSON-formatted EMM provisioning extras that are passed to the DPC.
    &quot;configurationName&quot;: &quot;A String&quot;, # Required. A short name that describes the configuration&#x27;s purpose. For
        # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
        # portal displays this name to IT admins.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
        # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
        # the server.
    &quot;isDefault&quot;: True or False, # Required. Whether this is the default configuration that zero-touch
        # enrollment applies to any new devices the organization purchases in the
        # future. Only one customer configuration can be the default. Setting this
        # value to `true`, changes the previous default configuration&#x27;s `isDefault`
        # value to `false`.
  }

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

Returns:
  An object of the form:

    { # A configuration collects the provisioning options for Android devices. Each
        # configuration combines the following:
        #
        # * The EMM device policy controller (DPC) installed on the devices.
        # * EMM policies enforced on the devices.
        # * Metadata displayed on the device to help users during setup.
        #
        # Customers can add as many configurations as they need. However, zero-touch
        # enrollment works best when a customer sets a default configuration that&#x27;s
        # applied to any new devices the organization purchases.
      &quot;customMessage&quot;: &quot;A String&quot;, # A message, containing one or two sentences, to help device users get help
          # or give them more details about what’s happening to their device.
          # Zero-touch enrollment shows this message before the device is provisioned.
      &quot;configurationId&quot;: &quot;A String&quot;, # Output only. The ID of the configuration. Assigned by the server.
      &quot;contactPhone&quot;: &quot;A String&quot;, # Required. The telephone number that device users can call, using another
          # device, to get help. Zero-touch enrollment shows this number to device
          # users before device provisioning. Accepts numerals, spaces, the plus sign,
          # hyphens, and parentheses.
      &quot;dpcResourcePath&quot;: &quot;A String&quot;, # Required. The resource name of the selected DPC (device policy controller)
          # in the format `customers/[CUSTOMER_ID]/dpcs/*`. To list the supported DPCs,
          # call
          # `customers.dpcs.list`.
      &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the organization. Zero-touch enrollment shows this
          # organization name to device users during device provisioning.
      &quot;contactEmail&quot;: &quot;A String&quot;, # Required. The email address that device users can contact to get help.
          # Zero-touch enrollment shows this email address to device users before
          # device provisioning. The value is validated on input.
      &quot;dpcExtras&quot;: &quot;A String&quot;, # The JSON-formatted EMM provisioning extras that are passed to the DPC.
      &quot;configurationName&quot;: &quot;A String&quot;, # Required. A short name that describes the configuration&#x27;s purpose. For
          # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
          # portal displays this name to IT admins.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
          # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
          # the server.
      &quot;isDefault&quot;: True or False, # Required. Whether this is the default configuration that zero-touch
          # enrollment applies to any new devices the organization purchases in the
          # future. Only one customer configuration can be the default. Setting this
          # value to `true`, changes the previous default configuration&#x27;s `isDefault`
          # value to `false`.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an unused configuration. The API call fails if the customer has
devices with the configuration applied.

Args:
  name: string, Required. The configuration to delete. An API resource name in the format
`customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. If the
configuration is applied to any devices, the API call fails. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated
      # empty messages in your APIs. A typical example is to use it as the request
      # or the response type of an API method. For instance:
      #
      #     service Foo {
      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
      #     }
      #
      # The JSON representation for `Empty` is empty JSON object `{}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the details of a configuration.

Args:
  name: string, Required. The configuration to get. An API resource name in the format
`customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A configuration collects the provisioning options for Android devices. Each
        # configuration combines the following:
        #
        # * The EMM device policy controller (DPC) installed on the devices.
        # * EMM policies enforced on the devices.
        # * Metadata displayed on the device to help users during setup.
        #
        # Customers can add as many configurations as they need. However, zero-touch
        # enrollment works best when a customer sets a default configuration that&#x27;s
        # applied to any new devices the organization purchases.
      &quot;customMessage&quot;: &quot;A String&quot;, # A message, containing one or two sentences, to help device users get help
          # or give them more details about what’s happening to their device.
          # Zero-touch enrollment shows this message before the device is provisioned.
      &quot;configurationId&quot;: &quot;A String&quot;, # Output only. The ID of the configuration. Assigned by the server.
      &quot;contactPhone&quot;: &quot;A String&quot;, # Required. The telephone number that device users can call, using another
          # device, to get help. Zero-touch enrollment shows this number to device
          # users before device provisioning. Accepts numerals, spaces, the plus sign,
          # hyphens, and parentheses.
      &quot;dpcResourcePath&quot;: &quot;A String&quot;, # Required. The resource name of the selected DPC (device policy controller)
          # in the format `customers/[CUSTOMER_ID]/dpcs/*`. To list the supported DPCs,
          # call
          # `customers.dpcs.list`.
      &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the organization. Zero-touch enrollment shows this
          # organization name to device users during device provisioning.
      &quot;contactEmail&quot;: &quot;A String&quot;, # Required. The email address that device users can contact to get help.
          # Zero-touch enrollment shows this email address to device users before
          # device provisioning. The value is validated on input.
      &quot;dpcExtras&quot;: &quot;A String&quot;, # The JSON-formatted EMM provisioning extras that are passed to the DPC.
      &quot;configurationName&quot;: &quot;A String&quot;, # Required. A short name that describes the configuration&#x27;s purpose. For
          # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
          # portal displays this name to IT admins.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
          # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
          # the server.
      &quot;isDefault&quot;: True or False, # Required. Whether this is the default configuration that zero-touch
          # enrollment applies to any new devices the organization purchases in the
          # future. Only one customer configuration can be the default. Setting this
          # value to `true`, changes the previous default configuration&#x27;s `isDefault`
          # value to `false`.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, x__xgafv=None)</code>
  <pre>Lists a customer&#x27;s configurations.

Args:
  parent: string, Required. The customer that manages the listed configurations. An API
resource name in the format `customers/[CUSTOMER_ID]`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message of customer&#x27;s listing configuration.
    &quot;configurations&quot;: [ # The configurations.
      { # A configuration collects the provisioning options for Android devices. Each
            # configuration combines the following:
            #
            # * The EMM device policy controller (DPC) installed on the devices.
            # * EMM policies enforced on the devices.
            # * Metadata displayed on the device to help users during setup.
            #
            # Customers can add as many configurations as they need. However, zero-touch
            # enrollment works best when a customer sets a default configuration that&#x27;s
            # applied to any new devices the organization purchases.
          &quot;customMessage&quot;: &quot;A String&quot;, # A message, containing one or two sentences, to help device users get help
              # or give them more details about what’s happening to their device.
              # Zero-touch enrollment shows this message before the device is provisioned.
          &quot;configurationId&quot;: &quot;A String&quot;, # Output only. The ID of the configuration. Assigned by the server.
          &quot;contactPhone&quot;: &quot;A String&quot;, # Required. The telephone number that device users can call, using another
              # device, to get help. Zero-touch enrollment shows this number to device
              # users before device provisioning. Accepts numerals, spaces, the plus sign,
              # hyphens, and parentheses.
          &quot;dpcResourcePath&quot;: &quot;A String&quot;, # Required. The resource name of the selected DPC (device policy controller)
              # in the format `customers/[CUSTOMER_ID]/dpcs/*`. To list the supported DPCs,
              # call
              # `customers.dpcs.list`.
          &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the organization. Zero-touch enrollment shows this
              # organization name to device users during device provisioning.
          &quot;contactEmail&quot;: &quot;A String&quot;, # Required. The email address that device users can contact to get help.
              # Zero-touch enrollment shows this email address to device users before
              # device provisioning. The value is validated on input.
          &quot;dpcExtras&quot;: &quot;A String&quot;, # The JSON-formatted EMM provisioning extras that are passed to the DPC.
          &quot;configurationName&quot;: &quot;A String&quot;, # Required. A short name that describes the configuration&#x27;s purpose. For
              # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
              # portal displays this name to IT admins.
          &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
              # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
              # the server.
          &quot;isDefault&quot;: True or False, # Required. Whether this is the default configuration that zero-touch
              # enrollment applies to any new devices the organization purchases in the
              # future. Only one customer configuration can be the default. Setting this
              # value to `true`, changes the previous default configuration&#x27;s `isDefault`
              # value to `false`.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a configuration&#x27;s field values.

Args:
  name: string, Output only. The API resource name in the format
`customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
the server. (required)
  body: object, The request body.
    The object takes the form of:

{ # A configuration collects the provisioning options for Android devices. Each
      # configuration combines the following:
      # 
      # * The EMM device policy controller (DPC) installed on the devices.
      # * EMM policies enforced on the devices.
      # * Metadata displayed on the device to help users during setup.
      # 
      # Customers can add as many configurations as they need. However, zero-touch
      # enrollment works best when a customer sets a default configuration that&#x27;s
      # applied to any new devices the organization purchases.
    &quot;customMessage&quot;: &quot;A String&quot;, # A message, containing one or two sentences, to help device users get help
        # or give them more details about what’s happening to their device.
        # Zero-touch enrollment shows this message before the device is provisioned.
    &quot;configurationId&quot;: &quot;A String&quot;, # Output only. The ID of the configuration. Assigned by the server.
    &quot;contactPhone&quot;: &quot;A String&quot;, # Required. The telephone number that device users can call, using another
        # device, to get help. Zero-touch enrollment shows this number to device
        # users before device provisioning. Accepts numerals, spaces, the plus sign,
        # hyphens, and parentheses.
    &quot;dpcResourcePath&quot;: &quot;A String&quot;, # Required. The resource name of the selected DPC (device policy controller)
        # in the format `customers/[CUSTOMER_ID]/dpcs/*`. To list the supported DPCs,
        # call
        # `customers.dpcs.list`.
    &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the organization. Zero-touch enrollment shows this
        # organization name to device users during device provisioning.
    &quot;contactEmail&quot;: &quot;A String&quot;, # Required. The email address that device users can contact to get help.
        # Zero-touch enrollment shows this email address to device users before
        # device provisioning. The value is validated on input.
    &quot;dpcExtras&quot;: &quot;A String&quot;, # The JSON-formatted EMM provisioning extras that are passed to the DPC.
    &quot;configurationName&quot;: &quot;A String&quot;, # Required. A short name that describes the configuration&#x27;s purpose. For
        # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
        # portal displays this name to IT admins.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
        # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
        # the server.
    &quot;isDefault&quot;: True or False, # Required. Whether this is the default configuration that zero-touch
        # enrollment applies to any new devices the organization purchases in the
        # future. Only one customer configuration can be the default. Setting this
        # value to `true`, changes the previous default configuration&#x27;s `isDefault`
        # value to `false`.
  }

  updateMask: string, Required. The field mask applied to the target `Configuration` before
updating the fields. To learn more about using field masks, read
[FieldMask](/protocol-buffers/docs/reference/google.protobuf#fieldmask) in
the Protocol Buffers documentation.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A configuration collects the provisioning options for Android devices. Each
        # configuration combines the following:
        #
        # * The EMM device policy controller (DPC) installed on the devices.
        # * EMM policies enforced on the devices.
        # * Metadata displayed on the device to help users during setup.
        #
        # Customers can add as many configurations as they need. However, zero-touch
        # enrollment works best when a customer sets a default configuration that&#x27;s
        # applied to any new devices the organization purchases.
      &quot;customMessage&quot;: &quot;A String&quot;, # A message, containing one or two sentences, to help device users get help
          # or give them more details about what’s happening to their device.
          # Zero-touch enrollment shows this message before the device is provisioned.
      &quot;configurationId&quot;: &quot;A String&quot;, # Output only. The ID of the configuration. Assigned by the server.
      &quot;contactPhone&quot;: &quot;A String&quot;, # Required. The telephone number that device users can call, using another
          # device, to get help. Zero-touch enrollment shows this number to device
          # users before device provisioning. Accepts numerals, spaces, the plus sign,
          # hyphens, and parentheses.
      &quot;dpcResourcePath&quot;: &quot;A String&quot;, # Required. The resource name of the selected DPC (device policy controller)
          # in the format `customers/[CUSTOMER_ID]/dpcs/*`. To list the supported DPCs,
          # call
          # `customers.dpcs.list`.
      &quot;companyName&quot;: &quot;A String&quot;, # Required. The name of the organization. Zero-touch enrollment shows this
          # organization name to device users during device provisioning.
      &quot;contactEmail&quot;: &quot;A String&quot;, # Required. The email address that device users can contact to get help.
          # Zero-touch enrollment shows this email address to device users before
          # device provisioning. The value is validated on input.
      &quot;dpcExtras&quot;: &quot;A String&quot;, # The JSON-formatted EMM provisioning extras that are passed to the DPC.
      &quot;configurationName&quot;: &quot;A String&quot;, # Required. A short name that describes the configuration&#x27;s purpose. For
          # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
          # portal displays this name to IT admins.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The API resource name in the format
          # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
          # the server.
      &quot;isDefault&quot;: True or False, # Required. Whether this is the default configuration that zero-touch
          # enrollment applies to any new devices the organization purchases in the
          # future. Only one customer configuration can be the default. Setting this
          # value to `true`, changes the previous default configuration&#x27;s `isDefault`
          # value to `false`.
    }</pre>
</div>

</body></html>