<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.subscriptions.html">subscriptions</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="#create">create(parent, body=None, skipBacklog=None, subscriptionId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new subscription.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified subscription.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the subscription configuration.</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 subscriptions 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 subscription.</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, skipBacklog=None, subscriptionId=None, x__xgafv=None)</code>
  <pre>Creates a new subscription.

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

{ # Metadata about a subscription resource.
  &quot;deliveryConfig&quot;: { # The settings for a subscription&#x27;s message delivery. # The settings for this subscription&#x27;s message delivery.
    &quot;deliveryRequirement&quot;: &quot;A String&quot;, # The DeliveryRequirement for this subscription.
  },
  &quot;name&quot;: &quot;A String&quot;, # The name of the subscription. Structured like: projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
  &quot;topic&quot;: &quot;A String&quot;, # The name of the topic this subscription is attached to. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
}

  skipBacklog: boolean, If true, the newly created subscription will only receive messages published after the subscription was created. Otherwise, the entire message backlog will be received on the subscription. Defaults to false.
  subscriptionId: string, Required. The ID to use for the subscription, which will become the final component of the subscription&#x27;s name. This value is structured like: `my-sub-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 subscription resource.
  &quot;deliveryConfig&quot;: { # The settings for a subscription&#x27;s message delivery. # The settings for this subscription&#x27;s message delivery.
    &quot;deliveryRequirement&quot;: &quot;A String&quot;, # The DeliveryRequirement for this subscription.
  },
  &quot;name&quot;: &quot;A String&quot;, # The name of the subscription. Structured like: projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
  &quot;topic&quot;: &quot;A String&quot;, # The name of the topic this subscription is attached to. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
}</pre>
</div>

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

Args:
  name: string, Required. The name of the subscription 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 subscription configuration.

Args:
  name: string, Required. The name of the subscription 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 subscription resource.
  &quot;deliveryConfig&quot;: { # The settings for a subscription&#x27;s message delivery. # The settings for this subscription&#x27;s message delivery.
    &quot;deliveryRequirement&quot;: &quot;A String&quot;, # The DeliveryRequirement for this subscription.
  },
  &quot;name&quot;: &quot;A String&quot;, # The name of the subscription. Structured like: projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
  &quot;topic&quot;: &quot;A String&quot;, # The name of the topic this subscription is attached to. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
}</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 subscriptions for the given project.

Args:
  parent: string, Required. The parent whose subscriptions are to be listed. Structured like `projects/{project_number}/locations/{location}`. (required)
  pageSize: integer, The maximum number of subscriptions to return. The service may return fewer than this value. If unset or zero, all subscriptions for the parent will be returned.
  pageToken: string, A page token, received from a previous `ListSubscriptions` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListSubscriptions` 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 ListSubscriptions.
  &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;subscriptions&quot;: [ # The list of subscriptions in the requested parent. The order of the subscriptions is unspecified.
    { # Metadata about a subscription resource.
      &quot;deliveryConfig&quot;: { # The settings for a subscription&#x27;s message delivery. # The settings for this subscription&#x27;s message delivery.
        &quot;deliveryRequirement&quot;: &quot;A String&quot;, # The DeliveryRequirement for this subscription.
      },
      &quot;name&quot;: &quot;A String&quot;, # The name of the subscription. Structured like: projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
      &quot;topic&quot;: &quot;A String&quot;, # The name of the topic this subscription is attached to. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
    },
  ],
}</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 subscription.

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

{ # Metadata about a subscription resource.
  &quot;deliveryConfig&quot;: { # The settings for a subscription&#x27;s message delivery. # The settings for this subscription&#x27;s message delivery.
    &quot;deliveryRequirement&quot;: &quot;A String&quot;, # The DeliveryRequirement for this subscription.
  },
  &quot;name&quot;: &quot;A String&quot;, # The name of the subscription. Structured like: projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
  &quot;topic&quot;: &quot;A String&quot;, # The name of the topic this subscription is attached to. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
}

  updateMask: string, Required. A mask specifying the subscription 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 subscription resource.
  &quot;deliveryConfig&quot;: { # The settings for a subscription&#x27;s message delivery. # The settings for this subscription&#x27;s message delivery.
    &quot;deliveryRequirement&quot;: &quot;A String&quot;, # The DeliveryRequirement for this subscription.
  },
  &quot;name&quot;: &quot;A String&quot;, # The name of the subscription. Structured like: projects/{project_number}/locations/{location}/subscriptions/{subscription_id}
  &quot;topic&quot;: &quot;A String&quot;, # The name of the topic this subscription is attached to. Structured like: projects/{project_number}/locations/{location}/topics/{topic_id}
}</pre>
</div>

</body></html>