<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_v1.html">Access Approval API</a> . <a href="accessapproval_v1.folders.html">folders</a> . <a href="accessapproval_v1.folders.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, filter=None, pageToken=None, pageSize=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;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;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;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;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
      &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
    },
    &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;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;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;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;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.
    },
  }</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;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;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;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;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
      &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
    },
    &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;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;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;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;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.
    },
  }</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;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;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;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;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
      &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
    },
    &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;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;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;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;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.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageToken=None, pageSize=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)
  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;
  pageToken: string, A token identifying the page of results to return.
  pageSize: integer, Requested page size.
  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;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more.
    &quot;approvalRequests&quot;: [ # Approval request details.
      { # A request for the customer to approve access to a resource.
        &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;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;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;approveTime&quot;: &quot;A String&quot;, # The time at which approval was granted.
          &quot;expireTime&quot;: &quot;A String&quot;, # The time at which the approval expires.
        },
        &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;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;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;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;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.
        },
      },
    ],
  }</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>