+    @classmethod
+    def books(cls, collection):
+        return Book.objects.filter(collection.get_query())
+
+
+
+class CollectionDetailHandler(BaseHandler, CollectionDetails):
+    allowed_methods = ('GET',)
+    fields = ['url', 'title', 'description', 'books']
+
+    @piwik_track
+    def read(self, request, slug):
+        """ Returns details of a collection, identified by slug. """
+        try:
+            return Collection.objects.get(slug=slug)
+        except Collection.DoesNotExist:
+            return rc.NOT_FOUND
+
+
+class CollectionsHandler(BaseHandler, CollectionDetails):
+    allowed_methods = ('GET',)
+    model = Collection
+    fields = ['url', 'href', 'title']
+
+    @piwik_track
+    def read(self, request):
+        """ Returns all collections. """
+        return Collection.objects.all()
+
+
+class TagDetails(object):
+    """Custom Tag fields."""
+
+    @classmethod
+    def href(cls, tag):
+        """ Returns URI in the API for the tag. """
+
+        return API_BASE + reverse("api_tag", args=[category_plural[tag.category], tag.slug])
+
+    @classmethod
+    def url(cls, tag):
+        """ Returns URL on the site. """
+
+        return WL_BASE + tag.get_absolute_url()
+
+
+class TagDetailHandler(BaseHandler, TagDetails):