Now using type from discovery document to properly cast method parameters. Also added in checking for values that are enums.
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 6c4d76f..8fa6431 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -172,6 +172,31 @@
   return resource
 
 
+def _to_string(value, schema_type):
+  """Convert value to a string based on JSON Schema type.
+
+  See http://tools.ietf.org/html/draft-zyp-json-schema-03 for more details on
+  JSON Schema.
+
+  Args:
+    value: any, the value to convert
+    schema_type: string, the type that value should be interpreted as
+
+  Returns:
+    A string representation of 'value' based on the schema_type.
+  """
+  if schema_type == 'string':
+    return str(value)
+  elif schema_type == 'integer':
+    return str(int(value))
+  elif schema_type == 'number':
+    return str(float(value))
+  elif schema_type == 'boolean':
+    return str(bool(value)).lower()
+  else:
+    return str(value)
+
+
 def createResource(http, baseUrl, model, requestBuilder,
                    developerKey, resourceDesc, futureDesc):
 
@@ -203,6 +228,8 @@
     pattern_params = {}  # Parameters that must match a regex
     query_params = [] # Parameters that will be used in the query string
     path_params = {} # Parameters that will be used in the base URL
+    param_type = {} # The type of the parameter
+    enum_params = {}
     if 'parameters' in methodDesc:
       for arg, desc in methodDesc['parameters'].iteritems():
         param = key2param(arg)
@@ -210,12 +237,15 @@
 
         if desc.get('pattern', ''):
           pattern_params[param] = desc['pattern']
+        if desc.get('enum', ''):
+          enum_params[param] = desc['enum']
         if desc.get('required', False):
           required_params.append(param)
         if desc.get('restParameterType') == 'query':
           query_params.append(param)
         if desc.get('restParameterType') == 'path':
           path_params[param] = param
+        param_type[param] = desc.get('type', 'string')
 
     for match in URITEMPLATE.finditer(pathUrl):
       for namematch in VARNAME.finditer(match.group(0)):
@@ -240,13 +270,20 @@
                 'Parameter "%s" value "%s" does not match the pattern "%s"' %
                 (name, kwargs[name], regex))
 
+      for name, enums in enum_params.iteritems():
+        if name in kwargs:
+          if kwargs[name] not in enums:
+            raise TypeError(
+                'Parameter "%s" value "%s" is not in the list of allowed values "%s"' %
+                (name, kwargs[name], str(enums)))
+
       actual_query_params = {}
       actual_path_params = {}
       for key, value in kwargs.iteritems():
         if key in query_params:
-          actual_query_params[argmap[key]] = value
+          actual_query_params[argmap[key]] = _to_string(value, param_type[key])
         if key in path_params:
-          actual_path_params[argmap[key]] = value
+          actual_path_params[argmap[key]] = _to_string(value, param_type[key])
       body_value = kwargs.get('body', None)
 
       if self._developerKey:
diff --git a/tests/data/buzz.json b/tests/data/buzz.json
index c58cddd..5de10de 100644
--- a/tests/data/buzz.json
+++ b/tests/data/buzz.json
@@ -1,274 +1,2152 @@
 {
  "name": "buzz",
  "version": "v1",
- "description": "Buzz APIs for Buzz Posts, etc.",
+ "description": "Buzz API",
  "restBasePath": "/buzz/v1/",
  "rpcPath": "/rpc",
+ "features": [
+  "dataWrapper"
+ ],
+ "schemas": {
+  "ChiliEntitiesStarredAddJson": {
+   "$ref": "Entity"
+  },
+  "Activity": {
+   "id": "Activity",
+   "type": "object",
+   "properties": {
+    "actor": {
+     "type": "object",
+     "properties": {
+      "id": {
+       "type": "any"
+      },
+      "name": {
+       "type": "any"
+      },
+      "profileUrl": {
+       "type": "any"
+      },
+      "thumbnailUrl": {
+       "type": "any"
+      }
+     }
+    },
+    "address": {
+     "type": "any"
+    },
+    "annotation": {
+     "type": "any"
+    },
+    "categories": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "label": {
+        "type": "any"
+       },
+       "schema": {
+        "type": "any"
+       },
+       "term": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "crosspostSource": {
+     "type": "any"
+    },
+    "detectedlLang": {
+     "type": "any"
+    },
+    "geocode": {
+     "type": "any"
+    },
+    "id": {
+     "type": "any"
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#activity"
+    },
+    "links": {
+     "type": "object",
+     "properties": {
+      "liked": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "count": {
+          "type": "integer"
+         },
+         "href": {
+          "type": "any"
+         },
+         "type": {
+          "type": "any"
+         }
+        }
+       }
+      }
+     },
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "height": {
+         "type": "any"
+        },
+        "href": {
+         "type": "any"
+        },
+        "title": {
+         "type": "any"
+        },
+        "type": {
+         "type": "any"
+        },
+        "updated": {
+         "type": "string"
+        },
+        "width": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    },
+    "object": {
+     "type": "object",
+     "properties": {
+      "actor": {
+       "type": "object",
+       "properties": {
+        "id": {
+         "type": "any"
+        },
+        "name": {
+         "type": "any"
+        },
+        "profileUrl": {
+         "type": "any"
+        },
+        "thumbnailUrl": {
+         "type": "any"
+        }
+       }
+      },
+      "attachments": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "content": {
+          "type": "any"
+         },
+         "id": {
+          "type": "any"
+         },
+         "links": {
+          "type": "object",
+          "additionalProperties": {
+           "type": "array",
+           "items": {
+            "type": "object",
+            "properties": {
+             "count": {
+              "type": "any"
+             },
+             "height": {
+              "type": "any"
+             },
+             "href": {
+              "type": "any"
+             },
+             "title": {
+              "type": "any"
+             },
+             "type": {
+              "type": "any"
+             },
+             "updated": {
+              "type": "string"
+             },
+             "width": {
+              "type": "any"
+             }
+            }
+           }
+          }
+         },
+         "title": {
+          "type": "any"
+         },
+         "type": {
+          "type": "string"
+         }
+        }
+       }
+      },
+      "comments": {
+       "type": "array",
+       "items": {
+        "$ref": "Comment"
+       }
+      },
+      "content": {
+       "type": "any"
+      },
+      "detectedlLang": {
+       "type": "any"
+      },
+      "id": {
+       "type": "any"
+      },
+      "liked": {
+       "type": "array",
+       "items": {
+        "$ref": "Person"
+       }
+      },
+      "links": {
+       "type": "object",
+       "additionalProperties": {
+        "type": "array",
+        "items": {
+         "type": "object",
+         "properties": {
+          "href": {
+           "type": "any"
+          },
+          "type": {
+           "type": "any"
+          }
+         }
+        }
+       }
+      },
+      "originalContent": {
+       "type": "any"
+      },
+      "shareOriginal": {
+       "$ref": "Activity"
+      },
+      "targetLang": {
+       "type": "any"
+      },
+      "type": {
+       "type": "string"
+      },
+      "untranslatedContent": {
+       "type": "any"
+      }
+     }
+    },
+    "placeId": {
+     "type": "any"
+    },
+    "placeName": {
+     "type": "any"
+    },
+    "placeholder": {
+     "type": "any"
+    },
+    "published": {
+     "type": "string"
+    },
+    "radius": {
+     "type": "any"
+    },
+    "source": {
+     "type": "object",
+     "properties": {
+      "title": {
+       "type": "any"
+      }
+     }
+    },
+    "targetLang": {
+     "type": "any"
+    },
+    "title": {
+     "type": "any"
+    },
+    "untranslatedTitle": {
+     "type": "any"
+    },
+    "updated": {
+     "type": "string"
+    },
+    "verbs": {
+     "type": "array",
+     "items": {
+      "type": "string"
+     }
+    },
+    "visibility": {
+     "type": "object",
+     "properties": {
+      "entries": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "id": {
+          "type": "any"
+         },
+         "title": {
+          "type": "any"
+         }
+        }
+       }
+      }
+     }
+    }
+   }
+  },
+  "ActivityFeed": {
+   "id": "ActivityFeed",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "any"
+    },
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Activity"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#activityFeed"
+    },
+    "links": {
+     "type": "object",
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "height": {
+         "type": "any"
+        },
+        "href": {
+         "type": "any"
+        },
+        "title": {
+         "type": "any"
+        },
+        "type": {
+         "type": "any"
+        },
+        "updated": {
+         "type": "string"
+        },
+        "width": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    },
+    "title": {
+     "type": "any"
+    },
+    "updated": {
+     "type": "string"
+    }
+   }
+  },
+  "Album": {
+   "id": "Album",
+   "type": "object",
+   "properties": {
+    "created": {
+     "type": "string"
+    },
+    "description": {
+     "type": "string"
+    },
+    "firstPhotoId": {
+     "type": "integer"
+    },
+    "id": {
+     "type": "integer"
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#album"
+    },
+    "lastModified": {
+     "type": "string"
+    },
+    "links": {
+     "type": "object",
+     "properties": {
+      "alternate": {
+       "$ref": "Link"
+      },
+      "enclosure": {
+       "$ref": "Link"
+      }
+     }
+    },
+    "owner": {
+     "type": "object",
+     "properties": {
+      "id": {
+       "type": "string"
+      },
+      "name": {
+       "type": "string"
+      },
+      "profileUrl": {
+       "type": "string"
+      },
+      "thumbnailUrl": {
+       "type": "string"
+      }
+     }
+    },
+    "tags": {
+     "type": "array",
+     "items": {
+      "type": "string"
+     }
+    },
+    "title": {
+     "type": "string"
+    },
+    "version": {
+     "type": "integer"
+    }
+   }
+  },
+  "AlbumsFeed": {
+   "id": "AlbumsFeed",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Album"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#albumsFeed"
+    }
+   }
+  },
+  "ChiliPhotosResourceJson": {
+   "id": "ChiliPhotosResourceJson",
+   "type": "object",
+   "properties": {
+    "album": {
+     "type": "object",
+     "properties": {
+      "id": {
+       "type": "integer"
+      },
+      "page_link": {
+       "$ref": "Link"
+      }
+     }
+    },
+    "created": {
+     "type": "string"
+    },
+    "description": {
+     "type": "string"
+    },
+    "fileSize": {
+     "type": "integer"
+    },
+    "id": {
+     "type": "integer"
+    },
+    "kind": {
+     "type": "string"
+    },
+    "lastModified": {
+     "type": "string"
+    },
+    "links": {
+     "type": "object",
+     "properties": {
+      "alternate": {
+       "type": "array",
+       "items": {
+        "$ref": "Link"
+       }
+      }
+     },
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "$ref": "Link"
+      }
+     }
+    },
+    "owner": {
+     "type": "object",
+     "properties": {
+      "id": {
+       "type": "string"
+      },
+      "name": {
+       "type": "string"
+      },
+      "profileUrl": {
+       "type": "string"
+      },
+      "thumbnailUrl": {
+       "type": "string"
+      }
+     }
+    },
+    "timestamp": {
+     "type": "number"
+    },
+    "title": {
+     "type": "string"
+    },
+    "version": {
+     "type": "integer"
+    },
+    "video": {
+     "$ref": "Video"
+    }
+   }
+  },
+  "Comment": {
+   "id": "Comment",
+   "type": "object",
+   "properties": {
+    "actor": {
+     "type": "object",
+     "properties": {
+      "id": {
+       "type": "any"
+      },
+      "name": {
+       "type": "any"
+      },
+      "profileUrl": {
+       "type": "any"
+      },
+      "thumbnailUrl": {
+       "type": "any"
+      }
+     }
+    },
+    "content": {
+     "type": "any"
+    },
+    "detectedLang": {
+     "type": "any"
+    },
+    "id": {
+     "type": "any"
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#comment"
+    },
+    "links": {
+     "type": "object",
+     "properties": {
+      "inReplyTo": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "href": {
+          "type": "any"
+         },
+         "ref": {
+          "type": "any"
+         },
+         "source": {
+          "type": "any"
+         }
+        }
+       }
+      }
+     },
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "height": {
+         "type": "any"
+        },
+        "href": {
+         "type": "any"
+        },
+        "title": {
+         "type": "any"
+        },
+        "type": {
+         "type": "any"
+        },
+        "updated": {
+         "type": "string"
+        },
+        "width": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    },
+    "originalContent": {
+     "type": "any"
+    },
+    "placeholder": {
+     "type": "any"
+    },
+    "published": {
+     "type": "string"
+    },
+    "targetLang": {
+     "type": "any"
+    },
+    "untranslatedContent": {
+     "type": "any"
+    },
+    "updated": {
+     "type": "string"
+    }
+   }
+  },
+  "CommentFeed": {
+   "id": "CommentFeed",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "any"
+    },
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Comment"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#commentFeed"
+    },
+    "links": {
+     "type": "object",
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "height": {
+         "type": "any"
+        },
+        "href": {
+         "type": "any"
+        },
+        "title": {
+         "type": "any"
+        },
+        "type": {
+         "type": "any"
+        },
+        "updated": {
+         "type": "string"
+        },
+        "width": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    },
+    "title": {
+     "type": "any"
+    },
+    "updated": {
+     "type": "string"
+    }
+   }
+  },
+  "CountFeed": {
+   "id": "CountFeed",
+   "type": "object",
+   "properties": {
+    "counts": {
+     "type": "object",
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "timestamp": {
+         "type": "string"
+        }
+       }
+      }
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#countFeed"
+    }
+   }
+  },
+  "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",
+   "properties": {
+    "id": {
+     "type": "any"
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#group"
+    },
+    "links": {
+     "type": "object",
+     "properties": {
+      "self": {
+       "type": "array",
+       "items": {
+        "type": "object",
+        "properties": {
+         "href": {
+          "type": "any"
+         },
+         "type": {
+          "type": "string",
+          "default": "application/json"
+         }
+        }
+       }
+      }
+     }
+    },
+    "memberCount": {
+     "type": "any"
+    },
+    "title": {
+     "type": "any"
+    }
+   }
+  },
+  "GroupFeed": {
+   "id": "GroupFeed",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Group"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#groupFeed"
+    },
+    "links": {
+     "type": "object",
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "height": {
+         "type": "any"
+        },
+        "href": {
+         "type": "any"
+        },
+        "title": {
+         "type": "any"
+        },
+        "type": {
+         "type": "any"
+        },
+        "updated": {
+         "type": "string"
+        },
+        "width": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    }
+   }
+  },
+  "Link": {
+   "id": "Link",
+   "type": "object",
+   "properties": {
+    "count": {
+     "type": "integer"
+    },
+    "height": {
+     "type": "integer"
+    },
+    "href": {
+     "type": "string"
+    },
+    "title": {
+     "type": "string"
+    },
+    "type": {
+     "type": "string"
+    },
+    "updated": {
+     "type": "string"
+    },
+    "width": {
+     "type": "integer"
+    }
+   }
+  },
+  "PeopleFeed": {
+   "id": "PeopleFeed",
+   "type": "object",
+   "properties": {
+    "entry": {
+     "type": "array",
+     "items": {
+      "$ref": "Person"
+     }
+    },
+    "itemsPerPage": {
+     "type": "any"
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#peopleFeed"
+    },
+    "startIndex": {
+     "type": "any"
+    },
+    "totalResults": {
+     "type": "any"
+    }
+   }
+  },
+  "Person": {
+   "id": "Person",
+   "type": "object",
+   "properties": {
+    "aboutMe": {
+     "type": "any"
+    },
+    "accounts": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "domain": {
+        "type": "any"
+       },
+       "userid": {
+        "type": "any"
+       },
+       "username": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "activities": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "addresses": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "country": {
+        "type": "any"
+       },
+       "formatted": {
+        "type": "any"
+       },
+       "locality": {
+        "type": "any"
+       },
+       "postalCode": {
+        "type": "any"
+       },
+       "primary": {
+        "type": "any"
+       },
+       "region": {
+        "type": "any"
+       },
+       "streetAddress": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "anniversary": {
+     "type": "any"
+    },
+    "birthday": {
+     "type": "any"
+    },
+    "bodyType": {
+     "type": "any"
+    },
+    "books": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "cars": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "children": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "connected": {
+     "type": "any"
+    },
+    "currentLocation": {
+     "type": "any"
+    },
+    "displayName": {
+     "type": "any"
+    },
+    "drinker": {
+     "type": "any"
+    },
+    "emails": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "primary": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       },
+       "value": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "ethnicity": {
+     "type": "any"
+    },
+    "fashion": {
+     "type": "any"
+    },
+    "food": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "gender": {
+     "type": "any"
+    },
+    "happiestWhen": {
+     "type": "any"
+    },
+    "hasApp": {
+     "type": "any"
+    },
+    "heroes": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "humor": {
+     "type": "any"
+    },
+    "id": {
+     "type": "any"
+    },
+    "ims": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "primary": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       },
+       "value": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "interests": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "jobInterests": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#person"
+    },
+    "languages": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "languagesSpoken": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "livingArrangement": {
+     "type": "any"
+    },
+    "lookingFor": {
+     "type": "any"
+    },
+    "movies": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "music": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "name": {
+     "type": "object",
+     "properties": {
+      "familyName": {
+       "type": "any"
+      },
+      "formatted": {
+       "type": "any"
+      },
+      "givenName": {
+       "type": "any"
+      },
+      "honorificPrefix": {
+       "type": "any"
+      },
+      "honorificSuffix": {
+       "type": "any"
+      },
+      "middleName": {
+       "type": "any"
+      }
+     }
+    },
+    "nickname": {
+     "type": "any"
+    },
+    "note": {
+     "type": "any"
+    },
+    "organizations": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "department": {
+        "type": "any"
+       },
+       "description": {
+        "type": "any"
+       },
+       "endDate": {
+        "type": "any"
+       },
+       "location": {
+        "type": "any"
+       },
+       "name": {
+        "type": "any"
+       },
+       "primary": {
+        "type": "any"
+       },
+       "startDate": {
+        "type": "any"
+       },
+       "title": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "pets": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "phoneNumbers": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "primary": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       },
+       "value": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "photos": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "height": {
+        "type": "any"
+       },
+       "primary": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       },
+       "value": {
+        "type": "any"
+       },
+       "width": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "politicalViews": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "preferredUsername": {
+     "type": "any"
+    },
+    "profileSong": {
+     "type": "any"
+    },
+    "profileUrl": {
+     "type": "any"
+    },
+    "profileVideo": {
+     "type": "any"
+    },
+    "published": {
+     "type": "string"
+    },
+    "quotes": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "relationshipStatus": {
+     "type": "any"
+    },
+    "relationships": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "religion": {
+     "type": "any"
+    },
+    "romance": {
+     "type": "any"
+    },
+    "scaredOf": {
+     "type": "any"
+    },
+    "sexualOrientation": {
+     "type": "any"
+    },
+    "smoker": {
+     "type": "any"
+    },
+    "sports": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "status": {
+     "type": "any"
+    },
+    "tags": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "thumbnailUrl": {
+     "type": "any"
+    },
+    "turnOffs": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "turnOns": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "tvShows": {
+     "type": "array",
+     "items": {
+      "type": "any"
+     }
+    },
+    "updated": {
+     "type": "string"
+    },
+    "urls": {
+     "type": "array",
+     "items": {
+      "type": "object",
+      "properties": {
+       "primary": {
+        "type": "any"
+       },
+       "type": {
+        "type": "any"
+       },
+       "value": {
+        "type": "any"
+       }
+      }
+     }
+    },
+    "utcOffset": {
+     "type": "any"
+    }
+   }
+  },
+  "PhotosFeed": {
+   "id": "PhotosFeed",
+   "type": "object",
+   "properties": {
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "ChiliPhotosResourceJson"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#photosFeed"
+    }
+   }
+  },
+  "Related": {
+   "id": "Related",
+   "type": "object",
+   "properties": {
+    "href": {
+     "type": "any"
+    },
+    "id": {
+     "type": "any"
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#related"
+    },
+    "summary": {
+     "type": "any"
+    },
+    "title": {
+     "type": "any"
+    }
+   }
+  },
+  "RelatedFeed": {
+   "id": "RelatedFeed",
+   "type": "object",
+   "properties": {
+    "id": {
+     "type": "any"
+    },
+    "items": {
+     "type": "array",
+     "items": {
+      "$ref": "Related"
+     }
+    },
+    "kind": {
+     "type": "string",
+     "default": "buzz#relatedFeed"
+    },
+    "links": {
+     "type": "object",
+     "additionalProperties": {
+      "type": "array",
+      "items": {
+       "type": "object",
+       "properties": {
+        "count": {
+         "type": "any"
+        },
+        "height": {
+         "type": "any"
+        },
+        "href": {
+         "type": "any"
+        },
+        "title": {
+         "type": "any"
+        },
+        "type": {
+         "type": "any"
+        },
+        "updated": {
+         "type": "string"
+        },
+        "width": {
+         "type": "any"
+        }
+       }
+      }
+     }
+    },
+    "title": {
+     "type": "any"
+    },
+    "updated": {
+     "type": "string"
+    }
+   }
+  },
+  "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",
+   "properties": {
+    "duration": {
+     "type": "integer"
+    },
+    "size": {
+     "type": "integer"
+    },
+    "streams": {
+     "type": "array",
+     "items": {
+      "$ref": "Link"
+     }
+    }
+   }
+  },
+  "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",
+     "httpMethod": "GET",
+     "description": "Get a count of link shares",
+     "parameters": {
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "url": {
+       "restParameterType": "query",
+       "repeated": true,
+       "description": "URLs for which to get share counts.",
+       "type": "string"
+      }
+     },
+     "response": {
+      "$ref": "CountFeed"
+     }
+    },
     "delete": {
      "restPath": "activities/{userId}/{scope}/{postId}",
      "rpcMethod": "chili.activities.delete",
      "httpMethod": "DELETE",
+     "description": "Delete an activity",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity to delete.",
+       "type": "string"
       },
       "scope": {
        "restParameterType": "path",
-       "pattern": "@.*",
-       "required": true
+       "required": true,
+       "description": "The collection to which the activity belongs.",
+       "type": "string",
+       "enum": [
+        "@liked",
+        "@muted",
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Activities liked by the user.",
+        "Activities muted by the user.",
+        "Activities posted by the user."
+       ]
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user whose post to delete.",
+       "type": "string"
       }
-     }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId"
+     ]
     },
     "extractPeopleFromSearch": {
      "restPath": "activities/search/@people",
      "rpcMethod": "chili.activities.extractPeopleFromSearch",
      "httpMethod": "GET",
+     "description": "Search for people by topic",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "bbox": {
        "restParameterType": "query",
-       "required": false
+       "description": "Bounding box to use in a geographic location query.",
+       "type": "string"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "lat": {
        "restParameterType": "query",
-       "required": false
+       "description": "Latitude to use in a geographic location query.",
+       "type": "string"
       },
       "lon": {
        "restParameterType": "query",
-       "required": false
+       "description": "Longitude to use in a geographic location query.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "pid": {
        "restParameterType": "query",
-       "required": false
+       "description": "ID of a place to use in a geographic location query.",
+       "type": "string"
       },
       "q": {
        "restParameterType": "query",
-       "required": false
+       "description": "Full-text search query string.",
+       "type": "string"
       },
       "radius": {
        "restParameterType": "query",
-       "required": false
+       "description": "Radius to use in a geographic location query.",
+       "type": "string"
       }
+     },
+     "response": {
+      "$ref": "PeopleFeed"
      }
     },
     "get": {
      "restPath": "activities/{userId}/@self/{postId}",
      "rpcMethod": "chili.activities.get",
      "httpMethod": "GET",
+     "description": "Get an activity",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "max-comments": {
+       "restParameterType": "query",
+       "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",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "0"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the user to get.",
+       "type": "string"
       },
-      "targetLang": {
+      "truncateAtom": {
        "restParameterType": "query",
-       "required": false
+       "description": "Truncate the value of the atom:content element.",
+       "type": "boolean"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user whose post to get.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "postId"
+     ],
+     "response": {
+      "$ref": "Activity"
      }
     },
     "insert": {
      "restPath": "activities/{userId}/@self",
      "rpcMethod": "chili.activities.insert",
      "httpMethod": "POST",
+     "description": "Create a new activity",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
-      },
-      "photo": {
-       "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "preview": {
        "restParameterType": "query",
-       "required": false
+       "description": "If true, only preview the action.",
+       "type": "boolean",
+       "default": "false"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId"
+     ],
+     "request": {
+      "$ref": "Activity"
+     },
+     "response": {
+      "$ref": "Activity"
      }
     },
     "list": {
      "restPath": "activities/{userId}/{scope}",
      "rpcMethod": "chili.activities.list",
      "httpMethod": "GET",
+     "description": "List activities",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-comments": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of comments to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295"
       },
       "max-liked": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of likes to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "0"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "scope": {
        "restParameterType": "path",
-       "pattern": "@(self|public|consumption|liked|comments)*",
-       "required": true
+       "required": true,
+       "description": "The collection of activities to list.",
+       "type": "string",
+       "enum": [
+        "@comments",
+        "@consumption",
+        "@liked",
+        "@public",
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Limit to activities commented on by the user.",
+        "Limit to activities to be consumed by the user.",
+        "Limit to activities liked by the user.",
+        "Limit to public activities posted by the user.",
+        "Limit to activities posted by the user."
+       ]
       },
-      "targetLang": {
+      "truncateAtom": {
        "restParameterType": "query",
-       "required": false
+       "description": "Truncate the value of the atom:content element.",
+       "type": "boolean"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope"
+     ],
+     "response": {
+      "$ref": "ActivityFeed"
      }
     },
     "search": {
      "restPath": "activities/search",
      "rpcMethod": "chili.activities.search",
      "httpMethod": "GET",
+     "description": "Search for activities",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "bbox": {
        "restParameterType": "query",
-       "required": false
+       "description": "Bounding box to use in a geographic location query.",
+       "type": "string"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "lat": {
        "restParameterType": "query",
-       "required": false
+       "description": "Latitude to use in a geographic location query.",
+       "type": "string"
       },
       "lon": {
        "restParameterType": "query",
-       "required": false
+       "description": "Longitude to use in a geographic location query.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "pid": {
        "restParameterType": "query",
-       "required": false
+       "description": "ID of a place to use in a geographic location query.",
+       "type": "string"
       },
       "q": {
        "restParameterType": "query",
-       "required": false
+       "description": "Full-text search query string.",
+       "type": "string"
       },
       "radius": {
        "restParameterType": "query",
-       "required": false
+       "description": "Radius to use in a geographic location query.",
+       "type": "string"
       },
-      "targetLang": {
+      "truncateAtom": {
        "restParameterType": "query",
-       "required": false
+       "description": "Truncate the value of the atom:content element.",
+       "type": "boolean"
       }
+     },
+     "response": {
+      "$ref": "ActivityFeed"
+     }
+    },
+    "track": {
+     "restPath": "activities/track",
+     "rpcMethod": "chili.activities.track",
+     "httpMethod": "GET",
+     "description": "Get real-time activity tracking information",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "bbox": {
+       "restParameterType": "query",
+       "description": "Bounding box to use in a geographic location query.",
+       "type": "string"
+      },
+      "c": {
+       "restParameterType": "query",
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "lat": {
+       "restParameterType": "query",
+       "description": "Latitude to use in a geographic location query.",
+       "type": "string"
+      },
+      "lon": {
+       "restParameterType": "query",
+       "description": "Longitude to use in a geographic location query.",
+       "type": "string"
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
+      },
+      "pid": {
+       "restParameterType": "query",
+       "description": "ID of a place to use in a geographic location query.",
+       "type": "string"
+      },
+      "q": {
+       "restParameterType": "query",
+       "description": "Full-text search query string.",
+       "type": "string"
+      },
+      "radius": {
+       "restParameterType": "query",
+       "description": "Radius to use in a geographic location query.",
+       "type": "string"
+      }
+     },
+     "response": {
+      "$ref": "ActivityFeed"
      }
     },
     "update": {
      "restPath": "activities/{userId}/{scope}/{postId}",
      "rpcMethod": "chili.activities.update",
      "httpMethod": "PUT",
+     "description": "Update an activity",
      "parameters": {
       "abuseType": {
        "restParameterType": "query",
-       "required": false
+       "type": "string"
       },
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity to update.",
+       "type": "string"
       },
       "scope": {
        "restParameterType": "path",
-       "pattern": "@.*",
-       "required": true
+       "required": true,
+       "description": "The collection to which the activity belongs.",
+       "type": "string",
+       "enum": [
+        "@abuse",
+        "@liked",
+        "@muted",
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Activities reported by the user.",
+        "Activities liked by the user.",
+        "Activities muted by the user.",
+        "Activities posted by the user."
+       ]
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user whose post to update.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId"
+     ],
+     "request": {
+      "$ref": "Activity"
+     },
+     "response": {
+      "$ref": "Activity"
      }
     }
    }
@@ -279,277 +2157,299 @@
      "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
      "rpcMethod": "chili.comments.delete",
      "httpMethod": "DELETE",
+     "description": "Delete a comment",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "commentId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the comment being referenced.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity for which to delete the comment.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
-     }
+     },
+     "parameterOrder": [
+      "userId",
+      "postId",
+      "commentId"
+     ]
     },
     "get": {
      "restPath": "activities/{userId}/@self/{postId}/@comments/{commentId}",
      "rpcMethod": "chili.comments.get",
      "httpMethod": "GET",
+     "description": "Get a comment",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "commentId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the comment being referenced.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
-      },
-      "targetLang": {
-       "restParameterType": "query",
-       "required": false
+       "required": true,
+       "description": "ID of the activity for which to get comments.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "postId",
+      "commentId"
+     ],
+     "response": {
+      "$ref": "Comment"
      }
     },
     "insert": {
      "restPath": "activities/{userId}/@self/{postId}/@comments",
      "rpcMethod": "chili.comments.insert",
      "httpMethod": "POST",
+     "description": "Create a comment",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity on which to comment.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user on whose behalf to comment.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "postId"
+     ],
+     "request": {
+      "$ref": "Comment"
+     },
+     "response": {
+      "$ref": "Comment"
      }
     },
     "list": {
      "restPath": "activities/{userId}/{scope}/{postId}/@comments",
      "rpcMethod": "chili.comments.list",
      "httpMethod": "GET",
+     "description": "List comments",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity for which to get comments.",
+       "type": "string"
       },
       "scope": {
        "restParameterType": "path",
-       "pattern": "@.*",
-       "required": true
-      },
-      "targetLang": {
-       "restParameterType": "query",
-       "required": false
+       "required": true,
+       "description": "The collection to which the activity belongs.",
+       "type": "string",
+       "enum": [
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Activities posted by the user."
+       ]
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user for whose post to get comments.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId"
+     ],
+     "response": {
+      "$ref": "CommentFeed"
      }
     },
     "update": {
      "restPath": "activities/{userId}/{scope}/{postId}/@comments/{commentId}",
      "rpcMethod": "chili.comments.update",
      "httpMethod": "PUT",
+     "description": "Update a comment",
      "parameters": {
       "abuseType": {
        "restParameterType": "query",
-       "required": false
+       "type": "string"
       },
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "commentId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the comment being referenced.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity for which to update the comment.",
+       "type": "string"
       },
       "scope": {
        "restParameterType": "path",
-       "pattern": "@.*",
-       "required": true
+       "required": true,
+       "description": "The collection to which the activity belongs.",
+       "type": "string",
+       "enum": [
+        "@abuse",
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Comments reported by the user.",
+        "Comments posted by the user."
+       ]
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
-     }
-    }
-   }
-  },
-  "feeds": {
-   "methods": {
-    "delete": {
-     "restPath": "feeds/{userId}/@self/{siteId}",
-     "rpcMethod": "chili.feeds.delete",
-     "httpMethod": "DELETE",
-     "parameters": {
-      "alt": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "hl": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "siteId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
-      },
-      "userId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
-      }
-     }
-    },
-    "insert": {
-     "restPath": "feeds/{userId}/@self",
-     "rpcMethod": "chili.feeds.insert",
-     "httpMethod": "POST",
-     "parameters": {
-      "alt": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "hl": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "userId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
-      }
-     }
-    },
-    "list": {
-     "restPath": "feeds/{userId}/{scope}",
-     "rpcMethod": "chili.feeds.list",
-     "httpMethod": "GET",
-     "parameters": {
-      "alt": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "hl": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "scope": {
-       "restParameterType": "path",
-       "pattern": "@.*",
-       "required": true
-      },
-      "userId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
-      }
-     }
-    },
-    "update": {
-     "restPath": "feeds/{userId}/@self/{siteId}",
-     "rpcMethod": "chili.feeds.update",
-     "httpMethod": "PUT",
-     "parameters": {
-      "alt": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "c": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "hl": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "max-results": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "siteId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
-      },
-      "userId": {
-       "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
-      }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId",
+      "commentId"
+     ],
+     "request": {
+      "$ref": "Comment"
+     },
+     "response": {
+      "$ref": "Comment"
      }
     }
    }
@@ -560,119 +2460,232 @@
      "restPath": "people/{userId}/@groups/{groupId}",
      "rpcMethod": "chili.groups.delete",
      "httpMethod": "DELETE",
+     "description": "Delete a group",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the group to delete.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
-     }
+     },
+     "parameterOrder": [
+      "userId",
+      "groupId"
+     ]
     },
     "get": {
      "restPath": "people/{userId}/@groups/{groupId}/@self",
      "rpcMethod": "chili.groups.get",
      "httpMethod": "GET",
+     "description": "Get a group",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the group to get.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "groupId"
+     ],
+     "response": {
+      "$ref": "Group"
      }
     },
     "insert": {
      "restPath": "people/{userId}/@groups",
      "rpcMethod": "chili.groups.insert",
      "httpMethod": "POST",
+     "description": "Create a group",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId"
+     ],
+     "request": {
+      "$ref": "Group"
+     },
+     "response": {
+      "$ref": "Group"
      }
     },
     "list": {
      "restPath": "people/{userId}/@groups",
      "rpcMethod": "chili.groups.list",
      "httpMethod": "GET",
+     "description": "Get a user's groups",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId"
+     ],
+     "response": {
+      "$ref": "GroupFeed"
      }
     },
     "update": {
      "restPath": "people/{userId}/@groups/{groupId}/@self",
      "rpcMethod": "chili.groups.update",
      "httpMethod": "PUT",
+     "description": "Update a group",
      "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the group to update.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "groupId"
+     ],
+     "request": {
+      "$ref": "Group"
+     },
+     "response": {
+      "$ref": "Group"
      }
     }
    }
@@ -683,298 +2696,935 @@
      "restPath": "people/{userId}/@groups/{groupId}/{personId}",
      "rpcMethod": "chili.people.delete",
      "httpMethod": "DELETE",
+     "description": "Remove a person from a group",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the group from which to remove the person.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "personId": {
        "restParameterType": "path",
-       "pattern": "(?!@self).*",
-       "required": true
+       "required": true,
+       "description": "ID of the person to remove from the group.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the owner of the group.",
+       "type": "string"
       }
-     }
+     },
+     "parameterOrder": [
+      "userId",
+      "groupId",
+      "personId"
+     ]
     },
     "get": {
      "restPath": "people/{userId}/@self",
      "rpcMethod": "chili.people.get",
      "httpMethod": "GET",
+     "description": "Get a user profile",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId"
+     ],
+     "response": {
+      "$ref": "Person"
      }
     },
     "liked": {
      "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
      "rpcMethod": "chili.people.liked",
      "httpMethod": "GET",
+     "description": "Get people who liked an activity",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "@liked",
-       "required": true
+       "required": true,
+       "type": "string",
+       "enum": [
+        "@liked"
+       ],
+       "enumDescriptions": [
+        "People who liked this activity."
+       ]
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity that was liked.",
+       "type": "string"
+      },
+      "scope": {
+       "restParameterType": "path",
+       "required": true,
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId",
+      "groupId"
+     ],
+     "response": {
+      "$ref": "PeopleFeed"
      }
     },
     "list": {
      "restPath": "people/{userId}/@groups/{groupId}",
      "rpcMethod": "chili.people.list",
      "httpMethod": "GET",
+     "description": "Get people in a group",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the group for which to list users.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
-     }
-    },
-    "relatedToUri": {
-     "restPath": "people/{userId}/@related",
-     "rpcMethod": "chili.people.relatedToUri",
-     "httpMethod": "GET",
-     "parameters": {
-      "alt": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "hl": {
-       "restParameterType": "query",
-       "required": false
-      },
-      "uri": {
-       "restParameterType": "query",
-       "required": false
-      }
+     },
+     "parameterOrder": [
+      "userId",
+      "groupId"
+     ],
+     "response": {
+      "$ref": "PeopleFeed"
      }
     },
     "reshared": {
      "restPath": "activities/{userId}/{scope}/{postId}/{groupId}",
      "rpcMethod": "chili.people.reshared",
      "httpMethod": "GET",
+     "description": "Get people who reshared an activity",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "@reshared",
-       "required": true
+       "required": true,
+       "type": "string",
+       "enum": [
+        "@reshared"
+       ],
+       "enumDescriptions": [
+        "People who reshared this activity."
+       ]
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity that was reshared.",
+       "type": "string"
+      },
+      "scope": {
+       "restParameterType": "path",
+       "required": true,
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId",
+      "groupId"
+     ],
+     "response": {
+      "$ref": "PeopleFeed"
      }
     },
     "search": {
      "restPath": "people/search",
      "rpcMethod": "chili.people.search",
      "httpMethod": "GET",
+     "description": "Search for people",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "c": {
        "restParameterType": "query",
-       "required": false
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "max-results": {
        "restParameterType": "query",
-       "required": false
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
       },
       "q": {
        "restParameterType": "query",
-       "required": false
+       "description": "Full-text search query string.",
+       "type": "string"
       }
+     },
+     "response": {
+      "$ref": "PeopleFeed"
      }
     },
     "update": {
      "restPath": "people/{userId}/@groups/{groupId}/{personId}",
      "rpcMethod": "chili.people.update",
      "httpMethod": "PUT",
+     "description": "Add a person to a group",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "groupId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the group to which to add the person.",
+       "type": "string"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "personId": {
        "restParameterType": "path",
-       "pattern": "(?!@self).*",
-       "required": true
+       "required": true,
+       "description": "ID of the person to add to the group.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the owner of the group.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "groupId",
+      "personId"
+     ],
+     "request": {
+      "$ref": "Person"
+     },
+     "response": {
+      "$ref": "Person"
      }
     }
    }
   },
   "photoAlbums": {
    "methods": {
+    "delete": {
+     "restPath": "photos/{userId}/@self/{albumId}",
+     "rpcMethod": "chili.photoAlbums.delete",
+     "httpMethod": "DELETE",
+     "description": "Delete a photo album",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the album to delete.",
+       "type": "string"
+      },
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId"
+     ]
+    },
     "get": {
      "restPath": "photos/{userId}/@self/{albumId}",
      "rpcMethod": "chili.photoAlbums.get",
      "httpMethod": "GET",
+     "description": "Get a photo album",
      "parameters": {
       "albumId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the album to get.",
+       "type": "string"
       },
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId"
+     ],
+     "response": {
+      "$ref": "Album"
+     }
+    },
+    "insert": {
+     "restPath": "photos/{userId}/@self",
+     "rpcMethod": "chili.photoAlbums.insert",
+     "httpMethod": "POST",
+     "description": "Create a photo album",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId"
+     ],
+     "request": {
+      "$ref": "Album"
+     },
+     "response": {
+      "$ref": "Album"
+     }
+    },
+    "list": {
+     "restPath": "photos/{userId}/{scope}",
+     "rpcMethod": "chili.photoAlbums.list",
+     "httpMethod": "GET",
+     "description": "List a user's photo albums",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "c": {
+       "restParameterType": "query",
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
+      },
+      "scope": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "The collection of albums to list.",
+       "type": "string",
+       "enum": [
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Albums posted by the user."
+       ]
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope"
+     ],
+     "response": {
+      "$ref": "AlbumsFeed"
      }
     }
    }
   },
   "photos": {
    "methods": {
+    "delete": {
+     "restPath": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
+     "rpcMethod": "chili.photos.delete",
+     "httpMethod": "DELETE",
+     "description": "Delete a photo",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the album to which to photo belongs.",
+       "type": "string"
+      },
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "photoId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the photo to delete.",
+       "type": "string"
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId",
+      "photoId"
+     ]
+    },
     "get": {
      "restPath": "photos/{userId}/@self/{albumId}/@photos/{photoId}",
      "rpcMethod": "chili.photos.get",
      "httpMethod": "GET",
+     "description": "Get photo metadata",
      "parameters": {
       "albumId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the photo for which to get metadata.",
+       "type": "string"
       },
       "alt": {
        "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "photoId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the album containing the photo.",
+       "type": "string"
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId",
+      "photoId"
+     ],
+     "response": {
+      "$ref": "ChiliPhotosResourceJson"
+     }
+    },
+    "insert": {
+     "restPath": "photos/{userId}/{albumId}",
+     "rpcMethod": "chili.photos.insert",
+     "httpMethod": "POST",
+     "description": "Upload a photo to an album",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the album to which to upload.",
+       "type": "string"
+      },
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId"
+     ],
+     "request": {
+      "$ref": "Album"
+     },
+     "response": {
+      "$ref": "Album"
+     }
+    },
+    "insert2": {
+     "restPath": "photos/{userId}/@self/{albumId}/@photos",
+     "rpcMethod": "chili.photos.insert2",
+     "httpMethod": "POST",
+     "description": "Upload a photo to an album",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the album to which to upload.",
+       "type": "string"
+      },
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId"
+     ],
+     "request": {
+      "$ref": "ChiliPhotosResourceJson"
+     },
+     "response": {
+      "$ref": "ChiliPhotosResourceJson"
+     }
+    },
+    "listByAlbum": {
+     "restPath": "photos/{userId}/@self/{albumId}/@photos",
+     "rpcMethod": "chili.photos.listByAlbum",
+     "httpMethod": "GET",
+     "description": "List photos in an album",
+     "parameters": {
+      "albumId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the album for which to list photos.",
+       "type": "string"
+      },
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "c": {
+       "restParameterType": "query",
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "albumId"
+     ],
+     "response": {
+      "$ref": "PhotosFeed"
+     }
+    },
+    "listByScope": {
+     "restPath": "photos/{userId}/@self/{scope}/@photos",
+     "rpcMethod": "chili.photos.listByScope",
+     "httpMethod": "GET",
+     "description": "Get a user's photos",
+     "parameters": {
+      "alt": {
+       "restParameterType": "query",
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
+      },
+      "c": {
+       "restParameterType": "query",
+       "description": "A continuation token that allows pagination.",
+       "type": "string"
+      },
+      "hl": {
+       "restParameterType": "query",
+       "description": "Language code to limit language results.",
+       "type": "string"
+      },
+      "max-results": {
+       "restParameterType": "query",
+       "description": "Maximum number of results to include.",
+       "type": "integer",
+       "minimum": "0",
+       "maximum": "4294967295",
+       "default": "20"
+      },
+      "scope": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "The collection of photos to list.",
+       "type": "string",
+       "enum": [
+        "@recent"
+       ],
+       "enumDescriptions": [
+        "Recent photos uploaded by the user."
+       ]
+      },
+      "userId": {
+       "restParameterType": "path",
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
+      }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope"
+     ],
+     "response": {
+      "$ref": "PhotosFeed"
      }
     }
    }
@@ -985,38 +3635,59 @@
      "restPath": "activities/{userId}/{scope}/{postId}/@related",
      "rpcMethod": "chili.related.list",
      "httpMethod": "GET",
+     "description": "Get related links for an activity",
      "parameters": {
       "alt": {
        "restParameterType": "query",
-       "required": false
-      },
-      "c": {
-       "restParameterType": "query",
-       "required": false
+       "description": "Specifies an alternative representation type.",
+       "type": "string",
+       "enum": [
+        "atom",
+        "json"
+       ],
+       "enumDescriptions": [
+        "Use Atom XML format",
+        "Use JSON format"
+       ],
+       "default": "atom"
       },
       "hl": {
        "restParameterType": "query",
-       "required": false
-      },
-      "max-results": {
-       "restParameterType": "query",
-       "required": false
+       "description": "Language code to limit language results.",
+       "type": "string"
       },
       "postId": {
        "restParameterType": "path",
-       "pattern": ".*",
-       "required": true
+       "required": true,
+       "description": "ID of the activity to which to get related links.",
+       "type": "string"
       },
       "scope": {
        "restParameterType": "path",
-       "pattern": "@.*",
-       "required": true
+       "required": true,
+       "description": "The collection to which the activity belongs.",
+       "type": "string",
+       "enum": [
+        "@self"
+       ],
+       "enumDescriptions": [
+        "Activities posted by the user."
+       ]
       },
       "userId": {
        "restParameterType": "path",
-       "pattern": "[^/]+",
-       "required": true
+       "required": true,
+       "description": "ID of the user being referenced.",
+       "type": "string"
       }
+     },
+     "parameterOrder": [
+      "userId",
+      "scope",
+      "postId"
+     ],
+     "response": {
+      "$ref": "RelatedFeed"
      }
     }
    }
diff --git a/tests/data/zoo.json b/tests/data/zoo.json
index 4f90c3d..43af0e8 100644
--- a/tests/data/zoo.json
+++ b/tests/data/zoo.json
@@ -11,9 +11,53 @@
    "httpMethod": "GET",
    "parameters": {
     "q": {
+     "type": "string",
      "restParameterType": "query",
      "required": false,
      "repeated": false
+    },
+    "i": {
+     "type": "integer",
+     "restParameterType": "query",
+     "required": false,
+     "repeated": false,
+     "minimum": "0",
+     "maximum": "4294967295",
+     "default": "20"
+    },
+    "n": {
+     "type": "number",
+     "restParameterType": "query",
+     "required": false,
+     "repeated": false
+    },
+    "b": {
+     "type": "boolean",
+     "restParameterType": "query",
+     "required": false,
+     "repeated": false
+    },
+    "a": {
+     "type": "any",
+     "restParameterType": "query",
+     "required": false,
+     "repeated": false
+    },
+    "o": {
+     "type": "object",
+     "restParameterType": "query",
+     "required": false,
+     "repeated": false
+    },
+    "e": {
+     "type": "string",
+     "restParameterType": "query",
+     "required": false,
+     "repeated": false,
+     "enum": [
+       "foo",
+       "bar"
+     ]
     }
    }
   }
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 7c00bb9..adc5eb1 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -62,17 +62,17 @@
 
     # Parameter doesn't match regex
     try:
-      buzz.activities().list(scope='@self', userId='')
+      buzz.activities().list(scope='@myself', userId='me')
       self.fail()
     except TypeError, e:
-      self.assertTrue('does not match' in str(e))
+      self.assertTrue('not in the list' in str(e))
 
     # Parameter doesn't match regex
     try:
       buzz.activities().list(scope='not@', userId='foo')
       self.fail()
     except TypeError, e:
-      self.assertTrue('does not match' in str(e))
+      self.assertTrue('not in the list' in str(e))
 
     # Unexpected parameter
     try:
@@ -81,11 +81,32 @@
     except TypeError, e:
       self.assertTrue('unexpected' in str(e))
 
+  def _check_query_types(self, request):
+    parsed = urlparse.urlparse(request.uri)
+    q = parse_qs(parsed[4])
+    self.assertEqual(q['q'], ['foo'])
+    self.assertEqual(q['i'], ['1'])
+    self.assertEqual(q['n'], ['1.0'])
+    self.assertEqual(q['b'], ['false'])
+    self.assertEqual(q['a'], ['[1, 2, 3]'])
+    self.assertEqual(q['o'], ['{\'a\': 1}'])
+    self.assertEqual(q['e'], ['bar'])
+
+  def test_type_coercion(self):
+    self.http = HttpMock(datafile('zoo.json'), {'status': '200'})
+    zoo = build('zoo', 'v1', self.http)
+
+    request = zoo.query(q="foo", i=1.0, n=1.0, b=0, a=[1,2,3], o={'a':1}, e='bar')
+    self._check_query_types(request)
+    request = zoo.query(q="foo", i=1, n=1, b=False, a=[1,2,3], o={'a':1}, e='bar')
+    self._check_query_types(request)
+    request = zoo.query(q="foo", i="1", n="1", b="", a=[1,2,3], o={'a':1}, e='bar')
+    self._check_query_types(request)
+
   def test_buzz_resources(self):
     self.http = HttpMock(datafile('buzz.json'), {'status': '200'})
     buzz = build('buzz', 'v1', self.http)
     self.assertTrue(getattr(buzz, 'activities'))
-    self.assertTrue(getattr(buzz, 'feeds'))
     self.assertTrue(getattr(buzz, 'photos'))
     self.assertTrue(getattr(buzz, 'people'))
     self.assertTrue(getattr(buzz, 'groups'))