<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_v2.html">Google Play Developer API</a> . <a href="androidpublisher_v2.edits.html">edits</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.apklistings.html">apklistings()</a></code>
</p>
<p class="firstline">Returns the apklistings Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.apks.html">apks()</a></code>
</p>
<p class="firstline">Returns the apks Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.details.html">details()</a></code>
</p>
<p class="firstline">Returns the details Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.expansionfiles.html">expansionfiles()</a></code>
</p>
<p class="firstline">Returns the expansionfiles Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.images.html">images()</a></code>
</p>
<p class="firstline">Returns the images Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.listings.html">listings()</a></code>
</p>
<p class="firstline">Returns the listings Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.testers.html">testers()</a></code>
</p>
<p class="firstline">Returns the testers Resource.</p>

<p class="toc_element">
  <code><a href="androidpublisher_v2.edits.tracks.html">tracks()</a></code>
</p>
<p class="firstline">Returns the tracks Resource.</p>

<p class="toc_element">
  <code><a href="#commit">commit(packageName, editId)</a></code></p>
<p class="firstline">Commits/applies the changes made in this edit back to the app.</p>
<p class="toc_element">
  <code><a href="#delete">delete(packageName, editId)</a></code></p>
<p class="firstline">Deletes an edit for an app. Creating a new edit will automatically delete any of your previous edits so this method need only be called if you want to preemptively abandon an edit.</p>
<p class="toc_element">
  <code><a href="#get">get(packageName, editId)</a></code></p>
<p class="firstline">Returns information about the edit specified. Calls will fail if the edit is no long active (e.g. has been deleted, superseded or expired).</p>
<p class="toc_element">
  <code><a href="#insert">insert(packageName, body)</a></code></p>
<p class="firstline">Creates a new edit for an app, populated with the app's current state.</p>
<p class="toc_element">
  <code><a href="#validate">validate(packageName, editId)</a></code></p>
<p class="firstline">Checks that the edit can be successfully committed. The edit's changes are not applied to the live app.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="commit">commit(packageName, editId)</code>
  <pre>Commits/applies the changes made in this edit back to the app.

Args:
  packageName: string, Unique identifier for the Android app that is being updated; for example, "com.spiffygame". (required)
  editId: string, Unique identifier for this edit. (required)

Returns:
  An object of the form:

    { # Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.
    "expiryTimeSeconds": "A String", # The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch).
    "id": "A String", # The ID of the edit that can be used in subsequent API calls.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(packageName, editId)</code>
  <pre>Deletes an edit for an app. Creating a new edit will automatically delete any of your previous edits so this method need only be called if you want to preemptively abandon an edit.

Args:
  packageName: string, Unique identifier for the Android app that is being updated; for example, "com.spiffygame". (required)
  editId: string, Unique identifier for this edit. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(packageName, editId)</code>
  <pre>Returns information about the edit specified. Calls will fail if the edit is no long active (e.g. has been deleted, superseded or expired).

Args:
  packageName: string, Unique identifier for the Android app that is being updated; for example, "com.spiffygame". (required)
  editId: string, Unique identifier for this edit. (required)

Returns:
  An object of the form:

    { # Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.
    "expiryTimeSeconds": "A String", # The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch).
    "id": "A String", # The ID of the edit that can be used in subsequent API calls.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(packageName, body)</code>
  <pre>Creates a new edit for an app, populated with the app's current state.

Args:
  packageName: string, Unique identifier for the Android app that is being updated; for example, "com.spiffygame". (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.
  "expiryTimeSeconds": "A String", # The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch).
  "id": "A String", # The ID of the edit that can be used in subsequent API calls.
}


Returns:
  An object of the form:

    { # Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.
    "expiryTimeSeconds": "A String", # The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch).
    "id": "A String", # The ID of the edit that can be used in subsequent API calls.
  }</pre>
</div>

<div class="method">
    <code class="details" id="validate">validate(packageName, editId)</code>
  <pre>Checks that the edit can be successfully committed. The edit's changes are not applied to the live app.

Args:
  packageName: string, Unique identifier for the Android app that is being updated; for example, "com.spiffygame". (required)
  editId: string, Unique identifier for this edit. (required)

Returns:
  An object of the form:

    { # Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.
    "expiryTimeSeconds": "A String", # The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch).
    "id": "A String", # The ID of the edit that can be used in subsequent API calls.
  }</pre>
</div>

</body></html>