<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="accessapproval_v1beta1.html">Access Approval API</a> . <a href="accessapproval_v1beta1.projects.html">projects</a> . <a href="accessapproval_v1beta1.projects.approvalRequests.html">approvalRequests</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#approve">approve(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Approves a request and returns the updated ApprovalRequest.</p>
<p class="toc_element">
  <code><a href="#dismiss">dismiss(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Dismisses a request. Returns the updated ApprovalRequest.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an approval request. Returns NOT_FOUND if the request does not exist.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, filter=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists approval requests associated with a project, folder, or organization.</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="approve">approve(name, body=None, x__xgafv=None)</code>
  <pre>Approves a request and returns the updated ApprovalRequest.

Returns NOT_FOUND if the request does not exist. Returns
FAILED_PRECONDITION if the request exists but is not in a pending state.

Args:
  name: string, Name of the approval request to approve. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to approve an ApprovalRequest.
    &quot;expireTime&quot;: &quot;A String&quot;, # The expiration time of this approval.
  }

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

Returns:
  An object of the form:

    { # A request for the customer to approve access to a resource.
    &quot;requestTime&quot;: &quot;A String&quot;, # The time at which approval was requested.
    &quot;requestedLocations&quot;: { # Home office and physical location of the principal. # The locations for which approval is being requested.
      &quot;principalPhysicalLocationCountry&quot;: &quot;A String&quot;, # Physical location of the principal at the time of the access. A
          # two-letter country code (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or
          # a region code. In some limited situations Google systems may refer refer to
          # a region code instead of a country code.
          # Possible Region Codes:
          # &lt;ol&gt;
          #   &lt;li&gt;ASI: Asia&lt;/li&gt;
          #   &lt;li&gt;EUR: Europe&lt;/li&gt;
          #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
          #   &lt;li&gt;AFR: Africa&lt;/li&gt;
          #   &lt;li&gt;NAM: North America&lt;/li&gt;
          #   &lt;li&gt;SAM: South America&lt;/li&gt;
          #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
          #   &lt;li&gt;ANY: Any location&lt;/li&gt;
          # &lt;/ol&gt;
      &quot;principalOfficeCountry&quot;: &quot;A String&quot;, # The &quot;home office&quot; location of the principal. A two-letter country code
          # (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or a region code. In some
          # limited situations Google systems may refer refer to a region code instead
          # of a country code.
          # Possible Region Codes:
          # &lt;ol&gt;
          #   &lt;li&gt;ASI: Asia&lt;/li&gt;
          #   &lt;li&gt;EUR: Europe&lt;/li&gt;
          #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
          #   &lt;li&gt;AFR: Africa&lt;/li&gt;
          #   &lt;li&gt;NAM: North America&lt;/li&gt;
          #   &lt;li&gt;SAM: South America&lt;/li&gt;
          #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
          #   &lt;li&gt;ANY: Any location&lt;/li&gt;
          # &lt;/ol&gt;
    },
    &quot;dismiss&quot;: { # A decision that has been made to dismiss an approval request. # The request was dismissed.
      &quot;dismissTime&quot;: &quot;A String&quot;, # The time at which the approval request was dismissed.
    },
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the request. Format is
        # &quot;{projects|folders|organizations}/{id}/approvalRequests/{approval_request_id}&quot;.
    &quot;requestedResourceName&quot;: &quot;A String&quot;, # The resource for which approval is being requested. The format of the
        # resource name is defined at
        # https://cloud.google.com/apis/design/resource_names. The resource name here
        # may either be a &quot;full&quot; resource name (e.g.
        # &quot;//library.googleapis.com/shelves/shelf1/books/book2&quot;) or a &quot;relative&quot;
        # resource name (e.g. &quot;shelves/shelf1/books/book2&quot;) as described in the
        # resource name specification.
    &quot;requestedExpiration&quot;: &quot;A String&quot;, # The requested expiration for the approval. If the request is approved,
        # access will be granted from the time of approval until the expiration time.
    &quot;approve&quot;: { # A decision that has been made to approve access to a resource. # Access was approved.
      &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
      &quot;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
    },
    &quot;requestedResourceProperties&quot;: { # The properties associated with the resource of the request. # Properties related to the resource represented by requested_resource_name.
      &quot;excludesDescendants&quot;: True or False, # Whether an approval will exclude the descendants of the resource being
          # requested.
    },
    &quot;requestedReason&quot;: { # The justification for which approval is being requested.
      &quot;type&quot;: &quot;A String&quot;, # Type of access justification.
      &quot;detail&quot;: &quot;A String&quot;, # More detail about certain reason types. See comments for each type above.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="dismiss">dismiss(name, body=None, x__xgafv=None)</code>
  <pre>Dismisses a request. Returns the updated ApprovalRequest.

NOTE: This does not deny access to the resource if another request has been
made and approved. It is equivalent in effect to ignoring the request
altogether.

Returns NOT_FOUND if the request does not exist.

Returns FAILED_PRECONDITION if the request exists but is not in a pending
state.

Args:
  name: string, Name of the ApprovalRequest to dismiss. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request to dismiss an approval request.
  }

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

Returns:
  An object of the form:

    { # A request for the customer to approve access to a resource.
    &quot;requestTime&quot;: &quot;A String&quot;, # The time at which approval was requested.
    &quot;requestedLocations&quot;: { # Home office and physical location of the principal. # The locations for which approval is being requested.
      &quot;principalPhysicalLocationCountry&quot;: &quot;A String&quot;, # Physical location of the principal at the time of the access. A
          # two-letter country code (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or
          # a region code. In some limited situations Google systems may refer refer to
          # a region code instead of a country code.
          # Possible Region Codes:
          # &lt;ol&gt;
          #   &lt;li&gt;ASI: Asia&lt;/li&gt;
          #   &lt;li&gt;EUR: Europe&lt;/li&gt;
          #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
          #   &lt;li&gt;AFR: Africa&lt;/li&gt;
          #   &lt;li&gt;NAM: North America&lt;/li&gt;
          #   &lt;li&gt;SAM: South America&lt;/li&gt;
          #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
          #   &lt;li&gt;ANY: Any location&lt;/li&gt;
          # &lt;/ol&gt;
      &quot;principalOfficeCountry&quot;: &quot;A String&quot;, # The &quot;home office&quot; location of the principal. A two-letter country code
          # (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or a region code. In some
          # limited situations Google systems may refer refer to a region code instead
          # of a country code.
          # Possible Region Codes:
          # &lt;ol&gt;
          #   &lt;li&gt;ASI: Asia&lt;/li&gt;
          #   &lt;li&gt;EUR: Europe&lt;/li&gt;
          #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
          #   &lt;li&gt;AFR: Africa&lt;/li&gt;
          #   &lt;li&gt;NAM: North America&lt;/li&gt;
          #   &lt;li&gt;SAM: South America&lt;/li&gt;
          #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
          #   &lt;li&gt;ANY: Any location&lt;/li&gt;
          # &lt;/ol&gt;
    },
    &quot;dismiss&quot;: { # A decision that has been made to dismiss an approval request. # The request was dismissed.
      &quot;dismissTime&quot;: &quot;A String&quot;, # The time at which the approval request was dismissed.
    },
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the request. Format is
        # &quot;{projects|folders|organizations}/{id}/approvalRequests/{approval_request_id}&quot;.
    &quot;requestedResourceName&quot;: &quot;A String&quot;, # The resource for which approval is being requested. The format of the
        # resource name is defined at
        # https://cloud.google.com/apis/design/resource_names. The resource name here
        # may either be a &quot;full&quot; resource name (e.g.
        # &quot;//library.googleapis.com/shelves/shelf1/books/book2&quot;) or a &quot;relative&quot;
        # resource name (e.g. &quot;shelves/shelf1/books/book2&quot;) as described in the
        # resource name specification.
    &quot;requestedExpiration&quot;: &quot;A String&quot;, # The requested expiration for the approval. If the request is approved,
        # access will be granted from the time of approval until the expiration time.
    &quot;approve&quot;: { # A decision that has been made to approve access to a resource. # Access was approved.
      &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
      &quot;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
    },
    &quot;requestedResourceProperties&quot;: { # The properties associated with the resource of the request. # Properties related to the resource represented by requested_resource_name.
      &quot;excludesDescendants&quot;: True or False, # Whether an approval will exclude the descendants of the resource being
          # requested.
    },
    &quot;requestedReason&quot;: { # The justification for which approval is being requested.
      &quot;type&quot;: &quot;A String&quot;, # Type of access justification.
      &quot;detail&quot;: &quot;A String&quot;, # More detail about certain reason types. See comments for each type above.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets an approval request. Returns NOT_FOUND if the request does not exist.

Args:
  name: string, Name of the approval request to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A request for the customer to approve access to a resource.
    &quot;requestTime&quot;: &quot;A String&quot;, # The time at which approval was requested.
    &quot;requestedLocations&quot;: { # Home office and physical location of the principal. # The locations for which approval is being requested.
      &quot;principalPhysicalLocationCountry&quot;: &quot;A String&quot;, # Physical location of the principal at the time of the access. A
          # two-letter country code (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or
          # a region code. In some limited situations Google systems may refer refer to
          # a region code instead of a country code.
          # Possible Region Codes:
          # &lt;ol&gt;
          #   &lt;li&gt;ASI: Asia&lt;/li&gt;
          #   &lt;li&gt;EUR: Europe&lt;/li&gt;
          #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
          #   &lt;li&gt;AFR: Africa&lt;/li&gt;
          #   &lt;li&gt;NAM: North America&lt;/li&gt;
          #   &lt;li&gt;SAM: South America&lt;/li&gt;
          #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
          #   &lt;li&gt;ANY: Any location&lt;/li&gt;
          # &lt;/ol&gt;
      &quot;principalOfficeCountry&quot;: &quot;A String&quot;, # The &quot;home office&quot; location of the principal. A two-letter country code
          # (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or a region code. In some
          # limited situations Google systems may refer refer to a region code instead
          # of a country code.
          # Possible Region Codes:
          # &lt;ol&gt;
          #   &lt;li&gt;ASI: Asia&lt;/li&gt;
          #   &lt;li&gt;EUR: Europe&lt;/li&gt;
          #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
          #   &lt;li&gt;AFR: Africa&lt;/li&gt;
          #   &lt;li&gt;NAM: North America&lt;/li&gt;
          #   &lt;li&gt;SAM: South America&lt;/li&gt;
          #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
          #   &lt;li&gt;ANY: Any location&lt;/li&gt;
          # &lt;/ol&gt;
    },
    &quot;dismiss&quot;: { # A decision that has been made to dismiss an approval request. # The request was dismissed.
      &quot;dismissTime&quot;: &quot;A String&quot;, # The time at which the approval request was dismissed.
    },
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the request. Format is
        # &quot;{projects|folders|organizations}/{id}/approvalRequests/{approval_request_id}&quot;.
    &quot;requestedResourceName&quot;: &quot;A String&quot;, # The resource for which approval is being requested. The format of the
        # resource name is defined at
        # https://cloud.google.com/apis/design/resource_names. The resource name here
        # may either be a &quot;full&quot; resource name (e.g.
        # &quot;//library.googleapis.com/shelves/shelf1/books/book2&quot;) or a &quot;relative&quot;
        # resource name (e.g. &quot;shelves/shelf1/books/book2&quot;) as described in the
        # resource name specification.
    &quot;requestedExpiration&quot;: &quot;A String&quot;, # The requested expiration for the approval. If the request is approved,
        # access will be granted from the time of approval until the expiration time.
    &quot;approve&quot;: { # A decision that has been made to approve access to a resource. # Access was approved.
      &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
      &quot;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
    },
    &quot;requestedResourceProperties&quot;: { # The properties associated with the resource of the request. # Properties related to the resource represented by requested_resource_name.
      &quot;excludesDescendants&quot;: True or False, # Whether an approval will exclude the descendants of the resource being
          # requested.
    },
    &quot;requestedReason&quot;: { # The justification for which approval is being requested.
      &quot;type&quot;: &quot;A String&quot;, # Type of access justification.
      &quot;detail&quot;: &quot;A String&quot;, # More detail about certain reason types. See comments for each type above.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, filter=None, x__xgafv=None)</code>
  <pre>Lists approval requests associated with a project, folder, or organization.
Approval requests can be filtered by state (pending, active, dismissed).
The order is reverse chronological.

Args:
  parent: string, The parent resource. This may be &quot;projects/{project_id}&quot;,
&quot;folders/{folder_id}&quot;, or &quot;organizations/{organization_id}&quot;. (required)
  pageToken: string, A token identifying the page of results to return.
  pageSize: integer, Requested page size.
  filter: string, A filter on the type of approval requests to retrieve. Must be one of the
following values:
&lt;ol&gt;
  &lt;li&gt;[not set]: Requests that are pending or have active approvals.&lt;/li&gt;
  &lt;li&gt;ALL: All requests.&lt;/li&gt;
  &lt;li&gt;PENDING: Only pending requests.&lt;/li&gt;
  &lt;li&gt;ACTIVE: Only active (i.e. currently approved) requests.&lt;/li&gt;
  &lt;li&gt;DISMISSED: Only dismissed (including expired) requests.&lt;/li&gt;
&lt;/ol&gt;
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response to listing of ApprovalRequest objects.
    &quot;approvalRequests&quot;: [ # Approval request details.
      { # A request for the customer to approve access to a resource.
        &quot;requestTime&quot;: &quot;A String&quot;, # The time at which approval was requested.
        &quot;requestedLocations&quot;: { # Home office and physical location of the principal. # The locations for which approval is being requested.
          &quot;principalPhysicalLocationCountry&quot;: &quot;A String&quot;, # Physical location of the principal at the time of the access. A
              # two-letter country code (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or
              # a region code. In some limited situations Google systems may refer refer to
              # a region code instead of a country code.
              # Possible Region Codes:
              # &lt;ol&gt;
              #   &lt;li&gt;ASI: Asia&lt;/li&gt;
              #   &lt;li&gt;EUR: Europe&lt;/li&gt;
              #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
              #   &lt;li&gt;AFR: Africa&lt;/li&gt;
              #   &lt;li&gt;NAM: North America&lt;/li&gt;
              #   &lt;li&gt;SAM: South America&lt;/li&gt;
              #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
              #   &lt;li&gt;ANY: Any location&lt;/li&gt;
              # &lt;/ol&gt;
          &quot;principalOfficeCountry&quot;: &quot;A String&quot;, # The &quot;home office&quot; location of the principal. A two-letter country code
              # (ISO 3166-1 alpha-2), such as &quot;US&quot;, &quot;DE&quot; or &quot;GB&quot; or a region code. In some
              # limited situations Google systems may refer refer to a region code instead
              # of a country code.
              # Possible Region Codes:
              # &lt;ol&gt;
              #   &lt;li&gt;ASI: Asia&lt;/li&gt;
              #   &lt;li&gt;EUR: Europe&lt;/li&gt;
              #   &lt;li&gt;OCE: Oceania&lt;/li&gt;
              #   &lt;li&gt;AFR: Africa&lt;/li&gt;
              #   &lt;li&gt;NAM: North America&lt;/li&gt;
              #   &lt;li&gt;SAM: South America&lt;/li&gt;
              #   &lt;li&gt;ANT: Antarctica&lt;/li&gt;
              #   &lt;li&gt;ANY: Any location&lt;/li&gt;
              # &lt;/ol&gt;
        },
        &quot;dismiss&quot;: { # A decision that has been made to dismiss an approval request. # The request was dismissed.
          &quot;dismissTime&quot;: &quot;A String&quot;, # The time at which the approval request was dismissed.
        },
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the request. Format is
            # &quot;{projects|folders|organizations}/{id}/approvalRequests/{approval_request_id}&quot;.
        &quot;requestedResourceName&quot;: &quot;A String&quot;, # The resource for which approval is being requested. The format of the
            # resource name is defined at
            # https://cloud.google.com/apis/design/resource_names. The resource name here
            # may either be a &quot;full&quot; resource name (e.g.
            # &quot;//library.googleapis.com/shelves/shelf1/books/book2&quot;) or a &quot;relative&quot;
            # resource name (e.g. &quot;shelves/shelf1/books/book2&quot;) as described in the
            # resource name specification.
        &quot;requestedExpiration&quot;: &quot;A String&quot;, # The requested expiration for the approval. If the request is approved,
            # access will be granted from the time of approval until the expiration time.
        &quot;approve&quot;: { # A decision that has been made to approve access to a resource. # Access was approved.
          &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
          &quot;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
        },
        &quot;requestedResourceProperties&quot;: { # The properties associated with the resource of the request. # Properties related to the resource represented by requested_resource_name.
          &quot;excludesDescendants&quot;: True or False, # Whether an approval will exclude the descendants of the resource being
              # requested.
        },
        &quot;requestedReason&quot;: { # The justification for which approval is being requested.
          &quot;type&quot;: &quot;A String&quot;, # Type of access justification.
          &quot;detail&quot;: &quot;A String&quot;, # More detail about certain reason types. See comments for each type above.
        },
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more.
  }</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>