<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="gamesManagement_v1management.html">Google Play Game Management</a> . <a href="gamesManagement_v1management.achievements.html">achievements</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="#reset">reset(achievementId, x__xgafv=None)</a></code></p>
<p class="firstline">Resets the achievement with the given ID for the currently authenticated player. This method is only accessible to whitelisted tester accounts for your application.</p>
<p class="toc_element">
  <code><a href="#resetAll">resetAll(x__xgafv=None)</a></code></p>
<p class="firstline">Resets all achievements for the currently authenticated player for your application. This method is only accessible to whitelisted tester accounts for your application.</p>
<p class="toc_element">
  <code><a href="#resetAllForAllPlayers">resetAllForAllPlayers(x__xgafv=None)</a></code></p>
<p class="firstline">Resets all draft achievements for all players. This method is only available to user accounts for your developer console.</p>
<p class="toc_element">
  <code><a href="#resetForAllPlayers">resetForAllPlayers(achievementId, x__xgafv=None)</a></code></p>
<p class="firstline">Resets the achievement with the given ID for all players. This method is only available to user accounts for your developer console. Only draft achievements can be reset.</p>
<p class="toc_element">
  <code><a href="#resetMultipleForAllPlayers">resetMultipleForAllPlayers(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Resets achievements with the given IDs for all players. This method is only available to user accounts for your developer console. Only draft achievements may be reset.</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="reset">reset(achievementId, x__xgafv=None)</code>
  <pre>Resets the achievement with the given ID for the currently authenticated player. This method is only accessible to whitelisted tester accounts for your application.

Args:
  achievementId: string, The ID of the achievement used by this method. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An achievement reset response.
  &quot;currentState&quot;: &quot;A String&quot;, # The current state of the achievement. This is the same as the initial state of the achievement. Possible values are: - &quot;`HIDDEN`&quot;- Achievement is hidden. - &quot;`REVEALED`&quot; - Achievement is revealed. - &quot;`UNLOCKED`&quot; - Achievement is unlocked.
  &quot;definitionId&quot;: &quot;A String&quot;, # The ID of an achievement for which player state has been updated.
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `gamesManagement#achievementResetResponse`.
  &quot;updateOccurred&quot;: True or False, # Flag to indicate if the requested update actually occurred.
}</pre>
</div>

<div class="method">
    <code class="details" id="resetAll">resetAll(x__xgafv=None)</code>
  <pre>Resets all achievements for the currently authenticated player for your application. This method is only accessible to whitelisted tester accounts for your application.

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

Returns:
  An object of the form:

    { # Achievement reset all response.
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `gamesManagement#achievementResetAllResponse`.
  &quot;results&quot;: [ # The achievement reset results.
    { # An achievement reset response.
      &quot;currentState&quot;: &quot;A String&quot;, # The current state of the achievement. This is the same as the initial state of the achievement. Possible values are: - &quot;`HIDDEN`&quot;- Achievement is hidden. - &quot;`REVEALED`&quot; - Achievement is revealed. - &quot;`UNLOCKED`&quot; - Achievement is unlocked.
      &quot;definitionId&quot;: &quot;A String&quot;, # The ID of an achievement for which player state has been updated.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `gamesManagement#achievementResetResponse`.
      &quot;updateOccurred&quot;: True or False, # Flag to indicate if the requested update actually occurred.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="resetAllForAllPlayers">resetAllForAllPlayers(x__xgafv=None)</code>
  <pre>Resets all draft achievements for all players. This method is only available to user accounts for your developer console.

Args:
  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="resetForAllPlayers">resetForAllPlayers(achievementId, x__xgafv=None)</code>
  <pre>Resets the achievement with the given ID for all players. This method is only available to user accounts for your developer console. Only draft achievements can be reset.

Args:
  achievementId: string, The ID of the achievement used by this method. (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="resetMultipleForAllPlayers">resetMultipleForAllPlayers(body=None, x__xgafv=None)</code>
  <pre>Resets achievements with the given IDs for all players. This method is only available to user accounts for your developer console. Only draft achievements may be reset.

Args:
  body: object, The request body.
    The object takes the form of:

{
  &quot;achievement_ids&quot;: [ # The IDs of achievements to reset.
    &quot;A String&quot;,
  ],
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `gamesManagement#achievementResetMultipleForAllRequest`.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

</body></html>