<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="gamesConfiguration_v1configuration.html">Google Play Game Services Publishing API</a> . <a href="gamesConfiguration_v1configuration.achievementConfigurations.html">achievementConfigurations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(achievementId, x__xgafv=None)</a></code></p>
<p class="firstline">Delete the achievement configuration with the given ID.</p>
<p class="toc_element">
  <code><a href="#get">get(achievementId, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the metadata of the achievement configuration with the given ID.</p>
<p class="toc_element">
  <code><a href="#insert">insert(applicationId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Insert a new achievement configuration in this application.</p>
<p class="toc_element">
  <code><a href="#list">list(applicationId, maxResults=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of the achievement configurations in this 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>
<p class="toc_element">
  <code><a href="#update">update(achievementId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Update the metadata of the achievement configuration with the given ID.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(achievementId, x__xgafv=None)</code>
  <pre>Delete the achievement configuration with the given ID.

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="get">get(achievementId, x__xgafv=None)</code>
  <pre>Retrieves the metadata of the achievement configuration with the given ID.

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 configuration resource.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfiguration`.
    &quot;published&quot;: { # An achievement configuration detail. # The read-only published data of the achievement.
      &quot;pointValue&quot;: 42, # Point value for the achievement.
      &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#achievementConfigurationDetail`.
      &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
    },
    &quot;draft&quot;: { # An achievement configuration detail. # The draft data of the achievement.
      &quot;pointValue&quot;: 42, # Point value for the achievement.
      &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#achievementConfigurationDetail`.
      &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
    },
    &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
    &quot;token&quot;: &quot;A String&quot;, # The token for this resource.
    &quot;stepsToUnlock&quot;: 42, # Steps to unlock.  Only applicable to incremental achievements.
    &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(applicationId, body=None, x__xgafv=None)</code>
  <pre>Insert a new achievement configuration in this application.

Args:
  applicationId: string, The application ID from the Google Play developer console. (required)
  body: object, The request body.
    The object takes the form of:

{ # An achievement configuration resource.
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
      # string `gamesConfiguration#achievementConfiguration`.
  &quot;published&quot;: { # An achievement configuration detail. # The read-only published data of the achievement.
    &quot;pointValue&quot;: 42, # Point value for the achievement.
    &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfigurationDetail`.
    &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
  },
  &quot;draft&quot;: { # An achievement configuration detail. # The draft data of the achievement.
    &quot;pointValue&quot;: 42, # Point value for the achievement.
    &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfigurationDetail`.
    &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
  },
  &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
  &quot;token&quot;: &quot;A String&quot;, # The token for this resource.
  &quot;stepsToUnlock&quot;: 42, # Steps to unlock.  Only applicable to incremental achievements.
  &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
}

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

Returns:
  An object of the form:

    { # An achievement configuration resource.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfiguration`.
    &quot;published&quot;: { # An achievement configuration detail. # The read-only published data of the achievement.
      &quot;pointValue&quot;: 42, # Point value for the achievement.
      &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#achievementConfigurationDetail`.
      &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
    },
    &quot;draft&quot;: { # An achievement configuration detail. # The draft data of the achievement.
      &quot;pointValue&quot;: 42, # Point value for the achievement.
      &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#achievementConfigurationDetail`.
      &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
    },
    &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
    &quot;token&quot;: &quot;A String&quot;, # The token for this resource.
    &quot;stepsToUnlock&quot;: 42, # Steps to unlock.  Only applicable to incremental achievements.
    &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(applicationId, maxResults=None, pageToken=None, x__xgafv=None)</code>
  <pre>Returns a list of the achievement configurations in this application.

Args:
  applicationId: string, The application ID from the Google Play developer console. (required)
  maxResults: integer, The maximum number of resource configurations to return in the response,
used for paging. For any response, the actual number of resources returned
may be less than the specified `maxResults`.
  pageToken: string, The token returned by the previous request.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A ListConfigurations response.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token for 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 `gamesConfiguration#achievementConfigurationListResponse`.
    &quot;items&quot;: [ # The achievement configurations.
      { # An achievement configuration resource.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#achievementConfiguration`.
        &quot;published&quot;: { # An achievement configuration detail. # The read-only published data of the achievement.
          &quot;pointValue&quot;: 42, # Point value for the achievement.
          &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#achievementConfigurationDetail`.
          &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedStringBundle`.
            &quot;translations&quot;: [ # The locale strings.
              { # A localized string resource.
                &quot;locale&quot;: &quot;A String&quot;, # The locale string.
                &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                    # string `gamesConfiguration#localizedString`.
                &quot;value&quot;: &quot;A String&quot;, # The string value.
              },
            ],
          },
          &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedStringBundle`.
            &quot;translations&quot;: [ # The locale strings.
              { # A localized string resource.
                &quot;locale&quot;: &quot;A String&quot;, # The locale string.
                &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                    # string `gamesConfiguration#localizedString`.
                &quot;value&quot;: &quot;A String&quot;, # The string value.
              },
            ],
          },
          &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
        },
        &quot;draft&quot;: { # An achievement configuration detail. # The draft data of the achievement.
          &quot;pointValue&quot;: 42, # Point value for the achievement.
          &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#achievementConfigurationDetail`.
          &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedStringBundle`.
            &quot;translations&quot;: [ # The locale strings.
              { # A localized string resource.
                &quot;locale&quot;: &quot;A String&quot;, # The locale string.
                &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                    # string `gamesConfiguration#localizedString`.
                &quot;value&quot;: &quot;A String&quot;, # The string value.
              },
            ],
          },
          &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedStringBundle`.
            &quot;translations&quot;: [ # The locale strings.
              { # A localized string resource.
                &quot;locale&quot;: &quot;A String&quot;, # The locale string.
                &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                    # string `gamesConfiguration#localizedString`.
                &quot;value&quot;: &quot;A String&quot;, # The string value.
              },
            ],
          },
          &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
        },
        &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
        &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
        &quot;token&quot;: &quot;A String&quot;, # The token for this resource.
        &quot;stepsToUnlock&quot;: 42, # Steps to unlock.  Only applicable to incremental achievements.
        &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
      },
    ],
  }</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="update">update(achievementId, body=None, x__xgafv=None)</code>
  <pre>Update the metadata of the achievement configuration with the given ID.

Args:
  achievementId: string, The ID of the achievement used by this method. (required)
  body: object, The request body.
    The object takes the form of:

{ # An achievement configuration resource.
  &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
      # string `gamesConfiguration#achievementConfiguration`.
  &quot;published&quot;: { # An achievement configuration detail. # The read-only published data of the achievement.
    &quot;pointValue&quot;: 42, # Point value for the achievement.
    &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfigurationDetail`.
    &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
  },
  &quot;draft&quot;: { # An achievement configuration detail. # The draft data of the achievement.
    &quot;pointValue&quot;: 42, # Point value for the achievement.
    &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfigurationDetail`.
    &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#localizedStringBundle`.
      &quot;translations&quot;: [ # The locale strings.
        { # A localized string resource.
          &quot;locale&quot;: &quot;A String&quot;, # The locale string.
          &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
              # string `gamesConfiguration#localizedString`.
          &quot;value&quot;: &quot;A String&quot;, # The string value.
        },
      ],
    },
    &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
  },
  &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
  &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
  &quot;token&quot;: &quot;A String&quot;, # The token for this resource.
  &quot;stepsToUnlock&quot;: 42, # Steps to unlock.  Only applicable to incremental achievements.
  &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
}

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

Returns:
  An object of the form:

    { # An achievement configuration resource.
    &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
        # string `gamesConfiguration#achievementConfiguration`.
    &quot;published&quot;: { # An achievement configuration detail. # The read-only published data of the achievement.
      &quot;pointValue&quot;: 42, # Point value for the achievement.
      &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#achievementConfigurationDetail`.
      &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
    },
    &quot;draft&quot;: { # An achievement configuration detail. # The draft data of the achievement.
      &quot;pointValue&quot;: 42, # Point value for the achievement.
      &quot;sortRank&quot;: 42, # The sort rank of this achievement. Writes to this field are ignored.
      &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
          # string `gamesConfiguration#achievementConfigurationDetail`.
      &quot;description&quot;: { # A localized string bundle resource. # Localized strings for the achievement description.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;name&quot;: { # A localized string bundle resource. # Localized strings for the achievement name.
        &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
            # string `gamesConfiguration#localizedStringBundle`.
        &quot;translations&quot;: [ # The locale strings.
          { # A localized string resource.
            &quot;locale&quot;: &quot;A String&quot;, # The locale string.
            &quot;kind&quot;: &quot;A String&quot;, # Uniquely identifies the type of this resource. Value is always the fixed
                # string `gamesConfiguration#localizedString`.
            &quot;value&quot;: &quot;A String&quot;, # The string value.
          },
        ],
      },
      &quot;iconUrl&quot;: &quot;A String&quot;, # The icon url of this achievement. Writes to this field are ignored.
    },
    &quot;initialState&quot;: &quot;A String&quot;, # The initial state of the achievement.
    &quot;id&quot;: &quot;A String&quot;, # The ID of the achievement.
    &quot;token&quot;: &quot;A String&quot;, # The token for this resource.
    &quot;stepsToUnlock&quot;: 42, # Steps to unlock.  Only applicable to incremental achievements.
    &quot;achievementType&quot;: &quot;A String&quot;, # The type of the achievement.
  }</pre>
</div>

</body></html>