<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 Services Management API</a> . <a href="gamesManagement_v1management.achievements.html">achievements</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#reset">reset(achievementId)</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()</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()</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)</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)</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="reset">reset(achievementId)</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)

Returns:
  An object of the form:

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

<div class="method">
    <code class="details" id="resetAll">resetAll()</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:

Returns:
  An object of the form:

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

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

Args:
</pre>
</div>

<div class="method">
    <code class="details" id="resetForAllPlayers">resetForAllPlayers(achievementId)</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)
</pre>
</div>

<div class="method">
    <code class="details" id="resetMultipleForAllPlayers">resetMultipleForAllPlayers(body)</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. (required)
    The object takes the form of:

{ # This is a JSON template for multiple achievements reset all request.
    "achievement_ids": [ # The IDs of achievements to reset.
      "A String",
    ],
    "kind": "gamesManagement#achievementResetMultipleForAllRequest", # Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#achievementResetMultipleForAllRequest.
  }

</pre>
</div>

</body></html>