<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="cloudbilling_v1.html">Cloud Billing API</a> . <a href="cloudbilling_v1.services.html">services</a> . <a href="cloudbilling_v1.services.skus.html">skus</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(parent, endTime=None, currencyCode=None, pageSize=None, startTime=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all publicly available SKUs for a given cloud service.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(parent, endTime=None, currencyCode=None, pageSize=None, startTime=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all publicly available SKUs for a given cloud service.

Args:
  parent: string, Required. The name of the service.
Example: &quot;services/DA34-426B-A397&quot; (required)
  endTime: string, Optional exclusive end time of the time range for which the pricing
versions will be returned. Timestamps in the future are not allowed.
The time range has to be within a single calendar month in
America/Los_Angeles timezone. Time range as a whole is optional. If not
specified, the latest pricing will be returned (up to 12 hours old at
most).
  currencyCode: string, The ISO 4217 currency code for the pricing info in the response proto.
Will use the conversion rate as of start_time.
Optional. If not specified USD will be used.
  pageSize: integer, Requested page size. Defaults to 5000.
  startTime: string, Optional inclusive start time of the time range for which the pricing
versions will be returned. Timestamps in the future are not allowed.
The time range has to be within a single calendar month in
America/Los_Angeles timezone. Time range as a whole is optional. If not
specified, the latest pricing will be returned (up to 12 hours old at
most).
  pageToken: string, A token identifying a page of results to return. This should be a
`next_page_token` value returned from a previous `ListSkus`
call. If unspecified, the first page of results is returned.
  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 `ListSkus`.
    &quot;skus&quot;: [ # The list of public SKUs of the given service.
      { # Encapsulates a single SKU in Google Cloud Platform
        &quot;skuId&quot;: &quot;A String&quot;, # The identifier for the SKU.
            # Example: &quot;AA95-CD31-42FE&quot;
        &quot;category&quot;: { # Represents the category hierarchy of a SKU. # The category hierarchy of this SKU, purely for organizational purpose.
          &quot;serviceDisplayName&quot;: &quot;A String&quot;, # The display name of the service this SKU belongs to.
          &quot;resourceGroup&quot;: &quot;A String&quot;, # A group classification for related SKUs.
              # Example: &quot;RAM&quot;, &quot;GPU&quot;, &quot;Prediction&quot;, &quot;Ops&quot;, &quot;GoogleEgress&quot; etc.
          &quot;resourceFamily&quot;: &quot;A String&quot;, # The type of product the SKU refers to.
              # Example: &quot;Compute&quot;, &quot;Storage&quot;, &quot;Network&quot;, &quot;ApplicationServices&quot; etc.
          &quot;usageType&quot;: &quot;A String&quot;, # Represents how the SKU is consumed.
              # Example: &quot;OnDemand&quot;, &quot;Preemptible&quot;, &quot;Commit1Mo&quot;, &quot;Commit1Yr&quot; etc.
        },
        &quot;serviceProviderName&quot;: &quot;A String&quot;, # Identifies the service provider.
            # This is &#x27;Google&#x27; for first party services in Google Cloud Platform.
        &quot;description&quot;: &quot;A String&quot;, # A human readable description of the SKU, has a maximum length of 256
            # characters.
        &quot;serviceRegions&quot;: [ # List of service regions this SKU is offered at.
            # Example: &quot;asia-east1&quot;
            # Service regions can be found at https://cloud.google.com/about/locations/
          &quot;A String&quot;,
        ],
        &quot;name&quot;: &quot;A String&quot;, # The resource name for the SKU.
            # Example: &quot;services/DA34-426B-A397/skus/AA95-CD31-42FE&quot;
        &quot;pricingInfo&quot;: [ # A timeline of pricing info for this SKU in chronological order.
          { # Represents the pricing information for a SKU at a single point of time.
            &quot;effectiveTime&quot;: &quot;A String&quot;, # The timestamp from which this pricing was effective within the requested
                # time range. This is guaranteed to be greater than or equal to the
                # start_time field in the request and less than the end_time field in the
                # request. If a time range was not specified in the request this field will
                # be equivalent to a time within the last 12 hours, indicating the latest
                # pricing info.
            &quot;summary&quot;: &quot;A String&quot;, # An optional human readable summary of the pricing information, has a
                # maximum length of 256 characters.
            &quot;aggregationInfo&quot;: { # Represents the aggregation level and interval for pricing of a single SKU. # Aggregation Info. This can be left unspecified if the pricing expression
                # doesn&#x27;t require aggregation.
              &quot;aggregationCount&quot;: 42, # The number of intervals to aggregate over.
                  # Example: If aggregation_level is &quot;DAILY&quot; and aggregation_count is 14,
                  # aggregation will be over 14 days.
              &quot;aggregationInterval&quot;: &quot;A String&quot;,
              &quot;aggregationLevel&quot;: &quot;A String&quot;,
            },
            &quot;currencyConversionRate&quot;: 3.14, # Conversion rate used for currency conversion, from USD to the currency
                # specified in the request. This includes any surcharge collected for billing
                # in non USD currency. If a currency is not specified in the request this
                # defaults to 1.0.
                # Example: USD * currency_conversion_rate = JPY
            &quot;pricingExpression&quot;: { # Expresses a mathematical pricing formula. For Example:- # Expresses the pricing formula. See `PricingExpression` for an example.
                #
                # `usage_unit: GBy`
                # `tiered_rates:`
                #    `[start_usage_amount: 20, unit_price: $10]`
                #    `[start_usage_amount: 100, unit_price: $5]`
                #
                # The above expresses a pricing formula where the first 20GB is free, the
                # next 80GB is priced at $10 per GB followed by $5 per GB for additional
                # usage.
              &quot;baseUnitDescription&quot;: &quot;A String&quot;, # The base unit in human readable form.
                  # Example: &quot;byte&quot;.
              &quot;tieredRates&quot;: [ # The list of tiered rates for this pricing. The total cost is computed by
                  # applying each of the tiered rates on usage. This repeated list is sorted
                  # by ascending order of start_usage_amount.
                { # The price rate indicating starting usage and its corresponding price.
                  &quot;unitPrice&quot;: { # Represents an amount of money with its currency type. # The price per unit of usage.
                      # Example: unit_price of amount $10 indicates that each unit will cost $10.
                    &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;currencyCode&quot;: &quot;A String&quot;, # The 3-letter currency code defined in ISO 4217.
                    &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;startUsageAmount&quot;: 3.14, # Usage is priced at this rate only after this amount.
                      # Example: start_usage_amount of 10 indicates that the usage will be priced
                      # at the unit_price after the first 10 usage_units.
                },
              ],
              &quot;usageUnit&quot;: &quot;A String&quot;, # The short hand for unit of usage this pricing is specified in.
                  # Example: usage_unit of &quot;GiBy&quot; means that usage is specified in &quot;Gibi Byte&quot;.
              &quot;displayQuantity&quot;: 3.14, # The recommended quantity of units for displaying pricing info. When
                  # displaying pricing info it is recommended to display:
                  # (unit_price * display_quantity) per display_quantity usage_unit.
                  # This field does not affect the pricing formula and is for display purposes
                  # only.
                  # Example: If the unit_price is &quot;0.0001 USD&quot;, the usage_unit is &quot;GB&quot; and
                  # the display_quantity is &quot;1000&quot; then the recommended way of displaying the
                  # pricing info is &quot;0.10 USD per 1000 GB&quot;
              &quot;usageUnitDescription&quot;: &quot;A String&quot;, # The unit of usage in human readable form.
                  # Example: &quot;gibi byte&quot;.
              &quot;baseUnitConversionFactor&quot;: 3.14, # Conversion factor for converting from price per usage_unit to price per
                  # base_unit, and start_usage_amount to start_usage_amount in base_unit.
                  # unit_price / base_unit_conversion_factor = price per base_unit.
                  # start_usage_amount * base_unit_conversion_factor = start_usage_amount in
                  # base_unit.
              &quot;baseUnit&quot;: &quot;A String&quot;, # The base unit for the SKU which is the unit used in usage exports.
                  # Example: &quot;By&quot;
            },
          },
        ],
        &quot;geoTaxonomy&quot;: { # Encapsulates the geographic taxonomy data for a sku. # The geographic taxonomy for this sku.
          &quot;type&quot;: &quot;A String&quot;, # The type of Geo Taxonomy: GLOBAL, REGIONAL, or MULTI_REGIONAL.
          &quot;regions&quot;: [ # The list of regions associated with a sku. Empty for Global skus, which are
              # associated with all GCP regions.
            &quot;A String&quot;,
          ],
        },
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. To retrieve the next page,
        # call `ListSkus` again with the `page_token` field set to this
        # value. This field is empty if there are no more results to retrieve.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_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>

</body></html>