diff --git a/samples/adsensehost/README b/samples/adsensehost/README
new file mode 100644
index 0000000..d282c85
--- /dev/null
+++ b/samples/adsensehost/README
@@ -0,0 +1,4 @@
+A collection of command-line samples for the AdSense Host API.
+
+api: adsensehost
+keywords: cmdline
diff --git a/samples/adsensehost/add_ad_unit_to_publisher.py b/samples/adsensehost/add_ad_unit_to_publisher.py
new file mode 100644
index 0000000..e569866
--- /dev/null
+++ b/samples/adsensehost/add_ad_unit_to_publisher.py
@@ -0,0 +1,92 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example adds a new ad unit to a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+
+Tags: accounts.adunits.insert
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'account_id',
+    help='The ID of the pub account on which to create the ad unit')
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client on which to create the ad unit')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  account_id = flags.account_id
+  ad_client_id = flags.ad_client_id
+
+  try:
+    ad_unit = {
+        'name': 'Ad Unit #%s' % GetUniqueName(),
+        'contentAdsSettings': {
+            'backupOption': {
+                'type': 'COLOR',
+                'color': 'ffffff'
+            },
+            'size': 'SIZE_200_200',
+            'type': 'TEXT'
+        },
+        'customStyle': {
+            'colors': {
+                'background': 'ffffff',
+                'border': '000000',
+                'text': '000000',
+                'title': '000000',
+                'url': '0000ff'
+            },
+            'corners': 'SQUARE',
+            'font': {
+                'family': 'ACCOUNT_DEFAULT_FAMILY',
+                'size': 'ACCOUNT_DEFAULT_SIZE'
+            }
+        }
+    }
+
+    # Create ad unit.
+    request = service.accounts().adunits().insert(adClientId=ad_client_id,
+                                                  accountId=account_id,
+                                                  body=ad_unit)
+
+    result = request.execute()
+    print ('Ad unit of type "%s", name "%s" and status "%s" was created.' %
+           (result['contentAdsSettings']['type'], result['name'],
+            result['status']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/add_custom_channel_to_host.py b/samples/adsensehost/add_custom_channel_to_host.py
new file mode 100644
index 0000000..d992b22
--- /dev/null
+++ b/samples/adsensehost/add_custom_channel_to_host.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example adds a custom channel to a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: customchannels.insert
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client on which to create the custom channel')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+
+  try:
+    custom_channel = {
+        'name': 'Sample Channel #%s' % GetUniqueName()
+    }
+
+    # Add custom channel.
+    request = service.customchannels().insert(adClientId=ad_client_id,
+                                              body=custom_channel)
+
+    result = request.execute()
+    print ('Custom channel with id "%s", code "%s" and name "%s" was created.'
+           % (result['id'], result['code'], result['name']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/add_url_channel_to_host.py b/samples/adsensehost/add_url_channel_to_host.py
new file mode 100644
index 0000000..012ba75
--- /dev/null
+++ b/samples/adsensehost/add_url_channel_to_host.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example adds a URL channel to a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: urlchannels.insert
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client on which to create the URL channel')
+argparser.add_argument(
+    'url_pattern',
+    help='The URL pattern for the new custom channel')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+  url_pattern = flags.url_pattern
+
+  try:
+    custom_channel = {
+        'urlPattern': url_pattern
+    }
+
+    # Add URL channel.
+    request = service.urlchannels().insert(adClientId=ad_client_id,
+                                           body=custom_channel)
+
+    result = request.execute()
+    print ('URL channel with id "%s" and URL pattern "%s" was created.' %
+           (result['id'], result['urlPattern']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/client_secrets.json b/samples/adsensehost/client_secrets.json
new file mode 100644
index 0000000..323ffd0
--- /dev/null
+++ b/samples/adsensehost/client_secrets.json
@@ -0,0 +1,9 @@
+{
+  "installed": {
+    "client_id": "[[INSERT CLIENT ID HERE]]",
+    "client_secret": "[[INSERT CLIENT SECRET HERE]]",
+    "redirect_uris": [],
+    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+    "token_uri": "https://accounts.google.com/o/oauth2/token"
+  }
+}
diff --git a/samples/adsensehost/delete_ad_unit_on_publisher.py b/samples/adsensehost/delete_ad_unit_on_publisher.py
new file mode 100644
index 0000000..d471bcd
--- /dev/null
+++ b/samples/adsensehost/delete_ad_unit_on_publisher.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example deletes an ad unit on a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+To get ad units, run get_all_ad_units_for_publisher.py.
+
+Tags: accounts.adunits.delete
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'account_id',
+    help='The ID of the pub account on which the ad unit exists')
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client on which the ad unit exists')
+argparser.add_argument(
+    'ad_unit_id',
+    help='The ID of the ad unit to be deleted')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  account_id = flags.account_id
+  ad_client_id = flags.ad_client_id
+  ad_unit_id = flags.ad_unit_id
+
+  try:
+    # Delete ad unit.
+    request = service.accounts().adunits().delete(accountId=account_id,
+                                                  adClientId=ad_client_id,
+                                                  adUnitId=ad_unit_id)
+
+    result = request.execute()
+    print 'Ad unit with ID "%s" was deleted.' % result['id']
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/delete_custom_channel_on_host.py b/samples/adsensehost/delete_custom_channel_on_host.py
new file mode 100644
index 0000000..c2b59d7
--- /dev/null
+++ b/samples/adsensehost/delete_custom_channel_on_host.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example deletes a custom channel on a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+To get custom channels, run get_all_custom_channels_for_host.py.
+
+Tags: customchannels.delete
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ad client ID that contains the custom channel')
+argparser.add_argument(
+    'custom_channel_id',
+    help='The ID of the custom channel to be deleted')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+  custom_channel_id = flags.custom_channel_id
+
+  try:
+    # Delete custom channel.
+    request = service.customchannels().delete(
+        adClientId=ad_client_id, customChannelId=custom_channel_id)
+
+    result = request.execute()
+    print 'Custom channel with ID "%s" was deleted.' % result['id']
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/delete_url_channel_on_host.py b/samples/adsensehost/delete_url_channel_on_host.py
new file mode 100644
index 0000000..e1e84cb
--- /dev/null
+++ b/samples/adsensehost/delete_url_channel_on_host.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example deletes a URL channel on a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+To get URL channels, run get_all_url_channels_for_host.py.
+
+Tags: urlchannels.delete
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ad client ID that contains the URL channel')
+argparser.add_argument(
+    'url_channel_id',
+    help='The ID of the URL channel to be deleted')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+  url_channel_id = flags.url_channel_id
+
+  try:
+    # Delete URL channel.
+    request = service.urlchannels().delete(adClientId=ad_client_id,
+                                           urlChannelId=url_channel_id)
+
+    result = request.execute()
+    print 'URL channel with ID "%s" was deleted.' % result['id']
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/generate_report_for_host.py b/samples/adsensehost/generate_report_for_host.py
new file mode 100644
index 0000000..ccbfa68
--- /dev/null
+++ b/samples/adsensehost/generate_report_for_host.py
@@ -0,0 +1,75 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example retrieves a report for the specified host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: reports.generate
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client for which to generate a report')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+
+  try:
+    # Retrieve report.
+    result = service.reports().generate(
+        startDate='2011-01-01',
+        endDate='2011-08-31',
+        filter=['AD_CLIENT_ID==' + ad_client_id],
+        metric=['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE',
+                'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK',
+                'AD_REQUESTS_RPM', 'EARNINGS'],
+        dimension=['DATE'],
+        sort=['+DATE']).execute()
+
+    if 'rows' in result:
+      # Display headers.
+      for header in result['headers']:
+        print '%25s' % header['name'],
+      print
+      # Display results.
+      for row in result['rows']:
+        for column in row:
+          print '%25s' % column,
+        print
+    else:
+      print 'No rows returned.'
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/generate_report_for_publisher.py b/samples/adsensehost/generate_report_for_publisher.py
new file mode 100644
index 0000000..75f8575
--- /dev/null
+++ b/samples/adsensehost/generate_report_for_publisher.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example retrieves a report for the specified publisher ad client.
+
+Note that the statistics returned in these reports only include data from ad
+units created with the AdSense Host API v4.x.
+To create ad units, run add_ad_unit_to_publisher.py.
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+
+Tags: accounts.reports.generate
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'account_id',
+    help='The ID of the publisher account for which to generate a report')
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client for which to generate a report')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+  account_id = flags.account_id
+
+  try:
+    # Retrieve report.
+    result = service.accounts().reports().generate(
+        accountId=account_id,
+        startDate='2011-01-01',
+        endDate='2011-08-31',
+        filter=['AD_CLIENT_ID==' + ad_client_id],
+        metric=['PAGE_VIEWS', 'AD_REQUESTS', 'AD_REQUESTS_COVERAGE',
+                'CLICKS', 'AD_REQUESTS_CTR', 'COST_PER_CLICK',
+                'AD_REQUESTS_RPM', 'EARNINGS'],
+        dimension=['DATE'],
+        sort=['+DATE']).execute()
+
+    if 'rows' in result:
+      # Display headers.
+      for header in result['headers']:
+        print '%25s' % header['name'],
+      print
+      # Display results.
+      for row in result['rows']:
+        for column in row:
+          print '%25s' % column,
+        print
+    else:
+      print 'No rows returned.'
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/get_account_data_for_existing_publisher.py b/samples/adsensehost/get_account_data_for_existing_publisher.py
new file mode 100644
index 0000000..fe74952
--- /dev/null
+++ b/samples/adsensehost/get_account_data_for_existing_publisher.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets the account data for a publisher from their ad client ID.
+
+Tags: accounts.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The publisher ad client ID for which to get the data')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+
+  try:
+    # Retrieve account list in pages and display data as we receive it.
+    request = service.accounts().list(filterAdClientId=ad_client_id)
+
+    result = request.execute()
+    if 'items' in result:
+      accounts = result['items']
+      for account in accounts:
+        print ('Account with ID "%s", name "%s" and status "%s" was found. ' %
+               (account['id'], account['name'], account['status']))
+    else:
+      print 'No accounts were found.'
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/get_all_ad_clients_for_host.py b/samples/adsensehost/get_all_ad_clients_for_host.py
new file mode 100644
index 0000000..5065c30
--- /dev/null
+++ b/samples/adsensehost/get_all_ad_clients_for_host.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all the ad clients in the host account.
+
+Tags: adclients.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, _ = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+
+  try:
+    # Retrieve ad client list in pages and display data as we receive it.
+    request = service.adclients().list(maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      if 'items' in result:
+        ad_clients = result['items']
+        for ad_client in ad_clients:
+          print ('Ad client for product "%s" with ID "%s" was found.' %
+                 (ad_client['productCode'], ad_client['id']))
+
+          print ('\tSupports reporting: %s' %
+                 'Yes' if ad_client['supportsReporting'] else 'No')
+
+        request = service.adclients().list_next(request, result)
+      else:
+        print 'No ad clients were found.'
+        break
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/get_all_ad_clients_for_publisher.py b/samples/adsensehost/get_all_ad_clients_for_publisher.py
new file mode 100644
index 0000000..d55398f
--- /dev/null
+++ b/samples/adsensehost/get_all_ad_clients_for_publisher.py
@@ -0,0 +1,71 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all ad clients for a publisher account.
+
+Tags: accounts.adclients.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'account_id',
+    help='The ID of the publisher account for which to get ad clients')
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  account_id = flags.account_id
+
+  try:
+    # Retrieve ad client list in pages and display data as we receive it.
+    request = service.accounts().adclients().list(accountId=account_id,
+                                                  maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      if 'items' in result:
+        ad_clients = result['items']
+        for ad_client in ad_clients:
+          print ('Ad client for product "%s" with ID "%s" was found. '
+                 % (ad_client['productCode'], ad_client['id']))
+
+          print ('\tSupports reporting: %s' %
+                 'Yes' if ad_client['supportsReporting'] else 'No')
+
+        request = service.adclients().list_next(request, result)
+      else:
+        print 'No ad clients were found.'
+        break
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/get_all_ad_units_for_publisher.py b/samples/adsensehost/get_all_ad_units_for_publisher.py
new file mode 100644
index 0000000..34ffb04
--- /dev/null
+++ b/samples/adsensehost/get_all_ad_units_for_publisher.py
@@ -0,0 +1,77 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all ad units in a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+
+Tags: accounts.adunits.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'account_id',
+    help='The ID of the pub account on which the ad unit exists')
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client on which the ad unit exists')
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+  account_id = flags.account_id
+
+  try:
+    # Retrieve ad unit list in pages and display data as we receive it.
+    request = service.accounts().adunits().list(adClientId=ad_client_id,
+                                                accountId=account_id,
+                                                maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      if 'items' in result:
+        ad_units = result['items']
+        for ad_unit in ad_units:
+          print ('Ad unit with ID "%s", code "%s", name "%s" and status "%s" '
+                 'was found.' %
+                 (ad_unit['id'], ad_unit['code'], ad_unit['name'],
+                  ad_unit['status']))
+
+        request = service.accounts().adunits().list_next(request, result)
+      else:
+        print 'No ad units were found.'
+        break
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/get_all_custom_channels_for_host.py b/samples/adsensehost/get_all_custom_channels_for_host.py
new file mode 100644
index 0000000..ec695fa
--- /dev/null
+++ b/samples/adsensehost/get_all_custom_channels_for_host.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all custom channels in a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: customchannels.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ad client ID for which to get custom channels')
+
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+
+  try:
+    # Retrieve custom channel list in pages and display data as we receive it.
+    request = service.customchannels().list(adClientId=ad_client_id,
+                                            maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      if 'items' in result:
+        custom_channels = result['items']
+        for custom_channel in custom_channels:
+          print ('Custom channel with ID "%s", code "%s" and name "%s" found.'
+                 % (custom_channel['id'], custom_channel['code'],
+                    custom_channel['name']))
+
+        request = service.customchannels().list_next(request, result)
+      else:
+        print 'No custom channels were found.'
+        break
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/get_all_url_channels_for_host.py b/samples/adsensehost/get_all_url_channels_for_host.py
new file mode 100644
index 0000000..38add84
--- /dev/null
+++ b/samples/adsensehost/get_all_url_channels_for_host.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example gets all URL channels in a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+
+Tags: urlchannels.list
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ad client ID for which to get URL channels')
+
+MAX_PAGE_SIZE = 50
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+
+  try:
+    # Retrieve URL channel list in pages and display data as we receive it.
+    request = service.urlchannels().list(adClientId=ad_client_id,
+                                         maxResults=MAX_PAGE_SIZE)
+
+    while request is not None:
+      result = request.execute()
+      if 'items' in result:
+        url_channels = result['items']
+        for url_channel in url_channels:
+          print ('URL channel with ID "%s" and URL pattern "%s" was found.'
+                 % (url_channel['id'], url_channel['urlPattern']))
+
+        request = service.customchannels().list_next(request, result)
+      else:
+        print 'No URL channels were found.'
+        break
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/sample_utils.py b/samples/adsensehost/sample_utils.py
new file mode 100644
index 0000000..e69982b
--- /dev/null
+++ b/samples/adsensehost/sample_utils.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Auxiliary file for AdSense Host API code samples."""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import datetime
+
+
+def GetUniqueName(max_len=None):
+  """Returns a unique value to append to various properties in the samples.
+
+  Shamelessly stolen from http://code.google.com/p/google-api-ads-python.
+
+  Args:
+    max_len: int Maximum length for the unique name.
+
+  Returns:
+    str Unique name.
+  """
+  dt = datetime.datetime.now()
+  name = '%s%s%s%s%s%s%s' % (dt.microsecond, dt.second, dt.minute, dt.hour,
+                             dt.day, dt.month, dt.year)
+  if max_len > len(name):
+    max_len = len(name)
+  return name[:max_len]
diff --git a/samples/adsensehost/start_association_session.py b/samples/adsensehost/start_association_session.py
new file mode 100644
index 0000000..b8d120e
--- /dev/null
+++ b/samples/adsensehost/start_association_session.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example starts an association session.
+
+Tags: associationsessions.start
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, _ = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+
+  try:
+    # Request a new association session.
+    request = service.associationsessions().start(
+        productCode='AFC',
+        websiteUrl='www.example.com/blog%s' % GetUniqueName())
+
+    result = request.execute()
+    print ('Association with ID "%s" and redirect URL "%s" was started.' %
+           (result['id'], result['redirectUrl']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/update_ad_unit_on_publisher.py b/samples/adsensehost/update_ad_unit_on_publisher.py
new file mode 100644
index 0000000..67617e2
--- /dev/null
+++ b/samples/adsensehost/update_ad_unit_on_publisher.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example updates an ad unit on a publisher ad client.
+
+To get ad clients, run get_all_ad_clients_for_publisher.py.
+To get ad units, run get_all_ad_units_for_publisher.py.
+
+Tags: accounts.adunits.patch
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'account_id',
+    help='The ID of the publisher account on which the ad unit exists')
+argparser.add_argument(
+    'ad_client_id',
+    help='The ID of the ad client on which the ad unit exists')
+argparser.add_argument(
+    'ad_unit_id',
+    help='The ID of the ad unit to be updated')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  account_id = flags.account_id
+  ad_client_id = flags.ad_client_id
+  ad_unit_id = flags.ad_unit_id
+
+  try:
+    ad_unit = {'customStyle': {'colors': {'text': 'ff0000'}}}
+
+    # Update ad unit text color.
+    request = service.accounts().adunits().patch(accountId=account_id,
+                                                 adClientId=ad_client_id,
+                                                 adUnitId=ad_unit_id,
+                                                 body=ad_unit)
+
+    result = request.execute()
+    print ('Ad unit with ID "%s" was updated with text color "%s".'
+           % (result['id'], result['customStyle']['colors']['text']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/update_custom_channel_on_host.py b/samples/adsensehost/update_custom_channel_on_host.py
new file mode 100644
index 0000000..3b3d4e6
--- /dev/null
+++ b/samples/adsensehost/update_custom_channel_on_host.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example updates a custom channel on a host ad client.
+
+To get ad clients, run get_all_ad_clients_for_host.py.
+To get custom channels, run get_all_custom_channels_for_host.py.
+
+Tags: customchannels.patch
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+from sample_utils import GetUniqueName
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'ad_client_id',
+    help='The ad client ID that contains the custom channel')
+argparser.add_argument(
+    'custom_channel_id',
+    help='The ID of the custom channel to be updated')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  ad_client_id = flags.ad_client_id
+  custom_channel_id = flags.custom_channel_id
+
+  try:
+    custom_channel = {
+        'name': 'Updated Sample Channel #%s' % GetUniqueName()
+    }
+
+    # Update custom channel.
+    request = service.customchannels().patch(adClientId=ad_client_id,
+                                             customChannelId=custom_channel_id,
+                                             body=custom_channel)
+
+    result = request.execute()
+    print ('Custom channel with ID "%s" was updated with name "%s".'
+           % (result['id'], result['name']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/samples/adsensehost/verify_association_session.py b/samples/adsensehost/verify_association_session.py
new file mode 100644
index 0000000..64c777d
--- /dev/null
+++ b/samples/adsensehost/verify_association_session.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+#
+# Copyright 2012 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""This example verifies an association session callback token.
+
+Tags: associationsessions.verify
+"""
+
+__author__ = 'jalc@google.com (Jose Alcerreca)'
+
+import argparse
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument(
+    'token',
+    help='The token returned in the association callback')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'adsensehost', 'v4.1', __doc__, __file__, parents=[argparser])
+  token = flags.token
+
+  try:
+    # Verify the association session token.
+    request = service.associationsessions().verify(token=token)
+
+    result = request.execute()
+    print ('Association for account "%s" has status "%s" and ID "%s".' %
+           (result['accountId'], result['status'], result['id']))
+
+  except client.AccessTokenRefreshError:
+    print ('The credentials have been revoked or expired, please re-run the '
+           'application to re-authorize')
+
+if __name__ == '__main__':
+  main(sys.argv)
