<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="androidpublisher_v3.html">Google Play Android Developer API</a> . <a href="androidpublisher_v3.edits.html">edits</a> . <a href="androidpublisher_v3.edits.images.html">images</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(packageName, editId, language, imageType, imageId, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the image (specified by id) from the edit.</p>
<p class="toc_element">
  <code><a href="#deleteall">deleteall(packageName, editId, language, imageType, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes all images for the specified language and image type.</p>
<p class="toc_element">
  <code><a href="#list">list(packageName, editId, language, imageType, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all images. The response may be empty.</p>
<p class="toc_element">
  <code><a href="#upload">upload(packageName, editId, language, imageType, x__xgafv=None, media_body=None, media_mime_type=None)</a></code></p>
<p class="firstline">Uploads an image of the specified language and image type, and adds to the</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(packageName, editId, language, imageType, imageId, x__xgafv=None)</code>
  <pre>Deletes the image (specified by id) from the edit.

Args:
  packageName: string, Package name of the app. (required)
  editId: string, Identifier of the edit. (required)
  language: string, Language localization code (a BCP-47 language tag; for example, &quot;de-AT&quot;
for Austrian German). (required)
  imageType: string, Type of the Image. (required)
  imageId: string, Unique identifier an image within the set of images attached to this edit. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="deleteall">deleteall(packageName, editId, language, imageType, x__xgafv=None)</code>
  <pre>Deletes all images for the specified language and image type.
Returns an empty response if no images are found.

Args:
  packageName: string, Package name of the app. (required)
  editId: string, Identifier of the edit. (required)
  language: string, Language localization code (a BCP-47 language tag; for example, &quot;de-AT&quot;
for Austrian German).
Providing a language that is not supported by the App is a no-op. (required)
  imageType: string, Type of the Image.
Providing an image type that refers to no images is a no-op. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response for deleting all images.
    &quot;deleted&quot;: [ # The deleted images.
      { # An uploaded image. The resource for ImagesService.
        &quot;url&quot;: &quot;A String&quot;, # A URL that will serve a preview of the image.
        &quot;id&quot;: &quot;A String&quot;, # A unique id representing this image.
        &quot;sha256&quot;: &quot;A String&quot;, # A sha256 hash of the image.
        &quot;sha1&quot;: &quot;A String&quot;, # A sha1 hash of the image.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(packageName, editId, language, imageType, x__xgafv=None)</code>
  <pre>Lists all images. The response may be empty.

Args:
  packageName: string, Package name of the app. (required)
  editId: string, Identifier of the edit. (required)
  language: string, Language localization code (a BCP-47 language tag; for example, &quot;de-AT&quot;
for Austrian German).
There must be a store listing for the specified language. (required)
  imageType: string, Type of the Image. Providing an image type that refers to no images will
return an empty response. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response listing all images.
    &quot;images&quot;: [ # All listed Images.
      { # An uploaded image. The resource for ImagesService.
        &quot;url&quot;: &quot;A String&quot;, # A URL that will serve a preview of the image.
        &quot;id&quot;: &quot;A String&quot;, # A unique id representing this image.
        &quot;sha256&quot;: &quot;A String&quot;, # A sha256 hash of the image.
        &quot;sha1&quot;: &quot;A String&quot;, # A sha1 hash of the image.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="upload">upload(packageName, editId, language, imageType, x__xgafv=None, media_body=None, media_mime_type=None)</code>
  <pre>Uploads an image of the specified language and image type, and adds to the
edit.

Args:
  packageName: string, Package name of the app. (required)
  editId: string, Identifier of the edit. (required)
  language: string, Language localization code (a BCP-47 language tag; for example, &quot;de-AT&quot;
for Austrian German).
Providing a language that is not supported by the App is a no-op. (required)
  imageType: string, Type of the Image. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  media_mime_type: string, The MIME type of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # Response for uploading an image.
    &quot;image&quot;: { # An uploaded image. The resource for ImagesService. # The uploaded image.
      &quot;url&quot;: &quot;A String&quot;, # A URL that will serve a preview of the image.
      &quot;id&quot;: &quot;A String&quot;, # A unique id representing this image.
      &quot;sha256&quot;: &quot;A String&quot;, # A sha256 hash of the image.
      &quot;sha1&quot;: &quot;A String&quot;, # A sha1 hash of the image.
    },
  }</pre>
</div>

</body></html>