<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="script_v1.html">Apps Script API</a> . <a href="script_v1.processes.html">processes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(userProcessFilter_projectName=None, pageSize=None, userProcessFilter_startTime=None, userProcessFilter_types=None, userProcessFilter_scriptId=None, userProcessFilter_endTime=None, userProcessFilter_functionName=None, userProcessFilter_deploymentId=None, userProcessFilter_statuses=None, userProcessFilter_userAccessLevels=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List information about processes made by or on behalf of a user,</p>
<p class="toc_element">
  <code><a href="#listScriptProcesses">listScriptProcesses(scriptProcessFilter_startTime=None, pageSize=None, scriptProcessFilter_functionName=None, scriptId=None, scriptProcessFilter_types=None, scriptProcessFilter_userAccessLevels=None, scriptProcessFilter_deploymentId=None, scriptProcessFilter_statuses=None, scriptProcessFilter_endTime=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List information about a script's executed processes, such as process type</p>
<p class="toc_element">
  <code><a href="#listScriptProcesses_next">listScriptProcesses_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="#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="list">list(userProcessFilter_projectName=None, pageSize=None, userProcessFilter_startTime=None, userProcessFilter_types=None, userProcessFilter_scriptId=None, userProcessFilter_endTime=None, userProcessFilter_functionName=None, userProcessFilter_deploymentId=None, userProcessFilter_statuses=None, userProcessFilter_userAccessLevels=None, pageToken=None, x__xgafv=None)</code>
  <pre>List information about processes made by or on behalf of a user,
such as process type and current status.

Args:
  userProcessFilter_projectName: string, Optional field used to limit returned processes to those originating from
projects with project names containing a specific string.
  pageSize: integer, The maximum number of returned processes per page of results. Defaults to
50.
  userProcessFilter_startTime: string, Optional field used to limit returned processes to those that were
started on or after the given timestamp.
  userProcessFilter_types: string, Optional field used to limit returned processes to those having one of
the specified process types. (repeated)
  userProcessFilter_scriptId: string, Optional field used to limit returned processes to those originating from
projects with a specific script ID.
  userProcessFilter_endTime: string, Optional field used to limit returned processes to those that completed
on or before the given timestamp.
  userProcessFilter_functionName: string, Optional field used to limit returned processes to those originating from
a script function with the given function name.
  userProcessFilter_deploymentId: string, Optional field used to limit returned processes to those originating from
projects with a specific deployment ID.
  userProcessFilter_statuses: string, Optional field used to limit returned processes to those having one of
the specified process statuses. (repeated)
  userProcessFilter_userAccessLevels: string, Optional field used to limit returned processes to those having one of
the specified user access levels. (repeated)
  pageToken: string, The token for continuing a previous list request on the next page. This
should be set to the value of `nextPageToken` from a previous response.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response with the list of
      # Process resources.
    &quot;processes&quot;: [ # List of processes matching request parameters.
      { # Representation of a single script process execution that was started from
          # the script editor, a trigger, an application, or using the Apps Script API.
          # This is distinct from the `Operation`
          # resource, which only represents executions started via the Apps Script API.
        &quot;processStatus&quot;: &quot;A String&quot;, # The executions status.
        &quot;userAccessLevel&quot;: &quot;A String&quot;, # The executing users access level to the script.
        &quot;projectName&quot;: &quot;A String&quot;, # Name of the script being executed.
        &quot;startTime&quot;: &quot;A String&quot;, # Time the execution started.
        &quot;functionName&quot;: &quot;A String&quot;, # Name of the function the started the execution.
        &quot;duration&quot;: &quot;A String&quot;, # Duration the execution spent executing.
        &quot;processType&quot;: &quot;A String&quot;, # The executions type.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token for the next page of results. If empty, there are no more pages
        # remaining.
  }</pre>
</div>

<div class="method">
    <code class="details" id="listScriptProcesses">listScriptProcesses(scriptProcessFilter_startTime=None, pageSize=None, scriptProcessFilter_functionName=None, scriptId=None, scriptProcessFilter_types=None, scriptProcessFilter_userAccessLevels=None, scriptProcessFilter_deploymentId=None, scriptProcessFilter_statuses=None, scriptProcessFilter_endTime=None, pageToken=None, x__xgafv=None)</code>
  <pre>List information about a script&#x27;s executed processes, such as process type
and current status.

Args:
  scriptProcessFilter_startTime: string, Optional field used to limit returned processes to those that were
started on or after the given timestamp.
  pageSize: integer, The maximum number of returned processes per page of results. Defaults to
50.
  scriptProcessFilter_functionName: string, Optional field used to limit returned processes to those originating from
a script function with the given function name.
  scriptId: string, The script ID of the project whose processes are listed.
  scriptProcessFilter_types: string, Optional field used to limit returned processes to those having one of
the specified process types. (repeated)
  scriptProcessFilter_userAccessLevels: string, Optional field used to limit returned processes to those having one of
the specified user access levels. (repeated)
  scriptProcessFilter_deploymentId: string, Optional field used to limit returned processes to those originating from
projects with a specific deployment ID.
  scriptProcessFilter_statuses: string, Optional field used to limit returned processes to those having one of
the specified process statuses. (repeated)
  scriptProcessFilter_endTime: string, Optional field used to limit returned processes to those that completed
on or before the given timestamp.
  pageToken: string, The token for continuing a previous list request on the next page. This
should be set to the value of `nextPageToken` from a previous response.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response with the list of
      # Process resources.
    &quot;processes&quot;: [ # List of processes matching request parameters.
      { # Representation of a single script process execution that was started from
          # the script editor, a trigger, an application, or using the Apps Script API.
          # This is distinct from the `Operation`
          # resource, which only represents executions started via the Apps Script API.
        &quot;processStatus&quot;: &quot;A String&quot;, # The executions status.
        &quot;userAccessLevel&quot;: &quot;A String&quot;, # The executing users access level to the script.
        &quot;projectName&quot;: &quot;A String&quot;, # Name of the script being executed.
        &quot;startTime&quot;: &quot;A String&quot;, # Time the execution started.
        &quot;functionName&quot;: &quot;A String&quot;, # Name of the function the started the execution.
        &quot;duration&quot;: &quot;A String&quot;, # Duration the execution spent executing.
        &quot;processType&quot;: &quot;A String&quot;, # The executions type.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token for the next page of results. If empty, there are no more pages
        # remaining.
  }</pre>
</div>

<div class="method">
    <code class="details" id="listScriptProcesses_next">listScriptProcesses_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="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>