<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="licensing_v1.html">Enterprise License Manager API</a> . <a href="licensing_v1.licenseAssignments.html">licenseAssignments</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#delete">delete(productId, skuId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Revoke a license.</p>
<p class="toc_element">
  <code><a href="#get">get(productId, skuId, userId, x__xgafv=None)</a></code></p>
<p class="firstline">Get a specific user's license by product SKU.</p>
<p class="toc_element">
  <code><a href="#insert">insert(productId, skuId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Assign a license.</p>
<p class="toc_element">
  <code><a href="#listForProduct">listForProduct(productId, customerId, maxResults=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all users assigned licenses for a specific product SKU.</p>
<p class="toc_element">
  <code><a href="#listForProductAndSku">listForProductAndSku(productId, skuId, customerId, maxResults=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List all users assigned licenses for a specific product SKU.</p>
<p class="toc_element">
  <code><a href="#listForProductAndSku_next">listForProductAndSku_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#listForProduct_next">listForProduct_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(productId, skuId, userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Reassign a user's product SKU with a different SKU in the same product. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(productId, skuId, userId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Reassign a user's product SKU with a different SKU in the same product.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(productId, skuId, userId, x__xgafv=None)</code>
  <pre>Revoke a license.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  skuId: string, A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs. (required)
  userId: string, The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes. (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(productId, skuId, userId, x__xgafv=None)</code>
  <pre>Get a specific user&#x27;s license by product SKU.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  skuId: string, A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs. (required)
  userId: string, The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Representation of a license assignment.
  &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
  &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
  &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
  &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
  &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
  &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
}</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(productId, skuId, body=None, x__xgafv=None)</code>
  <pre>Assign a license.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  skuId: string, A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs. (required)
  body: object, The request body.
    The object takes the form of:

{ # Representation of a license assignment.
  &quot;userId&quot;: &quot;A String&quot;, # Email id of the user
}

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

Returns:
  An object of the form:

    { # Representation of a license assignment.
  &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
  &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
  &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
  &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
  &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
  &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
}</pre>
</div>

<div class="method">
    <code class="details" id="listForProduct">listForProduct(productId, customerId, maxResults=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all users assigned licenses for a specific product SKU.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  customerId: string, Customer&#x27;s `customerId`. A previous version of this API accepted the primary domain name as a value for this field. If the customer is suspended, the server returns an error. (required)
  maxResults: integer, The `maxResults` query string determines how many entries are returned on each page of a large response. This is an optional parameter. The value must be a positive number.
  pageToken: string, Token to fetch the next page of data. The `maxResults` query string is related to the `pageToken` since `maxResults` determines how many entries are returned on each page. This is an optional query string. If not specified, the server returns the first page.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;items&quot;: [ # The LicenseAssignments in this page of results.
    { # Representation of a license assignment.
      &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
      &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
      &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
      &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
      &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
      &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
      &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
    },
  ],
  &quot;kind&quot;: &quot;licensing#licenseAssignmentList&quot;, # Identifies the resource as a collection of LicenseAssignments.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token that you must submit in a subsequent request to retrieve additional license results matching your query parameters. The `maxResults` query string is related to the `nextPageToken` since `maxResults` determines how many entries are returned on each next page.
}</pre>
</div>

<div class="method">
    <code class="details" id="listForProductAndSku">listForProductAndSku(productId, skuId, customerId, maxResults=None, pageToken=None, x__xgafv=None)</code>
  <pre>List all users assigned licenses for a specific product SKU.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  skuId: string, A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs. (required)
  customerId: string, Customer&#x27;s `customerId`. A previous version of this API accepted the primary domain name as a value for this field. If the customer is suspended, the server returns an error. (required)
  maxResults: integer, The `maxResults` query string determines how many entries are returned on each page of a large response. This is an optional parameter. The value must be a positive number.
  pageToken: string, Token to fetch the next page of data. The `maxResults` query string is related to the `pageToken` since `maxResults` determines how many entries are returned on each page. This is an optional query string. If not specified, the server returns the first page.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;items&quot;: [ # The LicenseAssignments in this page of results.
    { # Representation of a license assignment.
      &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
      &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
      &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
      &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
      &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
      &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
      &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
      &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
    },
  ],
  &quot;kind&quot;: &quot;licensing#licenseAssignmentList&quot;, # Identifies the resource as a collection of LicenseAssignments.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token that you must submit in a subsequent request to retrieve additional license results matching your query parameters. The `maxResults` query string is related to the `nextPageToken` since `maxResults` determines how many entries are returned on each next page.
}</pre>
</div>

<div class="method">
    <code class="details" id="listForProductAndSku_next">listForProductAndSku_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="listForProduct_next">listForProduct_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(productId, skuId, userId, body=None, x__xgafv=None)</code>
  <pre>Reassign a user&#x27;s product SKU with a different SKU in the same product. This method supports patch semantics.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  skuId: string, A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs. (required)
  userId: string, The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes. (required)
  body: object, The request body.
    The object takes the form of:

{ # Representation of a license assignment.
  &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
  &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
  &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
  &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
  &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
  &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
}

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

Returns:
  An object of the form:

    { # Representation of a license assignment.
  &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
  &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
  &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
  &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
  &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
  &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
}</pre>
</div>

<div class="method">
    <code class="details" id="update">update(productId, skuId, userId, body=None, x__xgafv=None)</code>
  <pre>Reassign a user&#x27;s product SKU with a different SKU in the same product.

Args:
  productId: string, A product&#x27;s unique identifier. For more information about products in this version of the API, see Products and SKUs. (required)
  skuId: string, A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs. (required)
  userId: string, The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes. (required)
  body: object, The request body.
    The object takes the form of:

{ # Representation of a license assignment.
  &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
  &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
  &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
  &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
  &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
  &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
}

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

Returns:
  An object of the form:

    { # Representation of a license assignment.
  &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
  &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment, which is `licensing#licenseAssignment`.
  &quot;productId&quot;: &quot;A String&quot;, # A product&#x27;s unique identifier. For more information about products in this version of the API, see Product and SKU IDs.
  &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  &quot;selfLink&quot;: &quot;A String&quot;, # Link to this page.
  &quot;skuId&quot;: &quot;A String&quot;, # A product SKU&#x27;s unique identifier. For more information about available SKUs in this version of the API, see Products and SKUs.
  &quot;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
  &quot;userId&quot;: &quot;A String&quot;, # The user&#x27;s current primary email address. If the user&#x27;s email address changes, use the new email address in your API requests. Since a `userId` is subject to change, do not use a `userId` value as a key for persistent data. This key could break if the current user&#x27;s email address changes. If the `userId` is suspended, the license status changes.
}</pre>
</div>

</body></html>