diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 3d30fbd..bb5c305 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -109,7 +109,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 +141,7 @@
       self._http = http
       self._baseUrl = base
       self._model = model
+      self._developerKey = developerKey
 
     def auth_discovery(self):
       return auth_discovery
@@ -149,7 +150,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 +160,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 +170,7 @@
       self._http = http
       self._baseUrl = baseUrl
       self._model = model
+      self._developerKey = developerKey
 
   def createMethod(theclass, methodName, methodDesc, futureDesc):
     pathUrl = methodDesc['pathUrl']
@@ -223,6 +225,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 +271,13 @@
       except (KeyError, TypeError):
         return None
 
+      if self._developerKey:
+        parsed = list(urlparse.urlparse(url))
+        q = urlparse.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 b692be5..92be46d 100644
--- a/samples/cmdline/buzz.py
+++ b/samples/cmdline/buzz.py
@@ -15,6 +15,7 @@
 from apiclient.discovery import build
 
 import httplib2
+httplib2.debuglevel = 4
 import pickle
 
 
@@ -26,7 +27,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 c44f1e4..fdca968 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -22,10 +22,12 @@
 
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 
-from apiclient.discovery import build, key2param
 import httplib2
 import os
 import unittest
+import urlparse
+
+from apiclient.discovery import build, key2param
 
 DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
 
@@ -102,12 +104,27 @@
 class Next(unittest.TestCase):
   def test_next(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 = urlparse.parse_qs(parsed[4])
+    self.assertEqual(q['key'], ['foobie_bletch'])
+
 
 
 if __name__ == '__main__':
