<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(pageSize=None, pageToken=None, userProcessFilter_deploymentId=None, userProcessFilter_endTime=None, userProcessFilter_functionName=None, userProcessFilter_projectName=None, userProcessFilter_scriptId=None, userProcessFilter_startTime=None, userProcessFilter_statuses=None, userProcessFilter_types=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(pageSize=None, pageToken=None, scriptId=None, scriptProcessFilter_deploymentId=None, scriptProcessFilter_endTime=None, scriptProcessFilter_functionName=None, scriptProcessFilter_startTime=None, scriptProcessFilter_statuses=None, scriptProcessFilter_types=None, scriptProcessFilter_userAccessLevels=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()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</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(pageSize=None, pageToken=None, userProcessFilter_deploymentId=None, userProcessFilter_endTime=None, userProcessFilter_functionName=None, userProcessFilter_projectName=None, userProcessFilter_scriptId=None, userProcessFilter_startTime=None, userProcessFilter_statuses=None, userProcessFilter_types=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:
  pageSize: integer, The maximum number of returned processes per page of results. Defaults to 50.
  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.
  userProcessFilter_deploymentId: string, Optional field used to limit returned processes to those originating from projects with a specific deployment 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_projectName: string, Optional field used to limit returned processes to those originating from projects with project names containing a specific string.
  userProcessFilter_scriptId: string, Optional field used to limit returned processes to those originating from projects with a specific script ID.
  userProcessFilter_startTime: string, Optional field used to limit returned processes to those that were started on or after the given timestamp.
  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.
      EXECUTION_DISABLED - AppsScript executions are disabled by Admin.
  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_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;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;duration&quot;: &quot;A String&quot;, # Duration the execution spent executing.
      &quot;functionName&quot;: &quot;A String&quot;, # Name of the function the started the execution.
      &quot;processStatus&quot;: &quot;A String&quot;, # The executions status.
      &quot;processType&quot;: &quot;A String&quot;, # The executions type.
      &quot;projectName&quot;: &quot;A String&quot;, # Name of the script being executed.
      &quot;runtimeVersion&quot;: &quot;A String&quot;, # Which version of maestro to use to execute the script.
      &quot;startTime&quot;: &quot;A String&quot;, # Time the execution started.
      &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">listScriptProcesses(pageSize=None, pageToken=None, scriptId=None, scriptProcessFilter_deploymentId=None, scriptProcessFilter_endTime=None, scriptProcessFilter_functionName=None, scriptProcessFilter_startTime=None, scriptProcessFilter_statuses=None, scriptProcessFilter_types=None, scriptProcessFilter_userAccessLevels=None, x__xgafv=None)</code>
  <pre>List information about a script&#x27;s executed processes, such as process type and current status.

Args:
  pageSize: integer, The maximum number of returned processes per page of results. Defaults to 50.
  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.
  scriptId: string, The script ID of the project whose processes are listed.
  scriptProcessFilter_deploymentId: string, Optional field used to limit returned processes to those originating from projects with a specific deployment ID.
  scriptProcessFilter_endTime: string, Optional field used to limit returned processes to those that completed on or before the given timestamp.
  scriptProcessFilter_functionName: string, Optional field used to limit returned processes to those originating from a script function with the given function name.
  scriptProcessFilter_startTime: string, Optional field used to limit returned processes to those that were started on or after the given timestamp.
  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.
      EXECUTION_DISABLED - AppsScript executions are disabled by Admin.
  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.
  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.
  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;duration&quot;: &quot;A String&quot;, # Duration the execution spent executing.
      &quot;functionName&quot;: &quot;A String&quot;, # Name of the function the started the execution.
      &quot;processStatus&quot;: &quot;A String&quot;, # The executions status.
      &quot;processType&quot;: &quot;A String&quot;, # The executions type.
      &quot;projectName&quot;: &quot;A String&quot;, # Name of the script being executed.
      &quot;runtimeVersion&quot;: &quot;A String&quot;, # Which version of maestro to use to execute the script.
      &quot;startTime&quot;: &quot;A String&quot;, # Time the execution started.
      &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()</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()</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>