<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="apigeeregistry_v1.html">Apigee Registry API</a> . <a href="apigeeregistry_v1.projects.html">projects</a> . <a href="apigeeregistry_v1.projects.locations.html">locations</a> . <a href="apigeeregistry_v1.projects.locations.apis.html">apis</a> . <a href="apigeeregistry_v1.projects.locations.apis.deployments.html">deployments</a> . <a href="apigeeregistry_v1.projects.locations.apis.deployments.artifacts.html">artifacts</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="#create">create(parent, artifactId=None, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a specified artifact.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Removes a specified artifact.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a specified artifact.</p>
<p class="toc_element">
  <code><a href="#getContents">getContents(name, x__xgafv=None)</a></code></p>
<p class="firstline">Returns the contents of a specified artifact. If artifacts are stored with GZip compression, the default behavior is to return the artifact uncompressed (the mime_type response field indicates the exact format returned).</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns matching artifacts.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#replaceArtifact">replaceArtifact(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Used to replace a specified artifact.</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="create">create(parent, artifactId=None, body=None, x__xgafv=None)</code>
  <pre>Creates a specified artifact.

Args:
  parent: string, Required. The parent, which owns this collection of artifacts. Format: `{parent}` (required)
  body: object, The request body.
    The object takes the form of:

{ # Artifacts of resources. Artifacts are unique (single-value) per resource and are used to store metadata that is too large or numerous to be stored directly on the resource. Since artifacts are stored separately from parent resources, they should generally be used for metadata that is needed infrequently, i.e., not for display in primary views of the resource but perhaps displayed or downloaded upon request. The `ListArtifacts` method allows artifacts to be quickly enumerated and checked for presence without downloading their (potentially-large) contents.
  &quot;annotations&quot;: { # Annotations attach non-identifying metadata to resources. Annotation keys and values are less restricted than those of labels, but should be generally used for small values of broad interest. Larger, topic- specific metadata should be stored in Artifacts.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;contents&quot;: &quot;A String&quot;, # Input only. The contents of the artifact. Provided by API callers when artifacts are created or replaced. To access the contents of an artifact, use GetArtifactContents.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp.
  &quot;hash&quot;: &quot;A String&quot;, # Output only. A SHA-256 hash of the artifact&#x27;s contents. If the artifact is gzipped, this is the hash of the uncompressed artifact.
  &quot;labels&quot;: { # Labels attach identifying metadata to resources. Identifying metadata can be used to filter list operations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one resource (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;registry.googleapis.com/&quot; and cannot be changed.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # A content type specifier for the artifact. Content type specifiers are Media Types (https://en.wikipedia.org/wiki/Media_type) with a possible &quot;schema&quot; parameter that specifies a schema for the stored information. Content types can specify compression. Currently only GZip compression is supported (indicated with &quot;+gzip&quot;).
  &quot;name&quot;: &quot;A String&quot;, # Resource name.
  &quot;sizeBytes&quot;: 42, # Output only. The size of the artifact in bytes. If the artifact is gzipped, this is the size of the uncompressed artifact.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Last update timestamp.
}

  artifactId: string, Required. The ID to use for the artifact, which will become the final component of the artifact&#x27;s resource name. This value should be 4-63 characters, and valid characters are /a-z-/. Following AIP-162, IDs must not have the form of a UUID.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Artifacts of resources. Artifacts are unique (single-value) per resource and are used to store metadata that is too large or numerous to be stored directly on the resource. Since artifacts are stored separately from parent resources, they should generally be used for metadata that is needed infrequently, i.e., not for display in primary views of the resource but perhaps displayed or downloaded upon request. The `ListArtifacts` method allows artifacts to be quickly enumerated and checked for presence without downloading their (potentially-large) contents.
  &quot;annotations&quot;: { # Annotations attach non-identifying metadata to resources. Annotation keys and values are less restricted than those of labels, but should be generally used for small values of broad interest. Larger, topic- specific metadata should be stored in Artifacts.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;contents&quot;: &quot;A String&quot;, # Input only. The contents of the artifact. Provided by API callers when artifacts are created or replaced. To access the contents of an artifact, use GetArtifactContents.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp.
  &quot;hash&quot;: &quot;A String&quot;, # Output only. A SHA-256 hash of the artifact&#x27;s contents. If the artifact is gzipped, this is the hash of the uncompressed artifact.
  &quot;labels&quot;: { # Labels attach identifying metadata to resources. Identifying metadata can be used to filter list operations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one resource (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;registry.googleapis.com/&quot; and cannot be changed.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # A content type specifier for the artifact. Content type specifiers are Media Types (https://en.wikipedia.org/wiki/Media_type) with a possible &quot;schema&quot; parameter that specifies a schema for the stored information. Content types can specify compression. Currently only GZip compression is supported (indicated with &quot;+gzip&quot;).
  &quot;name&quot;: &quot;A String&quot;, # Resource name.
  &quot;sizeBytes&quot;: 42, # Output only. The size of the artifact in bytes. If the artifact is gzipped, this is the size of the uncompressed artifact.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Last update timestamp.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Removes a specified artifact.

Args:
  name: string, Required. The name of the artifact to delete. Format: `{parent}/artifacts/*` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Returns a specified artifact.

Args:
  name: string, Required. The name of the artifact to retrieve. Format: `{parent}/artifacts/*` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Artifacts of resources. Artifacts are unique (single-value) per resource and are used to store metadata that is too large or numerous to be stored directly on the resource. Since artifacts are stored separately from parent resources, they should generally be used for metadata that is needed infrequently, i.e., not for display in primary views of the resource but perhaps displayed or downloaded upon request. The `ListArtifacts` method allows artifacts to be quickly enumerated and checked for presence without downloading their (potentially-large) contents.
  &quot;annotations&quot;: { # Annotations attach non-identifying metadata to resources. Annotation keys and values are less restricted than those of labels, but should be generally used for small values of broad interest. Larger, topic- specific metadata should be stored in Artifacts.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;contents&quot;: &quot;A String&quot;, # Input only. The contents of the artifact. Provided by API callers when artifacts are created or replaced. To access the contents of an artifact, use GetArtifactContents.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp.
  &quot;hash&quot;: &quot;A String&quot;, # Output only. A SHA-256 hash of the artifact&#x27;s contents. If the artifact is gzipped, this is the hash of the uncompressed artifact.
  &quot;labels&quot;: { # Labels attach identifying metadata to resources. Identifying metadata can be used to filter list operations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one resource (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;registry.googleapis.com/&quot; and cannot be changed.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # A content type specifier for the artifact. Content type specifiers are Media Types (https://en.wikipedia.org/wiki/Media_type) with a possible &quot;schema&quot; parameter that specifies a schema for the stored information. Content types can specify compression. Currently only GZip compression is supported (indicated with &quot;+gzip&quot;).
  &quot;name&quot;: &quot;A String&quot;, # Resource name.
  &quot;sizeBytes&quot;: 42, # Output only. The size of the artifact in bytes. If the artifact is gzipped, this is the size of the uncompressed artifact.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Last update timestamp.
}</pre>
</div>

<div class="method">
    <code class="details" id="getContents">getContents(name, x__xgafv=None)</code>
  <pre>Returns the contents of a specified artifact. If artifacts are stored with GZip compression, the default behavior is to return the artifact uncompressed (the mime_type response field indicates the exact format returned).

Args:
  name: string, Required. The name of the artifact whose contents should be retrieved. Format: `{parent}/artifacts/*` (required)
  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="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns matching artifacts.

Args:
  parent: string, Required. The parent, which owns this collection of artifacts. Format: `{parent}` (required)
  filter: string, An expression that can be used to filter the list. Filters use the Common Expression Language and can refer to all message fields except contents.
  orderBy: string, A comma-separated list of fields, e.g. &quot;foo,bar&quot; Fields can be sorted in descending order using the &quot;desc&quot; identifier, e.g. &quot;foo desc,bar&quot;
  pageSize: integer, The maximum number of artifacts to return. The service may return fewer than this value. If unspecified, at most 50 values will be returned. The maximum is 1000; values above 1000 will be coerced to 1000.
  pageToken: string, A page token, received from a previous `ListArtifacts` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListArtifacts` must match the call that provided the 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 ListArtifacts.
  &quot;artifacts&quot;: [ # The artifacts from the specified publisher.
    { # Artifacts of resources. Artifacts are unique (single-value) per resource and are used to store metadata that is too large or numerous to be stored directly on the resource. Since artifacts are stored separately from parent resources, they should generally be used for metadata that is needed infrequently, i.e., not for display in primary views of the resource but perhaps displayed or downloaded upon request. The `ListArtifacts` method allows artifacts to be quickly enumerated and checked for presence without downloading their (potentially-large) contents.
      &quot;annotations&quot;: { # Annotations attach non-identifying metadata to resources. Annotation keys and values are less restricted than those of labels, but should be generally used for small values of broad interest. Larger, topic- specific metadata should be stored in Artifacts.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;contents&quot;: &quot;A String&quot;, # Input only. The contents of the artifact. Provided by API callers when artifacts are created or replaced. To access the contents of an artifact, use GetArtifactContents.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp.
      &quot;hash&quot;: &quot;A String&quot;, # Output only. A SHA-256 hash of the artifact&#x27;s contents. If the artifact is gzipped, this is the hash of the uncompressed artifact.
      &quot;labels&quot;: { # Labels attach identifying metadata to resources. Identifying metadata can be used to filter list operations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one resource (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;registry.googleapis.com/&quot; and cannot be changed.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;mimeType&quot;: &quot;A String&quot;, # A content type specifier for the artifact. Content type specifiers are Media Types (https://en.wikipedia.org/wiki/Media_type) with a possible &quot;schema&quot; parameter that specifies a schema for the stored information. Content types can specify compression. Currently only GZip compression is supported (indicated with &quot;+gzip&quot;).
      &quot;name&quot;: &quot;A String&quot;, # Resource name.
      &quot;sizeBytes&quot;: 42, # Output only. The size of the artifact in bytes. If the artifact is gzipped, this is the size of the uncompressed artifact.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Last update timestamp.
    },
  ],
  &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()</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>

<div class="method">
    <code class="details" id="replaceArtifact">replaceArtifact(name, body=None, x__xgafv=None)</code>
  <pre>Used to replace a specified artifact.

Args:
  name: string, Resource name. (required)
  body: object, The request body.
    The object takes the form of:

{ # Artifacts of resources. Artifacts are unique (single-value) per resource and are used to store metadata that is too large or numerous to be stored directly on the resource. Since artifacts are stored separately from parent resources, they should generally be used for metadata that is needed infrequently, i.e., not for display in primary views of the resource but perhaps displayed or downloaded upon request. The `ListArtifacts` method allows artifacts to be quickly enumerated and checked for presence without downloading their (potentially-large) contents.
  &quot;annotations&quot;: { # Annotations attach non-identifying metadata to resources. Annotation keys and values are less restricted than those of labels, but should be generally used for small values of broad interest. Larger, topic- specific metadata should be stored in Artifacts.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;contents&quot;: &quot;A String&quot;, # Input only. The contents of the artifact. Provided by API callers when artifacts are created or replaced. To access the contents of an artifact, use GetArtifactContents.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp.
  &quot;hash&quot;: &quot;A String&quot;, # Output only. A SHA-256 hash of the artifact&#x27;s contents. If the artifact is gzipped, this is the hash of the uncompressed artifact.
  &quot;labels&quot;: { # Labels attach identifying metadata to resources. Identifying metadata can be used to filter list operations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one resource (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;registry.googleapis.com/&quot; and cannot be changed.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # A content type specifier for the artifact. Content type specifiers are Media Types (https://en.wikipedia.org/wiki/Media_type) with a possible &quot;schema&quot; parameter that specifies a schema for the stored information. Content types can specify compression. Currently only GZip compression is supported (indicated with &quot;+gzip&quot;).
  &quot;name&quot;: &quot;A String&quot;, # Resource name.
  &quot;sizeBytes&quot;: 42, # Output only. The size of the artifact in bytes. If the artifact is gzipped, this is the size of the uncompressed artifact.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Last update timestamp.
}

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

Returns:
  An object of the form:

    { # Artifacts of resources. Artifacts are unique (single-value) per resource and are used to store metadata that is too large or numerous to be stored directly on the resource. Since artifacts are stored separately from parent resources, they should generally be used for metadata that is needed infrequently, i.e., not for display in primary views of the resource but perhaps displayed or downloaded upon request. The `ListArtifacts` method allows artifacts to be quickly enumerated and checked for presence without downloading their (potentially-large) contents.
  &quot;annotations&quot;: { # Annotations attach non-identifying metadata to resources. Annotation keys and values are less restricted than those of labels, but should be generally used for small values of broad interest. Larger, topic- specific metadata should be stored in Artifacts.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;contents&quot;: &quot;A String&quot;, # Input only. The contents of the artifact. Provided by API callers when artifacts are created or replaced. To access the contents of an artifact, use GetArtifactContents.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. Creation timestamp.
  &quot;hash&quot;: &quot;A String&quot;, # Output only. A SHA-256 hash of the artifact&#x27;s contents. If the artifact is gzipped, this is the hash of the uncompressed artifact.
  &quot;labels&quot;: { # Labels attach identifying metadata to resources. Identifying metadata can be used to filter list operations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one resource (System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;registry.googleapis.com/&quot; and cannot be changed.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;mimeType&quot;: &quot;A String&quot;, # A content type specifier for the artifact. Content type specifiers are Media Types (https://en.wikipedia.org/wiki/Media_type) with a possible &quot;schema&quot; parameter that specifies a schema for the stored information. Content types can specify compression. Currently only GZip compression is supported (indicated with &quot;+gzip&quot;).
  &quot;name&quot;: &quot;A String&quot;, # Resource name.
  &quot;sizeBytes&quot;: 42, # Output only. The size of the artifact in bytes. If the artifact is gzipped, this is the size of the uncompressed artifact.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Last update timestamp.
}</pre>
</div>

</body></html>