<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="pubsublite_v1.html">Pub/Sub Lite API</a> . <a href="pubsublite_v1.admin.html">admin</a> . <a href="pubsublite_v1.admin.projects.html">projects</a> . <a href="pubsublite_v1.admin.projects.locations.html">locations</a> . <a href="pubsublite_v1.admin.projects.locations.topics.html">topics</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="pubsublite_v1.admin.projects.locations.topics.subscriptions.html">subscriptions()</a></code>
</p>
<p class="firstline">Returns the subscriptions Resource.</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="#create">create(parent, body=None, topicId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new topic.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified topic.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the topic configuration.</p>
<p class="toc_element">
  <code><a href="#getPartitions">getPartitions(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the partition information for the requested topic.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the list of topics for the given project.</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>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates properties of the specified topic.</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="create">create(parent, body=None, topicId=None, x__xgafv=None)</code>
  <pre>Creates a new topic.

Args:
  parent: string, Required. The parent location in which to create the topic. Structured like `projects/{project_number}/locations/{location}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Metadata about a topic resource.
  &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
    &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
      &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
    },
    &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1. Once a topic has been created the number of partitions can be increased but not decreased. Message ordering is not guaranteed across a topic resize. For more information see https://cloud.google.com/pubsub/lite/docs/topics#scaling_capacity
    &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
  },
  &quot;reservationConfig&quot;: { # The settings for this topic&#x27;s Reservation usage. # The settings for this topic&#x27;s Reservation usage.
    &quot;throughputReservation&quot;: &quot;A String&quot;, # The Reservation to use for this topic&#x27;s throughput capacity. Structured like: projects/{project_number}/locations/{location}/reservations/{reservation_id}
  },
  &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
    &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
  },
}

  topicId: string, Required. The ID to use for the topic, which will become the final component of the topic&#x27;s name. This value is structured like: `my-topic-name`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metadata about a topic resource.
  &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
    &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
      &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
    },
    &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1. Once a topic has been created the number of partitions can be increased but not decreased. Message ordering is not guaranteed across a topic resize. For more information see https://cloud.google.com/pubsub/lite/docs/topics#scaling_capacity
    &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
  },
  &quot;reservationConfig&quot;: { # The settings for this topic&#x27;s Reservation usage. # The settings for this topic&#x27;s Reservation usage.
    &quot;throughputReservation&quot;: &quot;A String&quot;, # The Reservation to use for this topic&#x27;s throughput capacity. Structured like: projects/{project_number}/locations/{location}/reservations/{reservation_id}
  },
  &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
    &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified topic.

Args:
  name: string, Required. The name of the topic to delete. (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(name, x__xgafv=None)</code>
  <pre>Returns the topic configuration.

Args:
  name: string, Required. The name of the topic whose configuration to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metadata about a topic resource.
  &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
    &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
      &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
    },
    &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1. Once a topic has been created the number of partitions can be increased but not decreased. Message ordering is not guaranteed across a topic resize. For more information see https://cloud.google.com/pubsub/lite/docs/topics#scaling_capacity
    &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
  },
  &quot;reservationConfig&quot;: { # The settings for this topic&#x27;s Reservation usage. # The settings for this topic&#x27;s Reservation usage.
    &quot;throughputReservation&quot;: &quot;A String&quot;, # The Reservation to use for this topic&#x27;s throughput capacity. Structured like: projects/{project_number}/locations/{location}/reservations/{reservation_id}
  },
  &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
    &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="getPartitions">getPartitions(name, x__xgafv=None)</code>
  <pre>Returns the partition information for the requested topic.

Args:
  name: string, Required. The topic whose partition information to return. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for GetTopicPartitions.
  &quot;partitionCount&quot;: &quot;A String&quot;, # The number of partitions in the topic.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns the list of topics for the given project.

Args:
  parent: string, Required. The parent whose topics are to be listed. Structured like `projects/{project_number}/locations/{location}`. (required)
  pageSize: integer, The maximum number of topics to return. The service may return fewer than this value. If unset or zero, all topics for the parent will be returned.
  pageToken: string, A page token, received from a previous `ListTopics` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListTopics` 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 for ListTopics.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token that can be sent as `page_token` to retrieve the next page of results. If this field is omitted, there are no more results.
  &quot;topics&quot;: [ # The list of topic in the requested parent. The order of the topics is unspecified.
    { # Metadata about a topic resource.
      &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
      &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
        &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
          &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
          &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
        },
        &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1. Once a topic has been created the number of partitions can be increased but not decreased. Message ordering is not guaranteed across a topic resize. For more information see https://cloud.google.com/pubsub/lite/docs/topics#scaling_capacity
        &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
      },
      &quot;reservationConfig&quot;: { # The settings for this topic&#x27;s Reservation usage. # The settings for this topic&#x27;s Reservation usage.
        &quot;throughputReservation&quot;: &quot;A String&quot;, # The Reservation to use for this topic&#x27;s throughput capacity. Structured like: projects/{project_number}/locations/{location}/reservations/{reservation_id}
      },
      &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
        &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
        &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
      },
    },
  ],
}</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>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates properties of the specified topic.

Args:
  name: string, The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id} (required)
  body: object, The request body.
    The object takes the form of:

{ # Metadata about a topic resource.
  &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
    &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
      &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
    },
    &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1. Once a topic has been created the number of partitions can be increased but not decreased. Message ordering is not guaranteed across a topic resize. For more information see https://cloud.google.com/pubsub/lite/docs/topics#scaling_capacity
    &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
  },
  &quot;reservationConfig&quot;: { # The settings for this topic&#x27;s Reservation usage. # The settings for this topic&#x27;s Reservation usage.
    &quot;throughputReservation&quot;: &quot;A String&quot;, # The Reservation to use for this topic&#x27;s throughput capacity. Structured like: projects/{project_number}/locations/{location}/reservations/{reservation_id}
  },
  &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
    &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
  },
}

  updateMask: string, Required. A mask specifying the topic fields to change.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Metadata about a topic resource.
  &quot;name&quot;: &quot;A String&quot;, # The name of the topic. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
  &quot;partitionConfig&quot;: { # The settings for a topic&#x27;s partitions. # The settings for this topic&#x27;s partitions.
    &quot;capacity&quot;: { # The throughput capacity configuration for each partition. # The capacity configuration.
      &quot;publishMibPerSec&quot;: 42, # Publish throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 16.
      &quot;subscribeMibPerSec&quot;: 42, # Subscribe throughput capacity per partition in MiB/s. Must be &gt;= 4 and &lt;= 32.
    },
    &quot;count&quot;: &quot;A String&quot;, # The number of partitions in the topic. Must be at least 1. Once a topic has been created the number of partitions can be increased but not decreased. Message ordering is not guaranteed across a topic resize. For more information see https://cloud.google.com/pubsub/lite/docs/topics#scaling_capacity
    &quot;scale&quot;: 42, # DEPRECATED: Use capacity instead which can express a superset of configurations. Every partition in the topic is allocated throughput equivalent to `scale` times the standard partition throughput (4 MiB/s). This is also reflected in the cost of this topic; a topic with `scale` of 2 and count of 10 is charged for 20 partitions. This value must be in the range [1,4].
  },
  &quot;reservationConfig&quot;: { # The settings for this topic&#x27;s Reservation usage. # The settings for this topic&#x27;s Reservation usage.
    &quot;throughputReservation&quot;: &quot;A String&quot;, # The Reservation to use for this topic&#x27;s throughput capacity. Structured like: projects/{project_number}/locations/{location}/reservations/{reservation_id}
  },
  &quot;retentionConfig&quot;: { # The settings for a topic&#x27;s message retention. # The settings for this topic&#x27;s message retention.
    &quot;perPartitionBytes&quot;: &quot;A String&quot;, # The provisioned storage, in bytes, per partition. If the number of bytes stored in any of the topic&#x27;s partitions grows beyond this value, older messages will be dropped to make room for newer ones, regardless of the value of `period`.
    &quot;period&quot;: &quot;A String&quot;, # How long a published message is retained. If unset, messages will be retained as long as the bytes retained for each partition is below `per_partition_bytes`.
  },
}</pre>
</div>

</body></html>