<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="apigee_v1.html">Apigee API</a> . <a href="apigee_v1.organizations.html">organizations</a> . <a href="apigee_v1.organizations.sharedflows.html">sharedflows</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="apigee_v1.organizations.sharedflows.deployments.html">deployments()</a></code>
</p>
<p class="firstline">Returns the deployments Resource.</p>

<p class="toc_element">
  <code><a href="apigee_v1.organizations.sharedflows.revisions.html">revisions()</a></code>
</p>
<p class="firstline">Returns the revisions Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(parent, body=None, name=None, action=None, x__xgafv=None)</a></code></p>
<p class="firstline">Uploads a ZIP-formatted shared flow configuration bundle to an</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a shared flow and all it's revisions. The shared flow must be</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a shared flow by name, including a list of its revisions.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, includeMetaData=None, includeRevisions=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all shared flows in the organization.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, name=None, action=None, x__xgafv=None)</code>
  <pre>Uploads a ZIP-formatted shared flow configuration bundle to an
organization. If the shared flow already exists, this creates a new
revision of it. If the shared flow does not exist, this creates it.

Once imported, the shared flow revision must be deployed before it can be
accessed at runtime.

The size limit of a shared flow bundle is 15 MB.

Args:
  parent: string, Required. The name of the parent organization under which to create the
shared flow. Must be of the form:
  `organizations/{organization_id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # Message that represents an arbitrary HTTP body. It should only be used for
      # payload formats that can&#x27;t be represented as JSON, such as raw binary or
      # an HTML page.
      # 
      # 
      # This message can be used both in streaming and non-streaming API methods in
      # the request as well as the response.
      # 
      # It can be used as a top-level request field, which is convenient if one
      # wants to extract parameters from either the URL or HTTP template into the
      # request fields and also want access to the raw HTTP body.
      # 
      # Example:
      # 
      #     message GetResourceRequest {
      #       // A unique request id.
      #       string request_id = 1;
      # 
      #       // The raw HTTP body is bound to this field.
      #       google.api.HttpBody http_body = 2;
      #     }
      # 
      #     service ResourceService {
      #       rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);
      #       rpc UpdateResource(google.api.HttpBody) returns
      #       (google.protobuf.Empty);
      #     }
      # 
      # Example with streaming methods:
      # 
      #     service CaldavService {
      #       rpc GetCalendar(stream google.api.HttpBody)
      #         returns (stream google.api.HttpBody);
      #       rpc UpdateCalendar(stream google.api.HttpBody)
      #         returns (stream google.api.HttpBody);
      #     }
      # 
      # Use of this type only changes how the request and response bodies are
      # handled, all other features will continue to work unchanged.
    &quot;contentType&quot;: &quot;A String&quot;, # The HTTP Content-Type header value specifying the content type of the body.
    &quot;data&quot;: &quot;A String&quot;, # The HTTP request/response body as raw binary.
    &quot;extensions&quot;: [ # Application specific response metadata. Must be set in the first response
        # for streaming APIs.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
  }

  name: string, Required. The name to give the shared flow
  action: string, Required. Must be set to either `import` or `validate`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The metadata describing a shared flow revision.
    &quot;entityMetaDataAsProperties&quot;: { # A Key-Value map of metadata about this shared flow revision.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;displayName&quot;: &quot;A String&quot;, # The human readable name of this shared flow.
    &quot;description&quot;: &quot;A String&quot;, # Description of the shared flow revision.
    &quot;sharedFlows&quot;: [ # A list of the shared flow names included in this shared flow revision.
      &quot;A String&quot;,
    ],
    &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Time at which this shared flow revision was most recently modified, in
        # milliseconds since epoch.
    &quot;revision&quot;: &quot;A String&quot;, # The resource ID of this revision.
    &quot;configurationVersion&quot;: { # Version of the API proxy configuration schema. Currently, only 4.0 is # The version of the configuration schema to which this shared flow conforms.
        # The only supported value currently is majorVersion 4 and minorVersion 0.
        # This setting may be used in the future to enable evolution of the shared
        # flow format.
        # supported.
      &quot;minorVersion&quot;: 42, # Minor version of the API proxy configuration schema.
      &quot;majorVersion&quot;: 42, # Major version of the API proxy configuration schema.
    },
    &quot;contextInfo&quot;: &quot;A String&quot;, # A textual description of the shared flow revision.
    &quot;name&quot;: &quot;A String&quot;, # The resource ID of the parent shared flow.
    &quot;type&quot;: &quot;A String&quot;, # The string &quot;Application&quot;
    &quot;resources&quot;: [ # A list of the resources included in this shared flow revision formatted as
        # &quot;{type}://{name}&quot;.
      &quot;A String&quot;,
    ],
    &quot;createdAt&quot;: &quot;A String&quot;, # Time at which this shared flow revision was created, in milliseconds since
        # epoch.
    &quot;policies&quot;: [ # A list of policy names included in this shared flow revision.
      &quot;A String&quot;,
    ],
    &quot;resourceFiles&quot;: { # List of resource files. # The resource files included in this shared flow revision.
      &quot;resourceFile&quot;: [ # List of resource files.
        { # Metadata about a resource file.
          &quot;type&quot;: &quot;A String&quot;, # Resource file type. {{ resource_file_type }}
          &quot;name&quot;: &quot;A String&quot;, # ID of the resource file.
        },
      ],
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a shared flow and all it&#x27;s revisions. The shared flow must be
undeployed before you can delete it.

Args:
  name: string, Required. shared flow name of the form:
  `organizations/{organization_id}/sharedflows/{shared_flow_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The metadata describing a shared flow
    &quot;revision&quot;: [ # A list of revisions of this shared flow.
      &quot;A String&quot;,
    ],
    &quot;latestRevisionId&quot;: &quot;A String&quot;, # The id of the most recently created revision for this shared flow.
    &quot;metaData&quot;: { # Metadata common to many entities in this API. # Metadata describing the shared flow.
      &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Time at which the API proxy was most recently modified, in milliseconds
          # since epoch.
      &quot;subType&quot;: &quot;A String&quot;, # The type of entity described
      &quot;createdAt&quot;: &quot;A String&quot;, # Time at which the API proxy was created, in milliseconds since epoch.
    },
    &quot;name&quot;: &quot;A String&quot;, # The ID of the shared flow.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a shared flow by name, including a list of its revisions.

Args:
  name: string, Required. The name of the shared flow to get. Must be of the
form:
  `organizations/{organization_id}/sharedflows/{shared_flow_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The metadata describing a shared flow
    &quot;revision&quot;: [ # A list of revisions of this shared flow.
      &quot;A String&quot;,
    ],
    &quot;latestRevisionId&quot;: &quot;A String&quot;, # The id of the most recently created revision for this shared flow.
    &quot;metaData&quot;: { # Metadata common to many entities in this API. # Metadata describing the shared flow.
      &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Time at which the API proxy was most recently modified, in milliseconds
          # since epoch.
      &quot;subType&quot;: &quot;A String&quot;, # The type of entity described
      &quot;createdAt&quot;: &quot;A String&quot;, # Time at which the API proxy was created, in milliseconds since epoch.
    },
    &quot;name&quot;: &quot;A String&quot;, # The ID of the shared flow.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, includeMetaData=None, includeRevisions=None, x__xgafv=None)</code>
  <pre>Lists all shared flows in the organization.

Args:
  parent: string, Required. The name of the parent organization under which to get shared
flows. Must be of the form:
  `organizations/{organization_id}` (required)
  includeMetaData: boolean, Indicates whether to include shared flow metadata in the response.
  includeRevisions: boolean, Indicates whether to include a list of revisions in the response.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;sharedFlows&quot;: [
      { # The metadata describing a shared flow
        &quot;revision&quot;: [ # A list of revisions of this shared flow.
          &quot;A String&quot;,
        ],
        &quot;latestRevisionId&quot;: &quot;A String&quot;, # The id of the most recently created revision for this shared flow.
        &quot;metaData&quot;: { # Metadata common to many entities in this API. # Metadata describing the shared flow.
          &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Time at which the API proxy was most recently modified, in milliseconds
              # since epoch.
          &quot;subType&quot;: &quot;A String&quot;, # The type of entity described
          &quot;createdAt&quot;: &quot;A String&quot;, # Time at which the API proxy was created, in milliseconds since epoch.
        },
        &quot;name&quot;: &quot;A String&quot;, # The ID of the shared flow.
      },
    ],
  }</pre>
</div>

</body></html>