<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="secretmanager_v1.html">Secret Manager API</a> . <a href="secretmanager_v1.projects.html">projects</a> . <a href="secretmanager_v1.projects.secrets.html">secrets</a> . <a href="secretmanager_v1.projects.secrets.versions.html">versions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#access">access(name, x__xgafv=None)</a></code></p>
<p class="firstline">Accesses a SecretVersion. This call returns the secret data. `projects/*/secrets/*/versions/latest` is an alias to the `latest` SecretVersion.</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="#destroy">destroy(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Destroys a SecretVersion. Sets the state of the SecretVersion to DESTROYED and irrevocably destroys the secret data.</p>
<p class="toc_element">
  <code><a href="#disable">disable(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Disables a SecretVersion. Sets the state of the SecretVersion to DISABLED.</p>
<p class="toc_element">
  <code><a href="#enable">enable(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enables a SecretVersion. Sets the state of the SecretVersion to ENABLED.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets metadata for a SecretVersion. `projects/*/secrets/*/versions/latest` is an alias to the `latest` SecretVersion.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists SecretVersions. This call does not return secret data.</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="access">access(name, x__xgafv=None)</code>
  <pre>Accesses a SecretVersion. This call returns the secret data. `projects/*/secrets/*/versions/latest` is an alias to the `latest` SecretVersion.

Args:
  name: string, Required. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. (required)
  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 SecretManagerService.AccessSecretVersion.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`.
  &quot;payload&quot;: { # A secret payload resource in the Secret Manager API. This contains the sensitive secret payload that is associated with a SecretVersion. # Secret payload
    &quot;data&quot;: &quot;A String&quot;, # The secret data. Must be no larger than 64KiB.
  },
}</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="destroy">destroy(name, body=None, x__xgafv=None)</code>
  <pre>Destroys a SecretVersion. Sets the state of the SecretVersion to DESTROYED and irrevocably destroys the secret data.

Args:
  name: string, Required. The resource name of the SecretVersion to destroy in the format `projects/*/secrets/*/versions/*`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for SecretManagerService.DestroySecretVersion.
}

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

Returns:
  An object of the form:

    { # A secret version resource in the Secret Manager API.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the SecretVersion was created.
  &quot;destroyTime&quot;: &quot;A String&quot;, # Output only. The time this SecretVersion was destroyed. Only present if state is DESTROYED.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. SecretVersion IDs in a Secret start at 1 and are incremented for each subsequent version of the secret.
  &quot;replicationStatus&quot;: { # The replication status of a SecretVersion. # The replication status of the SecretVersion.
    &quot;automatic&quot;: { # The replication status of a SecretVersion using automatic replication. Only populated if the parent Secret has an automatic replication policy. # Describes the replication status of a SecretVersion with automatic replication. Only populated if the parent Secret has an automatic replication policy.
      &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
        &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
      },
    },
    &quot;userManaged&quot;: { # The replication status of a SecretVersion using user-managed replication. Only populated if the parent Secret has a user-managed replication policy. # Describes the replication status of a SecretVersion with user-managed replication. Only populated if the parent Secret has a user-managed replication policy.
      &quot;replicas&quot;: [ # Output only. The list of replica statuses for the SecretVersion.
        { # Describes the status of a user-managed replica for the SecretVersion.
          &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
            &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
          },
          &quot;location&quot;: &quot;A String&quot;, # Output only. The canonical ID of the replica location. For example: `&quot;us-east1&quot;`.
        },
      ],
    },
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the SecretVersion.
}</pre>
</div>

<div class="method">
    <code class="details" id="disable">disable(name, body=None, x__xgafv=None)</code>
  <pre>Disables a SecretVersion. Sets the state of the SecretVersion to DISABLED.

Args:
  name: string, Required. The resource name of the SecretVersion to disable in the format `projects/*/secrets/*/versions/*`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for SecretManagerService.DisableSecretVersion.
}

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

Returns:
  An object of the form:

    { # A secret version resource in the Secret Manager API.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the SecretVersion was created.
  &quot;destroyTime&quot;: &quot;A String&quot;, # Output only. The time this SecretVersion was destroyed. Only present if state is DESTROYED.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. SecretVersion IDs in a Secret start at 1 and are incremented for each subsequent version of the secret.
  &quot;replicationStatus&quot;: { # The replication status of a SecretVersion. # The replication status of the SecretVersion.
    &quot;automatic&quot;: { # The replication status of a SecretVersion using automatic replication. Only populated if the parent Secret has an automatic replication policy. # Describes the replication status of a SecretVersion with automatic replication. Only populated if the parent Secret has an automatic replication policy.
      &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
        &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
      },
    },
    &quot;userManaged&quot;: { # The replication status of a SecretVersion using user-managed replication. Only populated if the parent Secret has a user-managed replication policy. # Describes the replication status of a SecretVersion with user-managed replication. Only populated if the parent Secret has a user-managed replication policy.
      &quot;replicas&quot;: [ # Output only. The list of replica statuses for the SecretVersion.
        { # Describes the status of a user-managed replica for the SecretVersion.
          &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
            &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
          },
          &quot;location&quot;: &quot;A String&quot;, # Output only. The canonical ID of the replica location. For example: `&quot;us-east1&quot;`.
        },
      ],
    },
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the SecretVersion.
}</pre>
</div>

<div class="method">
    <code class="details" id="enable">enable(name, body=None, x__xgafv=None)</code>
  <pre>Enables a SecretVersion. Sets the state of the SecretVersion to ENABLED.

Args:
  name: string, Required. The resource name of the SecretVersion to enable in the format `projects/*/secrets/*/versions/*`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for SecretManagerService.EnableSecretVersion.
}

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

Returns:
  An object of the form:

    { # A secret version resource in the Secret Manager API.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the SecretVersion was created.
  &quot;destroyTime&quot;: &quot;A String&quot;, # Output only. The time this SecretVersion was destroyed. Only present if state is DESTROYED.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. SecretVersion IDs in a Secret start at 1 and are incremented for each subsequent version of the secret.
  &quot;replicationStatus&quot;: { # The replication status of a SecretVersion. # The replication status of the SecretVersion.
    &quot;automatic&quot;: { # The replication status of a SecretVersion using automatic replication. Only populated if the parent Secret has an automatic replication policy. # Describes the replication status of a SecretVersion with automatic replication. Only populated if the parent Secret has an automatic replication policy.
      &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
        &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
      },
    },
    &quot;userManaged&quot;: { # The replication status of a SecretVersion using user-managed replication. Only populated if the parent Secret has a user-managed replication policy. # Describes the replication status of a SecretVersion with user-managed replication. Only populated if the parent Secret has a user-managed replication policy.
      &quot;replicas&quot;: [ # Output only. The list of replica statuses for the SecretVersion.
        { # Describes the status of a user-managed replica for the SecretVersion.
          &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
            &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
          },
          &quot;location&quot;: &quot;A String&quot;, # Output only. The canonical ID of the replica location. For example: `&quot;us-east1&quot;`.
        },
      ],
    },
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the SecretVersion.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets metadata for a SecretVersion. `projects/*/secrets/*/versions/latest` is an alias to the `latest` SecretVersion.

Args:
  name: string, Required. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. `projects/*/secrets/*/versions/latest` is an alias to the `latest` SecretVersion. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A secret version resource in the Secret Manager API.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the SecretVersion was created.
  &quot;destroyTime&quot;: &quot;A String&quot;, # Output only. The time this SecretVersion was destroyed. Only present if state is DESTROYED.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. SecretVersion IDs in a Secret start at 1 and are incremented for each subsequent version of the secret.
  &quot;replicationStatus&quot;: { # The replication status of a SecretVersion. # The replication status of the SecretVersion.
    &quot;automatic&quot;: { # The replication status of a SecretVersion using automatic replication. Only populated if the parent Secret has an automatic replication policy. # Describes the replication status of a SecretVersion with automatic replication. Only populated if the parent Secret has an automatic replication policy.
      &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
        &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
      },
    },
    &quot;userManaged&quot;: { # The replication status of a SecretVersion using user-managed replication. Only populated if the parent Secret has a user-managed replication policy. # Describes the replication status of a SecretVersion with user-managed replication. Only populated if the parent Secret has a user-managed replication policy.
      &quot;replicas&quot;: [ # Output only. The list of replica statuses for the SecretVersion.
        { # Describes the status of a user-managed replica for the SecretVersion.
          &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
            &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
          },
          &quot;location&quot;: &quot;A String&quot;, # Output only. The canonical ID of the replica location. For example: `&quot;us-east1&quot;`.
        },
      ],
    },
  },
  &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the SecretVersion.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists SecretVersions. This call does not return secret data.

Args:
  parent: string, Required. The resource name of the Secret associated with the SecretVersions to list, in the format `projects/*/secrets/*`. (required)
  pageSize: integer, Optional. The maximum number of results to be returned in a single page. If set to 0, the server decides the number of results to return. If the number is greater than 25000, it is capped at 25000.
  pageToken: string, Optional. Pagination token, returned earlier via ListSecretVersionsResponse.next_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 SecretManagerService.ListSecretVersions.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results. Pass this value in ListSecretVersionsRequest.page_token to retrieve the next page.
  &quot;totalSize&quot;: 42, # The total number of SecretVersions.
  &quot;versions&quot;: [ # The list of SecretVersions sorted in reverse by create_time (newest first).
    { # A secret version resource in the Secret Manager API.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the SecretVersion was created.
      &quot;destroyTime&quot;: &quot;A String&quot;, # Output only. The time this SecretVersion was destroyed. Only present if state is DESTROYED.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the SecretVersion in the format `projects/*/secrets/*/versions/*`. SecretVersion IDs in a Secret start at 1 and are incremented for each subsequent version of the secret.
      &quot;replicationStatus&quot;: { # The replication status of a SecretVersion. # The replication status of the SecretVersion.
        &quot;automatic&quot;: { # The replication status of a SecretVersion using automatic replication. Only populated if the parent Secret has an automatic replication policy. # Describes the replication status of a SecretVersion with automatic replication. Only populated if the parent Secret has an automatic replication policy.
          &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
            &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
          },
        },
        &quot;userManaged&quot;: { # The replication status of a SecretVersion using user-managed replication. Only populated if the parent Secret has a user-managed replication policy. # Describes the replication status of a SecretVersion with user-managed replication. Only populated if the parent Secret has a user-managed replication policy.
          &quot;replicas&quot;: [ # Output only. The list of replica statuses for the SecretVersion.
            { # Describes the status of a user-managed replica for the SecretVersion.
              &quot;customerManagedEncryption&quot;: { # Describes the status of customer-managed encryption. # Output only. The customer-managed encryption status of the SecretVersion. Only populated if customer-managed encryption is used.
                &quot;kmsKeyVersionName&quot;: &quot;A String&quot;, # Required. The resource name of the Cloud KMS CryptoKeyVersion used to encrypt the secret payload, in the following format: `projects/*/locations/*/keyRings/*/cryptoKeys/*/versions/*`.
              },
              &quot;location&quot;: &quot;A String&quot;, # Output only. The canonical ID of the replica location. For example: `&quot;us-east1&quot;`.
            },
          ],
        },
      },
      &quot;state&quot;: &quot;A String&quot;, # Output only. The current state of the SecretVersion.
    },
  ],
}</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>