<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="adsensehost_v4_1.html">AdSense Host API</a> . <a href="adsensehost_v4_1.associationsessions.html">associationsessions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#start">start(productCode, websiteUrl, websiteLocale=None, userLocale=None)</a></code></p>
<p class="firstline">Create an association session for initiating an association with an AdSense user.</p>
<p class="toc_element">
  <code><a href="#verify">verify(token)</a></code></p>
<p class="firstline">Verify an association session after the association callback returns from AdSense signup.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="start">start(productCode, websiteUrl, websiteLocale=None, userLocale=None)</code>
  <pre>Create an association session for initiating an association with an AdSense user.

Args:
  productCode: string, Products to associate with the user. (required) (repeated)
    Allowed values
      AFC - AdSense For Content
      AFG - AdSense For Games
      AFMC - AdSense For Mobile Content - deprecated
      AFS - AdSense For Search - deprecated
      AFV - AdSense For Video
  websiteUrl: string, The URL of the user's hosted website. (required)
  websiteLocale: string, The locale of the user's hosted website.
  userLocale: string, The preferred locale of the user.

Returns:
  An object of the form:

    {
    "status": "A String", # Status of the completed association, available once the association callback token has been verified. One of ACCEPTED, REJECTED, or ERROR.
    "productCodes": [ # The products to associate with the user. Options: AFC, AFG, AFV, AFS (deprecated), AFMC (deprecated)
      "A String",
    ],
    "kind": "adsensehost#associationSession", # Kind of resource this is, in this case adsensehost#associationSession.
    "userLocale": "A String", # The preferred locale of the user themselves when going through the AdSense association flow.
    "websiteLocale": "A String", # The locale of the user's hosted website.
    "redirectUrl": "A String", # Redirect URL of this association session. Used to redirect users into the AdSense association flow.
    "websiteUrl": "A String", # The URL of the user's hosted website.
    "id": "A String", # Unique identifier of this association session.
    "accountId": "A String", # Hosted account id of the associated publisher after association. Present if status is ACCEPTED.
  }</pre>
</div>

<div class="method">
    <code class="details" id="verify">verify(token)</code>
  <pre>Verify an association session after the association callback returns from AdSense signup.

Args:
  token: string, The token returned to the association callback URL. (required)

Returns:
  An object of the form:

    {
    "status": "A String", # Status of the completed association, available once the association callback token has been verified. One of ACCEPTED, REJECTED, or ERROR.
    "productCodes": [ # The products to associate with the user. Options: AFC, AFG, AFV, AFS (deprecated), AFMC (deprecated)
      "A String",
    ],
    "kind": "adsensehost#associationSession", # Kind of resource this is, in this case adsensehost#associationSession.
    "userLocale": "A String", # The preferred locale of the user themselves when going through the AdSense association flow.
    "websiteLocale": "A String", # The locale of the user's hosted website.
    "redirectUrl": "A String", # Redirect URL of this association session. Used to redirect users into the AdSense association flow.
    "websiteUrl": "A String", # The URL of the user's hosted website.
    "id": "A String", # Unique identifier of this association session.
    "accountId": "A String", # Hosted account id of the associated publisher after association. Present if status is ACCEPTED.
  }</pre>
</div>

</body></html>