<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, pageToken=None, maxResults=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, pageToken=None, maxResults=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">Patch a Licensing info via Apiary Patch Orchestration</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
</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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
      &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
      &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
      &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
      &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
    }</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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
      &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
      &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
      &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
      &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
    }</pre>
</div>

<div class="method">
    <code class="details" id="listForProduct">listForProduct(productId, customerId, pageToken=None, maxResults=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)
  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.
  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.
  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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
          &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
          &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
          &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
          &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
        },
    ],
    &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.
    &quot;kind&quot;: &quot;licensing#licenseAssignmentList&quot;, # Identifies the resource as a collection of LicenseAssignments.
  }</pre>
</div>

<div class="method">
    <code class="details" id="listForProductAndSku">listForProductAndSku(productId, skuId, customerId, pageToken=None, maxResults=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)
  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.
  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.
  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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
          &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
          &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
          &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
          &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
        },
    ],
    &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.
    &quot;kind&quot;: &quot;licensing#licenseAssignmentList&quot;, # Identifies the resource as a collection of LicenseAssignments.
  }</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>Patch a Licensing info via Apiary Patch Orchestration

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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
    &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
    &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
    &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
    &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  }

  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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
      &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
      &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
      &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
      &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
    }</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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
    &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
    &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
    &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
    &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
  }

  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;selfLink&quot;: &quot;A String&quot;, # Link to this page.
      &quot;kind&quot;: &quot;licensing#licenseAssignment&quot;, # Identifies the resource as a LicenseAssignment.
      &quot;etags&quot;: &quot;A String&quot;, # ETag of the resource.
      &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;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;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;skuName&quot;: &quot;A String&quot;, # Display Name of the sku of the product.
      &quot;productName&quot;: &quot;A String&quot;, # Display Name of the product.
    }</pre>
</div>

</body></html>