<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, 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, 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, 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. (required)
    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's
      # applied to any new devices the organization purchases.
    "dpcExtras": "A String", # The JSON-formatted EMM provisioning extras that are passed to the DPC.
    "contactPhone": "A String", # 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.
    "name": "A String", # Output only. The API resource name in the format
        # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
        # the server.
    "companyName": "A String", # Required. The name of the organization. Zero-touch enrollment shows this
        # organization name to device users during device provisioning.
    "configurationId": "A String", # Output only. The ID of the configuration. Assigned by the server.
    "customMessage": "A String", # 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.
    "dpcResourcePath": "A String", # 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`.
    "contactEmail": "A String", # 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.
    "configurationName": "A String", # Required. A short name that describes the configuration's purpose. For
        # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
        # portal displays this name to IT admins.
    "isDefault": 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'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's
        # applied to any new devices the organization purchases.
      "dpcExtras": "A String", # The JSON-formatted EMM provisioning extras that are passed to the DPC.
      "contactPhone": "A String", # 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.
      "name": "A String", # Output only. The API resource name in the format
          # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
          # the server.
      "companyName": "A String", # Required. The name of the organization. Zero-touch enrollment shows this
          # organization name to device users during device provisioning.
      "configurationId": "A String", # Output only. The ID of the configuration. Assigned by the server.
      "customMessage": "A String", # 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.
      "dpcResourcePath": "A String", # 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`.
      "contactEmail": "A String", # 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.
      "configurationName": "A String", # Required. A short name that describes the configuration's purpose. For
          # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
          # portal displays this name to IT admins.
      "isDefault": 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'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's
        # applied to any new devices the organization purchases.
      "dpcExtras": "A String", # The JSON-formatted EMM provisioning extras that are passed to the DPC.
      "contactPhone": "A String", # 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.
      "name": "A String", # Output only. The API resource name in the format
          # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
          # the server.
      "companyName": "A String", # Required. The name of the organization. Zero-touch enrollment shows this
          # organization name to device users during device provisioning.
      "configurationId": "A String", # Output only. The ID of the configuration. Assigned by the server.
      "customMessage": "A String", # 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.
      "dpcResourcePath": "A String", # 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`.
      "contactEmail": "A String", # 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.
      "configurationName": "A String", # Required. A short name that describes the configuration's purpose. For
          # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
          # portal displays this name to IT admins.
      "isDefault": 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'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'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's listing configuration.
    "configurations": [ # 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's
            # applied to any new devices the organization purchases.
          "dpcExtras": "A String", # The JSON-formatted EMM provisioning extras that are passed to the DPC.
          "contactPhone": "A String", # 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.
          "name": "A String", # Output only. The API resource name in the format
              # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
              # the server.
          "companyName": "A String", # Required. The name of the organization. Zero-touch enrollment shows this
              # organization name to device users during device provisioning.
          "configurationId": "A String", # Output only. The ID of the configuration. Assigned by the server.
          "customMessage": "A String", # 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.
          "dpcResourcePath": "A String", # 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`.
          "contactEmail": "A String", # 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.
          "configurationName": "A String", # Required. A short name that describes the configuration's purpose. For
              # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
              # portal displays this name to IT admins.
          "isDefault": 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's `isDefault`
              # value to `false`.
        },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a configuration'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. (required)
    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's
      # applied to any new devices the organization purchases.
    "dpcExtras": "A String", # The JSON-formatted EMM provisioning extras that are passed to the DPC.
    "contactPhone": "A String", # 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.
    "name": "A String", # Output only. The API resource name in the format
        # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
        # the server.
    "companyName": "A String", # Required. The name of the organization. Zero-touch enrollment shows this
        # organization name to device users during device provisioning.
    "configurationId": "A String", # Output only. The ID of the configuration. Assigned by the server.
    "customMessage": "A String", # 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.
    "dpcResourcePath": "A String", # 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`.
    "contactEmail": "A String", # 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.
    "configurationName": "A String", # Required. A short name that describes the configuration's purpose. For
        # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
        # portal displays this name to IT admins.
    "isDefault": 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'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's
        # applied to any new devices the organization purchases.
      "dpcExtras": "A String", # The JSON-formatted EMM provisioning extras that are passed to the DPC.
      "contactPhone": "A String", # 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.
      "name": "A String", # Output only. The API resource name in the format
          # `customers/[CUSTOMER_ID]/configurations/[CONFIGURATION_ID]`. Assigned by
          # the server.
      "companyName": "A String", # Required. The name of the organization. Zero-touch enrollment shows this
          # organization name to device users during device provisioning.
      "configurationId": "A String", # Output only. The ID of the configuration. Assigned by the server.
      "customMessage": "A String", # 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.
      "dpcResourcePath": "A String", # 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`.
      "contactEmail": "A String", # 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.
      "configurationName": "A String", # Required. A short name that describes the configuration's purpose. For
          # example, _Sales team_ or _Temporary employees_. The zero-touch enrollment
          # portal displays this name to IT admins.
      "isDefault": 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's `isDefault`
          # value to `false`.
    }</pre>
</div>

</body></html>