<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.apis.html">apis</a> . <a href="apigee_v1.organizations.apis.revisions.html">revisions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="apigee_v1.organizations.apis.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 an API proxy revision and all policies, resources, endpoints, and revisions associated with it. The API proxy revision must be undeployed before you can delete it.</p>
<p class="toc_element">
  <code><a href="#get">get(name, format=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an API proxy revision. To download the API proxy configuration bundle for the specified revision as a zip file, set the `format` query parameter to `bundle`. If you are using curl, specify `-o filename.zip` to save the output to a file; otherwise, it displays to `stdout`. Then, develop the API proxy configuration locally and upload the updated API proxy configuration revision, as described in [updateApiProxyRevision](updateApiProxyRevision).</p>
<p class="toc_element">
  <code><a href="#updateApiProxyRevision">updateApiProxyRevision(name, body=None, validate=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing API proxy revision by uploading the API proxy configuration bundle as a zip file from your local machine. You can update only API proxy revisions that have never been deployed. After deployment, an API proxy revision becomes immutable, even if it is undeployed. Set the `Content-Type` header to 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 an API proxy revision and all policies, resources, endpoints, and revisions associated with it. The API proxy revision must be undeployed before you can delete it.

Args:
  name: string, Required. API proxy revision in the following format: `organizations/{org}/apis/{api}/revisions/{rev}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # API proxy revision.
  &quot;basepaths&quot;: [ # Base URL of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;configurationVersion&quot;: { # Version of the API proxy configuration schema. Currently, only 4.0 is supported. # Version of the API proxy configuration schema to which the API proxy conforms. Currently, the only supported value is 4.0 (`majorVersion.minorVersion`). This setting may be used in the future to track the evolution of the API proxy 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;, # Revision number, app name, and organization for the API proxy.
  &quot;createdAt&quot;: &quot;A String&quot;, # Time that the API proxy revision was created in milliseconds since epoch.
  &quot;description&quot;: &quot;A String&quot;, # Description of the API proxy revision.
  &quot;displayName&quot;: &quot;A String&quot;, # Human-readable name of the API proxy.
  &quot;entityMetaDataAsProperties&quot;: { # Metadata describing the API proxy revision as a key-value map.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Time that the API proxy revision was last modified in milliseconds since epoch.
  &quot;name&quot;: &quot;A String&quot;, # Name of the API proxy.
  &quot;policies&quot;: [ # List of policy names included in the API proxy revision..
    &quot;A String&quot;,
  ],
  &quot;proxies&quot;: [ # List of proxy names included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;proxyEndpoints&quot;: [ # List of ProxyEndpoints in the `/proxies` directory of the API proxy. Typically, this element is included only when the API proxy was created using the Edge UI. This is a &#x27;manifest&#x27; setting designed to provide visibility into the contents of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;resourceFiles&quot;: { # List of resource files. # List of resource files included in the API proxy 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;: [ # List of the resources included in the API proxy revision formatted as &quot;{type}://{name}&quot;.
    &quot;A String&quot;,
  ],
  &quot;revision&quot;: &quot;A String&quot;, # API proxy revision.
  &quot;sharedFlows&quot;: [ # List of the shared flows included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;spec&quot;: &quot;A String&quot;, # OpenAPI Specification that is associated with the API proxy. The value is set to a URL or to a path in the specification store.
  &quot;targetEndpoints&quot;: [ # List of TargetEndpoints in the `/targets` directory of the API proxy. Typically, this element is included only when the API proxy was created using the Edge UI. This is a &#x27;manifest&#x27; setting designed to provide visibility into the contents of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;targetServers&quot;: [ # List of TargetServers referenced in any TargetEndpoint in the API proxy. Typically, you will see this element only when the API proxy was created using the Edge UI. This is a &#x27;manifest&#x27; setting designed to provide visibility into the contents of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;targets&quot;: [ # List of the targets included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;teams&quot;: [ # List of the teams included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;type&quot;: &quot;A String&quot;, # Type. Set to `Application`. Maintained for compatibility with the Apigee Edge API.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, format=None, x__xgafv=None)</code>
  <pre>Gets an API proxy revision. To download the API proxy configuration bundle for the specified revision as a zip file, set the `format` query parameter to `bundle`. If you are using curl, specify `-o filename.zip` to save the output to a file; otherwise, it displays to `stdout`. Then, develop the API proxy configuration locally and upload the updated API proxy configuration revision, as described in [updateApiProxyRevision](updateApiProxyRevision).

Args:
  name: string, Required. API proxy revision in the following format: `organizations/{org}/apis/{api}/revisions/{rev}` (required)
  format: string, Format used when downloading the API proxy configuration revision. Set to `bundle` to download the API proxy configuration revision as a zip file.
  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="updateApiProxyRevision">updateApiProxyRevision(name, body=None, validate=None, x__xgafv=None)</code>
  <pre>Updates an existing API proxy revision by uploading the API proxy configuration bundle as a zip file from your local machine. You can update only API proxy revisions that have never been deployed. After deployment, an API proxy revision becomes immutable, even if it is undeployed. Set the `Content-Type` header to either `multipart/form-data` or `application/octet-stream`.

Args:
  name: string, Required. API proxy revision to update in the following format: `organizations/{org}/apis/{api}/revisions/{rev}` (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. Maintained for compatibility with Apigee Edge API.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # API proxy revision.
  &quot;basepaths&quot;: [ # Base URL of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;configurationVersion&quot;: { # Version of the API proxy configuration schema. Currently, only 4.0 is supported. # Version of the API proxy configuration schema to which the API proxy conforms. Currently, the only supported value is 4.0 (`majorVersion.minorVersion`). This setting may be used in the future to track the evolution of the API proxy 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;, # Revision number, app name, and organization for the API proxy.
  &quot;createdAt&quot;: &quot;A String&quot;, # Time that the API proxy revision was created in milliseconds since epoch.
  &quot;description&quot;: &quot;A String&quot;, # Description of the API proxy revision.
  &quot;displayName&quot;: &quot;A String&quot;, # Human-readable name of the API proxy.
  &quot;entityMetaDataAsProperties&quot;: { # Metadata describing the API proxy revision as a key-value map.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;lastModifiedAt&quot;: &quot;A String&quot;, # Time that the API proxy revision was last modified in milliseconds since epoch.
  &quot;name&quot;: &quot;A String&quot;, # Name of the API proxy.
  &quot;policies&quot;: [ # List of policy names included in the API proxy revision..
    &quot;A String&quot;,
  ],
  &quot;proxies&quot;: [ # List of proxy names included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;proxyEndpoints&quot;: [ # List of ProxyEndpoints in the `/proxies` directory of the API proxy. Typically, this element is included only when the API proxy was created using the Edge UI. This is a &#x27;manifest&#x27; setting designed to provide visibility into the contents of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;resourceFiles&quot;: { # List of resource files. # List of resource files included in the API proxy 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;: [ # List of the resources included in the API proxy revision formatted as &quot;{type}://{name}&quot;.
    &quot;A String&quot;,
  ],
  &quot;revision&quot;: &quot;A String&quot;, # API proxy revision.
  &quot;sharedFlows&quot;: [ # List of the shared flows included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;spec&quot;: &quot;A String&quot;, # OpenAPI Specification that is associated with the API proxy. The value is set to a URL or to a path in the specification store.
  &quot;targetEndpoints&quot;: [ # List of TargetEndpoints in the `/targets` directory of the API proxy. Typically, this element is included only when the API proxy was created using the Edge UI. This is a &#x27;manifest&#x27; setting designed to provide visibility into the contents of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;targetServers&quot;: [ # List of TargetServers referenced in any TargetEndpoint in the API proxy. Typically, you will see this element only when the API proxy was created using the Edge UI. This is a &#x27;manifest&#x27; setting designed to provide visibility into the contents of the API proxy.
    &quot;A String&quot;,
  ],
  &quot;targets&quot;: [ # List of the targets included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;teams&quot;: [ # List of the teams included in the API proxy revision.
    &quot;A String&quot;,
  ],
  &quot;type&quot;: &quot;A String&quot;, # Type. Set to `Application`. Maintained for compatibility with the Apigee Edge API.
}</pre>
</div>

</body></html>