diff --git a/.hgignore b/.hgignore
index b83fd96..dc9cf78 100644
--- a/.hgignore
+++ b/.hgignore
@@ -19,3 +19,6 @@
 dist/*
 snapshot/*
 MANIFEST
+.project
+.pydevproject
+.settings/*
diff --git a/samples/dfareporting/README b/samples/dfareporting/README
new file mode 100644
index 0000000..ca8f9e9
--- /dev/null
+++ b/samples/dfareporting/README
@@ -0,0 +1,5 @@
+A collection of command-line samples for the DFA Reporting REST API.
+
+api: dfareporting
+keywords: cmdline
+author: Jonathon Imperiosi (jimper@google.com)
\ No newline at end of file
diff --git a/samples/dfareporting/client_secrets.json b/samples/dfareporting/client_secrets.json
new file mode 100644
index 0000000..f9cf7ff
--- /dev/null
+++ b/samples/dfareporting/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"
+  }
+}
\ No newline at end of file
diff --git a/samples/dfareporting/create_report.py b/samples/dfareporting/create_report.py
new file mode 100644
index 0000000..f2c301f
--- /dev/null
+++ b/samples/dfareporting/create_report.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to create a report.
+
+Tags: reports.insert
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to create a report for')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+
+  try:
+    # Create a new report resource to insert
+    report = {
+        'name': 'Example Standard Report',
+        'type': 'STANDARD',
+        'criteria': {
+            'dateRange': {'relativeDateRange': 'YESTERDAY'},
+            'dimensions': [{'name': 'dfa:campaign'}],
+            'metricNames': ['dfa:clicks']
+        }
+    }
+    
+    # Construct the request.
+    request = service.reports().insert(profileId=profile_id, body=report)
+
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/delete_report.py b/samples/dfareporting/delete_report.py
new file mode 100644
index 0000000..8d518a6
--- /dev/null
+++ b/samples/dfareporting/delete_report.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to delete a report.
+
+Tags: reports.delete
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to delete a report for')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to delete')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Construct the request.
+    request = service.reports().delete(profileId=profile_id, reportId=report_id)
+
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/download_file.py b/samples/dfareporting/download_file.py
new file mode 100644
index 0000000..af331f5
--- /dev/null
+++ b/samples/dfareporting/download_file.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to download a file.
+
+Tags: files.get
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+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('report_id', type=int,
+                     help='The ID of the report to get a file for')
+argparser.add_argument('file_id', type=int,
+                     help='The ID of the file to get')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  report_id = flags.report_id
+  file_id = flags.file_id
+
+  try: 
+    # Construct the request.
+    request = service.files().get_media(reportId=report_id, fileId=file_id)
+
+    # Execute request and print the file contents
+    print request.execute()
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_all_dimension_values.py b/samples/dfareporting/get_all_dimension_values.py
new file mode 100644
index 0000000..78d4f9c
--- /dev/null
+++ b/samples/dfareporting/get_all_dimension_values.py
@@ -0,0 +1,72 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get all dimension values for a dimension.
+
+Tags: dimensionValues.query
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to get a report for')
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+
+  try: 
+    # Create the dimension to query
+    dimension = {
+      'dimensionName': 'dfa:advertiser',
+      'startDate': '2013-01-01',
+      'endDate': '2013-12-31'
+    }
+    
+    # Construct the request.
+    request = service.dimensionValues().query(profileId=profile_id,
+                                              body=dimension)
+
+    while request is not None:
+      # Execute request and print response.
+      response = request.execute()
+      pprint.pprint(response)
+      
+      nextPageToken = response.get('nextPageToken')
+      
+      if nextPageToken and nextPageToken != '0':
+        request = service.dimensionValues().query_next(request, response)
+      else:
+        request = None
+  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/dfareporting/get_all_files.py b/samples/dfareporting/get_all_files.py
new file mode 100644
index 0000000..ca08698
--- /dev/null
+++ b/samples/dfareporting/get_all_files.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a list of all the files for a profile.
+
+Tags: files.list
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to use')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+
+  try: 
+    # Construct a get request for the specified profile.    
+    request = service.files().list(profileId=profile_id, maxResults=10)
+    
+    while request is not None:
+      # Execute request and print response.
+      response = request.execute()
+      pprint.pprint(response)
+
+      nextPageToken = response.get('nextPageToken')
+
+      if nextPageToken:
+        request = service.files().list_next(request, response)
+      else:
+        request = None
+  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/dfareporting/get_all_report_files.py b/samples/dfareporting/get_all_report_files.py
new file mode 100644
index 0000000..9e27fed
--- /dev/null
+++ b/samples/dfareporting/get_all_report_files.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a list of all the files for a report.
+
+Tags: reports.files.list
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to use')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to list files for')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Construct a get request for the specified report.    
+    request = service.reports().files().list(profileId=profile_id, 
+                                             reportId=report_id)
+    
+    while request is not None:
+      # Execute request and print response.
+      response = request.execute()
+      pprint.pprint(response)
+    
+      nextPageToken = response.get('nextPageToken')
+    
+      if nextPageToken:
+        request = service.reports().files().list_next(request, response)
+      else:
+        request = None
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_all_reports.py b/samples/dfareporting/get_all_reports.py
new file mode 100644
index 0000000..901b3a1
--- /dev/null
+++ b/samples/dfareporting/get_all_reports.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a list of all reports.
+
+Tags: reports.list
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to list reports for')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+
+  try:
+    # Construct the request.
+    request = service.reports().list(profileId=profile_id)
+    
+    while request is not None:
+      # Execute request and print response.
+      response = request.execute()
+      pprint.pprint(response)
+      
+      nextPageToken = response.get('nextPageToken')
+      
+      if nextPageToken:
+        request = service.reports().list_next(request, response)
+      else:
+        request = None
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_all_userprofiles.py b/samples/dfareporting/get_all_userprofiles.py
new file mode 100644
index 0000000..0be6258
--- /dev/null
+++ b/samples/dfareporting/get_all_userprofiles.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a list of all user profiles.
+
+Tags: userProfiles.list
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__,
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  try: 
+    # Construct the request.
+    request = service.userProfiles().list()
+
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_compatible_fields.py b/samples/dfareporting/get_compatible_fields.py
new file mode 100644
index 0000000..6fa77ce
--- /dev/null
+++ b/samples/dfareporting/get_compatible_fields.py
@@ -0,0 +1,62 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get the compatible fields for a report.
+
+Tags: reports.compatibleFields.query
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to use')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to get compatible fields for')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Retrieve the specified report resource
+    report = service.reports().get(profileId=profile_id,
+                                   reportId=report_id).execute()
+    
+    # Execute request and print response.
+    request = service.reports().compatibleFields().query(profileId=profile_id, 
+                                                         body=report)
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_report.py b/samples/dfareporting/get_report.py
new file mode 100644
index 0000000..dbcde4e
--- /dev/null
+++ b/samples/dfareporting/get_report.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a report.
+
+Tags: reports.delete
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to get a report for')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to get')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Construct the request.
+    request = service.reports().get(profileId=profile_id, reportId=report_id)
+
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_report_file.py b/samples/dfareporting/get_report_file.py
new file mode 100644
index 0000000..ad3ba8a
--- /dev/null
+++ b/samples/dfareporting/get_report_file.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a file for a report.
+
+Tags: reports.files.get
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to use')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to get a file for')
+argparser.add_argument('file_id', type=int,
+                     help='The ID of the file to get')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+  file_id = flags.file_id
+
+  try: 
+    # Construct a get request for the specified report.    
+    request = service.reports().files().get(fileId=file_id,
+                                            profileId=profile_id, 
+                                            reportId=report_id)
+    
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/get_userprofile.py b/samples/dfareporting/get_userprofile.py
new file mode 100644
index 0000000..391dd93
--- /dev/null
+++ b/samples/dfareporting/get_userprofile.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to get a user profile.
+
+Tags: userProfiles.get
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to get a report for')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+
+  try: 
+    # Construct the request.
+    request = service.userProfiles().get(profileId=profile_id)
+
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/patch_report.py b/samples/dfareporting/patch_report.py
new file mode 100644
index 0000000..2098984
--- /dev/null
+++ b/samples/dfareporting/patch_report.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to patch a standard report.
+
+Tags: reports.patch
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to patch a report for')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the standard report to patch')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Create a report resource with the fields to patch
+    report = {
+      'criteria': {
+        'dateRange': {'relativeDateRange': 'YESTERDAY'}
+      }
+    }
+    
+    # Construct the request.
+    request = service.reports().patch(profileId=profile_id, reportId=report_id,
+                                      body=report)
+
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/run_report.py b/samples/dfareporting/run_report.py
new file mode 100644
index 0000000..2e12435
--- /dev/null
+++ b/samples/dfareporting/run_report.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to run a report.
+
+Tags: reports.run
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to use')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to run')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Construct a get request for the specified report.    
+    request = service.reports().run(profileId=profile_id, reportId=report_id)
+    
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
diff --git a/samples/dfareporting/update_report.py b/samples/dfareporting/update_report.py
new file mode 100644
index 0000000..c0aef95
--- /dev/null
+++ b/samples/dfareporting/update_report.py
@@ -0,0 +1,76 @@
+#!/usr/bin/python
+#
+# Copyright 2013 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 illustrates how to update a report.
+
+Tags: reports.update
+"""
+
+__author__ = ('jimper@google.com (Jonathon Imperiosi)')
+
+import argparse
+import pprint
+import sys
+
+from apiclient import sample_tools
+from oauth2client import client
+
+# Declare command-line flags.
+argparser = argparse.ArgumentParser(add_help=False)
+argparser.add_argument('profile_id', type=int,
+                     help='The ID of the profile to update a report for')
+argparser.add_argument('report_id', type=int,
+                     help='The ID of the report to update')
+
+
+def main(argv):
+  # Authenticate and construct service.
+  service, flags = sample_tools.init(
+      argv, 'dfareporting', 'v1.3', __doc__, __file__, parents=[argparser],
+      scope='https://www.googleapis.com/auth/dfareporting')
+
+  profile_id = flags.profile_id
+  report_id = flags.report_id
+
+  try: 
+    # Construct a get request for the specified report.
+    request = service.reports().get(profileId=profile_id, reportId=report_id)
+
+    # Execute request
+    response = request.execute()
+    
+    # Create a report resource with the fields to update
+    report = {
+      'accountId': response['accountId'],
+      'id': response['id'],
+      'lastModifiedTime': response['lastModifiedTime'],
+      'name': 'Example Standard Report (Updated)',
+      'ownerProfileId': response['ownerProfileId'],
+      'type': response['type']
+    }
+    
+    # Create the update request
+    request = service.reports().update(profileId=profile_id,
+                                       reportId=report_id, body=report)
+    
+    # Execute request and print response.
+    pprint.pprint(request.execute())
+  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)
\ No newline at end of file
