<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="adsense_v1_4.html">AdSense Management API</a> . <a href="adsense_v1_4.accounts.html">accounts</a> . <a href="adsense_v1_4.accounts.adunits.html">adunits</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="adsense_v1_4.accounts.adunits.customchannels.html">customchannels()</a></code>
</p>
<p class="firstline">Returns the customchannels Resource.</p>

<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="#get">get(accountId, adClientId, adUnitId)</a></code></p>
<p class="firstline">Gets the specified ad unit in the specified ad client for the specified account.</p>
<p class="toc_element">
  <code><a href="#getAdCode">getAdCode(accountId, adClientId, adUnitId)</a></code></p>
<p class="firstline">Get ad code for the specified ad unit.</p>
<p class="toc_element">
  <code><a href="#list">list(accountId, adClientId, includeInactive=None, maxResults=None, pageToken=None)</a></code></p>
<p class="firstline">List all ad units in the specified ad client for the specified account.</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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(accountId, adClientId, adUnitId)</code>
  <pre>Gets the specified ad unit in the specified ad client for the specified account.

Args:
  accountId: string, Account to which the ad client belongs. (required)
  adClientId: string, Ad client for which to get the ad unit. (required)
  adUnitId: string, Ad unit to retrieve. (required)

Returns:
  An object of the form:

    {
  &quot;code&quot;: &quot;A String&quot;, # Identity code of this ad unit, not necessarily unique across ad clients.
  &quot;contentAdsSettings&quot;: { # Settings specific to content ads (AFC) and highend mobile content ads (AFMC - deprecated).
    &quot;backupOption&quot;: { # The backup option to be used in instances where no ad is available.
      &quot;color&quot;: &quot;A String&quot;, # Color to use when type is set to COLOR.
      &quot;type&quot;: &quot;A String&quot;, # Type of the backup option. Possible values are BLANK, COLOR and URL.
      &quot;url&quot;: &quot;A String&quot;, # URL to use when type is set to URL.
    },
    &quot;size&quot;: &quot;A String&quot;, # Size of this ad unit.
    &quot;type&quot;: &quot;A String&quot;, # Type of this ad unit.
  },
  &quot;customStyle&quot;: { # Custom style information specific to this ad unit.
    &quot;colors&quot;: { # The colors which are included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.
      &quot;background&quot;: &quot;A String&quot;, # The color of the ad background.
      &quot;border&quot;: &quot;A String&quot;, # The color of the ad border.
      &quot;text&quot;: &quot;A String&quot;, # The color of the ad text.
      &quot;title&quot;: &quot;A String&quot;, # The color of the ad title.
      &quot;url&quot;: &quot;A String&quot;, # The color of the ad url.
    },
    &quot;corners&quot;: &quot;A String&quot;, # The style of the corners in the ad (deprecated: never populated, ignored).
    &quot;font&quot;: { # The font which is included in the style.
      &quot;family&quot;: &quot;A String&quot;, # The family of the font.
      &quot;size&quot;: &quot;A String&quot;, # The size of the font.
    },
    &quot;kind&quot;: &quot;adsense#adStyle&quot;, # Kind this is, in this case adsense#adStyle.
  },
  &quot;feedAdsSettings&quot;: { # Settings specific to feed ads (AFF) - deprecated.
    &quot;adPosition&quot;: &quot;A String&quot;, # The position of the ads relative to the feed entries.
    &quot;frequency&quot;: 42, # The frequency at which ads should appear in the feed (i.e. every N entries).
    &quot;minimumWordCount&quot;: 42, # The minimum length an entry should be in order to have attached ads.
    &quot;type&quot;: &quot;A String&quot;, # The type of ads which should appear.
  },
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
  &quot;kind&quot;: &quot;adsense#adUnit&quot;, # Kind of resource this is, in this case adsense#adUnit.
  &quot;mobileContentAdsSettings&quot;: { # Settings specific to WAP mobile content ads (AFMC) - deprecated.
    &quot;markupLanguage&quot;: &quot;A String&quot;, # The markup language to use for this ad unit.
    &quot;scriptingLanguage&quot;: &quot;A String&quot;, # The scripting language to use for this ad unit.
    &quot;size&quot;: &quot;A String&quot;, # Size of this ad unit.
    &quot;type&quot;: &quot;A String&quot;, # Type of this ad unit.
  },
  &quot;name&quot;: &quot;A String&quot;, # Name of this ad unit.
  &quot;savedStyleId&quot;: &quot;A String&quot;, # ID of the saved ad style which holds this ad unit&#x27;s style information.
  &quot;status&quot;: &quot;A String&quot;, # Status of this ad unit. Possible values are:
      # NEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.
      #
      # ACTIVE: Indicates that there has been activity on this ad unit in the last seven days.
      #
      # INACTIVE: Indicates that there has been no activity on this ad unit in the last seven days.
}</pre>
</div>

<div class="method">
    <code class="details" id="getAdCode">getAdCode(accountId, adClientId, adUnitId)</code>
  <pre>Get ad code for the specified ad unit.

Args:
  accountId: string, Account which contains the ad client. (required)
  adClientId: string, Ad client with contains the ad unit. (required)
  adUnitId: string, Ad unit to get the code for. (required)

Returns:
  An object of the form:

    {
  &quot;adCode&quot;: &quot;A String&quot;, # The Auto ad code snippet. The ad code snippet.
  &quot;ampBody&quot;: &quot;A String&quot;, # The AMP Auto ad code snippet that goes in the body of an AMP page.
  &quot;ampHead&quot;: &quot;A String&quot;, # The AMP Auto ad code snippet that goes in the head of an AMP page.
  &quot;kind&quot;: &quot;adsense#adCode&quot;, # Kind this is, in this case adsense#adCode.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(accountId, adClientId, includeInactive=None, maxResults=None, pageToken=None)</code>
  <pre>List all ad units in the specified ad client for the specified account.

Args:
  accountId: string, Account to which the ad client belongs. (required)
  adClientId: string, Ad client for which to list ad units. (required)
  includeInactive: boolean, Whether to include inactive ad units. Default: true.
  maxResults: integer, The maximum number of ad units to include in the response, used for paging.
  pageToken: string, A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of &quot;nextPageToken&quot; from the previous response.

Returns:
  An object of the form:

    {
  &quot;etag&quot;: &quot;A String&quot;, # ETag of this response for caching purposes.
  &quot;items&quot;: [ # The ad units returned in this list response.
    {
      &quot;code&quot;: &quot;A String&quot;, # Identity code of this ad unit, not necessarily unique across ad clients.
      &quot;contentAdsSettings&quot;: { # Settings specific to content ads (AFC) and highend mobile content ads (AFMC - deprecated).
        &quot;backupOption&quot;: { # The backup option to be used in instances where no ad is available.
          &quot;color&quot;: &quot;A String&quot;, # Color to use when type is set to COLOR.
          &quot;type&quot;: &quot;A String&quot;, # Type of the backup option. Possible values are BLANK, COLOR and URL.
          &quot;url&quot;: &quot;A String&quot;, # URL to use when type is set to URL.
        },
        &quot;size&quot;: &quot;A String&quot;, # Size of this ad unit.
        &quot;type&quot;: &quot;A String&quot;, # Type of this ad unit.
      },
      &quot;customStyle&quot;: { # Custom style information specific to this ad unit.
        &quot;colors&quot;: { # The colors which are included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.
          &quot;background&quot;: &quot;A String&quot;, # The color of the ad background.
          &quot;border&quot;: &quot;A String&quot;, # The color of the ad border.
          &quot;text&quot;: &quot;A String&quot;, # The color of the ad text.
          &quot;title&quot;: &quot;A String&quot;, # The color of the ad title.
          &quot;url&quot;: &quot;A String&quot;, # The color of the ad url.
        },
        &quot;corners&quot;: &quot;A String&quot;, # The style of the corners in the ad (deprecated: never populated, ignored).
        &quot;font&quot;: { # The font which is included in the style.
          &quot;family&quot;: &quot;A String&quot;, # The family of the font.
          &quot;size&quot;: &quot;A String&quot;, # The size of the font.
        },
        &quot;kind&quot;: &quot;adsense#adStyle&quot;, # Kind this is, in this case adsense#adStyle.
      },
      &quot;feedAdsSettings&quot;: { # Settings specific to feed ads (AFF) - deprecated.
        &quot;adPosition&quot;: &quot;A String&quot;, # The position of the ads relative to the feed entries.
        &quot;frequency&quot;: 42, # The frequency at which ads should appear in the feed (i.e. every N entries).
        &quot;minimumWordCount&quot;: 42, # The minimum length an entry should be in order to have attached ads.
        &quot;type&quot;: &quot;A String&quot;, # The type of ads which should appear.
      },
      &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
      &quot;kind&quot;: &quot;adsense#adUnit&quot;, # Kind of resource this is, in this case adsense#adUnit.
      &quot;mobileContentAdsSettings&quot;: { # Settings specific to WAP mobile content ads (AFMC) - deprecated.
        &quot;markupLanguage&quot;: &quot;A String&quot;, # The markup language to use for this ad unit.
        &quot;scriptingLanguage&quot;: &quot;A String&quot;, # The scripting language to use for this ad unit.
        &quot;size&quot;: &quot;A String&quot;, # Size of this ad unit.
        &quot;type&quot;: &quot;A String&quot;, # Type of this ad unit.
      },
      &quot;name&quot;: &quot;A String&quot;, # Name of this ad unit.
      &quot;savedStyleId&quot;: &quot;A String&quot;, # ID of the saved ad style which holds this ad unit&#x27;s style information.
      &quot;status&quot;: &quot;A String&quot;, # Status of this ad unit. Possible values are:
          # NEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.
          #
          # ACTIVE: Indicates that there has been activity on this ad unit in the last seven days.
          #
          # INACTIVE: Indicates that there has been no activity on this ad unit in the last seven days.
    },
  ],
  &quot;kind&quot;: &quot;adsense#adUnits&quot;, # Kind of list this is, in this case adsense#adUnits.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Continuation token used to page through ad units. To retrieve the next page of results, set the next request&#x27;s &quot;pageToken&quot; value to this.
}</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>