diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 3d30fbd..0b441b1 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -28,6 +28,10 @@
 import uritemplate
 import urllib
 import urlparse
+try:
+    from urlparse import parse_qsl
+except ImportError:
+    from cgi import parse_qsl
 from apiclient.http import HttpRequest
 
 try: # pragma: no cover
@@ -109,7 +113,7 @@
 
 
 def build(serviceName, version, http=None,
-    discoveryServiceUrl=DISCOVERY_URI, auth=None, model=JsonModel()):
+    discoveryServiceUrl=DISCOVERY_URI, developerKey=None, model=JsonModel()):
   params = {
       'api': serviceName,
       'apiVersion': version
@@ -141,6 +145,7 @@
       self._http = http
       self._baseUrl = base
       self._model = model
+      self._developerKey = developerKey
 
     def auth_discovery(self):
       return auth_discovery
@@ -149,7 +154,7 @@
 
     def method(self, **kwargs):
       return createResource(self._http, self._baseUrl, self._model,
-          methodName, methodDesc, futureDesc)
+          methodName, self._developerKey, methodDesc, futureDesc)
 
     setattr(method, '__doc__', 'A description of how to use this function')
     setattr(theclass, methodName, method)
@@ -159,8 +164,8 @@
   return Service()
 
 
-def createResource(http, baseUrl, model, resourceName, resourceDesc,
-    futureDesc):
+def createResource(http, baseUrl, model, resourceName, developerKey,
+                   resourceDesc, futureDesc):
 
   class Resource(object):
     """A class for interacting with a resource."""
@@ -169,6 +174,7 @@
       self._http = http
       self._baseUrl = baseUrl
       self._model = model
+      self._developerKey = developerKey
 
   def createMethod(theclass, methodName, methodDesc, futureDesc):
     pathUrl = methodDesc['pathUrl']
@@ -223,6 +229,9 @@
           actual_path_params[argmap[key]] = value
       body_value = kwargs.get('body', None)
 
+      if self._developerKey:
+        actual_query_params['key'] = self._developerKey
+
       headers = {}
       headers, params, query, body = self._model.request(headers,
           actual_path_params, actual_query_params, body_value)
@@ -266,6 +275,13 @@
       except (KeyError, TypeError):
         return None
 
+      if self._developerKey:
+        parsed = list(urlparse.urlparse(url))
+        q = parse_qsl(parsed[4])
+        q.append(('key', self._developerKey))
+        parsed[4] = urllib.urlencode(q)
+        url = urlparse.urlunparse(parsed)
+
       headers = {}
       headers, params, query, body = self._model.request(headers, {}, {}, None)
 
diff --git a/apiclient/http.py b/apiclient/http.py
index 16591fb..25d646e 100644
--- a/apiclient/http.py
+++ b/apiclient/http.py
@@ -12,7 +12,8 @@
   """Encapsulate an HTTP request.
   """
 
-  def __init__(self, http, uri, method="GET", body=None, headers=None, postproc=None):
+  def __init__(self, http, uri, method="GET", body=None, headers=None,
+               postproc=None):
     self.uri = uri
     self.method = method
     self.body = body
diff --git a/samples/cmdline/buzz.py b/samples/cmdline/buzz.py
index c7f9990..2f0da84 100644
--- a/samples/cmdline/buzz.py
+++ b/samples/cmdline/buzz.py
@@ -19,6 +19,7 @@
 from apiclient.discovery import build
 
 import httplib2
+httplib2.debuglevel = 4
 import pickle
 import pprint
 
@@ -30,7 +31,7 @@
   http = httplib2.Http()
   http = credentials.authorize(http)
 
-  p = build("buzz", "v1", http=http)
+  p = build("buzz", "v1", http=http, developerKey='AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0')
   activities = p.activities()
   activitylist = activities.list(max_results='2', scope='@self', userId='@me').execute()
   print activitylist['items'][0]['title']
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 374e57c..8704e92 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -22,10 +22,16 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-from apiclient.discovery import build, key2param
 import httplib2
 import os
 import unittest
+import urlparse
+try:
+    from urlparse import parse_qs
+except ImportError:
+    from cgi import parse_qs
+
+from apiclient.discovery import build, key2param
 
 DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
 
@@ -102,12 +108,27 @@
 class Next(unittest.TestCase):
   def test_next_for_activities_list(self):
     self.http = HttpMock('buzz.json', {'status': '200'})
-    buzz = build('buzz', 'v1', self.http)
+    buzz = build('buzz', 'v1', self.http, developerKey='foobie_bletch')
     activities = {'links':
                   {'next':
                    [{'href': 'http://www.googleapis.com/next-link'}]}}
     request = buzz.activities().list_next(activities)
-    self.assertEqual(request.uri, 'http://www.googleapis.com/next-link')
+    self.assertEqual(request.uri,
+                     'http://www.googleapis.com/next-link?key=foobie_bletch')
+
+
+class DeveloperKey(unittest.TestCase):
+  def test_param(self):
+    self.http = HttpMock('buzz.json', {'status': '200'})
+    buzz = build('buzz', 'v1', self.http, developerKey='foobie_bletch')
+    activities = {'links':
+                  {'next':
+                   [{'href': 'http://www.googleapis.com/next-link'}]}}
+    request = buzz.activities().list_next(activities)
+    parsed = urlparse.urlparse(request.uri)
+    q = parse_qs(parsed[4])
+    self.assertEqual(q['key'], ['foobie_bletch'])
+
 
   def test_next_for_people_liked(self):
     self.http = HttpMock('buzz.json', {'status': '200'})
