<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="games_v1.html">Google Play Game Services</a> . <a href="games_v1.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="#increment">increment(achievementId, stepsToIncrement, requestId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Increments the steps of the achievement with the given ID for the currently authenticated player.</p>
<p class="toc_element">
  <code><a href="#list">list(playerId, maxResults=None, pageToken=None, state=None, language=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the progress for all your application's achievements for the currently authenticated player.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#reveal">reveal(achievementId, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the state of the achievement with the given ID to `REVEALED` for the currently authenticated player.</p>
<p class="toc_element">
  <code><a href="#setStepsAtLeast">setStepsAtLeast(achievementId, steps, x__xgafv=None)</a></code></p>
<p class="firstline">Sets the steps for the currently authenticated player towards unlocking an achievement. If the steps parameter is less than the current number of steps that the player already gained for the achievement, the achievement is not modified.</p>
<p class="toc_element">
  <code><a href="#unlock">unlock(achievementId, x__xgafv=None)</a></code></p>
<p class="firstline">Unlocks this achievement for the currently authenticated player.</p>
<p class="toc_element">
  <code><a href="#updateMultiple">updateMultiple(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates multiple achievements for the currently authenticated player.</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="increment">increment(achievementId, stepsToIncrement, requestId=None, x__xgafv=None)</code>
  <pre>Increments the steps of the achievement with the given ID for the currently authenticated player.

Args:
  achievementId: string, The ID of the achievement used by this method. (required)
  stepsToIncrement: integer, The number of steps to increment. (required)
  requestId: string, A randomly generated numeric ID for each request specified by the caller. This number is used at the server to ensure that the request is handled correctly across retries.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An achievement increment response
    &quot;newlyUnlocked&quot;: True or False, # Whether the current steps for the achievement has reached the number of steps required to unlock.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementIncrementResponse`.
    &quot;currentSteps&quot;: 42, # The current steps recorded for this incremental achievement.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(playerId, maxResults=None, pageToken=None, state=None, language=None, x__xgafv=None)</code>
  <pre>Lists the progress for all your application&#x27;s achievements for the currently authenticated player.

Args:
  playerId: string, A player ID. A value of `me` may be used in place of the authenticated player&#x27;s ID. (required)
  maxResults: integer, The maximum number of achievement resources to return in the response, used for paging. For any response, the actual number of achievement resources returned may be less than the specified `maxResults`.
  pageToken: string, The token returned by the previous request.
  state: string, Tells the server to return only achievements with the specified state. If this parameter isn&#x27;t specified, all achievements are returned.
    Allowed values
      ALL - List all achievements. This is the default.
      HIDDEN - List only hidden achievements.
      REVEALED - List only revealed achievements.
      UNLOCKED - List only unlocked achievements.
  language: string, The preferred language to use for strings returned by this method.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A list of achievement objects.
    &quot;items&quot;: [ # The achievements.
      { # An achievement object.
        &quot;lastUpdatedTimestamp&quot;: &quot;A String&quot;, # The timestamp of the last modification to this achievement&#x27;s state.
        &quot;formattedCurrentStepsString&quot;: &quot;A String&quot;, # The current steps for an incremental achievement as a string.
        &quot;experiencePoints&quot;: &quot;A String&quot;, # Experience points earned for the achievement. This field is absent for achievements that have not yet been unlocked and 0 for achievements that have been unlocked by testers but that are unpublished.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#playerAchievement`.
        &quot;currentSteps&quot;: 42, # The current steps for an incremental achievement.
        &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
        &quot;achievementState&quot;: &quot;A String&quot;, # The state of the achievement.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token corresponding to the next page of results.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#playerAchievementListResponse`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</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="reveal">reveal(achievementId, x__xgafv=None)</code>
  <pre>Sets the state of the achievement with the given ID to `REVEALED` for the currently authenticated player.

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 reveal response
    &quot;currentState&quot;: &quot;A String&quot;, # The current state of the achievement for which a reveal was attempted. This might be `UNLOCKED` if the achievement was already unlocked.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementRevealResponse`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="setStepsAtLeast">setStepsAtLeast(achievementId, steps, x__xgafv=None)</code>
  <pre>Sets the steps for the currently authenticated player towards unlocking an achievement. If the steps parameter is less than the current number of steps that the player already gained for the achievement, the achievement is not modified.

Args:
  achievementId: string, The ID of the achievement used by this method. (required)
  steps: integer, The minimum value to set the steps to. (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 set steps at least response.
    &quot;newlyUnlocked&quot;: True or False, # Whether the current steps for the achievement has reached the number of steps required to unlock.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementSetStepsAtLeastResponse`.
    &quot;currentSteps&quot;: 42, # The current steps recorded for this incremental achievement.
  }</pre>
</div>

<div class="method">
    <code class="details" id="unlock">unlock(achievementId, x__xgafv=None)</code>
  <pre>Unlocks this achievement for the currently authenticated player.

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 unlock response
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementUnlockResponse`.
    &quot;newlyUnlocked&quot;: True or False, # Whether this achievement was newly unlocked (that is, whether the unlock request for the achievement was the first for the player).
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateMultiple">updateMultiple(body=None, x__xgafv=None)</code>
  <pre>Updates multiple achievements for the currently authenticated player.

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

{ # A list of achievement update requests.
    &quot;updates&quot;: [ # The individual achievement update requests.
      { # A request to update an achievement.
        &quot;updateType&quot;: &quot;A String&quot;, # The type of update being applied.
        &quot;achievementId&quot;: &quot;A String&quot;, # The achievement this update is being applied to.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementUpdateRequest`.
        &quot;incrementPayload&quot;: { # The payload to request to increment an achievement. # The payload if an update of type `INCREMENT` was requested for the achievement.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#GamesAchievementIncrement`.
          &quot;requestId&quot;: &quot;A String&quot;, # The requestId associated with an increment to an achievement.
          &quot;steps&quot;: 42, # The number of steps to be incremented.
        },
        &quot;setStepsAtLeastPayload&quot;: { # The payload to request to increment an achievement. # The payload if an update of type `SET_STEPS_AT_LEAST` was requested for the achievement.
          &quot;steps&quot;: 42, # The minimum number of steps for the achievement to be set to.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#GamesAchievementSetStepsAtLeast`.
        },
      },
    ],
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementUpdateMultipleRequest`.
  }

  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 UpdateMultipleAchievements rpc.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementUpdateMultipleResponse`.
    &quot;updatedAchievements&quot;: [ # The updated state of the achievements.
      { # An updated achievement.
        &quot;achievementId&quot;: &quot;A String&quot;, # The achievement this update is was applied to.
        &quot;currentState&quot;: &quot;A String&quot;, # The current state of the achievement.
        &quot;currentSteps&quot;: 42, # The current steps recorded for this achievement if it is incremental.
        &quot;newlyUnlocked&quot;: True or False, # Whether this achievement was newly unlocked (that is, whether the unlock request for the achievement was the first for the player).
        &quot;updateOccurred&quot;: True or False, # Whether the requested updates actually affected the achievement.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed string `games#achievementUpdateResponse`.
      },
    ],
  }</pre>
</div>

</body></html>