<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.customchannels.html">customchannels</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(adClientId, customChannelId)</a></code></p>
<p class="firstline">Delete a specific custom channel from the host AdSense account.</p>
<p class="toc_element">
  <code><a href="#get">get(adClientId, customChannelId)</a></code></p>
<p class="firstline">Get a specific custom channel from the host AdSense account.</p>
<p class="toc_element">
  <code><a href="#insert">insert(adClientId, body=None)</a></code></p>
<p class="firstline">Add a new custom channel to the host AdSense account.</p>
<p class="toc_element">
  <code><a href="#list">list(adClientId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">List all host custom channels in this AdSense 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>
<p class="toc_element">
  <code><a href="#patch">patch(adClientId, customChannelId, body=None)</a></code></p>
<p class="firstline">Update a custom channel in the host AdSense account. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(adClientId, body=None)</a></code></p>
<p class="firstline">Update a custom channel in the host AdSense account.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(adClientId, customChannelId)</code>
  <pre>Delete a specific custom channel from the host AdSense account.

Args:
  adClientId: string, Ad client from which to delete the custom channel. (required)
  customChannelId: string, Custom channel to delete. (required)

Returns:
  An object of the form:

    {
    &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
    &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
    &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(adClientId, customChannelId)</code>
  <pre>Get a specific custom channel from the host AdSense account.

Args:
  adClientId: string, Ad client from which to get the custom channel. (required)
  customChannelId: string, Custom channel to get. (required)

Returns:
  An object of the form:

    {
    &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
    &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
    &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(adClientId, body=None)</code>
  <pre>Add a new custom channel to the host AdSense account.

Args:
  adClientId: string, Ad client to which the new custom channel will be added. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
  &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
  &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
}


Returns:
  An object of the form:

    {
    &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
    &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
    &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(adClientId, pageToken=None, maxResults=None)</code>
  <pre>List all host custom channels in this AdSense account.

Args:
  adClientId: string, Ad client for which to list custom channels. (required)
  pageToken: string, A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of &quot;nextPageToken&quot; from the previous response.
  maxResults: integer, The maximum number of custom channels to include in the response, used for paging.

Returns:
  An object of the form:

    {
    &quot;nextPageToken&quot;: &quot;A String&quot;, # Continuation token used to page through custom channels. To retrieve the next page of results, set the next request&#x27;s &quot;pageToken&quot; value to this.
    &quot;kind&quot;: &quot;adsensehost#customChannels&quot;, # Kind of list this is, in this case adsensehost#customChannels.
    &quot;etag&quot;: &quot;A String&quot;, # ETag of this response for caching purposes.
    &quot;items&quot;: [ # The custom channels returned in this list response.
      {
        &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
        &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
        &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
        &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
      },
    ],
  }</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="patch">patch(adClientId, customChannelId, body=None)</code>
  <pre>Update a custom channel in the host AdSense account. This method supports patch semantics.

Args:
  adClientId: string, Ad client in which the custom channel will be updated. (required)
  customChannelId: string, Custom channel to get. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
  &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
  &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
}


Returns:
  An object of the form:

    {
    &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
    &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
    &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(adClientId, body=None)</code>
  <pre>Update a custom channel in the host AdSense account.

Args:
  adClientId: string, Ad client in which the custom channel will be updated. (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
  &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
  &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
  &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
}


Returns:
  An object of the form:

    {
    &quot;name&quot;: &quot;A String&quot;, # Name of this custom channel.
    &quot;id&quot;: &quot;A String&quot;, # Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format.
    &quot;kind&quot;: &quot;adsensehost#customChannel&quot;, # Kind of resource this is, in this case adsensehost#customChannel.
    &quot;code&quot;: &quot;A String&quot;, # Code of this custom channel, not necessarily unique across ad clients.
  }</pre>
</div>

</body></html>