<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> . <a href="apigee_v1.organizations.sharedflows.revisions.html">revisions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="apigee_v1.organizations.sharedflows.revisions.deployments.html">deployments()</a></code>
</p>
<p class="firstline">Returns the deployments Resource.</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="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a shared flow and all associated policies, resources, and revisions. You must undeploy the shared flow before deleting it.</p>
<p class="toc_element">
  <code><a href="#get">get(name, format=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a revision of a shared flow. If `format=bundle` is passed, it instead outputs a shared flow revision as a ZIP-formatted bundle of code and config files.</p>
<p class="toc_element">
  <code><a href="#updateSharedFlowRevision">updateSharedFlowRevision(name, body=None, validate=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a shared flow revision. This operation is only allowed on revisions which have never been deployed. After deployment a revision becomes immutable, even if it becomes undeployed. The payload is a ZIP-formatted shared flow. Content type must be either multipart/form-data or application/octet-stream.</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="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a shared flow and all associated policies, resources, and revisions. You must undeploy the shared flow before deleting it.

Args:
  name: string, Required. The name of the shared flow revision to delete. Must be of the form: `organizations/{organization_id}/sharedflows/{shared_flow_id}/revisions/{revision_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 revision.
  &quot;configurationVersion&quot;: { # Version of the API proxy configuration schema. Currently, only 4.0 is supported. # 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.
    &quot;majorVersion&quot;: 42, # Major version of the API proxy configuration schema.
    &quot;minorVersion&quot;: 42, # Minor version of the API proxy configuration schema.
  },
  &quot;contextInfo&quot;: &quot;A String&quot;, # A textual description of the shared flow revision.
  &quot;createdAt&quot;: &quot;A String&quot;, # Time at which this shared flow revision was created, in milliseconds since epoch.
  &quot;description&quot;: &quot;A String&quot;, # Description of the shared flow revision.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name of this shared flow.
  &quot;entityMetaDataAsProperties&quot;: { # A Key-Value map of metadata about this shared flow revision.
    &quot;a_key&quot;: &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;name&quot;: &quot;A String&quot;, # The resource ID of the parent shared flow.
  &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;name&quot;: &quot;A String&quot;, # ID of the resource file.
        &quot;type&quot;: &quot;A String&quot;, # Resource file type. {{ resource_file_type }}
      },
    ],
  },
  &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;revision&quot;: &quot;A String&quot;, # The resource ID of this revision.
  &quot;sharedFlows&quot;: [ # A list of the shared flow names included in this shared flow revision.
    &quot;A String&quot;,
  ],
  &quot;type&quot;: &quot;A String&quot;, # The string &quot;Application&quot;
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, format=None, x__xgafv=None)</code>
  <pre>Gets a revision of a shared flow. If `format=bundle` is passed, it instead outputs a shared flow revision as a ZIP-formatted bundle of code and config files.

Args:
  name: string, Required. The name of the shared flow revision to get. Must be of the form: `organizations/{organization_id}/sharedflows/{shared_flow_id}/revisions/{revision_id}` (required)
  format: string, Specify `bundle` to export the contents of the shared flow bundle. Otherwise, the bundle metadata is returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="updateSharedFlowRevision">updateSharedFlowRevision(name, body=None, validate=None, x__xgafv=None)</code>
  <pre>Updates a shared flow revision. This operation is only allowed on revisions which have never been deployed. After deployment a revision becomes immutable, even if it becomes undeployed. The payload is a ZIP-formatted shared flow. Content type must be either multipart/form-data or application/octet-stream.

Args:
  name: string, Required. The name of the shared flow revision to update. Must be of the form: `organizations/{organization_id}/sharedflows/{shared_flow_id}/revisions/{revision_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.
    },
  ],
}

  validate: boolean, Ignored. All uploads are validated regardless of the value of this field. It is kept for compatibility with existing APIs. Must be `true` or `false` if provided.
  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;configurationVersion&quot;: { # Version of the API proxy configuration schema. Currently, only 4.0 is supported. # 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.
    &quot;majorVersion&quot;: 42, # Major version of the API proxy configuration schema.
    &quot;minorVersion&quot;: 42, # Minor version of the API proxy configuration schema.
  },
  &quot;contextInfo&quot;: &quot;A String&quot;, # A textual description of the shared flow revision.
  &quot;createdAt&quot;: &quot;A String&quot;, # Time at which this shared flow revision was created, in milliseconds since epoch.
  &quot;description&quot;: &quot;A String&quot;, # Description of the shared flow revision.
  &quot;displayName&quot;: &quot;A String&quot;, # The human readable name of this shared flow.
  &quot;entityMetaDataAsProperties&quot;: { # A Key-Value map of metadata about this shared flow revision.
    &quot;a_key&quot;: &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;name&quot;: &quot;A String&quot;, # The resource ID of the parent shared flow.
  &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;name&quot;: &quot;A String&quot;, # ID of the resource file.
        &quot;type&quot;: &quot;A String&quot;, # Resource file type. {{ resource_file_type }}
      },
    ],
  },
  &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;revision&quot;: &quot;A String&quot;, # The resource ID of this revision.
  &quot;sharedFlows&quot;: [ # A list of the shared flow names included in this shared flow revision.
    &quot;A String&quot;,
  ],
  &quot;type&quot;: &quot;A String&quot;, # The string &quot;Application&quot;
}</pre>
</div>

</body></html>