<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="connectors_v1.html">Connectors API</a> . <a href="connectors_v1.projects.html">projects</a> . <a href="connectors_v1.projects.locations.html">locations</a> . <a href="connectors_v1.projects.locations.connections.html">connections</a> . <a href="connectors_v1.projects.locations.connections.runtimeActionSchemas.html">runtimeActionSchemas</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(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">List schema of a runtime actions filtered by action name.</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(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>List schema of a runtime actions filtered by action name.

Args:
  parent: string, Required. Parent resource of RuntimeActionSchema Format: projects/{project}/locations/{location}/connections/{connection} (required)
  filter: string, Required. Filter Format: action=&quot;{actionId}&quot; Only action field is supported with literal equality operator. Accepted filter example: action=&quot;CancelOrder&quot; Wildcards are not supported in the filter currently.
  pageSize: integer, Page size.
  pageToken: string, Page token.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for ConnectorsService.ListRuntimeActionSchemas.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Next page token.
  &quot;runtimeActionSchemas&quot;: [ # Runtime action schemas.
    { # Schema of a runtime action.
      &quot;action&quot;: &quot;A String&quot;, # Output only. Name of the action.
      &quot;inputParameters&quot;: [ # Output only. List of input parameter metadata for the action.
        { # Metadata of an input parameter.
          &quot;dataType&quot;: &quot;A String&quot;, # The data type of the Parameter.
          &quot;defaultValue&quot;: &quot;&quot;, # The following field specifies the default value of the Parameter provided by the external system if a value is not provided.
          &quot;description&quot;: &quot;A String&quot;, # A brief description of the Parameter.
          &quot;nullable&quot;: True or False, # Specifies whether a null value is allowed.
          &quot;parameter&quot;: &quot;A String&quot;, # Name of the Parameter.
        },
      ],
      &quot;resultMetadata&quot;: [ # Output only. List of result field metadata.
        { # Metadata of result field.
          &quot;dataType&quot;: &quot;A String&quot;, # The data type of the field.
          &quot;description&quot;: &quot;A String&quot;, # A brief description of the field.
          &quot;field&quot;: &quot;A String&quot;, # Name of the result field.
        },
      ],
    },
  ],
}</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>