<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="#delete">delete(productId, skuId, userId)</a></code></p>
<p class="firstline">Revoke License.</p>
<p class="toc_element">
  <code><a href="#get">get(productId, skuId, userId)</a></code></p>
<p class="firstline">Get license assignment of a particular product and sku for a user</p>
<p class="toc_element">
  <code><a href="#insert">insert(productId, skuId, body)</a></code></p>
<p class="firstline">Assign License.</p>
<p class="toc_element">
  <code><a href="#listForProduct">listForProduct(productId, customerId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">List license assignments for given product of the customer.</p>
<p class="toc_element">
  <code><a href="#listForProductAndSku">listForProductAndSku(productId, skuId, customerId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">List license assignments for given product and sku of the customer.</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)</a></code></p>
<p class="firstline">Assign License. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(productId, skuId, userId, body)</a></code></p>
<p class="firstline">Assign License.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(productId, skuId, userId)</code>
  <pre>Revoke License.

Args:
  productId: string, Name for product (required)
  skuId: string, Name for sku (required)
  userId: string, email id or unique Id of the user (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(productId, skuId, userId)</code>
  <pre>Get license assignment of a particular product and sku for a user

Args:
  productId: string, Name for product (required)
  skuId: string, Name for sku (required)
  userId: string, email id or unique Id of the user (required)

Returns:
  An object of the form:

    { # Template for LiscenseAssignment Resource
    "skuId": "A String", # Name of the sku of the product.
    "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
    "userId": "A String", # Email id of the user.
    "etags": "A String", # ETag of the resource.
    "selfLink": "A String", # Link to this page.
    "productId": "A String", # Name of the product.
  }</pre>
</div>

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

Args:
  productId: string, Name for product (required)
  skuId: string, Name for sku (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Template for LicenseAssignment Insert request
    "userId": "A String", # Email id of the user
  }


Returns:
  An object of the form:

    { # Template for LiscenseAssignment Resource
    "skuId": "A String", # Name of the sku of the product.
    "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
    "userId": "A String", # Email id of the user.
    "etags": "A String", # ETag of the resource.
    "selfLink": "A String", # Link to this page.
    "productId": "A String", # Name of the product.
  }</pre>
</div>

<div class="method">
    <code class="details" id="listForProduct">listForProduct(productId, customerId, pageToken=None, maxResults=None)</code>
  <pre>List license assignments for given product of the customer.

Args:
  productId: string, Name for product (required)
  customerId: string, CustomerId represents the customer for whom licenseassignments are queried (required)
  pageToken: string, Token to fetch the next page.Optional. By default server will return first page
  maxResults: integer, Maximum number of campaigns to return at one time. Must be positive. Optional. Default value is 100.

Returns:
  An object of the form:

    { # LicesnseAssignment List for a given product/sku for a customer.
    "nextPageToken": "A String", # The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.
    "items": [ # The LicenseAssignments in this page of results.
      { # Template for LiscenseAssignment Resource
        "skuId": "A String", # Name of the sku of the product.
        "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
        "userId": "A String", # Email id of the user.
        "etags": "A String", # ETag of the resource.
        "selfLink": "A String", # Link to this page.
        "productId": "A String", # Name of the product.
      },
    ],
    "kind": "licensing#licenseAssignmentList", # Identifies the resource as a collection of LicenseAssignments.
    "etag": "A String", # ETag of the resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="listForProductAndSku">listForProductAndSku(productId, skuId, customerId, pageToken=None, maxResults=None)</code>
  <pre>List license assignments for given product and sku of the customer.

Args:
  productId: string, Name for product (required)
  skuId: string, Name for sku (required)
  customerId: string, CustomerId represents the customer for whom licenseassignments are queried (required)
  pageToken: string, Token to fetch the next page.Optional. By default server will return first page
  maxResults: integer, Maximum number of campaigns to return at one time. Must be positive. Optional. Default value is 100.

Returns:
  An object of the form:

    { # LicesnseAssignment List for a given product/sku for a customer.
    "nextPageToken": "A String", # The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.
    "items": [ # The LicenseAssignments in this page of results.
      { # Template for LiscenseAssignment Resource
        "skuId": "A String", # Name of the sku of the product.
        "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
        "userId": "A String", # Email id of the user.
        "etags": "A String", # ETag of the resource.
        "selfLink": "A String", # Link to this page.
        "productId": "A String", # Name of the product.
      },
    ],
    "kind": "licensing#licenseAssignmentList", # Identifies the resource as a collection of LicenseAssignments.
    "etag": "A String", # ETag of the resource.
  }</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 'execute()' 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 'execute()' 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)</code>
  <pre>Assign License. This method supports patch semantics.

Args:
  productId: string, Name for product (required)
  skuId: string, Name for sku for which license would be revoked (required)
  userId: string, email id or unique Id of the user (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Template for LiscenseAssignment Resource
  "skuId": "A String", # Name of the sku of the product.
  "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
  "userId": "A String", # Email id of the user.
  "etags": "A String", # ETag of the resource.
  "selfLink": "A String", # Link to this page.
  "productId": "A String", # Name of the product.
}


Returns:
  An object of the form:

    { # Template for LiscenseAssignment Resource
    "skuId": "A String", # Name of the sku of the product.
    "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
    "userId": "A String", # Email id of the user.
    "etags": "A String", # ETag of the resource.
    "selfLink": "A String", # Link to this page.
    "productId": "A String", # Name of the product.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(productId, skuId, userId, body)</code>
  <pre>Assign License.

Args:
  productId: string, Name for product (required)
  skuId: string, Name for sku for which license would be revoked (required)
  userId: string, email id or unique Id of the user (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Template for LiscenseAssignment Resource
  "skuId": "A String", # Name of the sku of the product.
  "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
  "userId": "A String", # Email id of the user.
  "etags": "A String", # ETag of the resource.
  "selfLink": "A String", # Link to this page.
  "productId": "A String", # Name of the product.
}


Returns:
  An object of the form:

    { # Template for LiscenseAssignment Resource
    "skuId": "A String", # Name of the sku of the product.
    "kind": "licensing#licenseAssignment", # Identifies the resource as a LicenseAssignment.
    "userId": "A String", # Email id of the user.
    "etags": "A String", # ETag of the resource.
    "selfLink": "A String", # Link to this page.
    "productId": "A String", # Name of the product.
  }</pre>
</div>

</body></html>