<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="cloudchannel_v1.html">Cloud Channel API</a> . <a href="cloudchannel_v1.accounts.html">accounts</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudchannel_v1.accounts.channelPartnerLinks.html">channelPartnerLinks()</a></code>
</p>
<p class="firstline">Returns the channelPartnerLinks Resource.</p>

<p class="toc_element">
  <code><a href="cloudchannel_v1.accounts.customers.html">customers()</a></code>
</p>
<p class="firstline">Returns the customers Resource.</p>

<p class="toc_element">
  <code><a href="cloudchannel_v1.accounts.offers.html">offers()</a></code>
</p>
<p class="firstline">Returns the offers Resource.</p>

<p class="toc_element">
  <code><a href="#checkCloudIdentityAccountsExist">checkCloudIdentityAccountsExist(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Confirms the existence of Cloud Identity accounts based on the domain and if the Cloud Identity accounts are owned by the reseller. Possible error codes: * PERMISSION_DENIED: The reseller account making the request is different from the reseller account in the API request. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * INVALID_VALUE: Invalid domain value in the request. Return value: A list of CloudIdentityCustomerAccount resources for the domain (may be empty) Note: in the v1alpha1 version of the API, a NOT_FOUND error returns if no CloudIdentityCustomerAccount resources match the domain.</p>
<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="#listSubscribers">listSubscribers(account, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists service accounts with subscriber privileges on the Cloud Pub/Sub topic created for this Channel Services account. Possible error codes: * PERMISSION_DENIED: The reseller account making the request and the provided reseller account are different, or the impersonated user is not a super admin. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * NOT_FOUND: The topic resource doesn't exist. * INTERNAL: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. * UNKNOWN: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. Return value: A list of service email addresses.</p>
<p class="toc_element">
  <code><a href="#listSubscribers_next">listSubscribers_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="#listTransferableOffers">listTransferableOffers(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">List TransferableOffers of a customer based on Cloud Identity ID or Customer Name in the request. Use this method when a reseller gets the entitlement information of an unowned customer. The reseller should provide the customer's Cloud Identity ID or Customer Name. Possible error codes: * PERMISSION_DENIED: * The customer doesn't belong to the reseller and has no auth token. * The supplied auth token is invalid. * The reseller account making the request is different from the reseller account in the query. * INVALID_ARGUMENT: Required request parameters are missing or invalid. Return value: List of TransferableOffer for the given customer and SKU.</p>
<p class="toc_element">
  <code><a href="#listTransferableOffers_next">listTransferableOffers_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="#listTransferableSkus">listTransferableSkus(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">List TransferableSkus of a customer based on the Cloud Identity ID or Customer Name in the request. Use this method to list the entitlements information of an unowned customer. You should provide the customer's Cloud Identity ID or Customer Name. Possible error codes: * PERMISSION_DENIED: * The customer doesn't belong to the reseller and has no auth token. * The supplied auth token is invalid. * The reseller account making the request is different from the reseller account in the query. * INVALID_ARGUMENT: Required request parameters are missing or invalid. Return value: A list of the customer's TransferableSku.</p>
<p class="toc_element">
  <code><a href="#listTransferableSkus_next">listTransferableSkus_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="#register">register(account, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Registers a service account with subscriber privileges on the Cloud Pub/Sub topic for this Channel Services account. After you create a subscriber, you get the events through SubscriberEvent Possible error codes: * PERMISSION_DENIED: The reseller account making the request and the provided reseller account are different, or the impersonated user is not a super admin. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * INTERNAL: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. * UNKNOWN: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. Return value: The topic name with the registered service email address.</p>
<p class="toc_element">
  <code><a href="#unregister">unregister(account, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Unregisters a service account with subscriber privileges on the Cloud Pub/Sub topic created for this Channel Services account. If there are no service accounts left with subscriber privileges, this deletes the topic. You can call ListSubscribers to check for these accounts. Possible error codes: * PERMISSION_DENIED: The reseller account making the request and the provided reseller account are different, or the impersonated user is not a super admin. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * NOT_FOUND: The topic resource doesn't exist. * INTERNAL: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. * UNKNOWN: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. Return value: The topic name that unregistered the service email address. Returns a success response if the service email address wasn't registered with the topic.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="checkCloudIdentityAccountsExist">checkCloudIdentityAccountsExist(parent, body=None, x__xgafv=None)</code>
  <pre>Confirms the existence of Cloud Identity accounts based on the domain and if the Cloud Identity accounts are owned by the reseller. Possible error codes: * PERMISSION_DENIED: The reseller account making the request is different from the reseller account in the API request. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * INVALID_VALUE: Invalid domain value in the request. Return value: A list of CloudIdentityCustomerAccount resources for the domain (may be empty) Note: in the v1alpha1 version of the API, a NOT_FOUND error returns if no CloudIdentityCustomerAccount resources match the domain.

Args:
  parent: string, Required. The reseller account&#x27;s resource name. Parent uses the format: accounts/{account_id} (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for CloudChannelService.CheckCloudIdentityAccountsExist.
  &quot;domain&quot;: &quot;A String&quot;, # Required. Domain to fetch for Cloud Identity account customer.
}

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

Returns:
  An object of the form:

    { # Response message for CloudChannelService.CheckCloudIdentityAccountsExist.
  &quot;cloudIdentityAccounts&quot;: [ # The Cloud Identity accounts associated with the domain.
    { # Entity representing a Cloud Identity account that may be associated with a Channel Services API partner.
      &quot;customerCloudIdentityId&quot;: &quot;A String&quot;, # If existing = true, the Cloud Identity ID of the customer.
      &quot;customerName&quot;: &quot;A String&quot;, # If owned = true, the name of the customer that owns the Cloud Identity account. Customer_name uses the format: accounts/{account_id}/customers/{customer_id}
      &quot;existing&quot;: True or False, # Returns true if a Cloud Identity account exists for a specific domain.
      &quot;owned&quot;: True or False, # Returns true if the Cloud Identity account is associated with a customer of the Channel Services partner.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="listSubscribers">listSubscribers(account, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists service accounts with subscriber privileges on the Cloud Pub/Sub topic created for this Channel Services account. Possible error codes: * PERMISSION_DENIED: The reseller account making the request and the provided reseller account are different, or the impersonated user is not a super admin. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * NOT_FOUND: The topic resource doesn&#x27;t exist. * INTERNAL: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. * UNKNOWN: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. Return value: A list of service email addresses.

Args:
  account: string, Required. Resource name of the account. (required)
  pageSize: integer, Optional. The maximum number of service accounts to return. The service may return fewer than this value. If unspecified, returns at most 100 service accounts. The maximum value is 1000; the server will coerce values above 1000.
  pageToken: string, Optional. A page token, received from a previous `ListSubscribers` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListSubscribers` must match the call that provided the page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response Message for ListSubscribers.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token that can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
  &quot;serviceAccounts&quot;: [ # List of service accounts which have subscriber access to the topic.
    &quot;A String&quot;,
  ],
  &quot;topic&quot;: &quot;A String&quot;, # Name of the topic registered with the reseller.
}</pre>
</div>

<div class="method">
    <code class="details" id="listSubscribers_next">listSubscribers_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="listTransferableOffers">listTransferableOffers(parent, body=None, x__xgafv=None)</code>
  <pre>List TransferableOffers of a customer based on Cloud Identity ID or Customer Name in the request. Use this method when a reseller gets the entitlement information of an unowned customer. The reseller should provide the customer&#x27;s Cloud Identity ID or Customer Name. Possible error codes: * PERMISSION_DENIED: * The customer doesn&#x27;t belong to the reseller and has no auth token. * The supplied auth token is invalid. * The reseller account making the request is different from the reseller account in the query. * INVALID_ARGUMENT: Required request parameters are missing or invalid. Return value: List of TransferableOffer for the given customer and SKU.

Args:
  parent: string, Required. The resource name of the reseller&#x27;s account. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for CloudChannelService.ListTransferableOffers
  &quot;cloudIdentityId&quot;: &quot;A String&quot;, # Customer&#x27;s Cloud Identity ID
  &quot;customerName&quot;: &quot;A String&quot;, # A reseller should create a customer and use the resource name of that customer here.
  &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code. For example, &quot;en-US&quot;. The response will localize in the corresponding language code, if specified. The default value is &quot;en-US&quot;.
  &quot;pageSize&quot;: 42, # Requested page size. Server might return fewer results than requested. If unspecified, returns at most 100 offers. The maximum value is 1000; the server will coerce values above 1000.
  &quot;pageToken&quot;: &quot;A String&quot;, # A token for a page of results other than the first page. Obtained using ListTransferableOffersResponse.next_page_token of the previous CloudChannelService.ListTransferableOffers call.
  &quot;sku&quot;: &quot;A String&quot;, # Required. The SKU to look up Offers for.
}

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

Returns:
  An object of the form:

    { # Response message for CloudChannelService.ListTransferableOffers.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass to ListTransferableOffersRequest.page_token to obtain that page.
  &quot;transferableOffers&quot;: [ # Information about Offers for a customer that can be used for transfer.
    { # TransferableOffer represents an Offer that can be used in Transfer. Read-only.
      &quot;offer&quot;: { # Represents an offer made to resellers for purchase. An offer is associated with a Sku, has a plan for payment, a price, and defines the constraints for buying. # Offer with parameter constraints updated to allow the Transfer.
        &quot;constraints&quot;: { # Represents the constraints for buying the Offer. # Constraints on transacting the Offer.
          &quot;customerConstraints&quot;: { # Represents constraints required to purchase the Offer for a customer. # Represents constraints required to purchase the Offer for a customer.
            &quot;allowedCustomerTypes&quot;: [ # Allowed Customer Type.
              &quot;A String&quot;,
            ],
            &quot;allowedRegions&quot;: [ # Allowed geographical regions of the customer.
              &quot;A String&quot;,
            ],
            &quot;promotionalOrderTypes&quot;: [ # Allowed Promotional Order Type. Present for Promotional offers.
              &quot;A String&quot;,
            ],
          },
        },
        &quot;endTime&quot;: &quot;A String&quot;, # Output only. End of the Offer validity time.
        &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the Offer.
          &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
            &quot;content&quot;: &quot;A String&quot;, # URL of the media.
            &quot;title&quot;: &quot;A String&quot;, # Title of the media.
            &quot;type&quot;: &quot;A String&quot;, # Type of the media.
          },
          &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
          &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
        },
        &quot;name&quot;: &quot;A String&quot;, # Resource Name of the Offer. Format: accounts/{account_id}/offers/{offer_id}
        &quot;parameterDefinitions&quot;: [ # Parameters required to use current Offer to purchase.
          { # Parameter&#x27;s definition. Specifies what parameter is required to use the current Offer to purchase.
            &quot;allowedValues&quot;: [ # If not empty, parameter values must be drawn from this list. For example, [us-west1, us-west2, ...] Applicable to STRING parameter type.
              { # Data type and value of a parameter.
                &quot;boolValue&quot;: True or False, # Represents a boolean value.
                &quot;doubleValue&quot;: 3.14, # Represents a double value.
                &quot;int64Value&quot;: &quot;A String&quot;, # Represents an int64 value.
                &quot;protoValue&quot;: { # Represents an &#x27;Any&#x27; proto value.
                  &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
                },
                &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
              },
            ],
            &quot;maxValue&quot;: { # Data type and value of a parameter. # Maximum value of the parameter, if applicable. Inclusive. For example, maximum seats when purchasing Google Workspace Business Standard. Applicable to INT64 and DOUBLE parameter types.
              &quot;boolValue&quot;: True or False, # Represents a boolean value.
              &quot;doubleValue&quot;: 3.14, # Represents a double value.
              &quot;int64Value&quot;: &quot;A String&quot;, # Represents an int64 value.
              &quot;protoValue&quot;: { # Represents an &#x27;Any&#x27; proto value.
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
              &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
            },
            &quot;minValue&quot;: { # Data type and value of a parameter. # Minimal value of the parameter, if applicable. Inclusive. For example, minimal commitment when purchasing Anthos is 0.01. Applicable to INT64 and DOUBLE parameter types.
              &quot;boolValue&quot;: True or False, # Represents a boolean value.
              &quot;doubleValue&quot;: 3.14, # Represents a double value.
              &quot;int64Value&quot;: &quot;A String&quot;, # Represents an int64 value.
              &quot;protoValue&quot;: { # Represents an &#x27;Any&#x27; proto value.
                &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
              },
              &quot;stringValue&quot;: &quot;A String&quot;, # Represents a string value.
            },
            &quot;name&quot;: &quot;A String&quot;, # Name of the parameter.
            &quot;optional&quot;: True or False, # If set to true, parameter is optional to purchase this Offer.
            &quot;parameterType&quot;: &quot;A String&quot;, # Data type of the parameter. Minimal value, Maximum value and allowed values will use specified data type here.
          },
        ],
        &quot;plan&quot;: { # The payment plan for the Offer. Describes how to make a payment. # Describes the payment plan for the Offer.
          &quot;billingAccount&quot;: &quot;A String&quot;, # Reseller Billing account to charge after an offer transaction. Only present for Google Cloud Platform offers.
          &quot;paymentCycle&quot;: { # Represents period in days/months/years. # Describes how frequently the reseller will be billed, such as once per month.
            &quot;duration&quot;: 42, # Total duration of Period Type defined.
            &quot;periodType&quot;: &quot;A String&quot;, # Period Type.
          },
          &quot;paymentPlan&quot;: &quot;A String&quot;, # Describes how a reseller will be billed.
          &quot;paymentType&quot;: &quot;A String&quot;, # Specifies when the payment needs to happen.
          &quot;trialPeriod&quot;: { # Represents period in days/months/years. # Present for Offers with a trial period. For trial-only Offers, a paid service needs to start before the trial period ends for continued service. For Regular Offers with a trial period, the regular pricing goes into effect when trial period ends, or if paid service is started before the end of the trial period.
            &quot;duration&quot;: 42, # Total duration of Period Type defined.
            &quot;periodType&quot;: &quot;A String&quot;, # Period Type.
          },
        },
        &quot;priceByResources&quot;: [ # Price for each monetizable resource type.
          { # Represents price by resource type.
            &quot;price&quot;: { # Represents the price of the Offer. # Price of the Offer. Present if there are no price phases.
              &quot;basePrice&quot;: { # Represents an amount of money with its currency type. # Base price.
                &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
                &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
              },
              &quot;discount&quot;: 3.14, # Discount percentage, represented as decimal. For example, a 20% discount will be represent as 0.2.
              &quot;effectivePrice&quot;: { # Represents an amount of money with its currency type. # Effective Price after applying the discounts.
                &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
                &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
              },
              &quot;externalPriceUri&quot;: &quot;A String&quot;, # Link to external price list, such as link to Google Voice rate card.
            },
            &quot;pricePhases&quot;: [ # Specifies the price by time range.
              { # Specifies the price by the duration of months. For example, a 20% discount for the first six months, then a 10% discount starting on the seventh month.
                &quot;firstPeriod&quot;: 42, # Defines first period for the phase.
                &quot;lastPeriod&quot;: 42, # Defines first period for the phase.
                &quot;periodType&quot;: &quot;A String&quot;, # Defines the phase period type.
                &quot;price&quot;: { # Represents the price of the Offer. # Price of the phase. Present if there are no price tiers.
                  &quot;basePrice&quot;: { # Represents an amount of money with its currency type. # Base price.
                    &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
                    &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
                  },
                  &quot;discount&quot;: 3.14, # Discount percentage, represented as decimal. For example, a 20% discount will be represent as 0.2.
                  &quot;effectivePrice&quot;: { # Represents an amount of money with its currency type. # Effective Price after applying the discounts.
                    &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
                    &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
                  },
                  &quot;externalPriceUri&quot;: &quot;A String&quot;, # Link to external price list, such as link to Google Voice rate card.
                },
                &quot;priceTiers&quot;: [ # Price by the resource tiers.
                  { # Defines price at resource tier level. For example, an offer with following definition : * Tier 1: Provide 25% discount for all seats between 1 and 25. * Tier 2: Provide 10% discount for all seats between 26 and 100. * Tier 3: Provide flat 15% discount for all seats above 100. Each of these tiers is represented as a PriceTier.
                    &quot;firstResource&quot;: 42, # First resource for which the tier price applies.
                    &quot;lastResource&quot;: 42, # Last resource for which the tier price applies.
                    &quot;price&quot;: { # Represents the price of the Offer. # Price of the tier.
                      &quot;basePrice&quot;: { # Represents an amount of money with its currency type. # Base price.
                        &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
                        &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                        &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
                      },
                      &quot;discount&quot;: 3.14, # Discount percentage, represented as decimal. For example, a 20% discount will be represent as 0.2.
                      &quot;effectivePrice&quot;: { # Represents an amount of money with its currency type. # Effective Price after applying the discounts.
                        &quot;currencyCode&quot;: &quot;A String&quot;, # The three-letter currency code defined in ISO 4217.
                        &quot;nanos&quot;: 42, # Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                        &quot;units&quot;: &quot;A String&quot;, # The whole units of the amount. For example if `currencyCode` is `&quot;USD&quot;`, then 1 unit is one US dollar.
                      },
                      &quot;externalPriceUri&quot;: &quot;A String&quot;, # Link to external price list, such as link to Google Voice rate card.
                    },
                  },
                ],
              },
            ],
            &quot;resourceType&quot;: &quot;A String&quot;, # Resource Type. Example: SEAT
          },
        ],
        &quot;sku&quot;: { # Represents a product&#x27;s purchasable Stock Keeping Unit (SKU). SKUs represent the different variations of the product. For example, Google Workspace Business Standard and Google Workspace Business Plus are Google Workspace product SKUs. # SKU the offer is associated with.
          &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the SKU.
            &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
              &quot;content&quot;: &quot;A String&quot;, # URL of the media.
              &quot;title&quot;: &quot;A String&quot;, # Title of the media.
              &quot;type&quot;: &quot;A String&quot;, # Type of the media.
            },
            &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
            &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
          },
          &quot;name&quot;: &quot;A String&quot;, # Resource Name of the SKU. Format: products/{product_id}/skus/{sku_id}
          &quot;product&quot;: { # A Product is the entity a customer uses when placing an order. For example, Google Workspace, Google Voice, etc. # Product the SKU is associated with.
            &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the product.
              &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
                &quot;content&quot;: &quot;A String&quot;, # URL of the media.
                &quot;title&quot;: &quot;A String&quot;, # Title of the media.
                &quot;type&quot;: &quot;A String&quot;, # Type of the media.
              },
              &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
              &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
            },
            &quot;name&quot;: &quot;A String&quot;, # Resource Name of the Product. Format: products/{product_id}
          },
        },
        &quot;startTime&quot;: &quot;A String&quot;, # Start of the Offer validity time.
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="listTransferableOffers_next">listTransferableOffers_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="listTransferableSkus">listTransferableSkus(parent, body=None, x__xgafv=None)</code>
  <pre>List TransferableSkus of a customer based on the Cloud Identity ID or Customer Name in the request. Use this method to list the entitlements information of an unowned customer. You should provide the customer&#x27;s Cloud Identity ID or Customer Name. Possible error codes: * PERMISSION_DENIED: * The customer doesn&#x27;t belong to the reseller and has no auth token. * The supplied auth token is invalid. * The reseller account making the request is different from the reseller account in the query. * INVALID_ARGUMENT: Required request parameters are missing or invalid. Return value: A list of the customer&#x27;s TransferableSku.

Args:
  parent: string, Required. The reseller account&#x27;s resource name. Parent uses the format: accounts/{account_id} (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for CloudChannelService.ListTransferableSkus
  &quot;authToken&quot;: &quot;A String&quot;, # The super admin of the resold customer generates this token to authorize a reseller to access their Cloud Identity and purchase entitlements on their behalf. You can omit this token after authorization. See https://support.google.com/a/answer/7643790 for more details.
  &quot;cloudIdentityId&quot;: &quot;A String&quot;, # Customer&#x27;s Cloud Identity ID
  &quot;customerName&quot;: &quot;A String&quot;, # A reseller is required to create a customer and use the resource name of the created customer here. Customer_name uses the format: accounts/{account_id}/customers/{customer_id}
  &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code. For example, &quot;en-US&quot;. The response will localize in the corresponding language code, if specified. The default value is &quot;en-US&quot;. Optional.
  &quot;pageSize&quot;: 42, # The requested page size. Server might return fewer results than requested. If unspecified, returns at most 100 SKUs. The maximum value is 1000; the server will coerce values above 1000. Optional.
  &quot;pageToken&quot;: &quot;A String&quot;, # A token for a page of results other than the first page. Obtained using ListTransferableSkusResponse.next_page_token of the previous CloudChannelService.ListTransferableSkus call. Optional.
}

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

Returns:
  An object of the form:

    { # Response message for CloudChannelService.ListTransferableSkus.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass to ListTransferableSkusRequest.page_token to obtain that page.
  &quot;transferableSkus&quot;: [ # Information about existing SKUs for a customer that needs a transfer.
    { # TransferableSku represents information a reseller needs to view existing provisioned services for a customer that they do not own. Read-only.
      &quot;legacySku&quot;: { # Represents a product&#x27;s purchasable Stock Keeping Unit (SKU). SKUs represent the different variations of the product. For example, Google Workspace Business Standard and Google Workspace Business Plus are Google Workspace product SKUs. # Optional. The customer to transfer has an entitlement with the populated legacy SKU.
        &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the SKU.
          &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
            &quot;content&quot;: &quot;A String&quot;, # URL of the media.
            &quot;title&quot;: &quot;A String&quot;, # Title of the media.
            &quot;type&quot;: &quot;A String&quot;, # Type of the media.
          },
          &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
          &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
        },
        &quot;name&quot;: &quot;A String&quot;, # Resource Name of the SKU. Format: products/{product_id}/skus/{sku_id}
        &quot;product&quot;: { # A Product is the entity a customer uses when placing an order. For example, Google Workspace, Google Voice, etc. # Product the SKU is associated with.
          &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the product.
            &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
              &quot;content&quot;: &quot;A String&quot;, # URL of the media.
              &quot;title&quot;: &quot;A String&quot;, # Title of the media.
              &quot;type&quot;: &quot;A String&quot;, # Type of the media.
            },
            &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
            &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
          },
          &quot;name&quot;: &quot;A String&quot;, # Resource Name of the Product. Format: products/{product_id}
        },
      },
      &quot;sku&quot;: { # Represents a product&#x27;s purchasable Stock Keeping Unit (SKU). SKUs represent the different variations of the product. For example, Google Workspace Business Standard and Google Workspace Business Plus are Google Workspace product SKUs. # The SKU pertaining to the provisioning resource as specified in the Offer.
        &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the SKU.
          &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
            &quot;content&quot;: &quot;A String&quot;, # URL of the media.
            &quot;title&quot;: &quot;A String&quot;, # Title of the media.
            &quot;type&quot;: &quot;A String&quot;, # Type of the media.
          },
          &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
          &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
        },
        &quot;name&quot;: &quot;A String&quot;, # Resource Name of the SKU. Format: products/{product_id}/skus/{sku_id}
        &quot;product&quot;: { # A Product is the entity a customer uses when placing an order. For example, Google Workspace, Google Voice, etc. # Product the SKU is associated with.
          &quot;marketingInfo&quot;: { # Represents the marketing information for a Product, SKU or Offer. # Marketing information for the product.
            &quot;defaultLogo&quot;: { # Represents media information. # Default logo.
              &quot;content&quot;: &quot;A String&quot;, # URL of the media.
              &quot;title&quot;: &quot;A String&quot;, # Title of the media.
              &quot;type&quot;: &quot;A String&quot;, # Type of the media.
            },
            &quot;description&quot;: &quot;A String&quot;, # Human readable description. Description can contain HTML.
            &quot;displayName&quot;: &quot;A String&quot;, # Human readable name.
          },
          &quot;name&quot;: &quot;A String&quot;, # Resource Name of the Product. Format: products/{product_id}
        },
      },
      &quot;transferEligibility&quot;: { # Specifies transfer eligibility of a SKU. # Describes the transfer eligibility of a SKU.
        &quot;description&quot;: &quot;A String&quot;, # Localized description if reseller is not eligible to transfer the SKU.
        &quot;ineligibilityReason&quot;: &quot;A String&quot;, # Specified the reason for ineligibility.
        &quot;isEligible&quot;: True or False, # Whether reseller is eligible to transfer the SKU.
      },
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="listTransferableSkus_next">listTransferableSkus_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="register">register(account, body=None, x__xgafv=None)</code>
  <pre>Registers a service account with subscriber privileges on the Cloud Pub/Sub topic for this Channel Services account. After you create a subscriber, you get the events through SubscriberEvent Possible error codes: * PERMISSION_DENIED: The reseller account making the request and the provided reseller account are different, or the impersonated user is not a super admin. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * INTERNAL: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. * UNKNOWN: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. Return value: The topic name with the registered service email address.

Args:
  account: string, Required. Resource name of the account. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request Message for RegisterSubscriber.
  &quot;serviceAccount&quot;: &quot;A String&quot;, # Required. Service account that provides subscriber access to the registered topic.
}

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

Returns:
  An object of the form:

    { # Response Message for RegisterSubscriber.
  &quot;topic&quot;: &quot;A String&quot;, # Name of the topic the subscriber will listen to.
}</pre>
</div>

<div class="method">
    <code class="details" id="unregister">unregister(account, body=None, x__xgafv=None)</code>
  <pre>Unregisters a service account with subscriber privileges on the Cloud Pub/Sub topic created for this Channel Services account. If there are no service accounts left with subscriber privileges, this deletes the topic. You can call ListSubscribers to check for these accounts. Possible error codes: * PERMISSION_DENIED: The reseller account making the request and the provided reseller account are different, or the impersonated user is not a super admin. * INVALID_ARGUMENT: Required request parameters are missing or invalid. * NOT_FOUND: The topic resource doesn&#x27;t exist. * INTERNAL: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. * UNKNOWN: Any non-user error related to a technical issue in the backend. Contact Cloud Channel support. Return value: The topic name that unregistered the service email address. Returns a success response if the service email address wasn&#x27;t registered with the topic.

Args:
  account: string, Required. Resource name of the account. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request Message for UnregisterSubscriber.
  &quot;serviceAccount&quot;: &quot;A String&quot;, # Required. Service account to unregister from subscriber access to the topic.
}

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

Returns:
  An object of the form:

    { # Response Message for UnregisterSubscriber.
  &quot;topic&quot;: &quot;A String&quot;, # Name of the topic the service account subscriber access was removed from.
}</pre>
</div>

</body></html>