Update to use the latest version of discovery.

Reviewed in: http://codereview.appspot.com/4449066/
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 6ba0208..b99f7c2 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -43,8 +43,8 @@
 
 URITEMPLATE = re.compile('{[^}]*}')
 VARNAME = re.compile('[a-zA-Z0-9_-]+')
-DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.3/describe/'
-  '{api}/{apiVersion}')
+DISCOVERY_URI = ('https://www.googleapis.com/discovery/v1/apis/'
+  '{api}/{apiVersion}/rest')
 DEFAULT_METHOD_DOC = 'A description of how to use this function'
 
 # Query parameters that work, but don't appear in discovery
@@ -164,7 +164,7 @@
   """
 
   service = simplejson.loads(service)
-  base = urlparse.urljoin(base, service['restBasePath'])
+  base = urlparse.urljoin(base, service['basePath'])
   if future:
     future = simplejson.loads(future)
     auth_discovery = future.get('auth', {})
@@ -232,16 +232,16 @@
       self._requestBuilder = requestBuilder
 
   def createMethod(theclass, methodName, methodDesc, futureDesc):
-    pathUrl = methodDesc['restPath']
+    pathUrl = methodDesc['path']
     httpMethod = methodDesc['httpMethod']
-    methodId = methodDesc['rpcMethod']
+    methodId = methodDesc['id']
 
     if 'parameters' not in methodDesc:
       methodDesc['parameters'] = {}
     for name in STACK_QUERY_PARAMETERS:
       methodDesc['parameters'][name] = {
           'type': 'string',
-          'restParameterType': 'query'
+          'location': 'query'
           }
 
     if httpMethod in ['PUT', 'POST', 'PATCH']:
@@ -274,9 +274,9 @@
           required_params.append(param)
         if desc.get('repeated', False):
           repeated_params.append(param)
-        if desc.get('restParameterType') == 'query':
+        if desc.get('location') == 'query':
           query_params.append(param)
-        if desc.get('restParameterType') == 'path':
+        if desc.get('location') == 'path':
           path_params[param] = param
         param_type[param] = desc.get('type', 'string')
 
@@ -380,7 +380,7 @@
     setattr(theclass, methodName, method)
 
   def createNextMethod(theclass, methodName, methodDesc, futureDesc):
-    methodId = methodDesc['rpcMethod'] + '.next'
+    methodId = methodDesc['id'] + '.next'
 
     def methodNext(self, previous):
       """
diff --git a/samples/api-python-client-doc/index.html b/samples/api-python-client-doc/index.html
index a1f0dd0..20764f0 100644
--- a/samples/api-python-client-doc/index.html
+++ b/samples/api-python-client-doc/index.html
@@ -6,7 +6,7 @@
   <body>
     <h1> Google API Client for Python Documentation </h1>
     {% for item in directory %}
-    <p><a href="/{{ item.name }}/{{ item.version }}"><img src="{{ item.icons.x32 }}"/> {{ item.description }} </a></p>
+    <p><a href="/{{ item.name }}/{{ item.version }}"><img src="{{ item.icons.x32 }}"/> {{ item.title }} </a></p>
     {% endfor %}
   </body>
 </html>
diff --git a/samples/api-python-client-doc/main.py b/samples/api-python-client-doc/main.py
index df0209a..506f27a 100755
--- a/samples/api-python-client-doc/main.py
+++ b/samples/api-python-client-doc/main.py
@@ -35,8 +35,10 @@
 
   def get(self):
     http = httplib2.Http(memcache)
-    resp, content = http.request('https://www.googleapis.com/discovery/v0.3/directory?preferred=true')
+    resp, content = http.request('https://www.googleapis.com/discovery/v1/apis?preferred=true')
     directory = simplejson.loads(content)['items']
+    for item in directory:
+      item['title'] = item.get('title', item.get('description', ''))
     path = os.path.join(os.path.dirname(__file__), 'index.html')
     self.response.out.write(
         template.render(
diff --git a/tests/data/buzz.json b/tests/data/buzz.json
index 5de10de..cd121a2 100644
--- a/tests/data/buzz.json
+++ b/tests/data/buzz.json
@@ -1,16 +1,39 @@
 {
+ "kind": "discovery#restDescription",
+ "id": "buzz:v1",
  "name": "buzz",
  "version": "v1",
- "description": "Buzz API",
- "restBasePath": "/buzz/v1/",
- "rpcPath": "/rpc",
+ "title": "Buzz API",
+ "description": "Lets you share updates, photos, videos, and more with your friends around the world",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/buzz-16.png",
+  "x32": "http://www.google.com/images/icons/product/buzz-32.png"
+ },
+ "documentationLink": "http://code.google.com/apis/buzz/v1/using_rest.html",
+ "labels": [
+  "labs"
+ ],
+ "protocol": "rest",
+ "basePath": "/buzz/v1/",
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/buzz": {
+     "description": "Manage your Buzz activity and address book"
+    },
+    "https://www.googleapis.com/auth/buzz.readonly": {
+     "description": "View your Buzz activity and address book"
+    },
+    "https://www.googleapis.com/auth/picasa": {
+     "description": "Manage your photos and videos"
+    }
+   }
+  }
+ },
  "features": [
   "dataWrapper"
  ],
  "schemas": {
-  "ChiliEntitiesStarredAddJson": {
-   "$ref": "Entity"
-  },
   "Activity": {
    "id": "Activity",
    "type": "object",
@@ -433,6 +456,35 @@
     }
    }
   },
+  "AlbumLite": {
+   "id": "AlbumLite",
+   "type": "object",
+   "properties": {
+    "collection": {
+     "type": "object",
+     "properties": {
+      "album": {
+       "type": "any"
+      },
+      "albumId": {
+       "type": "any"
+      },
+      "photo": {
+       "type": "object",
+       "properties": {
+        "photoUrl": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#albumLite"
+    }
+   }
+  },
   "AlbumsFeed": {
    "id": "AlbumsFeed",
    "type": "object",
@@ -719,102 +771,6 @@
     }
    }
   },
-  "Entity": {
-   "id": "Entity",
-   "type": "object",
-   "properties": {
-    "chipsUiAcl": {
-     "type": "any"
-    },
-    "comment": {
-     "type": "any"
-    },
-    "id": {
-     "type": "any"
-    },
-    "kind": {
-     "type": "string",
-     "default": "buzz#entity"
-    },
-    "starredBy": {
-     "type": "array",
-     "items": {
-      "$ref": "Person"
-     }
-    },
-    "starredByViewer": {
-     "type": "any"
-    },
-    "summary": {
-     "type": "any"
-    },
-    "title": {
-     "type": "any"
-    },
-    "totalNumStars": {
-     "type": "any"
-    },
-    "viewerStarAcl": {
-     "type": "array",
-     "items": {
-      "type": "object",
-      "properties": {
-       "displayName": {
-        "type": "any"
-       },
-       "id": {
-        "type": "any"
-       },
-       "kind": {
-        "type": "any"
-       },
-       "tags": {
-        "type": "array",
-        "items": {
-         "type": "any"
-        }
-       }
-      }
-     }
-    }
-   }
-  },
-  "EntityAcl": {
-   "id": "EntityAcl",
-   "type": "object",
-   "properties": {
-    "chipsUiAcl": {
-     "type": "string"
-    },
-    "kind": {
-     "type": "string",
-     "default": "buzz#entityAcl"
-    },
-    "viewerStarAcl": {
-     "type": "array",
-     "items": {
-      "type": "object",
-      "properties": {
-       "displayName": {
-        "type": "string"
-       },
-       "id": {
-        "type": "string"
-       },
-       "kind": {
-        "type": "string"
-       },
-       "tags": {
-        "type": "array",
-        "items": {
-         "type": "string"
-        }
-       }
-      }
-     }
-    }
-   }
-  },
   "Group": {
    "id": "Group",
    "type": "object",
@@ -1485,47 +1441,6 @@
     }
    }
   },
-  "StarredEntityFeed": {
-   "id": "StarredEntityFeed",
-   "type": "object",
-   "properties": {
-    "entry": {
-     "type": "array",
-     "items": {
-      "$ref": "Entity"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "default": "buzz#starredEntityFeed"
-    }
-   }
-  },
-  "StarredEntityFeedForUser": {
-   "id": "StarredEntityFeedForUser",
-   "type": "object",
-   "properties": {
-    "entry": {
-     "type": "array",
-     "items": {
-      "$ref": "Entity"
-     }
-    },
-    "itemsPerPage": {
-     "type": "any"
-    },
-    "kind": {
-     "type": "string",
-     "default": "buzz#starredEntityFeedForUser"
-    },
-    "startIndex": {
-     "type": "any"
-    },
-    "totalResults": {
-     "type": "any"
-    }
-   }
-  },
   "Video": {
    "id": "Video",
    "type": "object",
@@ -1536,6 +1451,9 @@
     "size": {
      "type": "integer"
     },
+    "status": {
+     "type": "string"
+    },
     "streams": {
      "type": "array",
      "items": {
@@ -1543,59 +1461,47 @@
      }
     }
    }
-  },
-  "VideosFeed": {
-   "id": "VideosFeed",
-   "type": "object",
-   "properties": {
-    "items": {
-     "type": "array",
-     "items": {
-      "$ref": "ChiliPhotosResourceJson"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "default": "buzz#videosFeed"
-    }
-   }
   }
  },
  "resources": {
   "activities": {
    "methods": {
     "count": {
-     "restPath": "activities/count",
-     "rpcMethod": "chili.activities.count",
+     "id": "chili.activities.count",
+     "path": "activities/count",
      "httpMethod": "GET",
      "description": "Get a count of link shares",
      "parameters": {
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "url": {
-       "restParameterType": "query",
-       "repeated": true,
+       "type": "string",
        "description": "URLs for which to get share counts.",
-       "type": "string"
+       "repeated": true,
+       "location": "query"
       }
      },
      "response": {
       "$ref": "CountFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "delete": {
-     "restPath": "activities/{userId}/{scope}/{postId}",
-     "rpcMethod": "chili.activities.delete",
+     "id": "chili.activities.delete",
+     "path": "activities/{userId}/{scope}/{postId}",
      "httpMethod": "DELETE",
      "description": "Delete an activity",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -1604,24 +1510,23 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity to delete.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection to which the activity belongs.",
        "type": "string",
+       "description": "The collection to which the activity belongs.",
+       "required": true,
        "enum": [
         "@liked",
         "@muted",
@@ -1631,31 +1536,35 @@
         "Activities liked by the user.",
         "Activities muted by the user.",
         "Activities posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user whose post to delete.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
       "userId",
       "scope",
       "postId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
      ]
     },
     "extractPeopleFromSearch": {
-     "restPath": "activities/search/@people",
-     "rpcMethod": "chili.activities.extractPeopleFromSearch",
+     "id": "chili.activities.extractPeopleFromSearch",
+     "path": "activities/search/@people",
      "httpMethod": "GET",
      "description": "Search for people by topic",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -1664,71 +1573,75 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "bbox": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Bounding box to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "lat": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Latitude to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "lon": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Longitude to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "pid": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "ID of a place to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "q": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Full-text search query string.",
-       "type": "string"
+       "location": "query"
       },
       "radius": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Radius to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       }
      },
      "response": {
       "$ref": "PeopleFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "get": {
-     "restPath": "activities/{userId}/@self/{postId}",
-     "rpcMethod": "chili.activities.get",
+     "id": "chili.activities.get",
+     "path": "activities/{userId}/@self/{postId}",
      "httpMethod": "GET",
      "description": "Get an activity",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -1737,44 +1650,45 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-comments": {
-       "restParameterType": "query",
+       "type": "integer",
        "description": "Maximum number of comments to include.",
-       "type": "integer",
-       "minimum": "0",
-       "maximum": "4294967295"
-      },
-      "max-liked": {
-       "restParameterType": "query",
-       "description": "Maximum number of likes to include.",
-       "type": "integer",
+       "default": "0",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "0"
+       "location": "query"
+      },
+      "max-liked": {
+       "type": "integer",
+       "description": "Maximum number of likes to include.",
+       "default": "0",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
+       "type": "string",
+       "description": "ID of the post to get.",
        "required": true,
-       "description": "ID of the user to get.",
-       "type": "string"
+       "location": "path"
       },
       "truncateAtom": {
-       "restParameterType": "query",
+       "type": "boolean",
        "description": "Truncate the value of the atom:content element.",
-       "type": "boolean"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user whose post to get.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -1783,18 +1697,22 @@
      ],
      "response": {
       "$ref": "Activity"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "insert": {
-     "restPath": "activities/{userId}/@self",
-     "rpcMethod": "chili.activities.insert",
+     "id": "chili.activities.insert",
+     "path": "activities/{userId}/@self",
      "httpMethod": "POST",
      "description": "Create a new activity",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -1803,24 +1721,24 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "preview": {
-       "restParameterType": "query",
-       "description": "If true, only preview the action.",
        "type": "boolean",
-       "default": "false"
+       "description": "If true, only preview the action.",
+       "default": "false",
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -1831,18 +1749,21 @@
      },
      "response": {
       "$ref": "Activity"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     },
     "list": {
-     "restPath": "activities/{userId}/{scope}",
-     "rpcMethod": "chili.activities.list",
+     "id": "chili.activities.list",
+     "path": "activities/{userId}/{scope}",
      "httpMethod": "GET",
      "description": "List activities",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -1851,46 +1772,46 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-comments": {
-       "restParameterType": "query",
-       "description": "Maximum number of comments to include.",
        "type": "integer",
+       "description": "Maximum number of comments to include.",
+       "default": "0",
        "minimum": "0",
-       "maximum": "4294967295"
+       "maximum": "4294967295",
+       "location": "query"
       },
       "max-liked": {
-       "restParameterType": "query",
-       "description": "Maximum number of likes to include.",
        "type": "integer",
+       "description": "Maximum number of likes to include.",
+       "default": "0",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "0"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection of activities to list.",
        "type": "string",
+       "description": "The collection of activities to list.",
+       "required": true,
        "enum": [
         "@comments",
         "@consumption",
@@ -1904,18 +1825,19 @@
         "Limit to activities liked by the user.",
         "Limit to public activities posted by the user.",
         "Limit to activities posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "truncateAtom": {
-       "restParameterType": "query",
+       "type": "boolean",
        "description": "Truncate the value of the atom:content element.",
-       "type": "boolean"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -1924,18 +1846,22 @@
      ],
      "response": {
       "$ref": "ActivityFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "search": {
-     "restPath": "activities/search",
-     "rpcMethod": "chili.activities.search",
+     "id": "chili.activities.search",
+     "path": "activities/search",
      "httpMethod": "GET",
      "description": "Search for activities",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -1944,76 +1870,80 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "bbox": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Bounding box to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "lat": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Latitude to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "lon": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Longitude to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "pid": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "ID of a place to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "q": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Full-text search query string.",
-       "type": "string"
+       "location": "query"
       },
       "radius": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Radius to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "truncateAtom": {
-       "restParameterType": "query",
+       "type": "boolean",
        "description": "Truncate the value of the atom:content element.",
-       "type": "boolean"
+       "location": "query"
       }
      },
      "response": {
       "$ref": "ActivityFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "track": {
-     "restPath": "activities/track",
-     "rpcMethod": "chili.activities.track",
+     "id": "chili.activities.track",
+     "path": "activities/track",
      "httpMethod": "GET",
      "description": "Get real-time activity tracking information",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2022,75 +1952,79 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "bbox": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Bounding box to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "lat": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Latitude to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "lon": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Longitude to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "pid": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "ID of a place to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       },
       "q": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Full-text search query string.",
-       "type": "string"
+       "location": "query"
       },
       "radius": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Radius to use in a geographic location query.",
-       "type": "string"
+       "location": "query"
       }
      },
      "response": {
       "$ref": "ActivityFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "update": {
-     "restPath": "activities/{userId}/{scope}/{postId}",
-     "rpcMethod": "chili.activities.update",
+     "id": "chili.activities.update",
+     "path": "activities/{userId}/{scope}/{postId}",
      "httpMethod": "PUT",
      "description": "Update an activity",
      "parameters": {
       "abuseType": {
-       "restParameterType": "query",
-       "type": "string"
+       "type": "string",
+       "location": "query"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2099,24 +2033,23 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity to update.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection to which the activity belongs.",
        "type": "string",
+       "description": "The collection to which the activity belongs.",
+       "required": true,
        "enum": [
         "@abuse",
         "@liked",
@@ -2128,13 +2061,14 @@
         "Activities liked by the user.",
         "Activities muted by the user.",
         "Activities posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user whose post to update.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2147,22 +2081,25 @@
      },
      "response": {
       "$ref": "Activity"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     }
    }
   },
   "comments": {
    "methods": {
     "delete": {
-     "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
-     "rpcMethod": "chili.comments.delete",
+     "id": "chili.comments.delete",
+     "path": "activities/{userId}/@self/{postId}/@comments/{commentId}",
      "httpMethod": "DELETE",
      "description": "Delete a comment",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2171,48 +2108,51 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "commentId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the comment being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity for which to delete the comment.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
       "userId",
       "postId",
       "commentId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
      ]
     },
     "get": {
-     "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
-     "rpcMethod": "chili.comments.get",
+     "id": "chili.comments.get",
+     "path": "activities/{userId}/@self/{postId}/@comments/{commentId}",
      "httpMethod": "GET",
      "description": "Get a comment",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2221,30 +2161,30 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "commentId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the comment being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity for which to get comments.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2254,18 +2194,22 @@
      ],
      "response": {
       "$ref": "Comment"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "insert": {
-     "restPath": "activities/{userId}/@self/{postId}/@comments",
-     "rpcMethod": "chili.comments.insert",
+     "id": "chili.comments.insert",
+     "path": "activities/{userId}/@self/{postId}/@comments",
      "httpMethod": "POST",
      "description": "Create a comment",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2274,24 +2218,24 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity on which to comment.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user on whose behalf to comment.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2303,18 +2247,21 @@
      },
      "response": {
       "$ref": "Comment"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     },
     "list": {
-     "restPath": "activities/{userId}/{scope}/{postId}/@comments",
-     "rpcMethod": "chili.comments.list",
+     "id": "chili.comments.list",
+     "path": "activities/{userId}/{scope}/{postId}/@comments",
      "httpMethod": "GET",
      "description": "List comments",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2323,49 +2270,49 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity for which to get comments.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection to which the activity belongs.",
        "type": "string",
+       "description": "The collection to which the activity belongs.",
+       "required": true,
        "enum": [
         "@self"
        ],
        "enumDescriptions": [
         "Activities posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user for whose post to get comments.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2375,22 +2322,26 @@
      ],
      "response": {
       "$ref": "CommentFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "update": {
-     "restPath": "activities/{userId}/{scope}/{postId}/@comments/{commentId}",
-     "rpcMethod": "chili.comments.update",
+     "id": "chili.comments.update",
+     "path": "activities/{userId}/{scope}/{postId}/@comments/{commentId}",
      "httpMethod": "PUT",
      "description": "Update a comment",
      "parameters": {
       "abuseType": {
-       "restParameterType": "query",
-       "type": "string"
+       "type": "string",
+       "location": "query"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2399,30 +2350,29 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "commentId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the comment being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity for which to update the comment.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection to which the activity belongs.",
        "type": "string",
+       "description": "The collection to which the activity belongs.",
+       "required": true,
        "enum": [
         "@abuse",
         "@self"
@@ -2430,13 +2380,14 @@
        "enumDescriptions": [
         "Comments reported by the user.",
         "Comments posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2450,22 +2401,25 @@
      },
      "response": {
       "$ref": "Comment"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     }
    }
   },
   "groups": {
    "methods": {
     "delete": {
-     "restPath": "people/{userId}/@groups/{groupId}",
-     "rpcMethod": "chili.groups.delete",
+     "id": "chili.groups.delete",
+     "path": "people/{userId}/@groups/{groupId}",
      "httpMethod": "DELETE",
      "description": "Delete a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2474,41 +2428,44 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the group to delete.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
       "userId",
       "groupId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
      ]
     },
     "get": {
-     "restPath": "people/{userId}/@groups/{groupId}/@self",
-     "rpcMethod": "chili.groups.get",
+     "id": "chili.groups.get",
+     "path": "people/{userId}/@groups/{groupId}/@self",
      "httpMethod": "GET",
      "description": "Get a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2517,24 +2474,24 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the group to get.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2543,18 +2500,22 @@
      ],
      "response": {
       "$ref": "Group"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "insert": {
-     "restPath": "people/{userId}/@groups",
-     "rpcMethod": "chili.groups.insert",
+     "id": "chili.groups.insert",
+     "path": "people/{userId}/@groups",
      "httpMethod": "POST",
      "description": "Create a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2563,18 +2524,18 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2585,18 +2546,21 @@
      },
      "response": {
       "$ref": "Group"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     },
     "list": {
-     "restPath": "people/{userId}/@groups",
-     "rpcMethod": "chili.groups.list",
+     "id": "chili.groups.list",
+     "path": "people/{userId}/@groups",
      "httpMethod": "GET",
      "description": "Get a user's groups",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2605,31 +2569,31 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2637,18 +2601,22 @@
      ],
      "response": {
       "$ref": "GroupFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "update": {
-     "restPath": "people/{userId}/@groups/{groupId}/@self",
-     "rpcMethod": "chili.groups.update",
+     "id": "chili.groups.update",
+     "path": "people/{userId}/@groups/{groupId}/@self",
      "httpMethod": "PUT",
      "description": "Update a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2657,24 +2625,24 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the group to update.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2686,22 +2654,25 @@
      },
      "response": {
       "$ref": "Group"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     }
    }
   },
   "people": {
    "methods": {
     "delete": {
-     "restPath": "people/{userId}/@groups/{groupId}/{personId}",
-     "rpcMethod": "chili.people.delete",
+     "id": "chili.people.delete",
+     "path": "people/{userId}/@groups/{groupId}/{personId}",
      "httpMethod": "DELETE",
      "description": "Remove a person from a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2710,48 +2681,51 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the group from which to remove the person.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "personId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the person to remove from the group.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the owner of the group.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
       "userId",
       "groupId",
       "personId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
      ]
     },
     "get": {
-     "restPath": "people/{userId}/@self",
-     "rpcMethod": "chili.people.get",
+     "id": "chili.people.get",
+     "path": "people/{userId}/@self",
      "httpMethod": "GET",
      "description": "Get a user profile",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2760,18 +2734,18 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2779,18 +2753,22 @@
      ],
      "response": {
       "$ref": "Person"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "liked": {
-     "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
-     "rpcMethod": "chili.people.liked",
+     "id": "chili.people.liked",
+     "path": "activities/{userId}/{scope}/{postId}/{groupId}",
      "httpMethod": "GET",
      "description": "Get people who liked an activity",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2799,53 +2777,53 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
        "type": "string",
+       "required": true,
        "enum": [
         "@liked"
        ],
        "enumDescriptions": [
         "People who liked this activity."
-       ]
+       ],
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity that was liked.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
+       "type": "string",
        "required": true,
-       "type": "string"
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2856,18 +2834,22 @@
      ],
      "response": {
       "$ref": "PeopleFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "list": {
-     "restPath": "people/{userId}/@groups/{groupId}",
-     "rpcMethod": "chili.people.list",
+     "id": "chili.people.list",
+     "path": "people/{userId}/@groups/{groupId}",
      "httpMethod": "GET",
      "description": "Get people in a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2876,37 +2858,37 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the group for which to list users.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2915,18 +2897,22 @@
      ],
      "response": {
       "$ref": "PeopleFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "reshared": {
-     "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
-     "rpcMethod": "chili.people.reshared",
+     "id": "chili.people.reshared",
+     "path": "activities/{userId}/{scope}/{postId}/{groupId}",
      "httpMethod": "GET",
      "description": "Get people who reshared an activity",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -2935,53 +2921,53 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
        "type": "string",
+       "required": true,
        "enum": [
         "@reshared"
        ],
        "enumDescriptions": [
         "People who reshared this activity."
-       ]
+       ],
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity that was reshared.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
+       "type": "string",
        "required": true,
-       "type": "string"
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -2992,18 +2978,22 @@
      ],
      "response": {
       "$ref": "PeopleFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "search": {
-     "restPath": "people/search",
-     "rpcMethod": "chili.people.search",
+     "id": "chili.people.search",
+     "path": "people/search",
      "httpMethod": "GET",
      "description": "Search for people",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3012,46 +3002,50 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "q": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Full-text search query string.",
-       "type": "string"
+       "location": "query"
       }
      },
      "response": {
       "$ref": "PeopleFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     },
     "update": {
-     "restPath": "people/{userId}/@groups/{groupId}/{personId}",
-     "rpcMethod": "chili.people.update",
+     "id": "chili.people.update",
+     "path": "people/{userId}/@groups/{groupId}/{personId}",
      "httpMethod": "PUT",
      "description": "Add a person to a group",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3060,30 +3054,30 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "groupId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the group to which to add the person.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "personId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the person to add to the group.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the owner of the group.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3096,28 +3090,31 @@
      },
      "response": {
       "$ref": "Person"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     }
    }
   },
   "photoAlbums": {
    "methods": {
     "delete": {
-     "restPath": "photos/{userId}/@self/{albumId}",
-     "rpcMethod": "chili.photoAlbums.delete",
+     "id": "chili.photoAlbums.delete",
+     "path": "photos/{userId}/@self/{albumId}",
      "httpMethod": "DELETE",
      "description": "Delete a photo album",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the album to delete.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3126,41 +3123,44 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
       "userId",
       "albumId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
      ]
     },
     "get": {
-     "restPath": "photos/{userId}/@self/{albumId}",
-     "rpcMethod": "chili.photoAlbums.get",
+     "id": "chili.photoAlbums.get",
+     "path": "photos/{userId}/@self/{albumId}",
      "httpMethod": "GET",
      "description": "Get a photo album",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the album to get.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3169,18 +3169,18 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3189,18 +3189,21 @@
      ],
      "response": {
       "$ref": "Album"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     },
     "insert": {
-     "restPath": "photos/{userId}/@self",
-     "rpcMethod": "chili.photoAlbums.insert",
+     "id": "chili.photoAlbums.insert",
+     "path": "photos/{userId}/@self",
      "httpMethod": "POST",
      "description": "Create a photo album",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3209,18 +3212,18 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3231,18 +3234,21 @@
      },
      "response": {
       "$ref": "Album"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     },
     "list": {
-     "restPath": "photos/{userId}/{scope}",
-     "rpcMethod": "chili.photoAlbums.list",
+     "id": "chili.photoAlbums.list",
+     "path": "photos/{userId}/{scope}",
      "httpMethod": "GET",
      "description": "List a user's photo albums",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3251,43 +3257,43 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection of albums to list.",
        "type": "string",
+       "description": "The collection of albums to list.",
+       "required": true,
        "enum": [
         "@self"
        ],
        "enumDescriptions": [
         "Albums posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3296,28 +3302,31 @@
      ],
      "response": {
       "$ref": "AlbumsFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     }
    }
   },
   "photos": {
    "methods": {
     "delete": {
-     "restPath": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
-     "rpcMethod": "chili.photos.delete",
+     "id": "chili.photos.delete",
+     "path": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
      "httpMethod": "DELETE",
      "description": "Delete a photo",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the album to which to photo belongs.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3326,48 +3335,51 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "photoId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the photo to delete.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
       "userId",
       "albumId",
       "photoId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
      ]
     },
     "get": {
-     "restPath": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
-     "rpcMethod": "chili.photos.get",
+     "id": "chili.photos.get",
+     "path": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
      "httpMethod": "GET",
      "description": "Get photo metadata",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
+       "type": "string",
+       "description": "ID of the album containing the photo.",
        "required": true,
-       "description": "ID of the photo for which to get metadata.",
-       "type": "string"
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3376,24 +3388,24 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "photoId": {
-       "restParameterType": "path",
+       "type": "string",
+       "description": "ID of the photo for which to get metadata.",
        "required": true,
-       "description": "ID of the album containing the photo.",
-       "type": "string"
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3403,24 +3415,27 @@
      ],
      "response": {
       "$ref": "ChiliPhotosResourceJson"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     },
     "insert": {
-     "restPath": "photos/{userId}/{albumId}",
-     "rpcMethod": "chili.photos.insert",
+     "id": "chili.photos.insert",
+     "path": "photos/{userId}/{albumId}",
      "httpMethod": "POST",
      "description": "Upload a photo to an album",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the album to which to upload.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3429,18 +3444,18 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3448,28 +3463,31 @@
       "albumId"
      ],
      "request": {
-      "$ref": "Album"
+      "$ref": "AlbumLite"
      },
      "response": {
-      "$ref": "Album"
-     }
+      "$ref": "AlbumLite"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz"
+     ]
     },
     "insert2": {
-     "restPath": "photos/{userId}/@self/{albumId}/@photos",
-     "rpcMethod": "chili.photos.insert2",
+     "id": "chili.photos.insert2",
+     "path": "photos/{userId}/@self/{albumId}/@photos",
      "httpMethod": "POST",
      "description": "Upload a photo to an album",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the album to which to upload.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3478,18 +3496,18 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3501,24 +3519,27 @@
      },
      "response": {
       "$ref": "ChiliPhotosResourceJson"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     },
     "listByAlbum": {
-     "restPath": "photos/{userId}/@self/{albumId}/@photos",
-     "rpcMethod": "chili.photos.listByAlbum",
+     "id": "chili.photos.listByAlbum",
+     "path": "photos/{userId}/@self/{albumId}/@photos",
      "httpMethod": "GET",
      "description": "List photos in an album",
      "parameters": {
       "albumId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the album for which to list photos.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3527,31 +3548,31 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3560,18 +3581,21 @@
      ],
      "response": {
       "$ref": "PhotosFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     },
     "listByScope": {
-     "restPath": "photos/{userId}/@self/{scope}/@photos",
-     "rpcMethod": "chili.photos.listByScope",
+     "id": "chili.photos.listByScope",
+     "path": "photos/{userId}/@self/{scope}/@photos",
      "httpMethod": "GET",
      "description": "Get a user's photos",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3580,43 +3604,43 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "c": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "A continuation token that allows pagination.",
-       "type": "string"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "description": "Maximum number of results to include.",
        "type": "integer",
+       "description": "Maximum number of results to include.",
+       "default": "20",
        "minimum": "0",
        "maximum": "4294967295",
-       "default": "20"
+       "location": "query"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection of photos to list.",
        "type": "string",
+       "description": "The collection of photos to list.",
+       "required": true,
        "enum": [
         "@recent"
        ],
        "enumDescriptions": [
         "Recent photos uploaded by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3625,22 +3649,25 @@
      ],
      "response": {
       "$ref": "PhotosFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/picasa"
+     ]
     }
    }
   },
   "related": {
    "methods": {
     "list": {
-     "restPath": "activities/{userId}/{scope}/{postId}/@related",
-     "rpcMethod": "chili.related.list",
+     "id": "chili.related.list",
+     "path": "activities/{userId}/{scope}/{postId}/@related",
      "httpMethod": "GET",
      "description": "Get related links for an activity",
      "parameters": {
       "alt": {
-       "restParameterType": "query",
-       "description": "Specifies an alternative representation type.",
        "type": "string",
+       "description": "Specifies an alternative representation type.",
+       "default": "atom",
        "enum": [
         "atom",
         "json"
@@ -3649,36 +3676,36 @@
         "Use Atom XML format",
         "Use JSON format"
        ],
-       "default": "atom"
+       "location": "query"
       },
       "hl": {
-       "restParameterType": "query",
+       "type": "string",
        "description": "Language code to limit language results.",
-       "type": "string"
+       "location": "query"
       },
       "postId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the activity to which to get related links.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       },
       "scope": {
-       "restParameterType": "path",
-       "required": true,
-       "description": "The collection to which the activity belongs.",
        "type": "string",
+       "description": "The collection to which the activity belongs.",
+       "required": true,
        "enum": [
         "@self"
        ],
        "enumDescriptions": [
         "Activities posted by the user."
-       ]
+       ],
+       "location": "path"
       },
       "userId": {
-       "restParameterType": "path",
-       "required": true,
+       "type": "string",
        "description": "ID of the user being referenced.",
-       "type": "string"
+       "required": true,
+       "location": "path"
       }
      },
      "parameterOrder": [
@@ -3688,7 +3715,11 @@
      ],
      "response": {
       "$ref": "RelatedFeed"
-     }
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/buzz",
+      "https://www.googleapis.com/auth/buzz.readonly"
+     ]
     }
    }
   }
diff --git a/tests/data/latitude.json b/tests/data/latitude.json
index 46f82f2..99967ef 100644
--- a/tests/data/latitude.json
+++ b/tests/data/latitude.json
@@ -1,92 +1,237 @@
 {
+ "kind": "discovery#restDescription",
+ "id": "latitude:v1",
  "name": "latitude",
  "version": "v1",
  "description": "Google Latitude API",
- "restBasePath": "/latitude/v1",
- "rpcPath": "/rpc",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/search-16.gif",
+  "x32": "http://www.google.com/images/icons/product/search-32.gif"
+ },
+ "labels": [
+  "labs"
+ ],
+ "protocol": "rest",
+ "basePath": "/latitude/v1/",
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/latitude": {
+     "description": "Manage your current location and location history"
+    }
+   }
+  }
+ },
+ "features": [
+  "dataWrapper"
+ ],
+ "schemas": {
+  "LatitudeCurrentlocationResourceJson": {
+   "$ref": "Location"
+  },
+  "Location": {
+   "id": "Location",
+   "type": "object",
+   "properties": {
+    "accuracy": {
+     "type": "any"
+    },
+    "activityId": {
+     "type": "any"
+    },
+    "altitude": {
+     "type": "any"
+    },
+    "altitudeAccuracy": {
+     "type": "any"
+    },
+    "heading": {
+     "type": "any"
+    },
+    "kind": {
+     "type": "string",
+     "default": "latitude#location"
+    },
+    "latitude": {
+     "type": "any"
+    },
+    "longitude": {
+     "type": "any"
+    },
+    "placeid": {
+     "type": "any"
+    },
+    "speed": {
+     "type": "any"
+    },
+    "timestampMs": {
+     "type": "any"
+    }
+   }
+  },
+  "LocationFeed": {
+   "id": "LocationFeed",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Location"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "latitude#locationFeed"
+    }
+   }
+  }
+ },
  "resources": {
   "currentLocation": {
    "methods": {
     "delete": {
-     "restPath": "/currentLocation",
-     "rpcMethod": "latitude.currentLocation.delete",
-     "httpMethod": "DELETE"
+     "id": "latitude.currentLocation.delete",
+     "path": "currentLocation",
+     "httpMethod": "DELETE",
+     "description": "Deletes the authenticated user's current location.",
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     },
     "get": {
-     "restPath": "/currentLocation",
-     "rpcMethod": "latitude.currentLocation.get",
+     "id": "latitude.currentLocation.get",
+     "path": "currentLocation",
      "httpMethod": "GET",
+     "description": "Returns the authenticated user's current location.",
      "parameters": {
       "granularity": {
-       "restParameterType": "query",
-       "required": false
+       "type": "string",
+       "description": "Granularity of the requested location.",
+       "location": "query"
       }
-     }
+     },
+     "response": {
+      "$ref": "LatitudeCurrentlocationResourceJson"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     },
     "insert": {
-     "restPath": "/currentLocation",
-     "rpcMethod": "latitude.currentLocation.insert",
-     "httpMethod": "POST"
+     "id": "latitude.currentLocation.insert",
+     "path": "currentLocation",
+     "httpMethod": "POST",
+     "description": "Updates or creates the user's current location.",
+     "request": {
+      "$ref": "LatitudeCurrentlocationResourceJson"
+     },
+     "response": {
+      "$ref": "LatitudeCurrentlocationResourceJson"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     }
    }
   },
   "location": {
    "methods": {
     "delete": {
-     "restPath": "/location/{locationId}",
-     "rpcMethod": "latitude.location.delete",
+     "id": "latitude.location.delete",
+     "path": "location/{locationId}",
      "httpMethod": "DELETE",
+     "description": "Deletes a location from the user's location history.",
      "parameters": {
       "locationId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "type": "string",
+       "description": "Timestamp of the location to delete (ms since epoch).",
+       "required": true,
+       "location": "path"
       }
-     }
+     },
+     "parameterOrder": [
+      "locationId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     },
     "get": {
-     "restPath": "/location/{locationId}",
-     "rpcMethod": "latitude.location.get",
+     "id": "latitude.location.get",
+     "path": "location/{locationId}",
      "httpMethod": "GET",
+     "description": "Reads a location from the user's location history.",
      "parameters": {
       "granularity": {
-       "restParameterType": "query",
-       "required": false
+       "type": "string",
+       "description": "Granularity of the location to return.",
+       "location": "query"
       },
       "locationId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "type": "string",
+       "description": "Timestamp of the location to read (ms since epoch).",
+       "required": true,
+       "location": "path"
       }
-     }
+     },
+     "parameterOrder": [
+      "locationId"
+     ],
+     "response": {
+      "$ref": "Location"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     },
     "insert": {
-     "restPath": "/location",
-     "rpcMethod": "latitude.location.insert",
-     "httpMethod": "POST"
+     "id": "latitude.location.insert",
+     "path": "location",
+     "httpMethod": "POST",
+     "description": "Inserts or updates a location in the user's location history.",
+     "request": {
+      "$ref": "Location"
+     },
+     "response": {
+      "$ref": "Location"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     },
     "list": {
-     "restPath": "/location",
-     "rpcMethod": "latitude.location.list",
+     "id": "latitude.location.list",
+     "path": "location",
      "httpMethod": "GET",
+     "description": "Lists the user's location history.",
      "parameters": {
       "granularity": {
-       "restParameterType": "query",
-       "required": false
+       "type": "string",
+       "description": "Granularity of the requested locations.",
+       "location": "query"
       },
       "max-results": {
-       "restParameterType": "query",
-       "required": false
+       "type": "string",
+       "description": "Maximum number of locations to return.",
+       "location": "query"
       },
       "max-time": {
-       "restParameterType": "query",
-       "required": false
+       "type": "string",
+       "description": "Maximum timestamp of locations to return (ms since epoch).",
+       "location": "query"
       },
       "min-time": {
-       "restParameterType": "query",
-       "required": false
+       "type": "string",
+       "description": "Minimum timestamp of locations to return (ms since epoch).",
+       "location": "query"
       }
-     }
+     },
+     "response": {
+      "$ref": "LocationFeed"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/latitude"
+     ]
     }
    }
   }
diff --git a/tests/data/moderator.json b/tests/data/moderator.json
index e69de29..55a7483 100644
--- a/tests/data/moderator.json
+++ b/tests/data/moderator.json
@@ -0,0 +1,1665 @@
+{
+ "kind": "discovery#restDescription",
+ "id": "moderator:v1",
+ "name": "moderator",
+ "version": "v1",
+ "description": "Moderator API",
+ "icons": {
+  "x16": "http://www.google.com/images/icons/product/moderator-32.png",
+  "x32": "http://www.google.com/images/icons/product/search-32.gif"
+ },
+ "documentationLink": "http://code.google.com/apis/moderator/v1/using_rest.html",
+ "labels": [
+  "labs"
+ ],
+ "protocol": "rest",
+ "basePath": "/moderator/v1/",
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/moderator": {
+     "description": "Manage your activity in Google Moderator"
+    }
+   }
+  }
+ },
+ "features": [
+  "dataWrapper"
+ ],
+ "schemas": {
+  "ModeratorTopicsResourcePartial": {
+   "id": "ModeratorTopicsResourcePartial",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "topicId": {
+       "type": "integer"
+      }
+     }
+    }
+   }
+  },
+  "ModeratorVotesResourcePartial": {
+   "id": "ModeratorVotesResourcePartial",
+   "type": "object",
+   "properties": {
+    "flag": {
+     "type": "string"
+    },
+    "vote": {
+     "type": "string"
+    }
+   }
+  },
+  "Profile": {
+   "id": "Profile",
+   "type": "object",
+   "properties": {
+    "attribution": {
+     "type": "object",
+     "properties": {
+      "avatarUrl": {
+       "type": "string"
+      },
+      "displayName": {
+       "type": "string"
+      },
+      "geo": {
+       "type": "object",
+       "properties": {
+        "latitude": {
+         "type": "number"
+        },
+        "location": {
+         "type": "string"
+        },
+        "longitude": {
+         "type": "number"
+        }
+       }
+      },
+      "location": {
+       "type": "string"
+      }
+     }
+    },
+    "id": {
+     "type": "object",
+     "properties": {
+      "user": {
+       "type": "string"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#profile"
+    }
+   }
+  },
+  "Series": {
+   "id": "Series",
+   "type": "object",
+   "properties": {
+    "anonymousSubmissionAllowed": {
+     "type": "boolean"
+    },
+    "counters": {
+     "type": "object",
+     "properties": {
+      "anonymousSubmissions": {
+       "type": "integer"
+      },
+      "minusVotes": {
+       "type": "integer"
+      },
+      "noneVotes": {
+       "type": "integer"
+      },
+      "plusVotes": {
+       "type": "integer"
+      },
+      "submissions": {
+       "type": "integer"
+      },
+      "users": {
+       "type": "integer"
+      },
+      "videoSubmissions": {
+       "type": "integer"
+      }
+     }
+    },
+    "description": {
+     "type": "string"
+    },
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#series"
+    },
+    "name": {
+     "type": "string"
+    },
+    "numTopics": {
+     "type": "integer"
+    },
+    "videoSubmissionAllowed": {
+     "type": "boolean"
+    }
+   }
+  },
+  "SeriesList": {
+   "id": "SeriesList",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Series"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#seriesList"
+    }
+   }
+  },
+  "Submission": {
+   "id": "Submission",
+   "type": "object",
+   "properties": {
+    "attachmentUrl": {
+     "type": "string"
+    },
+    "attribution": {
+     "type": "object",
+     "properties": {
+      "avatarUrl": {
+       "type": "string"
+      },
+      "displayName": {
+       "type": "string"
+      },
+      "location": {
+       "type": "string"
+      }
+     }
+    },
+    "author": {
+     "type": "string"
+    },
+    "counters": {
+     "type": "object",
+     "properties": {
+      "minusVotes": {
+       "type": "integer"
+      },
+      "noneVotes": {
+       "type": "integer"
+      },
+      "plusVotes": {
+       "type": "integer"
+      }
+     }
+    },
+    "created": {
+     "type": "integer"
+    },
+    "geo": {
+     "type": "object",
+     "properties": {
+      "latitude": {
+       "type": "number"
+      },
+      "location": {
+       "type": "string"
+      },
+      "longitude": {
+       "type": "number"
+      }
+     }
+    },
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "submissionId": {
+       "type": "integer"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#submission"
+    },
+    "parentSubmissionId": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "submissionId": {
+       "type": "integer"
+      }
+     }
+    },
+    "text": {
+     "type": "string"
+    },
+    "topics": {
+     "type": "array",
+     "items": {
+      "$ref": "ModeratorTopicsResourcePartial"
+     }
+    },
+    "translations": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "lang": {
+        "type": "string"
+       },
+       "text": {
+        "type": "string"
+       }
+      }
+     }
+    },
+    "vote": {
+     "$ref": "ModeratorVotesResourcePartial"
+    }
+   }
+  },
+  "SubmissionList": {
+   "id": "SubmissionList",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Submission"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#submissionList"
+    }
+   }
+  },
+  "Tag": {
+   "id": "Tag",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "submissionId": {
+       "type": "integer"
+      },
+      "tagId": {
+       "type": "string"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#tag"
+    },
+    "text": {
+     "type": "string"
+    }
+   }
+  },
+  "TagList": {
+   "id": "TagList",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Tag"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#tagList"
+    }
+   }
+  },
+  "Topic": {
+   "id": "Topic",
+   "type": "object",
+   "properties": {
+    "counters": {
+     "type": "object",
+     "properties": {
+      "minusVotes": {
+       "type": "integer"
+      },
+      "noneVotes": {
+       "type": "integer"
+      },
+      "plusVotes": {
+       "type": "integer"
+      },
+      "submissions": {
+       "type": "integer"
+      },
+      "users": {
+       "type": "integer"
+      },
+      "videoSubmissions": {
+       "type": "integer"
+      }
+     }
+    },
+    "description": {
+     "type": "string"
+    },
+    "featuredSubmission": {
+     "type": "any"
+    },
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "topicId": {
+       "type": "integer"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#topic"
+    },
+    "name": {
+     "type": "string"
+    },
+    "presenter": {
+     "type": "string"
+    },
+    "rules": {
+     "type": "object",
+     "properties": {
+      "submissions": {
+       "type": "object",
+       "properties": {
+        "close": {
+         "type": "integer"
+        },
+        "open": {
+         "type": "integer"
+        }
+       }
+      },
+      "votes": {
+       "type": "object",
+       "properties": {
+        "close": {
+         "type": "integer"
+        },
+        "open": {
+         "type": "integer"
+        }
+       }
+      }
+     }
+    }
+   }
+  },
+  "Topic2": {
+   "id": "Topic2",
+   "type": "object",
+   "properties": {
+    "counters": {
+     "type": "object",
+     "properties": {
+      "minusVotes": {
+       "type": "integer"
+      },
+      "noneVotes": {
+       "type": "integer"
+      },
+      "plusVotes": {
+       "type": "integer"
+      },
+      "submissions": {
+       "type": "integer"
+      },
+      "users": {
+       "type": "integer"
+      },
+      "videoSubmissions": {
+       "type": "integer"
+      }
+     }
+    },
+    "description": {
+     "type": "string"
+    },
+    "featuredSubmission": {
+     "$ref": "Submission"
+    },
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "topicId": {
+       "type": "integer"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#topic"
+    },
+    "name": {
+     "type": "string"
+    },
+    "presenter": {
+     "type": "string"
+    },
+    "rules": {
+     "type": "object",
+     "properties": {
+      "submissions": {
+       "type": "object",
+       "properties": {
+        "close": {
+         "type": "integer"
+        },
+        "open": {
+         "type": "integer"
+        }
+       }
+      },
+      "votes": {
+       "type": "object",
+       "properties": {
+        "close": {
+         "type": "integer"
+        },
+        "open": {
+         "type": "integer"
+        }
+       }
+      }
+     }
+    }
+   }
+  },
+  "TopicList": {
+   "id": "TopicList",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Topic"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#topicList"
+    }
+   }
+  },
+  "Vote": {
+   "id": "Vote",
+   "type": "object",
+   "properties": {
+    "flag": {
+     "type": "string"
+    },
+    "id": {
+     "type": "object",
+     "properties": {
+      "seriesId": {
+       "type": "integer"
+      },
+      "submissionId": {
+       "type": "integer"
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#vote"
+    },
+    "vote": {
+     "type": "string"
+    }
+   }
+  },
+  "VoteList": {
+   "id": "VoteList",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Vote"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "moderator#voteList"
+    }
+   }
+  }
+ },
+ "resources": {
+  "featured": {
+   "resources": {
+    "series": {
+     "methods": {
+      "list": {
+       "id": "moderator.featured.series.list",
+       "path": "series/featured",
+       "httpMethod": "GET",
+       "description": "Lists the featured series.",
+       "response": {
+        "$ref": "SeriesList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "global": {
+   "resources": {
+    "series": {
+     "methods": {
+      "list": {
+       "id": "moderator.global.series.list",
+       "path": "search",
+       "httpMethod": "GET",
+       "description": "Searches the public series and returns the search results.",
+       "parameters": {
+        "max-results": {
+         "type": "integer",
+         "description": "Maximum number of results to return.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        },
+        "q": {
+         "type": "string",
+         "description": "Search query.",
+         "location": "query"
+        },
+        "start-index": {
+         "type": "integer",
+         "description": "Index of the first result to be retrieved.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        }
+       },
+       "response": {
+        "$ref": "SeriesList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "my": {
+   "resources": {
+    "series": {
+     "methods": {
+      "list": {
+       "id": "moderator.my.series.list",
+       "path": "series/@me/mine",
+       "httpMethod": "GET",
+       "description": "Lists all series created by the authenticated user.",
+       "response": {
+        "$ref": "SeriesList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "myrecent": {
+   "resources": {
+    "series": {
+     "methods": {
+      "list": {
+       "id": "moderator.myrecent.series.list",
+       "path": "series/@me/recent",
+       "httpMethod": "GET",
+       "description": "Lists the series the authenticated user has visited.",
+       "response": {
+        "$ref": "SeriesList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "profiles": {
+   "methods": {
+    "get": {
+     "id": "moderator.profiles.get",
+     "path": "profiles/@me",
+     "httpMethod": "GET",
+     "description": "Returns the profile information for the authenticated user.",
+     "response": {
+      "$ref": "Profile"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "update": {
+     "id": "moderator.profiles.update",
+     "path": "profiles/@me",
+     "httpMethod": "PUT",
+     "description": "Updates the profile information for the authenticated user.",
+     "request": {
+      "$ref": "Profile"
+     },
+     "response": {
+      "$ref": "Profile"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   }
+  },
+  "responses": {
+   "methods": {
+    "insert": {
+     "id": "moderator.responses.insert",
+     "path": "series/{seriesId}/topics/{topicId}/submissions/{parentSubmissionId}/responses",
+     "httpMethod": "POST",
+     "description": "Inserts a response for the specified submission in the specified topic within the specified series.",
+     "parameters": {
+      "anonymous": {
+       "type": "boolean",
+       "description": "Set to true to mark the new submission as anonymous.",
+       "location": "query"
+      },
+      "parentSubmissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the parent Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "topicId": {
+       "type": "integer",
+       "description": "The decimal ID of the Topic within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "topicId",
+      "parentSubmissionId"
+     ],
+     "request": {
+      "$ref": "Submission"
+     },
+     "response": {
+      "$ref": "Submission"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "list": {
+     "id": "moderator.responses.list",
+     "path": "series/{seriesId}/submissions/{submissionId}/responses",
+     "httpMethod": "GET",
+     "description": "Lists or searches the responses for the specified submission within the specified series and returns the search results.",
+     "parameters": {
+      "author": {
+       "type": "string",
+       "description": "Restricts the results to submissions by a specific author.",
+       "location": "query"
+      },
+      "hasAttachedVideo": {
+       "type": "boolean",
+       "description": "Specifies whether to restrict to submissions that have videos attached.",
+       "location": "query"
+      },
+      "max-results": {
+       "type": "integer",
+       "description": "Maximum number of results to return.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      },
+      "q": {
+       "type": "string",
+       "description": "Search query.",
+       "location": "query"
+      },
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "sort": {
+       "type": "string",
+       "description": "Sort order.",
+       "location": "query"
+      },
+      "start-index": {
+       "type": "integer",
+       "description": "Index of the first result to be retrieved.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "response": {
+      "$ref": "SubmissionList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   }
+  },
+  "series": {
+   "methods": {
+    "get": {
+     "id": "moderator.series.get",
+     "path": "series/{seriesId}",
+     "httpMethod": "GET",
+     "description": "Returns the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId"
+     ],
+     "response": {
+      "$ref": "Series"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "insert": {
+     "id": "moderator.series.insert",
+     "path": "series",
+     "httpMethod": "POST",
+     "description": "Inserts a new series.",
+     "request": {
+      "$ref": "Series"
+     },
+     "response": {
+      "$ref": "Series"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "list": {
+     "id": "moderator.series.list",
+     "path": "series",
+     "httpMethod": "GET",
+     "description": "Searches the series and returns the search results.",
+     "parameters": {
+      "max-results": {
+       "type": "integer",
+       "description": "Maximum number of results to return.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      },
+      "q": {
+       "type": "string",
+       "description": "Search query.",
+       "location": "query"
+      },
+      "start-index": {
+       "type": "integer",
+       "description": "Index of the first result to be retrieved.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      }
+     },
+     "response": {
+      "$ref": "SeriesList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "update": {
+     "id": "moderator.series.update",
+     "path": "series/{seriesId}",
+     "httpMethod": "PUT",
+     "description": "Updates the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId"
+     ],
+     "request": {
+      "$ref": "Series"
+     },
+     "response": {
+      "$ref": "Series"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   },
+   "resources": {
+    "responses": {
+     "methods": {
+      "list": {
+       "id": "moderator.series.responses.list",
+       "path": "series/{seriesId}/responses",
+       "httpMethod": "GET",
+       "description": "Searches the responses for the specified series and returns the search results.",
+       "parameters": {
+        "author": {
+         "type": "string",
+         "description": "Restricts the results to submissions by a specific author.",
+         "location": "query"
+        },
+        "hasAttachedVideo": {
+         "type": "boolean",
+         "description": "Specifies whether to restrict to submissions that have videos attached.",
+         "location": "query"
+        },
+        "max-results": {
+         "type": "integer",
+         "description": "Maximum number of results to return.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        },
+        "q": {
+         "type": "string",
+         "description": "Search query.",
+         "location": "query"
+        },
+        "seriesId": {
+         "type": "integer",
+         "description": "The decimal ID of the Series.",
+         "required": true,
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "path"
+        },
+        "sort": {
+         "type": "string",
+         "description": "Sort order.",
+         "location": "query"
+        },
+        "start-index": {
+         "type": "integer",
+         "description": "Index of the first result to be retrieved.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "seriesId"
+       ],
+       "response": {
+        "$ref": "SeriesList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    },
+    "submissions": {
+     "methods": {
+      "list": {
+       "id": "moderator.series.submissions.list",
+       "path": "series/{seriesId}/submissions",
+       "httpMethod": "GET",
+       "description": "Searches the submissions for the specified series and returns the search results.",
+       "parameters": {
+        "author": {
+         "type": "string",
+         "description": "Restricts the results to submissions by a specific author.",
+         "location": "query"
+        },
+        "hasAttachedVideo": {
+         "type": "boolean",
+         "description": "Specifies whether to restrict to submissions that have videos attached.",
+         "location": "query"
+        },
+        "includeVotes": {
+         "type": "boolean",
+         "description": "Specifies whether to include the current user's vote",
+         "location": "query"
+        },
+        "lang": {
+         "type": "string",
+         "description": "The language code for the language the client prefers resuls in.",
+         "location": "query"
+        },
+        "max-results": {
+         "type": "integer",
+         "description": "Maximum number of results to return.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        },
+        "q": {
+         "type": "string",
+         "description": "Search query.",
+         "location": "query"
+        },
+        "seriesId": {
+         "type": "integer",
+         "description": "The decimal ID of the Series.",
+         "required": true,
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "path"
+        },
+        "sort": {
+         "type": "string",
+         "description": "Sort order.",
+         "location": "query"
+        },
+        "start-index": {
+         "type": "integer",
+         "description": "Index of the first result to be retrieved.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "seriesId"
+       ],
+       "response": {
+        "$ref": "SubmissionList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "submissions": {
+   "methods": {
+    "get": {
+     "id": "moderator.submissions.get",
+     "path": "series/{seriesId}/submissions/{submissionId}",
+     "httpMethod": "GET",
+     "description": "Returns the specified submission within the specified series.",
+     "parameters": {
+      "includeVotes": {
+       "type": "boolean",
+       "description": "Specifies whether to include the current user's vote",
+       "location": "query"
+      },
+      "lang": {
+       "type": "string",
+       "description": "The language code for the language the client prefers resuls in.",
+       "location": "query"
+      },
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "response": {
+      "$ref": "Submission"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "insert": {
+     "id": "moderator.submissions.insert",
+     "path": "series/{seriesId}/topics/{topicId}/submissions",
+     "httpMethod": "POST",
+     "description": "Inserts a new submission in the specified topic within the specified series.",
+     "parameters": {
+      "anonymous": {
+       "type": "boolean",
+       "description": "Set to true to mark the new submission as anonymous.",
+       "location": "query"
+      },
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "topicId": {
+       "type": "integer",
+       "description": "The decimal ID of the Topic within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "topicId"
+     ],
+     "request": {
+      "$ref": "Submission"
+     },
+     "response": {
+      "$ref": "Submission"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   }
+  },
+  "tags": {
+   "methods": {
+    "delete": {
+     "id": "moderator.tags.delete",
+     "path": "series/{seriesId}/submissions/{submissionId}/tags/{tagId}",
+     "httpMethod": "DELETE",
+     "description": "Deletes the specified tag from the specified submission within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "tagId": {
+       "type": "string",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId",
+      "tagId"
+     ],
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "insert": {
+     "id": "moderator.tags.insert",
+     "path": "series/{seriesId}/submissions/{submissionId}/tags",
+     "httpMethod": "POST",
+     "description": "Inserts a new tag for the specified submission within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "request": {
+      "$ref": "Tag"
+     },
+     "response": {
+      "$ref": "Tag"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "list": {
+     "id": "moderator.tags.list",
+     "path": "series/{seriesId}/submissions/{submissionId}/tags",
+     "httpMethod": "GET",
+     "description": "Lists all tags for the specified submission within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "response": {
+      "$ref": "TagList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   }
+  },
+  "topics": {
+   "methods": {
+    "get": {
+     "id": "moderator.topics.get",
+     "path": "series/{seriesId}/topics/{topicId}",
+     "httpMethod": "GET",
+     "description": "Returns the specified topic from the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "topicId": {
+       "type": "integer",
+       "description": "The decimal ID of the Topic within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "topicId"
+     ],
+     "response": {
+      "$ref": "Topic2"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "insert": {
+     "id": "moderator.topics.insert",
+     "path": "series/{seriesId}/topics",
+     "httpMethod": "POST",
+     "description": "Inserts a new topic into the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId"
+     ],
+     "request": {
+      "$ref": "Topic"
+     },
+     "response": {
+      "$ref": "Topic"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "list": {
+     "id": "moderator.topics.list",
+     "path": "series/{seriesId}/topics",
+     "httpMethod": "GET",
+     "description": "Searches the topics within the specified series and returns the search results.",
+     "parameters": {
+      "max-results": {
+       "type": "integer",
+       "description": "Maximum number of results to return.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      },
+      "mode": {
+       "type": "string",
+       "location": "query"
+      },
+      "q": {
+       "type": "string",
+       "description": "Search query.",
+       "location": "query"
+      },
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "start-index": {
+       "type": "integer",
+       "description": "Index of the first result to be retrieved.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "seriesId"
+     ],
+     "response": {
+      "$ref": "TopicList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "update": {
+     "id": "moderator.topics.update",
+     "path": "series/{seriesId}/topics/{topicId}",
+     "httpMethod": "PUT",
+     "description": "Updates the specified topic within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "topicId": {
+       "type": "integer",
+       "description": "The decimal ID of the Topic within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "topicId"
+     ],
+     "request": {
+      "$ref": "Topic"
+     },
+     "response": {
+      "$ref": "Topic"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   },
+   "resources": {
+    "submissions": {
+     "methods": {
+      "list": {
+       "id": "moderator.topics.submissions.list",
+       "path": "series/{seriesId}/topics/{topicId}/submissions",
+       "httpMethod": "GET",
+       "description": "Searches the submissions for the specified topic within the specified series and returns the search results.",
+       "parameters": {
+        "author": {
+         "type": "string",
+         "description": "Restricts the results to submissions by a specific author.",
+         "location": "query"
+        },
+        "hasAttachedVideo": {
+         "type": "boolean",
+         "description": "Specifies whether to restrict to submissions that have videos attached.",
+         "location": "query"
+        },
+        "includeVotes": {
+         "type": "boolean",
+         "description": "Specifies whether to include the current user's vote",
+         "location": "query"
+        },
+        "max-results": {
+         "type": "integer",
+         "description": "Maximum number of results to return.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        },
+        "q": {
+         "type": "string",
+         "description": "Search query.",
+         "location": "query"
+        },
+        "seriesId": {
+         "type": "integer",
+         "description": "The decimal ID of the Series.",
+         "required": true,
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "path"
+        },
+        "sort": {
+         "type": "string",
+         "description": "Sort order.",
+         "location": "query"
+        },
+        "start-index": {
+         "type": "integer",
+         "description": "Index of the first result to be retrieved.",
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "query"
+        },
+        "topicId": {
+         "type": "integer",
+         "description": "The decimal ID of the Topic within the Series.",
+         "required": true,
+         "minimum": "0",
+         "maximum": "4294967295",
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "seriesId",
+        "topicId"
+       ],
+       "response": {
+        "$ref": "SubmissionList"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/moderator"
+       ]
+      }
+     }
+    }
+   }
+  },
+  "votes": {
+   "methods": {
+    "get": {
+     "id": "moderator.votes.get",
+     "path": "series/{seriesId}/submissions/{submissionId}/votes/@me",
+     "httpMethod": "GET",
+     "description": "Returns the votes by the authenticated user for the specified submission within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "userId": {
+       "type": "string",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "response": {
+      "$ref": "Vote"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "insert": {
+     "id": "moderator.votes.insert",
+     "path": "series/{seriesId}/submissions/{submissionId}/votes/@me",
+     "httpMethod": "POST",
+     "description": "Inserts a new vote by the authenticated user for the specified submission within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "request": {
+      "$ref": "Vote"
+     },
+     "response": {
+      "$ref": "Vote"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "list": {
+     "id": "moderator.votes.list",
+     "path": "series/{seriesId}/votes/@me",
+     "httpMethod": "GET",
+     "description": "Lists the votes by the authenticated user for the given series.",
+     "parameters": {
+      "max-results": {
+       "type": "integer",
+       "description": "Maximum number of results to return.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      },
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "start-index": {
+       "type": "integer",
+       "description": "Index of the first result to be retrieved.",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "seriesId"
+     ],
+     "response": {
+      "$ref": "VoteList"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    },
+    "update": {
+     "id": "moderator.votes.update",
+     "path": "series/{seriesId}/submissions/{submissionId}/votes/@me",
+     "httpMethod": "PUT",
+     "description": "Updates the votes by the authenticated user for the specified submission within the specified series.",
+     "parameters": {
+      "seriesId": {
+       "type": "integer",
+       "description": "The decimal ID of the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "submissionId": {
+       "type": "integer",
+       "description": "The decimal ID of the Submission within the Series.",
+       "required": true,
+       "minimum": "0",
+       "maximum": "4294967295",
+       "location": "path"
+      },
+      "userId": {
+       "type": "string",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "seriesId",
+      "submissionId"
+     ],
+     "request": {
+      "$ref": "Vote"
+     },
+     "response": {
+      "$ref": "Vote"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/moderator"
+     ]
+    }
+   }
+  }
+ }
+}
diff --git a/tests/data/zoo.json b/tests/data/zoo.json
index 284619e..b392270 100644
--- a/tests/data/zoo.json
+++ b/tests/data/zoo.json
@@ -3,7 +3,7 @@
  "name": "zoo",
  "version": "v1",
  "description": "Zoo API used for Apiary testing",
- "restBasePath": "/zoo/",
+ "basePath": "/zoo/",
  "rpcPath": "/rpc",
  "features": [
   "dataWrapper"
@@ -114,19 +114,19 @@
  },
  "methods": {
   "query": {
-   "restPath": "query",
-   "rpcMethod": "bigquery.query",
+   "path": "query",
+   "id": "bigquery.query",
    "httpMethod": "GET",
    "parameters": {
     "q": {
      "type": "string",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false
     },
     "i": {
      "type": "integer",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false,
      "minimum": "0",
@@ -135,31 +135,31 @@
     },
     "n": {
      "type": "number",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false
     },
     "b": {
      "type": "boolean",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false
     },
     "a": {
      "type": "any",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false
     },
     "o": {
      "type": "object",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false
     },
     "e": {
      "type": "string",
-     "restParameterType": "query",
+     "location": "query",
      "required": false,
      "repeated": false,
      "enum": [
@@ -176,12 +176,12 @@
     "favorites": {
      "methods": {
       "list": {
-       "restPath": "favorites/@me/mine",
-       "rpcMethod": "zoo.animals.mine",
+       "path": "favorites/@me/mine",
+       "id": "zoo.animals.mine",
        "httpMethod": "GET",
        "parameters": {
         "max-results": {
-          "restParameterType": "query",
+          "location": "query",
           "required": false
         }
        }
@@ -193,8 +193,8 @@
   "animals": {
    "methods": {
     "crossbreed": {
-     "restPath": "animals/crossbreed",
-     "rpcMethod": "zoo.animals.crossbreed",
+     "path": "animals/crossbreed",
+     "id": "zoo.animals.crossbreed",
      "httpMethod": "POST",
      "description": "Cross-breed animals",
      "response": {
@@ -202,13 +202,13 @@
      }
     },
     "delete": {
-     "restPath": "animals/{name}",
-     "rpcMethod": "zoo.animals.delete",
+     "path": "animals/{name}",
+     "id": "zoo.animals.delete",
      "httpMethod": "DELETE",
      "description": "Delete animals",
      "parameters": {
       "name": {
-       "restParameterType": "path",
+       "location": "path",
        "required": true,
        "description": "Name of the animal to delete",
        "type": "string"
@@ -219,19 +219,19 @@
      ]
     },
     "get": {
-     "restPath": "animals/{name}",
-     "rpcMethod": "zoo.animals.get",
+     "path": "animals/{name}",
+     "id": "zoo.animals.get",
      "httpMethod": "GET",
      "description": "Get animals",
      "parameters": {
       "name": {
-       "restParameterType": "path",
+       "location": "path",
        "required": true,
        "description": "Name of the animal to load",
        "type": "string"
       },
       "projection": {
-       "restParameterType": "query",
+       "location": "query",
        "type": "string",
        "enum": [
         "full"
@@ -249,8 +249,8 @@
      }
     },
     "insert": {
-     "restPath": "animals",
-     "rpcMethod": "zoo.animals.insert",
+     "path": "animals",
+     "id": "zoo.animals.insert",
      "httpMethod": "POST",
      "description": "Insert animals",
      "request": {
@@ -261,24 +261,24 @@
      }
     },
     "list": {
-     "restPath": "animals",
-     "rpcMethod": "zoo.animals.list",
+     "path": "animals",
+     "id": "zoo.animals.list",
      "httpMethod": "GET",
      "description": "List animals",
      "parameters": {
       "max-results": {
-       "restParameterType": "query",
+       "location": "query",
        "description": "Maximum number of results to return",
        "type": "integer",
        "minimum": "0"
       },
       "name": {
-       "restParameterType": "query",
+       "location": "query",
        "description": "Restrict result to animals with this name",
        "type": "string"
       },
       "projection": {
-       "restParameterType": "query",
+       "location": "query",
        "type": "string",
        "enum": [
         "full"
@@ -288,7 +288,7 @@
        ]
       },
       "start-token": {
-       "restParameterType": "query",
+       "location": "query",
        "description": "Pagination token",
        "type": "string"
       }
@@ -298,13 +298,13 @@
      }
     },
     "patch": {
-     "restPath": "animals/{name}",
-     "rpcMethod": "zoo.animals.patch",
+     "path": "animals/{name}",
+     "id": "zoo.animals.patch",
      "httpMethod": "PATCH",
      "description": "Update animals",
      "parameters": {
       "name": {
-       "restParameterType": "path",
+       "location": "path",
        "required": true,
        "description": "Name of the animal to update",
        "type": "string"
@@ -321,13 +321,13 @@
      }
     },
     "update": {
-     "restPath": "animals/{name}",
-     "rpcMethod": "zoo.animals.update",
+     "path": "animals/{name}",
+     "id": "zoo.animals.update",
      "httpMethod": "PUT",
      "description": "Update animals",
      "parameters": {
       "name": {
-       "restParameterType": "path",
+       "location": "path",
        "description": "Name of the animal to update",
        "type": "string"
       }
@@ -347,8 +347,8 @@
   "load": {
    "methods": {
     "list": {
-     "restPath": "load",
-     "rpcMethod": "zoo.load.list",
+     "path": "load",
+     "id": "zoo.load.list",
      "httpMethod": "GET",
      "response": {
       "$ref": "LoadFeed"
@@ -359,8 +359,8 @@
   "loadNoTemplate": {
    "methods": {
     "list": {
-     "restPath": "loadNoTemplate",
-     "rpcMethod": "zoo.loadNoTemplate.list",
+     "path": "loadNoTemplate",
+     "id": "zoo.loadNoTemplate.list",
      "httpMethod": "GET"
     }
    }
@@ -368,24 +368,24 @@
   "scopedAnimals": {
    "methods": {
     "list": {
-     "restPath": "scopedanimals",
-     "rpcMethod": "zoo.scopedAnimals.list",
+     "path": "scopedanimals",
+     "id": "zoo.scopedAnimals.list",
      "httpMethod": "GET",
      "description": "List animals (scoped)",
      "parameters": {
       "max-results": {
-       "restParameterType": "query",
+       "location": "query",
        "description": "Maximum number of results to return",
        "type": "integer",
        "minimum": "0"
       },
       "name": {
-       "restParameterType": "query",
+       "location": "query",
        "description": "Restrict result to animals with this name",
        "type": "string"
       },
       "projection": {
-       "restParameterType": "query",
+       "location": "query",
        "type": "string",
        "enum": [
         "full"
@@ -395,7 +395,7 @@
        ]
       },
       "start-token": {
-       "restParameterType": "query",
+       "location": "query",
        "description": "Pagination token",
        "type": "string"
       }