<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.achievementDefinitions.html">achievementDefinitions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(maxResults=None, pageToken=None, language=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all the achievement definitions for your application.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(maxResults=None, pageToken=None, language=None, x__xgafv=None)</code>
  <pre>Lists all the achievement definitions for your application.

Args:
  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.
  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 definition objects.
    &quot;items&quot;: [ # The achievement definitions.
      { # An achievement definition object.
        &quot;name&quot;: &quot;A String&quot;, # The name of the achievement.
        &quot;description&quot;: &quot;A String&quot;, # The description of the achievement.
        &quot;unlockedIconUrl&quot;: &quot;A String&quot;, # The image URL for the unlocked achievement icon.
        &quot;totalSteps&quot;: 42, # The total steps for an incremental achievement.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `games#achievementDefinition`.
        &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
        &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
        &quot;experiencePoints&quot;: &quot;A String&quot;, # Experience points which will be earned when unlocking this achievement.
        &quot;isRevealedIconUrlDefault&quot;: True or False, # Indicates whether the revealed icon image being returned is a default
            # image, or is provided by the game.
        &quot;revealedIconUrl&quot;: &quot;A String&quot;, # The image URL for the revealed achievement icon.
        &quot;isUnlockedIconUrlDefault&quot;: True or False, # Indicates whether the unlocked icon image being returned is a default
            # image, or is game-provided.
        &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
        &quot;formattedTotalSteps&quot;: &quot;A String&quot;, # The total steps for an incremental achievement as a string.
      },
    ],
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `games#achievementDefinitionsListResponse`.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Token corresponding to the next page of results.
  }</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>

</body></html>