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

<div class="method">
    <code class="details" id="list">list(userProcessFilter_endTime=None, userProcessFilter_startTime=None, userProcessFilter_projectName=None, userProcessFilter_deploymentId=None, userProcessFilter_scriptId=None, userProcessFilter_functionName=None, pageToken=None, pageSize=None, userProcessFilter_types=None, userProcessFilter_statuses=None, userProcessFilter_userAccessLevels=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_endTime: string, Optional field used to limit returned processes to those that completed on or before the given timestamp.
  userProcessFilter_startTime: string, Optional field used to limit returned processes to those that were started on or after the given timestamp.
  userProcessFilter_projectName: string, Optional field used to limit returned processes to those originating from projects with project names containing a specific string.
  userProcessFilter_deploymentId: string, Optional field used to limit returned processes to those originating from projects with a specific deployment ID.
  userProcessFilter_scriptId: string, Optional field used to limit returned processes to those originating from projects with a specific script ID.
  userProcessFilter_functionName: string, Optional field used to limit returned processes to those originating from a script function with the given function name.
  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.
  pageSize: integer, The maximum number of returned processes per page of results. Defaults to 50.
  userProcessFilter_types: string, Optional field used to limit returned processes to those having one of the specified process types. (repeated)
    Allowed values
      PROCESS_TYPE_UNSPECIFIED - Unspecified type.
      ADD_ON - The process was started from an add-on entry point.
      EXECUTION_API - The process was started using the Apps Script API.
      TIME_DRIVEN - The process was started from a time-based trigger.
      TRIGGER - The process was started from an event-based trigger.
      WEBAPP - The process was started from a web app entry point.
      EDITOR - The process was started using the Apps Script IDE.
      SIMPLE_TRIGGER - The process was started from a G Suite simple trigger.
      MENU - The process was started from a G Suite menu item.
      BATCH_TASK - The process was started as a task in a batch job.
  userProcessFilter_statuses: string, Optional field used to limit returned processes to those having one of the specified process statuses. (repeated)
    Allowed values
      PROCESS_STATUS_UNSPECIFIED - Unspecified status.
      RUNNING - The process is currently running.
      PAUSED - The process has paused.
      COMPLETED - The process has completed.
      CANCELED - The process was cancelled.
      FAILED - The process failed.
      TIMED_OUT - The process timed out.
      UNKNOWN - Process status unknown.
      DELAYED - The process is delayed, waiting for quota.
  userProcessFilter_userAccessLevels: string, Optional field used to limit returned processes to those having one of the specified user access levels. (repeated)
    Allowed values
      USER_ACCESS_LEVEL_UNSPECIFIED - User access level unspecified
      NONE - The user has no access.
      READ - The user has read-only access.
      WRITE - The user has write access.
      OWNER - The user is an owner.
  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;projectName&quot;: &quot;A String&quot;, # Name of the script being executed.
        &quot;duration&quot;: &quot;A String&quot;, # Duration the execution spent executing.
        &quot;processStatus&quot;: &quot;A String&quot;, # The executions status.
        &quot;functionName&quot;: &quot;A String&quot;, # Name of the function the started the execution.
        &quot;startTime&quot;: &quot;A String&quot;, # Time the execution started.
        &quot;processType&quot;: &quot;A String&quot;, # The executions type.
        &quot;userAccessLevel&quot;: &quot;A String&quot;, # The executing users access level to the script.
      },
    ],
    &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_statuses=None, scriptProcessFilter_types=None, pageSize=None, scriptProcessFilter_functionName=None, pageToken=None, scriptProcessFilter_endTime=None, scriptProcessFilter_startTime=None, scriptProcessFilter_userAccessLevels=None, scriptProcessFilter_deploymentId=None, scriptId=None, x__xgafv=None)</code>
  <pre>List information about a script&#x27;s executed processes, such as process type and current status.

Args:
  scriptProcessFilter_statuses: string, Optional field used to limit returned processes to those having one of the specified process statuses. (repeated)
    Allowed values
      PROCESS_STATUS_UNSPECIFIED - Unspecified status.
      RUNNING - The process is currently running.
      PAUSED - The process has paused.
      COMPLETED - The process has completed.
      CANCELED - The process was cancelled.
      FAILED - The process failed.
      TIMED_OUT - The process timed out.
      UNKNOWN - Process status unknown.
      DELAYED - The process is delayed, waiting for quota.
  scriptProcessFilter_types: string, Optional field used to limit returned processes to those having one of the specified process types. (repeated)
    Allowed values
      PROCESS_TYPE_UNSPECIFIED - Unspecified type.
      ADD_ON - The process was started from an add-on entry point.
      EXECUTION_API - The process was started using the Apps Script API.
      TIME_DRIVEN - The process was started from a time-based trigger.
      TRIGGER - The process was started from an event-based trigger.
      WEBAPP - The process was started from a web app entry point.
      EDITOR - The process was started using the Apps Script IDE.
      SIMPLE_TRIGGER - The process was started from a G Suite simple trigger.
      MENU - The process was started from a G Suite menu item.
      BATCH_TASK - The process was started as a task in a batch job.
  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.
  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.
  scriptProcessFilter_endTime: string, Optional field used to limit returned processes to those that completed on or before the given timestamp.
  scriptProcessFilter_startTime: string, Optional field used to limit returned processes to those that were started on or after the given timestamp.
  scriptProcessFilter_userAccessLevels: string, Optional field used to limit returned processes to those having one of the specified user access levels. (repeated)
    Allowed values
      USER_ACCESS_LEVEL_UNSPECIFIED - User access level unspecified
      NONE - The user has no access.
      READ - The user has read-only access.
      WRITE - The user has write access.
      OWNER - The user is an owner.
  scriptProcessFilter_deploymentId: string, Optional field used to limit returned processes to those originating from projects with a specific deployment ID.
  scriptId: string, The script ID of the project whose processes are listed.
  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;nextPageToken&quot;: &quot;A String&quot;, # Token for the next page of results. If empty, there are no more pages remaining.
    &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;projectName&quot;: &quot;A String&quot;, # Name of the script being executed.
        &quot;duration&quot;: &quot;A String&quot;, # Duration the execution spent executing.
        &quot;processStatus&quot;: &quot;A String&quot;, # The executions status.
        &quot;functionName&quot;: &quot;A String&quot;, # Name of the function the started the execution.
        &quot;startTime&quot;: &quot;A String&quot;, # Time the execution started.
        &quot;processType&quot;: &quot;A String&quot;, # The executions type.
        &quot;userAccessLevel&quot;: &quot;A String&quot;, # The executing users access level to the script.
      },
    ],
  }</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>