Switch over to using discovery format v0.2beta1.
diff --git a/TODO b/TODO
index c88756b..f95e6b2 100644
--- a/TODO
+++ b/TODO
@@ -1,30 +1,13 @@
 TODO
 ====
 
- - Unit tests against copies of current discovery docs
-
- - Flag required parameters
-
- - Check the regex when accepting values
+ - LICENSE file
 
  - OAuth cmdline sample should start local http server to catch response.
 
  - Caching of discovery doc
 
-
- - Layered user-agent header, ala 'my-buzz-client/1.0 google-api-python-client/0.2 httplib2/0.6'
-
-
- - Requests for multiple APIs at one time.
+ - Examples of caching
 
  - 2.x and 3.x compatible
 
-
-
-DONE
-====
-
- - Implement requests as Command objects, either for immediate
-   execution, or for batching.
-
- - Add in 'Extra Discovery' for pagination
\ No newline at end of file
diff --git a/apiclient/contrib/buzz/future.json b/apiclient/contrib/buzz/future.json
index 81b61bf..05018e8 100644
--- a/apiclient/contrib/buzz/future.json
+++ b/apiclient/contrib/buzz/future.json
@@ -1,7 +1,4 @@
 {
-  "data": {
-    "buzz": {
-      "v1": {
         "baseUrl": "https://www.googleapis.com/", 
         "auth": {
           "request": {
@@ -142,7 +139,4 @@
             }
           }
         }
-      }
-    }
-  }
 }
diff --git a/apiclient/contrib/latitude/future.json b/apiclient/contrib/latitude/future.json
index 4ba2a8f..7b2bfa0 100644
--- a/apiclient/contrib/latitude/future.json
+++ b/apiclient/contrib/latitude/future.json
@@ -1,7 +1,4 @@
 {
-  "data": {
-    "latitude": {
-      "v1": {
         "baseUrl": "https://www.googleapis.com/",
         "auth": {
           "request": {
@@ -81,7 +78,4 @@
             }
           }
         }
-      }
-    }
-  }
 }
diff --git a/apiclient/contrib/moderator/future.json b/apiclient/contrib/moderator/future.json
index 87d525b..106bc06 100644
--- a/apiclient/contrib/moderator/future.json
+++ b/apiclient/contrib/moderator/future.json
@@ -1,7 +1,4 @@
 {
-  "data": {
-    "moderator": {
-      "v1": {
         "baseUrl": "https://www.googleapis.com/",
           "auth": {
             "request": {
@@ -107,7 +104,4 @@
             }
           }
         }
-      }
-    }
-  }
 }
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 73a87da..3084810 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -54,8 +54,8 @@
   pass
 
 
-DISCOVERY_URI = ('http://www.googleapis.com/discovery/0.1/describe'
-  '{?api,apiVersion}')
+DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.2beta1/describe/'
+  '{api}/{apiVersion}')
 
 
 def key2param(key):
@@ -132,18 +132,21 @@
   requested_url = uritemplate.expand(discoveryServiceUrl, params)
   logging.info('URL being requested: %s' % requested_url)
   resp, content = http.request(requested_url)
-  d = simplejson.loads(content)
-  service = d['data'][serviceName][version]
+  service = simplejson.loads(content)
 
   fn = os.path.join(os.path.dirname(__file__), "contrib",
       serviceName, "future.json")
-  f = file(fn, "r")
-  d = simplejson.load(f)
-  f.close()
-  future = d['data'][serviceName][version]['resources']
-  auth_discovery = d['data'][serviceName][version]['auth']
+  try:
+    f = file(fn, "r")
+    d = simplejson.load(f)
+    f.close()
+    future = d['resources']
+    auth_discovery = d['auth']
+  except IOError:
+    future = {}
+    auth_discovery = {}
 
-  base = service['baseUrl']
+  base = urlparse.urljoin(discoveryServiceUrl, service['restBasePath'])
   resources = service['resources']
 
   class Service(object):
@@ -168,7 +171,7 @@
     setattr(theclass, methodName, method)
 
   for methodName, methodDesc in resources.iteritems():
-    createMethod(Service, methodName, methodDesc, future[methodName])
+    createMethod(Service, methodName, methodDesc, future.get(methodName, {}))
   return Service()
 
 
@@ -185,7 +188,7 @@
       self._developerKey = developerKey
 
   def createMethod(theclass, methodName, methodDesc, futureDesc):
-    pathUrl = methodDesc['pathUrl']
+    pathUrl = methodDesc['restPath']
     pathUrl = re.sub(r'\{', r'{+', pathUrl)
     httpMethod = methodDesc['httpMethod']
 
@@ -207,9 +210,9 @@
           pattern_params[param] = desc['pattern']
         if desc.get('required', False):
           required_params.append(param)
-        if desc.get('parameterType') == 'query':
+        if desc.get('restParameterType') == 'query':
           query_params.append(param)
-        if desc.get('parameterType') == 'path':
+        if desc.get('restParameterType') == 'path':
           path_params[param] = param
 
     def method(self, **kwargs):
@@ -308,13 +311,36 @@
     setattr(theclass, methodName, method)
 
   # Add basic methods to Resource
-  for methodName, methodDesc in resourceDesc['methods'].iteritems():
-    future = futureDesc['methods'].get(methodName, {})
-    createMethod(Resource, methodName, methodDesc, future)
+  if 'methods' in resourceDesc:
+    for methodName, methodDesc in resourceDesc['methods'].iteritems():
+      if futureDesc:
+        future = futureDesc['methods'].get(methodName, {})
+      else:
+        future = None
+      createMethod(Resource, methodName, methodDesc, future)
+
+  # Add in nested resources
+  if 'resources' in resourceDesc:
+    def createMethod(theclass, methodName, methodDesc, futureDesc):
+
+      def method(self):
+        return createResource(self._http, self._baseUrl, self._model,
+            methodName, self._developerKey, methodDesc, futureDesc)
+
+      setattr(method, '__doc__', 'A description of how to use this function')
+      setattr(theclass, methodName, method)
+
+    for methodName, methodDesc in resourceDesc['resources'].iteritems():
+      if futureDesc and 'resources' in futureDesc:
+        future = futureDesc['resources'].get(methodName, {})
+      else:
+        future = {}
+      createMethod(Resource, methodName, methodDesc, future.get(methodName, {}))
 
   # Add <m>_next() methods to Resource
-  for methodName, methodDesc in futureDesc['methods'].iteritems():
-    if 'next' in methodDesc and methodName in resourceDesc['methods']:
-      createNextMethod(Resource, methodName + "_next", methodDesc['next'])
+  if futureDesc:
+    for methodName, methodDesc in futureDesc['methods'].iteritems():
+      if 'next' in methodDesc and methodName in resourceDesc['methods']:
+        createNextMethod(Resource, methodName + "_next", methodDesc['next'])
 
   return Resource()
diff --git a/samples/local/main.py b/samples/local/main.py
new file mode 100644
index 0000000..7c62fef
--- /dev/null
+++ b/samples/local/main.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""Simple command-line example for running against a
+  local server.
+
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+# Enable this sample to be run from the top-level directory
+import os
+import sys
+sys.path.insert(0, os.getcwd())
+
+from apiclient.discovery import build
+
+import httplib2
+# httplib2.debuglevel = 4
+import pickle
+import pprint
+
+DISCOVERY_URI = ('http://gregorio-ub.i:3990/discovery/v0.2beta1/describe/'
+  '{api}/{apiVersion}')
+
+def main():
+  http = httplib2.Http()
+
+  p = build("buzz", "v1", http=http, discoveryServiceUrl=DISCOVERY_URI)
+  help(p.activities().list)
+  print p.activities().list(userId='@self', scope='@me', c='foo').uri
+
+if __name__ == '__main__':
+  main()
diff --git a/tests/data/buzz.json b/tests/data/buzz.json
index 62af35c..c58cddd 100644
--- a/tests/data/buzz.json
+++ b/tests/data/buzz.json
@@ -1,1009 +1,1021 @@
 {
- "data": {
-  "buzz": {
-   "v1": {
-    "baseUrl": "https://www.googleapis.com/",
-    "resources": {
-     "photos": {
-      "methods": {
-       "insert": {
-        "pathUrl": "buzz/v1/photos/{userId}/{albumId}",
-        "rpcName": "buzz.photos.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "albumId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "resource": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+ "name": "buzz",
+ "version": "v1",
+ "description": "Buzz APIs for Buzz Posts, etc.",
+ "restBasePath": "/buzz/v1/",
+ "rpcPath": "/rpc",
+ "resources": {
+  "activities": {
+   "methods": {
+    "delete": {
+     "restPath": "activities/{userId}/{scope}/{postId}",
+     "rpcMethod": "chili.activities.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@.*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
       }
-     },
-     "feeds": {
-      "methods": {
-       "insert": {
-        "pathUrl": "buzz/v1/feeds/{userId}/@self",
-        "rpcName": "buzz.feeds.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "update": {
-        "pathUrl": "buzz/v1/feeds/{userId}/@self/{siteId}",
-        "rpcName": "buzz.feeds.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "siteId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "buzz/v1/feeds/{userId}/{scope}",
-        "rpcName": "buzz.feeds.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "delete": {
-        "pathUrl": "buzz/v1/feeds/{userId}/@self/{siteId}",
-        "rpcName": "buzz.feeds.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "siteId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "extractPeopleFromSearch": {
+     "restPath": "activities/search/@people",
+     "rpcMethod": "chili.activities.extractPeopleFromSearch",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "bbox": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "lat": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "lon": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "pid": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "q": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "radius": {
+       "restParameterType": "query",
+       "required": false
       }
-     },
-     "search": {
-      "methods": {
-       "extractPeople": {
-        "pathUrl": "buzz/v1/activities/search/@people",
-        "rpcName": "buzz.activities.search.extractPeople",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "lon": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "bbox": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "pid": {
-          "parameterType": "query",
-          "required": false
-         },
-         "radius": {
-          "parameterType": "query",
-          "required": false
-         },
-         "lat": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "get": {
+     "restPath": "activities/{userId}/@self/{postId}",
+     "rpcMethod": "chili.activities.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "targetLang": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
       }
-     },
-     "activities": {
-      "methods": {
-       "update": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}",
-        "rpcName": "buzz.activities.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         },
-         "abuseType": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "delete": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}",
-        "rpcName": "buzz.activities.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "buzz/v1/activities/{userId}/@self",
-        "rpcName": "buzz.activities.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "preview": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "resource": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}",
-        "rpcName": "buzz.activities.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "max-comments": {
-          "parameterType": "query",
-          "required": false
-         },
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@(self|public|consumption|liked|comments)*",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "max-liked": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "get": {
-        "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}",
-        "rpcName": "buzz.activities.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "search": {
-        "pathUrl": "buzz/v1/activities/search",
-        "rpcName": "buzz.activities.search",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "lon": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "bbox": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "pid": {
-          "parameterType": "query",
-          "required": false
-         },
-         "radius": {
-          "parameterType": "query",
-          "required": false
-         },
-         "lat": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "insert": {
+     "restPath": "activities/{userId}/@self",
+     "rpcMethod": "chili.activities.insert",
+     "httpMethod": "POST",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "photo": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "preview": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
       }
-     },
-     "people": {
-      "methods": {
-       "get": {
-        "pathUrl": "buzz/v1/people/{userId}/@self",
-        "rpcName": "buzz.people.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "search": {
-        "pathUrl": "buzz/v1/people/search",
-        "rpcName": "buzz.people.search",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}",
-        "rpcName": "buzz.people.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "relatedToUri": {
-        "pathUrl": "buzz/v1/people/{userId}/@related",
-        "rpcName": "buzz.people.relatedToUri",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "uri": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "reshared": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/{groupId}",
-        "rpcName": "buzz.people.reshared",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "@reshared",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "delete": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/{personId}",
-        "rpcName": "buzz.people.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "personId": {
-          "parameterType": "path",
-          "pattern": "(?!@self).*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "update": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/{personId}",
-        "rpcName": "buzz.people.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "personId": {
-          "parameterType": "path",
-          "pattern": "(?!@self).*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "liked": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/{groupId}",
-        "rpcName": "buzz.people.liked",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "@liked",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "list": {
+     "restPath": "activities/{userId}/{scope}",
+     "rpcMethod": "chili.activities.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-comments": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-liked": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@(self|public|consumption|liked|comments)*",
+       "required": true
+      },
+      "targetLang": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
       }
-     },
-     "groups": {
-      "methods": {
-       "get": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/@self",
-        "rpcName": "buzz.groups.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups",
-        "rpcName": "buzz.groups.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "delete": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}",
-        "rpcName": "buzz.groups.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "update": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups/{groupId}/@self",
-        "rpcName": "buzz.groups.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "groupId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "buzz/v1/people/{userId}/@groups",
-        "rpcName": "buzz.groups.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "search": {
+     "restPath": "activities/search",
+     "rpcMethod": "chili.activities.search",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "bbox": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "lat": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "lon": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "pid": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "q": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "radius": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "targetLang": {
+       "restParameterType": "query",
+       "required": false
       }
-     },
-     "comments": {
-      "methods": {
-       "update": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/@comments/{commentId}",
-        "rpcName": "buzz.comments.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "commentId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         },
-         "abuseType": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/@comments",
-        "rpcName": "buzz.comments.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "delete": {
-        "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}/@comments/{commentId}",
-        "rpcName": "buzz.comments.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "commentId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}/@comments",
-        "rpcName": "buzz.comments.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "get": {
-        "pathUrl": "buzz/v1/activities/{userId}/@self/{postId}/@comments/{commentId}",
-        "rpcName": "buzz.comments.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "commentId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "update": {
+     "restPath": "activities/{userId}/{scope}/{postId}",
+     "rpcMethod": "chili.activities.update",
+     "httpMethod": "PUT",
+     "parameters": {
+      "abuseType": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@.*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
       }
-     },
-     "related": {
-      "methods": {
-       "list": {
-        "pathUrl": "buzz/v1/activities/{userId}/{scope}/{postId}/@related",
-        "rpcName": "buzz.related.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "scope": {
-          "parameterType": "path",
-          "pattern": "@.*",
-          "required": true
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "c": {
-          "parameterType": "query",
-          "required": false
-         },
-         "alt": {
-          "parameterType": "query",
-          "required": false
-         },
-         "userId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "hl": {
-          "parameterType": "query",
-          "required": false
-         },
-         "postId": {
-          "parameterType": "path",
-          "pattern": ".*",
-          "required": true
-         }
-        }
-       }
+     }
+    }
+   }
+  },
+  "comments": {
+   "methods": {
+    "delete": {
+     "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
+     "rpcMethod": "chili.comments.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "commentId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "get": {
+     "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
+     "rpcMethod": "chili.comments.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "commentId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "targetLang": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "insert": {
+     "restPath": "activities/{userId}/@self/{postId}/@comments",
+     "rpcMethod": "chili.comments.insert",
+     "httpMethod": "POST",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "list": {
+     "restPath": "activities/{userId}/{scope}/{postId}/@comments",
+     "rpcMethod": "chili.comments.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@.*",
+       "required": true
+      },
+      "targetLang": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "update": {
+     "restPath": "activities/{userId}/{scope}/{postId}/@comments/{commentId}",
+     "rpcMethod": "chili.comments.update",
+     "httpMethod": "PUT",
+     "parameters": {
+      "abuseType": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "commentId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@.*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    }
+   }
+  },
+  "feeds": {
+   "methods": {
+    "delete": {
+     "restPath": "feeds/{userId}/@self/{siteId}",
+     "rpcMethod": "chili.feeds.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "siteId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "insert": {
+     "restPath": "feeds/{userId}/@self",
+     "rpcMethod": "chili.feeds.insert",
+     "httpMethod": "POST",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "list": {
+     "restPath": "feeds/{userId}/{scope}",
+     "rpcMethod": "chili.feeds.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@.*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "update": {
+     "restPath": "feeds/{userId}/@self/{siteId}",
+     "rpcMethod": "chili.feeds.update",
+     "httpMethod": "PUT",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "siteId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    }
+   }
+  },
+  "groups": {
+   "methods": {
+    "delete": {
+     "restPath": "people/{userId}/@groups/{groupId}",
+     "rpcMethod": "chili.groups.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "get": {
+     "restPath": "people/{userId}/@groups/{groupId}/@self",
+     "rpcMethod": "chili.groups.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "insert": {
+     "restPath": "people/{userId}/@groups",
+     "rpcMethod": "chili.groups.insert",
+     "httpMethod": "POST",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "list": {
+     "restPath": "people/{userId}/@groups",
+     "rpcMethod": "chili.groups.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "update": {
+     "restPath": "people/{userId}/@groups/{groupId}/@self",
+     "rpcMethod": "chili.groups.update",
+     "httpMethod": "PUT",
+     "parameters": {
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    }
+   }
+  },
+  "people": {
+   "methods": {
+    "delete": {
+     "restPath": "people/{userId}/@groups/{groupId}/{personId}",
+     "rpcMethod": "chili.people.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "personId": {
+       "restParameterType": "path",
+       "pattern": "(?!@self).*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "get": {
+     "restPath": "people/{userId}/@self",
+     "rpcMethod": "chili.people.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "liked": {
+     "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
+     "rpcMethod": "chili.people.liked",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "@liked",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "list": {
+     "restPath": "people/{userId}/@groups/{groupId}",
+     "rpcMethod": "chili.people.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "relatedToUri": {
+     "restPath": "people/{userId}/@related",
+     "rpcMethod": "chili.people.relatedToUri",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "uri": {
+       "restParameterType": "query",
+       "required": false
+      }
+     }
+    },
+    "reshared": {
+     "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
+     "rpcMethod": "chili.people.reshared",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "@reshared",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "search": {
+     "restPath": "people/search",
+     "rpcMethod": "chili.people.search",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "q": {
+       "restParameterType": "query",
+       "required": false
+      }
+     }
+    },
+    "update": {
+     "restPath": "people/{userId}/@groups/{groupId}/{personId}",
+     "rpcMethod": "chili.people.update",
+     "httpMethod": "PUT",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "groupId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "personId": {
+       "restParameterType": "path",
+       "pattern": "(?!@self).*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    }
+   }
+  },
+  "photoAlbums": {
+   "methods": {
+    "get": {
+     "restPath": "photos/{userId}/@self/{albumId}",
+     "rpcMethod": "chili.photoAlbums.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    }
+   }
+  },
+  "photos": {
+   "methods": {
+    "get": {
+     "restPath": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
+     "rpcMethod": "chili.photos.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "photoId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    }
+   }
+  },
+  "related": {
+   "methods": {
+    "list": {
+     "restPath": "activities/{userId}/{scope}/{postId}/@related",
+     "rpcMethod": "chili.related.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "c": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "hl": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "postId": {
+       "restParameterType": "path",
+       "pattern": ".*",
+       "required": true
+      },
+      "scope": {
+       "restParameterType": "path",
+       "pattern": "@.*",
+       "required": true
+      },
+      "userId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
       }
      }
     }
diff --git a/tests/data/latitude.json b/tests/data/latitude.json
index 29dc80f..46f82f2 100644
--- a/tests/data/latitude.json
+++ b/tests/data/latitude.json
@@ -1,99 +1,90 @@
 {
- "data": {
-  "latitude": {
-   "v1": {
-    "baseUrl": "https://www.googleapis.com/",
-    "resources": {
-     "location": {
-      "methods": {
-       "insert": {
-        "pathUrl": "latitude/v1/location",
-        "rpcName": "latitude.location.insert",
-        "httpMethod": "POST",
-        "methodType": "rest"
-       },
-       "list": {
-        "pathUrl": "latitude/v1/location",
-        "rpcName": "latitude.location.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "max-time": {
-          "parameterType": "query",
-          "required": false
-         },
-         "min-time": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "granularity": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "get": {
-        "pathUrl": "latitude/v1/location/{locationId}",
-        "rpcName": "latitude.location.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "granularity": {
-          "parameterType": "query",
-          "required": false
-         },
-         "locationId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "delete": {
-        "pathUrl": "latitude/v1/location/{locationId}",
-        "rpcName": "latitude.location.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "locationId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       }
+ "name": "latitude",
+ "version": "v1",
+ "description": "Google Latitude API",
+ "restBasePath": "/latitude/v1",
+ "rpcPath": "/rpc",
+ "resources": {
+  "currentLocation": {
+   "methods": {
+    "delete": {
+     "restPath": "/currentLocation",
+     "rpcMethod": "latitude.currentLocation.delete",
+     "httpMethod": "DELETE"
+    },
+    "get": {
+     "restPath": "/currentLocation",
+     "rpcMethod": "latitude.currentLocation.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "granularity": {
+       "restParameterType": "query",
+       "required": false
       }
-     },
-     "currentLocation": {
-      "methods": {
-       "insert": {
-        "pathUrl": "latitude/v1/currentLocation",
-        "rpcName": "latitude.currentLocation.insert",
-        "httpMethod": "POST",
-        "methodType": "rest"
-       },
-       "delete": {
-        "pathUrl": "latitude/v1/currentLocation",
-        "rpcName": "latitude.currentLocation.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest"
-       },
-       "get": {
-        "pathUrl": "latitude/v1/currentLocation",
-        "rpcName": "latitude.currentLocation.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "granularity": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       }
+     }
+    },
+    "insert": {
+     "restPath": "/currentLocation",
+     "rpcMethod": "latitude.currentLocation.insert",
+     "httpMethod": "POST"
+    }
+   }
+  },
+  "location": {
+   "methods": {
+    "delete": {
+     "restPath": "/location/{locationId}",
+     "rpcMethod": "latitude.location.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "locationId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "get": {
+     "restPath": "/location/{locationId}",
+     "rpcMethod": "latitude.location.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "granularity": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "locationId": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "insert": {
+     "restPath": "/location",
+     "rpcMethod": "latitude.location.insert",
+     "httpMethod": "POST"
+    },
+    "list": {
+     "restPath": "/location",
+     "rpcMethod": "latitude.location.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "granularity": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "max-time": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "min-time": {
+       "restParameterType": "query",
+       "required": false
       }
      }
     }
diff --git a/tests/data/moderator.json b/tests/data/moderator.json
index 3ac3f2c..e69de29 100644
--- a/tests/data/moderator.json
+++ b/tests/data/moderator.json
@@ -1,528 +0,0 @@
-{
- "data": {
-  "moderator": {
-   "v1": {
-    "baseUrl": "https://www.googleapis.com/",
-    "resources": {
-     "tags": {
-      "methods": {
-       "delete": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/tags/{tagId}",
-        "rpcName": "moderator.tags.delete",
-        "httpMethod": "DELETE",
-        "methodType": "rest",
-        "parameters": {
-         "tagId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/tags",
-        "rpcName": "moderator.tags.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/tags",
-        "rpcName": "moderator.tags.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       }
-      }
-     },
-     "series": {
-      "methods": {
-       "list": {
-        "pathUrl": "moderator/v1/series/@me/mine",
-        "rpcName": "moderator.my.series.list",
-        "httpMethod": "GET",
-        "methodType": "rest"
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series",
-        "rpcName": "moderator.series.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/@me/recent",
-        "rpcName": "moderator.myrecent.series.list",
-        "httpMethod": "GET",
-        "methodType": "rest"
-       },
-       "update": {
-        "pathUrl": "moderator/v1/series/{seriesId}",
-        "rpcName": "moderator.series.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "moderator/v1/series",
-        "rpcName": "moderator.series.insert",
-        "httpMethod": "POST",
-        "methodType": "rest"
-       },
-       "get": {
-        "pathUrl": "moderator/v1/series/{seriesId}",
-        "rpcName": "moderator.series.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/featured",
-        "rpcName": "moderator.featured.series.list",
-        "httpMethod": "GET",
-        "methodType": "rest"
-       }
-      }
-     },
-     "topics": {
-      "methods": {
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/topics",
-        "rpcName": "moderator.topics.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "moderator/v1/series/{seriesId}/topics",
-        "rpcName": "moderator.topics.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "get": {
-        "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}",
-        "rpcName": "moderator.topics.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "topicId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       }
-      }
-     },
-     "votes": {
-      "methods": {
-       "update": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/votes/@me",
-        "rpcName": "moderator.votes.update",
-        "httpMethod": "PUT",
-        "methodType": "rest",
-        "parameters": {
-         "userId": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/votes/@me",
-        "rpcName": "moderator.votes.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "get": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/votes/@me",
-        "rpcName": "moderator.votes.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "userId": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/votes/@me",
-        "rpcName": "moderator.votes.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       }
-      }
-     },
-     "submissions": {
-      "methods": {
-       "get": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}",
-        "rpcName": "moderator.submissions.get",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions",
-        "rpcName": "moderator.series.submissions.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "author": {
-          "parameterType": "query",
-          "required": false
-         },
-         "sort": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hasAttachmentVideo": {
-          "parameterType": "query",
-          "required": false
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "insert": {
-        "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}/submissions",
-        "rpcName": "moderator.submissions.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "topicId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}/submissions",
-        "rpcName": "moderator.topics.submissions.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "author": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hasAttachedVideo": {
-          "parameterType": "query",
-          "required": false
-         },
-         "sort": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "topicId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       }
-      }
-     },
-     "profiles": {
-      "methods": {
-       "get": {
-        "pathUrl": "moderator/v1/profiles/@me",
-        "rpcName": "moderator.profiles.get",
-        "httpMethod": "GET",
-        "methodType": "rest"
-       },
-       "update": {
-        "pathUrl": "moderator/v1/profiles/@me",
-        "rpcName": "moderator.profiles.update",
-        "httpMethod": "PUT",
-        "methodType": "rest"
-       }
-      }
-     },
-     "responses": {
-      "methods": {
-       "insert": {
-        "pathUrl": "moderator/v1/series/{seriesId}/topics/{topicId}/submissions/{parentSubmissionId}/responses",
-        "rpcName": "moderator.responses.insert",
-        "httpMethod": "POST",
-        "methodType": "rest",
-        "parameters": {
-         "parentSubmissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "topicId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/submissions/{submissionId}/responses",
-        "rpcName": "moderator.responses.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "author": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hasAttachedVideo": {
-          "parameterType": "query",
-          "required": false
-         },
-         "sort": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         },
-         "submissionId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       },
-       "list": {
-        "pathUrl": "moderator/v1/series/{seriesId}/responses",
-        "rpcName": "moderator.series.responses.list",
-        "httpMethod": "GET",
-        "methodType": "rest",
-        "parameters": {
-         "author": {
-          "parameterType": "query",
-          "required": false
-         },
-         "hasAttachedVideo": {
-          "parameterType": "query",
-          "required": false
-         },
-         "sort": {
-          "parameterType": "query",
-          "required": false
-         },
-         "max-results": {
-          "parameterType": "query",
-          "required": false
-         },
-         "q": {
-          "parameterType": "query",
-          "required": false
-         },
-         "start-index": {
-          "parameterType": "query",
-          "required": false
-         },
-         "seriesId": {
-          "parameterType": "path",
-          "pattern": "[^/]+",
-          "required": true
-         }
-        }
-       }
-      }
-     }
-    }
-   }
-  }
- }
-}
diff --git a/tests/data/zoo.json b/tests/data/zoo.json
new file mode 100644
index 0000000..9a5e44a
--- /dev/null
+++ b/tests/data/zoo.json
@@ -0,0 +1,113 @@
+{
+ "name": "zoo",
+ "version": "v1",
+ "description": "Zoo API used for Apiary testing",
+ "restBasePath": "/zoo",
+ "rpcPath": "/rpc",
+ "resources": {
+  "animals": {
+   "methods": {
+    "crossbreed": {
+     "restPath": "/animals/crossbreed",
+     "rpcMethod": "zoo.animals.crossbreed",
+     "httpMethod": "GET",
+     "parameters": {
+      "father": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "mother": {
+       "restParameterType": "query",
+       "required": false
+      }
+     }
+    },
+    "delete": {
+     "restPath": "/animals/{name}",
+     "rpcMethod": "zoo.animals.delete",
+     "httpMethod": "DELETE",
+     "parameters": {
+      "name": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      }
+     }
+    },
+    "get": {
+     "restPath": "/animals/{name}",
+     "rpcMethod": "zoo.animals.get",
+     "httpMethod": "GET",
+     "parameters": {
+      "name": {
+       "restParameterType": "path",
+       "pattern": "[^/]+",
+       "required": true
+      },
+      "projection": {
+       "restParameterType": "query",
+       "required": false
+      }
+     }
+    },
+    "insert": {
+     "restPath": "/animals",
+     "rpcMethod": "zoo.animals.insert",
+     "httpMethod": "POST",
+     "parameters": {
+      "photo": {
+       "restParameterType": "query",
+       "required": false
+      }
+     }
+    },
+    "list": {
+     "restPath": "/animals",
+     "rpcMethod": "zoo.animals.list",
+     "httpMethod": "GET",
+     "parameters": {
+      "max-results": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "name": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "projection": {
+       "restParameterType": "query",
+       "required": false
+      },
+      "start-token": {
+       "restParameterType": "query",
+       "required": false
+      }
+     }
+    },
+    "update": {
+     "restPath": "/animals/{animal.name}",
+     "rpcMethod": "zoo.animals.update",
+     "httpMethod": "PUT"
+    }
+   }
+  },
+  "load": {
+   "methods": {
+    "list": {
+     "restPath": "/load",
+     "rpcMethod": "zoo.load.list",
+     "httpMethod": "GET"
+    }
+   }
+  },
+  "loadNoTemplate": {
+   "methods": {
+    "list": {
+     "restPath": "/loadNoTemplate",
+     "rpcMethod": "zoo.loadNoTemplate.list",
+     "httpMethod": "GET"
+    }
+   }
+  }
+ }
+}
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 14ff498..7d52b3d 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -35,6 +35,7 @@
 
 DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
 
+
 class HttpMock(object):
 
   def __init__(self, filename, headers):
@@ -54,6 +55,7 @@
 
 
 class Discovery(unittest.TestCase):
+
   def test_method_error_checking(self):
     self.http = HttpMock('buzz.json', {'status': '200'})
     buzz = build('buzz', 'v1', self.http)
@@ -90,7 +92,6 @@
     self.http = HttpMock('buzz.json', {'status': '200'})
     buzz = build('buzz', 'v1', self.http)
     self.assertTrue(getattr(buzz, 'activities'))
-    self.assertTrue(getattr(buzz, 'search'))
     self.assertTrue(getattr(buzz, 'feeds'))
     self.assertTrue(getattr(buzz, 'photos'))
     self.assertTrue(getattr(buzz, 'people'))
@@ -104,6 +105,19 @@
     auth = buzz.auth_discovery()
     self.assertTrue('request' in auth)
 
+  def test_full_featured(self):
+    # Zoo should exercise all discovery facets
+    # and should also have no future.json file.
+    self.http = HttpMock('zoo.json', {'status': '200'})
+    zoo = build('zoo', 'v1', self.http)
+    self.assertTrue(getattr(zoo, 'animals'))
+    request = zoo.animals().list(name="bat", projection="size")
+    parsed = urlparse.urlparse(request.uri)
+    q = parse_qs(parsed[4])
+    self.assertEqual(q['name'], ['bat'])
+    self.assertEqual(q['projection'], ['size'])
+
+
 
 class Next(unittest.TestCase):
   def test_next_for_people_liked(self):
diff --git a/tests/test_json_model.py b/tests/test_json_model.py
index 01015f1..a8da2b6 100644
--- a/tests/test_json_model.py
+++ b/tests/test_json_model.py
@@ -33,7 +33,6 @@
   from cgi import parse_qs
 
 
-
 class Model(unittest.TestCase):
   def test_json_no_body(self):
     model = JsonModel()