<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="workflowexecutions_v1.html">Workflow Executions API</a> . <a href="workflowexecutions_v1.projects.html">projects</a> . <a href="workflowexecutions_v1.projects.locations.html">locations</a> . <a href="workflowexecutions_v1.projects.locations.workflows.html">workflows</a> . <a href="workflowexecutions_v1.projects.locations.workflows.executions.html">executions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#cancel">cancel(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Cancels an execution of the given name.</p>
<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="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new execution using the latest revision of the given workflow.</p>
<p class="toc_element">
  <code><a href="#get">get(name, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns an execution of the given name.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, view=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of executions which belong to the workflow with the given name. The method returns executions of all workflow revisions. Returned executions are ordered by their start time (newest first).</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="cancel">cancel(name, body=None, x__xgafv=None)</code>
  <pre>Cancels an execution of the given name.

Args:
  name: string, Required. Name of the execution to be cancelled. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution} (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the CancelExecution method.
}

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

Returns:
  An object of the form:

    { # A running instance of a [Workflow](/workflows/docs/reference/rest/v1/projects.locations.workflows).
  &quot;argument&quot;: &quot;A String&quot;, # Input parameters of the execution represented as a JSON string. The size limit is 32KB. *Note*: If you are using the REST API directly to run your workflow, you must escape any JSON string value of `argument`. Example: `&#x27;{&quot;argument&quot;:&quot;{\&quot;firstName\&quot;:\&quot;FIRST\&quot;,\&quot;lastName\&quot;:\&quot;LAST\&quot;}&quot;}&#x27;`
  &quot;callLogLevel&quot;: &quot;A String&quot;, # The call logging level associated to this execution.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. Marks the end of execution, successful or not.
  &quot;error&quot;: { # Error describes why the execution was abnormally terminated. # Output only. The error which caused the execution to finish prematurely. The value is only present if the execution&#x27;s state is `FAILED` or `CANCELLED`.
    &quot;context&quot;: &quot;A String&quot;, # Human-readable stack trace string.
    &quot;payload&quot;: &quot;A String&quot;, # Error message and data returned represented as a JSON string.
    &quot;stackTrace&quot;: { # A collection of stack elements (frames) where an error occurred. # Stack trace with detailed information of where error was generated.
      &quot;elements&quot;: [ # An array of stack elements.
        { # A single stack element (frame) where an error occurred.
          &quot;position&quot;: { # Position contains source position information about the stack trace element such as line number, column number and length of the code block in bytes. # The source position information of the stack trace element.
            &quot;column&quot;: &quot;A String&quot;, # The source code column position (of the line) the current instruction was generated from.
            &quot;length&quot;: &quot;A String&quot;, # The number of bytes of source code making up this stack trace element.
            &quot;line&quot;: &quot;A String&quot;, # The source code line number the current instruction was generated from.
          },
          &quot;routine&quot;: &quot;A String&quot;, # The routine where the error occurred.
          &quot;step&quot;: &quot;A String&quot;, # The step the error occurred at.
        },
      ],
    },
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the execution. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution}
  &quot;result&quot;: &quot;A String&quot;, # Output only. Output of the execution represented as a JSON string. The value can only be present if the execution&#x27;s state is `SUCCEEDED`.
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. Marks the beginning of execution.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the execution.
  &quot;workflowRevisionId&quot;: &quot;A String&quot;, # Output only. Revision of the workflow this execution is using.
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new execution using the latest revision of the given workflow.

Args:
  parent: string, Required. Name of the workflow for which an execution should be created. Format: projects/{project}/locations/{location}/workflows/{workflow} The latest revision of the workflow will be used. (required)
  body: object, The request body.
    The object takes the form of:

{ # A running instance of a [Workflow](/workflows/docs/reference/rest/v1/projects.locations.workflows).
  &quot;argument&quot;: &quot;A String&quot;, # Input parameters of the execution represented as a JSON string. The size limit is 32KB. *Note*: If you are using the REST API directly to run your workflow, you must escape any JSON string value of `argument`. Example: `&#x27;{&quot;argument&quot;:&quot;{\&quot;firstName\&quot;:\&quot;FIRST\&quot;,\&quot;lastName\&quot;:\&quot;LAST\&quot;}&quot;}&#x27;`
  &quot;callLogLevel&quot;: &quot;A String&quot;, # The call logging level associated to this execution.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. Marks the end of execution, successful or not.
  &quot;error&quot;: { # Error describes why the execution was abnormally terminated. # Output only. The error which caused the execution to finish prematurely. The value is only present if the execution&#x27;s state is `FAILED` or `CANCELLED`.
    &quot;context&quot;: &quot;A String&quot;, # Human-readable stack trace string.
    &quot;payload&quot;: &quot;A String&quot;, # Error message and data returned represented as a JSON string.
    &quot;stackTrace&quot;: { # A collection of stack elements (frames) where an error occurred. # Stack trace with detailed information of where error was generated.
      &quot;elements&quot;: [ # An array of stack elements.
        { # A single stack element (frame) where an error occurred.
          &quot;position&quot;: { # Position contains source position information about the stack trace element such as line number, column number and length of the code block in bytes. # The source position information of the stack trace element.
            &quot;column&quot;: &quot;A String&quot;, # The source code column position (of the line) the current instruction was generated from.
            &quot;length&quot;: &quot;A String&quot;, # The number of bytes of source code making up this stack trace element.
            &quot;line&quot;: &quot;A String&quot;, # The source code line number the current instruction was generated from.
          },
          &quot;routine&quot;: &quot;A String&quot;, # The routine where the error occurred.
          &quot;step&quot;: &quot;A String&quot;, # The step the error occurred at.
        },
      ],
    },
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the execution. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution}
  &quot;result&quot;: &quot;A String&quot;, # Output only. Output of the execution represented as a JSON string. The value can only be present if the execution&#x27;s state is `SUCCEEDED`.
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. Marks the beginning of execution.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the execution.
  &quot;workflowRevisionId&quot;: &quot;A String&quot;, # Output only. Revision of the workflow this execution is using.
}

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

Returns:
  An object of the form:

    { # A running instance of a [Workflow](/workflows/docs/reference/rest/v1/projects.locations.workflows).
  &quot;argument&quot;: &quot;A String&quot;, # Input parameters of the execution represented as a JSON string. The size limit is 32KB. *Note*: If you are using the REST API directly to run your workflow, you must escape any JSON string value of `argument`. Example: `&#x27;{&quot;argument&quot;:&quot;{\&quot;firstName\&quot;:\&quot;FIRST\&quot;,\&quot;lastName\&quot;:\&quot;LAST\&quot;}&quot;}&#x27;`
  &quot;callLogLevel&quot;: &quot;A String&quot;, # The call logging level associated to this execution.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. Marks the end of execution, successful or not.
  &quot;error&quot;: { # Error describes why the execution was abnormally terminated. # Output only. The error which caused the execution to finish prematurely. The value is only present if the execution&#x27;s state is `FAILED` or `CANCELLED`.
    &quot;context&quot;: &quot;A String&quot;, # Human-readable stack trace string.
    &quot;payload&quot;: &quot;A String&quot;, # Error message and data returned represented as a JSON string.
    &quot;stackTrace&quot;: { # A collection of stack elements (frames) where an error occurred. # Stack trace with detailed information of where error was generated.
      &quot;elements&quot;: [ # An array of stack elements.
        { # A single stack element (frame) where an error occurred.
          &quot;position&quot;: { # Position contains source position information about the stack trace element such as line number, column number and length of the code block in bytes. # The source position information of the stack trace element.
            &quot;column&quot;: &quot;A String&quot;, # The source code column position (of the line) the current instruction was generated from.
            &quot;length&quot;: &quot;A String&quot;, # The number of bytes of source code making up this stack trace element.
            &quot;line&quot;: &quot;A String&quot;, # The source code line number the current instruction was generated from.
          },
          &quot;routine&quot;: &quot;A String&quot;, # The routine where the error occurred.
          &quot;step&quot;: &quot;A String&quot;, # The step the error occurred at.
        },
      ],
    },
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the execution. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution}
  &quot;result&quot;: &quot;A String&quot;, # Output only. Output of the execution represented as a JSON string. The value can only be present if the execution&#x27;s state is `SUCCEEDED`.
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. Marks the beginning of execution.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the execution.
  &quot;workflowRevisionId&quot;: &quot;A String&quot;, # Output only. Revision of the workflow this execution is using.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, view=None, x__xgafv=None)</code>
  <pre>Returns an execution of the given name.

Args:
  name: string, Required. Name of the execution to be retrieved. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution} (required)
  view: string, Optional. A view defining which fields should be filled in the returned execution. The API will default to the FULL view.
    Allowed values
      EXECUTION_VIEW_UNSPECIFIED - The default / unset value.
      BASIC - Includes only basic metadata about the execution. Following fields are returned: name, start_time, end_time, state and workflow_revision_id.
      FULL - Includes all data.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A running instance of a [Workflow](/workflows/docs/reference/rest/v1/projects.locations.workflows).
  &quot;argument&quot;: &quot;A String&quot;, # Input parameters of the execution represented as a JSON string. The size limit is 32KB. *Note*: If you are using the REST API directly to run your workflow, you must escape any JSON string value of `argument`. Example: `&#x27;{&quot;argument&quot;:&quot;{\&quot;firstName\&quot;:\&quot;FIRST\&quot;,\&quot;lastName\&quot;:\&quot;LAST\&quot;}&quot;}&#x27;`
  &quot;callLogLevel&quot;: &quot;A String&quot;, # The call logging level associated to this execution.
  &quot;endTime&quot;: &quot;A String&quot;, # Output only. Marks the end of execution, successful or not.
  &quot;error&quot;: { # Error describes why the execution was abnormally terminated. # Output only. The error which caused the execution to finish prematurely. The value is only present if the execution&#x27;s state is `FAILED` or `CANCELLED`.
    &quot;context&quot;: &quot;A String&quot;, # Human-readable stack trace string.
    &quot;payload&quot;: &quot;A String&quot;, # Error message and data returned represented as a JSON string.
    &quot;stackTrace&quot;: { # A collection of stack elements (frames) where an error occurred. # Stack trace with detailed information of where error was generated.
      &quot;elements&quot;: [ # An array of stack elements.
        { # A single stack element (frame) where an error occurred.
          &quot;position&quot;: { # Position contains source position information about the stack trace element such as line number, column number and length of the code block in bytes. # The source position information of the stack trace element.
            &quot;column&quot;: &quot;A String&quot;, # The source code column position (of the line) the current instruction was generated from.
            &quot;length&quot;: &quot;A String&quot;, # The number of bytes of source code making up this stack trace element.
            &quot;line&quot;: &quot;A String&quot;, # The source code line number the current instruction was generated from.
          },
          &quot;routine&quot;: &quot;A String&quot;, # The routine where the error occurred.
          &quot;step&quot;: &quot;A String&quot;, # The step the error occurred at.
        },
      ],
    },
  },
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the execution. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution}
  &quot;result&quot;: &quot;A String&quot;, # Output only. Output of the execution represented as a JSON string. The value can only be present if the execution&#x27;s state is `SUCCEEDED`.
  &quot;startTime&quot;: &quot;A String&quot;, # Output only. Marks the beginning of execution.
  &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the execution.
  &quot;workflowRevisionId&quot;: &quot;A String&quot;, # Output only. Revision of the workflow this execution is using.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, view=None, x__xgafv=None)</code>
  <pre>Returns a list of executions which belong to the workflow with the given name. The method returns executions of all workflow revisions. Returned executions are ordered by their start time (newest first).

Args:
  parent: string, Required. Name of the workflow for which the executions should be listed. Format: projects/{project}/locations/{location}/workflows/{workflow} (required)
  pageSize: integer, Maximum number of executions to return per call. Max supported value depends on the selected Execution view: it&#x27;s 10000 for BASIC and 100 for FULL. The default value used if the field is not specified is 100, regardless of the selected view. Values greater than the max value will be coerced down to it.
  pageToken: string, A page token, received from a previous `ListExecutions` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListExecutions` must match the call that provided the page token.
  view: string, Optional. A view defining which fields should be filled in the returned executions. The API will default to the BASIC view.
    Allowed values
      EXECUTION_VIEW_UNSPECIFIED - The default / unset value.
      BASIC - Includes only basic metadata about the execution. Following fields are returned: name, start_time, end_time, state and workflow_revision_id.
      FULL - Includes all data.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for the ListExecutions method.
  &quot;executions&quot;: [ # The executions which match the request.
    { # A running instance of a [Workflow](/workflows/docs/reference/rest/v1/projects.locations.workflows).
      &quot;argument&quot;: &quot;A String&quot;, # Input parameters of the execution represented as a JSON string. The size limit is 32KB. *Note*: If you are using the REST API directly to run your workflow, you must escape any JSON string value of `argument`. Example: `&#x27;{&quot;argument&quot;:&quot;{\&quot;firstName\&quot;:\&quot;FIRST\&quot;,\&quot;lastName\&quot;:\&quot;LAST\&quot;}&quot;}&#x27;`
      &quot;callLogLevel&quot;: &quot;A String&quot;, # The call logging level associated to this execution.
      &quot;endTime&quot;: &quot;A String&quot;, # Output only. Marks the end of execution, successful or not.
      &quot;error&quot;: { # Error describes why the execution was abnormally terminated. # Output only. The error which caused the execution to finish prematurely. The value is only present if the execution&#x27;s state is `FAILED` or `CANCELLED`.
        &quot;context&quot;: &quot;A String&quot;, # Human-readable stack trace string.
        &quot;payload&quot;: &quot;A String&quot;, # Error message and data returned represented as a JSON string.
        &quot;stackTrace&quot;: { # A collection of stack elements (frames) where an error occurred. # Stack trace with detailed information of where error was generated.
          &quot;elements&quot;: [ # An array of stack elements.
            { # A single stack element (frame) where an error occurred.
              &quot;position&quot;: { # Position contains source position information about the stack trace element such as line number, column number and length of the code block in bytes. # The source position information of the stack trace element.
                &quot;column&quot;: &quot;A String&quot;, # The source code column position (of the line) the current instruction was generated from.
                &quot;length&quot;: &quot;A String&quot;, # The number of bytes of source code making up this stack trace element.
                &quot;line&quot;: &quot;A String&quot;, # The source code line number the current instruction was generated from.
              },
              &quot;routine&quot;: &quot;A String&quot;, # The routine where the error occurred.
              &quot;step&quot;: &quot;A String&quot;, # The step the error occurred at.
            },
          ],
        },
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the execution. Format: projects/{project}/locations/{location}/workflows/{workflow}/executions/{execution}
      &quot;result&quot;: &quot;A String&quot;, # Output only. Output of the execution represented as a JSON string. The value can only be present if the execution&#x27;s state is `SUCCEEDED`.
      &quot;startTime&quot;: &quot;A String&quot;, # Output only. Marks the beginning of execution.
      &quot;state&quot;: &quot;A String&quot;, # Output only. Current state of the execution.
      &quot;workflowRevisionId&quot;: &quot;A String&quot;, # Output only. Revision of the workflow this execution is using.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.
}</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>