diff --git a/planetstack/apigen/api.template.py b/planetstack/apigen/api.template.py
index ef9884c..e9dbeb8 100644
--- a/planetstack/apigen/api.template.py
+++ b/planetstack/apigen/api.template.py
@@ -5,6 +5,7 @@
 from rest_framework import generics
 from core.models import *
 from django.forms import widgets
+from rest_framework import filters
 
 """
 	Schema of the generator object:
@@ -76,6 +77,8 @@
     queryset = {{ object.camel }}.objects.select_related().all()
     serializer_class = {{ object.camel }}Serializer
     id_serializer_class = {{ object.camel }}IdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ({% for prop in object.props %}'{{ prop }}',{% endfor %}{% for ref in object.refs %}{%if ref.multi %}'{{ ref.plural }}'{% else %}'{{ ref }}'{% endif %},{% endfor %})
 
     def get_serializer_class(self):
         no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
@@ -84,7 +87,6 @@
         else:
             return self.serializer_class
 
-    
     def get_queryset(self):
         return {{ object.camel }}.select_by_user(self.request.user)
 
@@ -100,6 +102,14 @@
 class {{ object.camel }}Detail(generics.RetrieveUpdateDestroyAPIView):
     queryset = {{ object.camel }}.objects.select_related().all()
     serializer_class = {{ object.camel }}Serializer
+    id_serializer_class = {{ object.camel }}IdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return {{ object.camel }}.select_by_user(self.request.user)
diff --git a/planetstack/genapi.py b/planetstack/genapi.py
index 86a5dd3..7791b73 100644
--- a/planetstack/genapi.py
+++ b/planetstack/genapi.py
@@ -5,6 +5,7 @@
 from rest_framework import generics
 from core.models import *
 from django.forms import widgets
+from rest_framework import filters
 
 """
 	Schema of the generator object:
@@ -82,7 +83,16 @@
 	
 	class Meta:
 		model = ServiceAttribute
-		fields = ('id','created','updated','enacted','name','value','service',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','value','service',)
+
+class ServiceAttributeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = ServiceAttribute
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','value','service',)
+
+
 
 
 class ImageSerializer(serializers.HyperlinkedModelSerializer):
@@ -90,7 +100,16 @@
 	
 	class Meta:
 		model = Image
-		fields = ('id','created','updated','enacted','name','disk_format','container_format','path',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','disk_format','container_format','path',)
+
+class ImageIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Image
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','disk_format','container_format','path',)
+
+
 
 
 class NetworkParameterSerializer(serializers.HyperlinkedModelSerializer):
@@ -98,7 +117,16 @@
 	
 	class Meta:
 		model = NetworkParameter
-		fields = ('id','created','updated','enacted','parameter','value','content_type','object_id',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','parameter','value','content_type','object_id',)
+
+class NetworkParameterIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = NetworkParameter
+		fields = ('id','created','updated','enacted','backend_status','deleted','parameter','value','content_type','object_id',)
+
+
 
 
 class SiteSerializer(serializers.HyperlinkedModelSerializer):
@@ -106,7 +134,16 @@
 	
 	class Meta:
 		model = Site
-		fields = ('id','created','updated','enacted','name','site_url','enabled','location','longitude','latitude','login_base','is_public','abbreviated_name',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','site_url','enabled','location','longitude','latitude','login_base','is_public','abbreviated_name',)
+
+class SiteIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Site
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','site_url','enabled','location','longitude','latitude','login_base','is_public','abbreviated_name',)
+
+
 
 
 class SliceRoleSerializer(serializers.HyperlinkedModelSerializer):
@@ -114,7 +151,16 @@
 	
 	class Meta:
 		model = SliceRole
-		fields = ('id','created','updated','enacted','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+class SliceRoleIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SliceRole
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+
 
 
 class TagSerializer(serializers.HyperlinkedModelSerializer):
@@ -138,7 +184,32 @@
 	
 	class Meta:
 		model = Tag
-		fields = ('id','created','updated','enacted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',)
+
+class TagIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	
+	sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail')
+	
+	
+	
+	slices = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='slice-detail')
+	
+	
+	
+	slivers = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='sliver-detail')
+	
+	
+	
+	nodes = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='node-detail')
+	
+	
+	class Meta:
+		model = Tag
+		fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',)
+
+
 
 
 class InvoiceSerializer(serializers.HyperlinkedModelSerializer):
@@ -146,7 +217,16 @@
 	
 	class Meta:
 		model = Invoice
-		fields = ('id','created','updated','enacted','date','account',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','date','account',)
+
+class InvoiceIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Invoice
+		fields = ('id','created','updated','enacted','backend_status','deleted','date','account',)
+
+
 
 
 class PlanetStackRoleSerializer(serializers.HyperlinkedModelSerializer):
@@ -154,7 +234,16 @@
 	
 	class Meta:
 		model = PlanetStackRole
-		fields = ('id','created','updated','enacted','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+class PlanetStackRoleIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = PlanetStackRole
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+
 
 
 class SlicePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
@@ -162,7 +251,16 @@
 	
 	class Meta:
 		model = SlicePrivilege
-		fields = ('id','created','updated','enacted','user','slice','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',)
+
+class SlicePrivilegeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SlicePrivilege
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',)
+
+
 
 
 class NetworkSliverSerializer(serializers.HyperlinkedModelSerializer):
@@ -170,7 +268,16 @@
 	
 	class Meta:
 		model = NetworkSliver
-		fields = ('id','created','updated','enacted','network','sliver','ip','port_id',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','network','sliver','ip','port_id',)
+
+class NetworkSliverIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = NetworkSliver
+		fields = ('id','created','updated','enacted','backend_status','deleted','network','sliver','ip','port_id',)
+
+
 
 
 class NetworkDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
@@ -178,7 +285,16 @@
 	
 	class Meta:
 		model = NetworkDeployments
-		fields = ('id','created','updated','enacted','network','deployment','net_id','router_id','subnet_id','subnet',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','network','deployment','net_id','router_id','subnet_id','subnet',)
+
+class NetworkDeploymentsIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = NetworkDeployments
+		fields = ('id','created','updated','enacted','backend_status','deleted','network','deployment','net_id','router_id','subnet_id','subnet',)
+
+
 
 
 class SliceSerializer(serializers.HyperlinkedModelSerializer):
@@ -202,7 +318,32 @@
 	
 	class Meta:
 		model = Slice
-		fields = ('id','created','updated','enacted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','imagePreference','service','network','mountDataSets','serviceClass','creator','networks','availableNetworks','networks','networks',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','imagePreference','service','network','mountDataSets','serviceClass','creator','networks','availableNetworks','networks','networks',)
+
+class SliceIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	
+	networks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
+	
+	
+	
+	availableNetworks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
+	
+	
+	
+	networks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
+	
+	
+	
+	networks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
+	
+	
+	class Meta:
+		model = Slice
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','imagePreference','service','network','mountDataSets','serviceClass','creator','networks','availableNetworks','networks','networks',)
+
+
 
 
 class NetworkSerializer(serializers.HyperlinkedModelSerializer):
@@ -226,7 +367,32 @@
 	
 	class Meta:
 		model = Network
-		fields = ('id','created','updated','enacted','name','template','subnet','ports','labels','owner','guaranteedBandwidth','permitAllSlices','network_id','router_id','subnet_id','routers','availableRouters','routers','routers',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','template','subnet','ports','labels','owner','guaranteedBandwidth','permitAllSlices','network_id','router_id','subnet_id','routers','availableRouters','routers','routers',)
+
+class NetworkIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	
+	routers = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='router-detail')
+	
+	
+	
+	availableRouters = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='router-detail')
+	
+	
+	
+	routers = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='router-detail')
+	
+	
+	
+	routers = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='router-detail')
+	
+	
+	class Meta:
+		model = Network
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','template','subnet','ports','labels','owner','guaranteedBandwidth','permitAllSlices','network_id','router_id','subnet_id','routers','availableRouters','routers','routers',)
+
+
 
 
 class ServiceSerializer(serializers.HyperlinkedModelSerializer):
@@ -234,7 +400,16 @@
 	
 	class Meta:
 		model = Service
-		fields = ('id','created','updated','enacted','description','enabled','name','versionNumber','published',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','description','enabled','name','versionNumber','published',)
+
+class ServiceIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Service
+		fields = ('id','created','updated','enacted','backend_status','deleted','description','enabled','name','versionNumber','published',)
+
+
 
 
 class ServiceClassSerializer(serializers.HyperlinkedModelSerializer):
@@ -242,7 +417,16 @@
 	
 	class Meta:
 		model = ServiceClass
-		fields = ('id','created','updated','enacted','name','description','commitment','membershipFee','membershipFeeMonths','upgradeRequiresApproval',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','description','commitment','membershipFee','membershipFeeMonths','upgradeRequiresApproval',)
+
+class ServiceClassIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = ServiceClass
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','description','commitment','membershipFee','membershipFeeMonths','upgradeRequiresApproval',)
+
+
 
 
 class PaymentSerializer(serializers.HyperlinkedModelSerializer):
@@ -250,7 +434,16 @@
 	
 	class Meta:
 		model = Payment
-		fields = ('id','created','updated','enacted','account','amount','date',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','account','amount','date',)
+
+class PaymentIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Payment
+		fields = ('id','created','updated','enacted','backend_status','deleted','account','amount','date',)
+
+
 
 
 class ChargeSerializer(serializers.HyperlinkedModelSerializer):
@@ -258,7 +451,16 @@
 	
 	class Meta:
 		model = Charge
-		fields = ('id','created','updated','enacted','account','slice','kind','state','date','object','amount','coreHours','invoice',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','account','slice','kind','state','date','object','amount','coreHours','invoice',)
+
+class ChargeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Charge
+		fields = ('id','created','updated','enacted','backend_status','deleted','account','slice','kind','state','date','object','amount','coreHours','invoice',)
+
+
 
 
 class RoleSerializer(serializers.HyperlinkedModelSerializer):
@@ -266,7 +468,16 @@
 	
 	class Meta:
 		model = Role
-		fields = ('id','created','updated','enacted','role_type','role','description','content_type',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','role_type','role','description','content_type',)
+
+class RoleIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Role
+		fields = ('id','created','updated','enacted','backend_status','deleted','role_type','role','description','content_type',)
+
+
 
 
 class UsableObjectSerializer(serializers.HyperlinkedModelSerializer):
@@ -274,7 +485,16 @@
 	
 	class Meta:
 		model = UsableObject
-		fields = ('id','created','updated','enacted','name',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name',)
+
+class UsableObjectIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = UsableObject
+		fields = ('id','created','updated','enacted','backend_status','deleted','name',)
+
+
 
 
 class SiteRoleSerializer(serializers.HyperlinkedModelSerializer):
@@ -282,7 +502,16 @@
 	
 	class Meta:
 		model = SiteRole
-		fields = ('id','created','updated','enacted','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+class SiteRoleIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SiteRole
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+
 
 
 class SliverSerializer(serializers.HyperlinkedModelSerializer):
@@ -296,13 +525,26 @@
 	networks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
 	
 	
+	class Meta:
+		model = Sliver
+		fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks',)
+
+class SliverIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
 	
-#	upgradeFrom_rel_+ = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='serviceclass-detail')
+	
+	networks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
+	
+	
+	
+	networks = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='network-detail')
 	
 	
 	class Meta:
 		model = Sliver
-		fields = ('id','created','updated','enacted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks','upgradeFrom_rel_+',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks',)
+
+
 
 
 class NodeSerializer(serializers.HyperlinkedModelSerializer):
@@ -310,7 +552,16 @@
 	
 	class Meta:
 		model = Node
-		fields = ('id','created','updated','enacted','name','site','deployment',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','site','deployment',)
+
+class NodeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Node
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','site','deployment',)
+
+
 
 
 class DashboardViewSerializer(serializers.HyperlinkedModelSerializer):
@@ -318,7 +569,16 @@
 	
 	class Meta:
 		model = DashboardView
-		fields = ('id','created','updated','enacted','name','url',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','url',)
+
+class DashboardViewIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = DashboardView
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','url',)
+
+
 
 
 class ImageDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
@@ -326,7 +586,16 @@
 	
 	class Meta:
 		model = ImageDeployments
-		fields = ('id','created','updated','enacted','image','deployment','glance_image_id',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','image','deployment','glance_image_id',)
+
+class ImageDeploymentsIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = ImageDeployments
+		fields = ('id','created','updated','enacted','backend_status','deleted','image','deployment','glance_image_id',)
+
+
 
 
 class ReservedResourceSerializer(serializers.HyperlinkedModelSerializer):
@@ -334,7 +603,16 @@
 	
 	class Meta:
 		model = ReservedResource
-		fields = ('id','created','updated','enacted','sliver','resource','quantity','reservationSet',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','sliver','resource','quantity','reservationSet',)
+
+class ReservedResourceIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = ReservedResource
+		fields = ('id','created','updated','enacted','backend_status','deleted','sliver','resource','quantity','reservationSet',)
+
+
 
 
 class NetworkSliceSerializer(serializers.HyperlinkedModelSerializer):
@@ -342,7 +620,16 @@
 	
 	class Meta:
 		model = NetworkSlice
-		fields = ('id','created','updated','enacted','network','slice',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','network','slice',)
+
+class NetworkSliceIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = NetworkSlice
+		fields = ('id','created','updated','enacted','backend_status','deleted','network','slice',)
+
+
 
 
 class UserDashboardViewSerializer(serializers.HyperlinkedModelSerializer):
@@ -350,7 +637,16 @@
 	
 	class Meta:
 		model = UserDashboardView
-		fields = ('id','created','updated','enacted','user','dashboardView','order',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','dashboardView','order',)
+
+class UserDashboardViewIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = UserDashboardView
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','dashboardView','order',)
+
+
 
 
 class PlanetStackPrivilegeSerializer(serializers.HyperlinkedModelSerializer):
@@ -358,7 +654,16 @@
 	
 	class Meta:
 		model = PlanetStackPrivilege
-		fields = ('id','created','updated','enacted','user','planetstack','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','planetstack','role',)
+
+class PlanetStackPrivilegeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = PlanetStackPrivilege
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','planetstack','role',)
+
+
 
 
 class UserSerializer(serializers.HyperlinkedModelSerializer):
@@ -366,7 +671,16 @@
 	
 	class Meta:
 		model = User
-		fields = ('id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','created','updated','enacted','timezone',)
+		fields = ('id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','created','updated','enacted','backend_status','deleted','timezone',)
+
+class UserIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = User
+		fields = ('id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','created','updated','enacted','backend_status','deleted','timezone',)
+
+
 
 
 class DeploymentSerializer(serializers.HyperlinkedModelSerializer):
@@ -382,7 +696,24 @@
 	
 	class Meta:
 		model = Deployment
-		fields = ('id','created','updated','enacted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',)
+
+class DeploymentIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	
+	sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail')
+	
+	
+	
+	sites = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='site-detail')
+	
+	
+	class Meta:
+		model = Deployment
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',)
+
+
 
 
 class ReservationSerializer(serializers.HyperlinkedModelSerializer):
@@ -390,7 +721,16 @@
 	
 	class Meta:
 		model = Reservation
-		fields = ('id','created','updated','enacted','startTime','slice','duration',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','startTime','slice','duration',)
+
+class ReservationIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Reservation
+		fields = ('id','created','updated','enacted','backend_status','deleted','startTime','slice','duration',)
+
+
 
 
 class SliceDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
@@ -398,7 +738,16 @@
 	
 	class Meta:
 		model = SliceDeployments
-		fields = ('id','created','updated','enacted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
+
+class SliceDeploymentsIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SliceDeployments
+		fields = ('id','created','updated','enacted','backend_status','deleted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
+
+
 
 
 class SitePrivilegeSerializer(serializers.HyperlinkedModelSerializer):
@@ -406,7 +755,16 @@
 	
 	class Meta:
 		model = SitePrivilege
-		fields = ('id','created','updated','enacted','user','site','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','site','role',)
+
+class SitePrivilegeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SitePrivilege
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','site','role',)
+
+
 
 
 class PlanetStackSerializer(serializers.HyperlinkedModelSerializer):
@@ -414,7 +772,16 @@
 	
 	class Meta:
 		model = PlanetStack
-		fields = ('id','created','updated','enacted','description',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','description',)
+
+class PlanetStackIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = PlanetStack
+		fields = ('id','created','updated','enacted','backend_status','deleted','description',)
+
+
 
 
 class UserDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
@@ -422,7 +789,16 @@
 	
 	class Meta:
 		model = UserDeployments
-		fields = ('id','created','updated','enacted','user','deployment','kuser_id',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','kuser_id',)
+
+class UserDeploymentsIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = UserDeployments
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','kuser_id',)
+
+
 
 
 class AccountSerializer(serializers.HyperlinkedModelSerializer):
@@ -430,7 +806,16 @@
 	
 	class Meta:
 		model = Account
-		fields = ('id','created','updated','enacted','site',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','site',)
+
+class AccountIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Account
+		fields = ('id','created','updated','enacted','backend_status','deleted','site',)
+
+
 
 
 class NetworkParameterTypeSerializer(serializers.HyperlinkedModelSerializer):
@@ -438,7 +823,16 @@
 	
 	class Meta:
 		model = NetworkParameterType
-		fields = ('id','created','updated','enacted','name','description',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','description',)
+
+class NetworkParameterTypeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = NetworkParameterType
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','description',)
+
+
 
 
 class SiteDeploymentsSerializer(serializers.HyperlinkedModelSerializer):
@@ -446,7 +840,16 @@
 	
 	class Meta:
 		model = SiteDeployments
-		fields = ('id','created','updated','enacted','site','deployment','tenant_id',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',)
+
+class SiteDeploymentsIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SiteDeployments
+		fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',)
+
+
 
 
 class DeploymentPrivilegeSerializer(serializers.HyperlinkedModelSerializer):
@@ -454,7 +857,16 @@
 	
 	class Meta:
 		model = DeploymentPrivilege
-		fields = ('id','created','updated','enacted','user','deployment','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','role',)
+
+class DeploymentPrivilegeIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = DeploymentPrivilege
+		fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','role',)
+
+
 
 
 class DeploymentRoleSerializer(serializers.HyperlinkedModelSerializer):
@@ -462,7 +874,16 @@
 	
 	class Meta:
 		model = DeploymentRole
-		fields = ('id','created','updated','enacted','role',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+class DeploymentRoleIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = DeploymentRole
+		fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+
 
 
 class ProjectSerializer(serializers.HyperlinkedModelSerializer):
@@ -470,7 +891,16 @@
 	
 	class Meta:
 		model = Project
-		fields = ('id','created','updated','enacted','name',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name',)
+
+class ProjectIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Project
+		fields = ('id','created','updated','enacted','backend_status','deleted','name',)
+
+
 
 
 class SliceTagSerializer(serializers.HyperlinkedModelSerializer):
@@ -478,7 +908,16 @@
 	
 	class Meta:
 		model = SliceTag
-		fields = ('id','created','updated','enacted','slice','name','value',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','slice','name','value',)
+
+class SliceTagIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = SliceTag
+		fields = ('id','created','updated','enacted','backend_status','deleted','slice','name','value',)
+
+
 
 
 class NetworkTemplateSerializer(serializers.HyperlinkedModelSerializer):
@@ -486,7 +925,16 @@
 	
 	class Meta:
 		model = NetworkTemplate
-		fields = ('id','created','updated','enacted','name','description','guaranteedBandwidth','visibility','translation','sharedNetworkName','sharedNetworkId',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','description','guaranteedBandwidth','visibility','translation','sharedNetworkName','sharedNetworkId',)
+
+class NetworkTemplateIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = NetworkTemplate
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','description','guaranteedBandwidth','visibility','translation','sharedNetworkName','sharedNetworkId',)
+
+
 
 
 class RouterSerializer(serializers.HyperlinkedModelSerializer):
@@ -494,7 +942,16 @@
 	
 	class Meta:
 		model = Router
-		fields = ('id','created','updated','enacted','name','owner',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','owner',)
+
+class RouterIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = Router
+		fields = ('id','created','updated','enacted','backend_status','deleted','name','owner',)
+
+
 
 
 class ServiceResourceSerializer(serializers.HyperlinkedModelSerializer):
@@ -502,7 +959,16 @@
 	
 	class Meta:
 		model = ServiceResource
-		fields = ('id','created','updated','enacted','serviceClass','name','maxUnitsDeployment','maxUnitsNode','maxDuration','bucketInRate','bucketMaxSize','cost','calendarReservable',)
+		fields = ('id','created','updated','enacted','backend_status','deleted','serviceClass','name','maxUnitsDeployment','maxUnitsNode','maxDuration','bucketInRate','bucketMaxSize','cost','calendarReservable',)
+
+class ServiceResourceIdSerializer(serializers.ModelSerializer):
+	id = serializers.Field()
+	
+	class Meta:
+		model = ServiceResource
+		fields = ('id','created','updated','enacted','backend_status','deleted','serviceClass','name','maxUnitsDeployment','maxUnitsNode','maxDuration','bucketInRate','bucketMaxSize','cost','calendarReservable',)
+
+
 
 
 serializerLookUp = { 
@@ -606,7 +1072,17 @@
 class ServiceAttributeList(generics.ListCreateAPIView):
     queryset = ServiceAttribute.objects.select_related().all()
     serializer_class = ServiceAttributeSerializer
-    
+    id_serializer_class = ServiceAttributeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','value','service',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return ServiceAttribute.select_by_user(self.request.user)
 
@@ -622,6 +1098,14 @@
 class ServiceAttributeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = ServiceAttribute.objects.select_related().all()
     serializer_class = ServiceAttributeSerializer
+    id_serializer_class = ServiceAttributeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return ServiceAttribute.select_by_user(self.request.user)
@@ -646,7 +1130,17 @@
 class ImageList(generics.ListCreateAPIView):
     queryset = Image.objects.select_related().all()
     serializer_class = ImageSerializer
-    
+    id_serializer_class = ImageIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','disk_format','container_format','path',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Image.select_by_user(self.request.user)
 
@@ -662,6 +1156,14 @@
 class ImageDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Image.objects.select_related().all()
     serializer_class = ImageSerializer
+    id_serializer_class = ImageIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Image.select_by_user(self.request.user)
@@ -686,7 +1188,17 @@
 class NetworkParameterList(generics.ListCreateAPIView):
     queryset = NetworkParameter.objects.select_related().all()
     serializer_class = NetworkParameterSerializer
-    
+    id_serializer_class = NetworkParameterIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','parameter','value','content_type','object_id',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return NetworkParameter.select_by_user(self.request.user)
 
@@ -702,6 +1214,14 @@
 class NetworkParameterDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = NetworkParameter.objects.select_related().all()
     serializer_class = NetworkParameterSerializer
+    id_serializer_class = NetworkParameterIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return NetworkParameter.select_by_user(self.request.user)
@@ -726,7 +1246,17 @@
 class SiteList(generics.ListCreateAPIView):
     queryset = Site.objects.select_related().all()
     serializer_class = SiteSerializer
-    
+    id_serializer_class = SiteIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','site_url','enabled','location','longitude','latitude','login_base','is_public','abbreviated_name',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Site.select_by_user(self.request.user)
 
@@ -742,6 +1272,14 @@
 class SiteDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Site.objects.select_related().all()
     serializer_class = SiteSerializer
+    id_serializer_class = SiteIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Site.select_by_user(self.request.user)
@@ -766,7 +1304,17 @@
 class SliceRoleList(generics.ListCreateAPIView):
     queryset = SliceRole.objects.select_related().all()
     serializer_class = SliceRoleSerializer
-    
+    id_serializer_class = SliceRoleIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SliceRole.select_by_user(self.request.user)
 
@@ -782,6 +1330,14 @@
 class SliceRoleDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SliceRole.objects.select_related().all()
     serializer_class = SliceRoleSerializer
+    id_serializer_class = SliceRoleIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SliceRole.select_by_user(self.request.user)
@@ -806,7 +1362,17 @@
 class TagList(generics.ListCreateAPIView):
     queryset = Tag.objects.select_related().all()
     serializer_class = TagSerializer
-    
+    id_serializer_class = TagIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','service','name','value','content_type','object_id','sites','slices','slivers','nodes',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Tag.select_by_user(self.request.user)
 
@@ -822,6 +1388,14 @@
 class TagDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Tag.objects.select_related().all()
     serializer_class = TagSerializer
+    id_serializer_class = TagIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Tag.select_by_user(self.request.user)
@@ -846,7 +1420,17 @@
 class InvoiceList(generics.ListCreateAPIView):
     queryset = Invoice.objects.select_related().all()
     serializer_class = InvoiceSerializer
-    
+    id_serializer_class = InvoiceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','date','account',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Invoice.select_by_user(self.request.user)
 
@@ -862,6 +1446,14 @@
 class InvoiceDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Invoice.objects.select_related().all()
     serializer_class = InvoiceSerializer
+    id_serializer_class = InvoiceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Invoice.select_by_user(self.request.user)
@@ -886,7 +1478,17 @@
 class PlanetStackRoleList(generics.ListCreateAPIView):
     queryset = PlanetStackRole.objects.select_related().all()
     serializer_class = PlanetStackRoleSerializer
-    
+    id_serializer_class = PlanetStackRoleIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return PlanetStackRole.select_by_user(self.request.user)
 
@@ -902,6 +1504,14 @@
 class PlanetStackRoleDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = PlanetStackRole.objects.select_related().all()
     serializer_class = PlanetStackRoleSerializer
+    id_serializer_class = PlanetStackRoleIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return PlanetStackRole.select_by_user(self.request.user)
@@ -926,7 +1536,17 @@
 class SlicePrivilegeList(generics.ListCreateAPIView):
     queryset = SlicePrivilege.objects.select_related().all()
     serializer_class = SlicePrivilegeSerializer
-    
+    id_serializer_class = SlicePrivilegeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','slice','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SlicePrivilege.select_by_user(self.request.user)
 
@@ -942,6 +1562,14 @@
 class SlicePrivilegeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SlicePrivilege.objects.select_related().all()
     serializer_class = SlicePrivilegeSerializer
+    id_serializer_class = SlicePrivilegeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SlicePrivilege.select_by_user(self.request.user)
@@ -966,7 +1594,17 @@
 class NetworkSliverList(generics.ListCreateAPIView):
     queryset = NetworkSliver.objects.select_related().all()
     serializer_class = NetworkSliverSerializer
-    
+    id_serializer_class = NetworkSliverIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','sliver','ip','port_id',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return NetworkSliver.select_by_user(self.request.user)
 
@@ -982,6 +1620,14 @@
 class NetworkSliverDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = NetworkSliver.objects.select_related().all()
     serializer_class = NetworkSliverSerializer
+    id_serializer_class = NetworkSliverIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return NetworkSliver.select_by_user(self.request.user)
@@ -1006,7 +1652,17 @@
 class NetworkDeploymentsList(generics.ListCreateAPIView):
     queryset = NetworkDeployments.objects.select_related().all()
     serializer_class = NetworkDeploymentsSerializer
-    
+    id_serializer_class = NetworkDeploymentsIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','deployment','net_id','router_id','subnet_id','subnet',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return NetworkDeployments.select_by_user(self.request.user)
 
@@ -1022,6 +1678,14 @@
 class NetworkDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = NetworkDeployments.objects.select_related().all()
     serializer_class = NetworkDeploymentsSerializer
+    id_serializer_class = NetworkDeploymentsIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return NetworkDeployments.select_by_user(self.request.user)
@@ -1046,7 +1710,17 @@
 class SliceList(generics.ListCreateAPIView):
     queryset = Slice.objects.select_related().all()
     serializer_class = SliceSerializer
-    
+    id_serializer_class = SliceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','enabled','omf_friendly','description','slice_url','site','max_slivers','imagePreference','service','network','mountDataSets','serviceClass','creator','networks','availableNetworks','networks','networks',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Slice.select_by_user(self.request.user)
 
@@ -1062,6 +1736,14 @@
 class SliceDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Slice.objects.select_related().all()
     serializer_class = SliceSerializer
+    id_serializer_class = SliceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Slice.select_by_user(self.request.user)
@@ -1086,7 +1768,17 @@
 class NetworkList(generics.ListCreateAPIView):
     queryset = Network.objects.select_related().all()
     serializer_class = NetworkSerializer
-    
+    id_serializer_class = NetworkIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','template','subnet','ports','labels','owner','guaranteedBandwidth','permitAllSlices','network_id','router_id','subnet_id','routers','availableRouters','routers','routers',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Network.select_by_user(self.request.user)
 
@@ -1102,6 +1794,14 @@
 class NetworkDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Network.objects.select_related().all()
     serializer_class = NetworkSerializer
+    id_serializer_class = NetworkIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Network.select_by_user(self.request.user)
@@ -1126,7 +1826,17 @@
 class ServiceList(generics.ListCreateAPIView):
     queryset = Service.objects.select_related().all()
     serializer_class = ServiceSerializer
-    
+    id_serializer_class = ServiceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','description','enabled','name','versionNumber','published',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Service.select_by_user(self.request.user)
 
@@ -1142,6 +1852,14 @@
 class ServiceDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Service.objects.select_related().all()
     serializer_class = ServiceSerializer
+    id_serializer_class = ServiceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Service.select_by_user(self.request.user)
@@ -1166,7 +1884,17 @@
 class ServiceClassList(generics.ListCreateAPIView):
     queryset = ServiceClass.objects.select_related().all()
     serializer_class = ServiceClassSerializer
-    
+    id_serializer_class = ServiceClassIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','description','commitment','membershipFee','membershipFeeMonths','upgradeRequiresApproval',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return ServiceClass.select_by_user(self.request.user)
 
@@ -1182,6 +1910,14 @@
 class ServiceClassDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = ServiceClass.objects.select_related().all()
     serializer_class = ServiceClassSerializer
+    id_serializer_class = ServiceClassIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return ServiceClass.select_by_user(self.request.user)
@@ -1206,7 +1942,17 @@
 class PaymentList(generics.ListCreateAPIView):
     queryset = Payment.objects.select_related().all()
     serializer_class = PaymentSerializer
-    
+    id_serializer_class = PaymentIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','account','amount','date',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Payment.select_by_user(self.request.user)
 
@@ -1222,6 +1968,14 @@
 class PaymentDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Payment.objects.select_related().all()
     serializer_class = PaymentSerializer
+    id_serializer_class = PaymentIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Payment.select_by_user(self.request.user)
@@ -1246,7 +2000,17 @@
 class ChargeList(generics.ListCreateAPIView):
     queryset = Charge.objects.select_related().all()
     serializer_class = ChargeSerializer
-    
+    id_serializer_class = ChargeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','account','slice','kind','state','date','object','amount','coreHours','invoice',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Charge.select_by_user(self.request.user)
 
@@ -1262,6 +2026,14 @@
 class ChargeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Charge.objects.select_related().all()
     serializer_class = ChargeSerializer
+    id_serializer_class = ChargeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Charge.select_by_user(self.request.user)
@@ -1286,7 +2058,17 @@
 class RoleList(generics.ListCreateAPIView):
     queryset = Role.objects.select_related().all()
     serializer_class = RoleSerializer
-    
+    id_serializer_class = RoleIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','role_type','role','description','content_type',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Role.select_by_user(self.request.user)
 
@@ -1302,6 +2084,14 @@
 class RoleDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Role.objects.select_related().all()
     serializer_class = RoleSerializer
+    id_serializer_class = RoleIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Role.select_by_user(self.request.user)
@@ -1326,7 +2116,17 @@
 class UsableObjectList(generics.ListCreateAPIView):
     queryset = UsableObject.objects.select_related().all()
     serializer_class = UsableObjectSerializer
-    
+    id_serializer_class = UsableObjectIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return UsableObject.select_by_user(self.request.user)
 
@@ -1342,6 +2142,14 @@
 class UsableObjectDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = UsableObject.objects.select_related().all()
     serializer_class = UsableObjectSerializer
+    id_serializer_class = UsableObjectIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return UsableObject.select_by_user(self.request.user)
@@ -1366,7 +2174,17 @@
 class SiteRoleList(generics.ListCreateAPIView):
     queryset = SiteRole.objects.select_related().all()
     serializer_class = SiteRoleSerializer
-    
+    id_serializer_class = SiteRoleIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SiteRole.select_by_user(self.request.user)
 
@@ -1382,6 +2200,14 @@
 class SiteRoleDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SiteRole.objects.select_related().all()
     serializer_class = SiteRoleSerializer
+    id_serializer_class = SiteRoleIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SiteRole.select_by_user(self.request.user)
@@ -1406,7 +2232,17 @@
 class SliverList(generics.ListCreateAPIView):
     queryset = Sliver.objects.select_related().all()
     serializer_class = SliverSerializer
-    
+    id_serializer_class = SliverIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','instance_id','name','instance_name','ip','image','creator','slice','node','deploymentNetwork','numberCores','userData','networks','networks',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Sliver.select_by_user(self.request.user)
 
@@ -1422,6 +2258,14 @@
 class SliverDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Sliver.objects.select_related().all()
     serializer_class = SliverSerializer
+    id_serializer_class = SliverIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Sliver.select_by_user(self.request.user)
@@ -1446,7 +2290,17 @@
 class NodeList(generics.ListCreateAPIView):
     queryset = Node.objects.select_related().all()
     serializer_class = NodeSerializer
-    
+    id_serializer_class = NodeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','site','deployment',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Node.select_by_user(self.request.user)
 
@@ -1462,6 +2316,14 @@
 class NodeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Node.objects.select_related().all()
     serializer_class = NodeSerializer
+    id_serializer_class = NodeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Node.select_by_user(self.request.user)
@@ -1486,7 +2348,17 @@
 class DashboardViewList(generics.ListCreateAPIView):
     queryset = DashboardView.objects.select_related().all()
     serializer_class = DashboardViewSerializer
-    
+    id_serializer_class = DashboardViewIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','url',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return DashboardView.select_by_user(self.request.user)
 
@@ -1502,6 +2374,14 @@
 class DashboardViewDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = DashboardView.objects.select_related().all()
     serializer_class = DashboardViewSerializer
+    id_serializer_class = DashboardViewIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return DashboardView.select_by_user(self.request.user)
@@ -1526,7 +2406,17 @@
 class ImageDeploymentsList(generics.ListCreateAPIView):
     queryset = ImageDeployments.objects.select_related().all()
     serializer_class = ImageDeploymentsSerializer
-    
+    id_serializer_class = ImageDeploymentsIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','image','deployment','glance_image_id',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return ImageDeployments.select_by_user(self.request.user)
 
@@ -1542,6 +2432,14 @@
 class ImageDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = ImageDeployments.objects.select_related().all()
     serializer_class = ImageDeploymentsSerializer
+    id_serializer_class = ImageDeploymentsIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return ImageDeployments.select_by_user(self.request.user)
@@ -1566,7 +2464,17 @@
 class ReservedResourceList(generics.ListCreateAPIView):
     queryset = ReservedResource.objects.select_related().all()
     serializer_class = ReservedResourceSerializer
-    
+    id_serializer_class = ReservedResourceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','sliver','resource','quantity','reservationSet',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return ReservedResource.select_by_user(self.request.user)
 
@@ -1582,6 +2490,14 @@
 class ReservedResourceDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = ReservedResource.objects.select_related().all()
     serializer_class = ReservedResourceSerializer
+    id_serializer_class = ReservedResourceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return ReservedResource.select_by_user(self.request.user)
@@ -1606,7 +2522,17 @@
 class NetworkSliceList(generics.ListCreateAPIView):
     queryset = NetworkSlice.objects.select_related().all()
     serializer_class = NetworkSliceSerializer
-    
+    id_serializer_class = NetworkSliceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','network','slice',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return NetworkSlice.select_by_user(self.request.user)
 
@@ -1622,6 +2548,14 @@
 class NetworkSliceDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = NetworkSlice.objects.select_related().all()
     serializer_class = NetworkSliceSerializer
+    id_serializer_class = NetworkSliceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return NetworkSlice.select_by_user(self.request.user)
@@ -1646,7 +2580,17 @@
 class UserDashboardViewList(generics.ListCreateAPIView):
     queryset = UserDashboardView.objects.select_related().all()
     serializer_class = UserDashboardViewSerializer
-    
+    id_serializer_class = UserDashboardViewIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','dashboardView','order',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return UserDashboardView.select_by_user(self.request.user)
 
@@ -1662,6 +2606,14 @@
 class UserDashboardViewDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = UserDashboardView.objects.select_related().all()
     serializer_class = UserDashboardViewSerializer
+    id_serializer_class = UserDashboardViewIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return UserDashboardView.select_by_user(self.request.user)
@@ -1686,7 +2638,17 @@
 class PlanetStackPrivilegeList(generics.ListCreateAPIView):
     queryset = PlanetStackPrivilege.objects.select_related().all()
     serializer_class = PlanetStackPrivilegeSerializer
-    
+    id_serializer_class = PlanetStackPrivilegeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','planetstack','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return PlanetStackPrivilege.select_by_user(self.request.user)
 
@@ -1702,6 +2664,14 @@
 class PlanetStackPrivilegeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = PlanetStackPrivilege.objects.select_related().all()
     serializer_class = PlanetStackPrivilegeSerializer
+    id_serializer_class = PlanetStackPrivilegeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return PlanetStackPrivilege.select_by_user(self.request.user)
@@ -1726,7 +2696,17 @@
 class UserList(generics.ListCreateAPIView):
     queryset = User.objects.select_related().all()
     serializer_class = UserSerializer
-    
+    id_serializer_class = UserIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','password','last_login','email','username','firstname','lastname','phone','user_url','site','public_key','is_active','is_admin','is_staff','is_readonly','created','updated','enacted','backend_status','deleted','timezone',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return User.select_by_user(self.request.user)
 
@@ -1742,6 +2722,14 @@
 class UserDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = User.objects.select_related().all()
     serializer_class = UserSerializer
+    id_serializer_class = UserIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return User.select_by_user(self.request.user)
@@ -1766,7 +2754,17 @@
 class DeploymentList(generics.ListCreateAPIView):
     queryset = Deployment.objects.select_related().all()
     serializer_class = DeploymentSerializer
-    
+    id_serializer_class = DeploymentIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','admin_user','admin_password','admin_tenant','auth_url','accessControl','sites','sites',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Deployment.select_by_user(self.request.user)
 
@@ -1782,6 +2780,14 @@
 class DeploymentDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Deployment.objects.select_related().all()
     serializer_class = DeploymentSerializer
+    id_serializer_class = DeploymentIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Deployment.select_by_user(self.request.user)
@@ -1806,7 +2812,17 @@
 class ReservationList(generics.ListCreateAPIView):
     queryset = Reservation.objects.select_related().all()
     serializer_class = ReservationSerializer
-    
+    id_serializer_class = ReservationIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','startTime','slice','duration',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Reservation.select_by_user(self.request.user)
 
@@ -1822,6 +2838,14 @@
 class ReservationDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Reservation.objects.select_related().all()
     serializer_class = ReservationSerializer
+    id_serializer_class = ReservationIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Reservation.select_by_user(self.request.user)
@@ -1846,7 +2870,17 @@
 class SliceDeploymentsList(generics.ListCreateAPIView):
     queryset = SliceDeployments.objects.select_related().all()
     serializer_class = SliceDeploymentsSerializer
-    
+    id_serializer_class = SliceDeploymentsIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','slice','deployment','tenant_id','network_id','router_id','subnet_id',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SliceDeployments.select_by_user(self.request.user)
 
@@ -1862,6 +2896,14 @@
 class SliceDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SliceDeployments.objects.select_related().all()
     serializer_class = SliceDeploymentsSerializer
+    id_serializer_class = SliceDeploymentsIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SliceDeployments.select_by_user(self.request.user)
@@ -1886,7 +2928,17 @@
 class SitePrivilegeList(generics.ListCreateAPIView):
     queryset = SitePrivilege.objects.select_related().all()
     serializer_class = SitePrivilegeSerializer
-    
+    id_serializer_class = SitePrivilegeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','site','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SitePrivilege.select_by_user(self.request.user)
 
@@ -1902,6 +2954,14 @@
 class SitePrivilegeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SitePrivilege.objects.select_related().all()
     serializer_class = SitePrivilegeSerializer
+    id_serializer_class = SitePrivilegeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SitePrivilege.select_by_user(self.request.user)
@@ -1926,7 +2986,17 @@
 class PlanetStackList(generics.ListCreateAPIView):
     queryset = PlanetStack.objects.select_related().all()
     serializer_class = PlanetStackSerializer
-    
+    id_serializer_class = PlanetStackIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','description',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return PlanetStack.select_by_user(self.request.user)
 
@@ -1942,6 +3012,14 @@
 class PlanetStackDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = PlanetStack.objects.select_related().all()
     serializer_class = PlanetStackSerializer
+    id_serializer_class = PlanetStackIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return PlanetStack.select_by_user(self.request.user)
@@ -1966,7 +3044,17 @@
 class UserDeploymentsList(generics.ListCreateAPIView):
     queryset = UserDeployments.objects.select_related().all()
     serializer_class = UserDeploymentsSerializer
-    
+    id_serializer_class = UserDeploymentsIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','kuser_id',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return UserDeployments.select_by_user(self.request.user)
 
@@ -1982,6 +3070,14 @@
 class UserDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = UserDeployments.objects.select_related().all()
     serializer_class = UserDeploymentsSerializer
+    id_serializer_class = UserDeploymentsIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return UserDeployments.select_by_user(self.request.user)
@@ -2006,7 +3102,17 @@
 class AccountList(generics.ListCreateAPIView):
     queryset = Account.objects.select_related().all()
     serializer_class = AccountSerializer
-    
+    id_serializer_class = AccountIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','site',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Account.select_by_user(self.request.user)
 
@@ -2022,6 +3128,14 @@
 class AccountDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Account.objects.select_related().all()
     serializer_class = AccountSerializer
+    id_serializer_class = AccountIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Account.select_by_user(self.request.user)
@@ -2046,7 +3160,17 @@
 class NetworkParameterTypeList(generics.ListCreateAPIView):
     queryset = NetworkParameterType.objects.select_related().all()
     serializer_class = NetworkParameterTypeSerializer
-    
+    id_serializer_class = NetworkParameterTypeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','description',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return NetworkParameterType.select_by_user(self.request.user)
 
@@ -2062,6 +3186,14 @@
 class NetworkParameterTypeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = NetworkParameterType.objects.select_related().all()
     serializer_class = NetworkParameterTypeSerializer
+    id_serializer_class = NetworkParameterTypeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return NetworkParameterType.select_by_user(self.request.user)
@@ -2086,7 +3218,17 @@
 class SiteDeploymentsList(generics.ListCreateAPIView):
     queryset = SiteDeployments.objects.select_related().all()
     serializer_class = SiteDeploymentsSerializer
-    
+    id_serializer_class = SiteDeploymentsIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','site','deployment','tenant_id',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SiteDeployments.select_by_user(self.request.user)
 
@@ -2102,6 +3244,14 @@
 class SiteDeploymentsDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SiteDeployments.objects.select_related().all()
     serializer_class = SiteDeploymentsSerializer
+    id_serializer_class = SiteDeploymentsIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SiteDeployments.select_by_user(self.request.user)
@@ -2126,7 +3276,17 @@
 class DeploymentPrivilegeList(generics.ListCreateAPIView):
     queryset = DeploymentPrivilege.objects.select_related().all()
     serializer_class = DeploymentPrivilegeSerializer
-    
+    id_serializer_class = DeploymentPrivilegeIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','user','deployment','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return DeploymentPrivilege.select_by_user(self.request.user)
 
@@ -2142,6 +3302,14 @@
 class DeploymentPrivilegeDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = DeploymentPrivilege.objects.select_related().all()
     serializer_class = DeploymentPrivilegeSerializer
+    id_serializer_class = DeploymentPrivilegeIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return DeploymentPrivilege.select_by_user(self.request.user)
@@ -2166,7 +3334,17 @@
 class DeploymentRoleList(generics.ListCreateAPIView):
     queryset = DeploymentRole.objects.select_related().all()
     serializer_class = DeploymentRoleSerializer
-    
+    id_serializer_class = DeploymentRoleIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','role',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return DeploymentRole.select_by_user(self.request.user)
 
@@ -2182,6 +3360,14 @@
 class DeploymentRoleDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = DeploymentRole.objects.select_related().all()
     serializer_class = DeploymentRoleSerializer
+    id_serializer_class = DeploymentRoleIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return DeploymentRole.select_by_user(self.request.user)
@@ -2206,7 +3392,17 @@
 class ProjectList(generics.ListCreateAPIView):
     queryset = Project.objects.select_related().all()
     serializer_class = ProjectSerializer
-    
+    id_serializer_class = ProjectIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Project.select_by_user(self.request.user)
 
@@ -2222,6 +3418,14 @@
 class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Project.objects.select_related().all()
     serializer_class = ProjectSerializer
+    id_serializer_class = ProjectIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Project.select_by_user(self.request.user)
@@ -2246,7 +3450,17 @@
 class SliceTagList(generics.ListCreateAPIView):
     queryset = SliceTag.objects.select_related().all()
     serializer_class = SliceTagSerializer
-    
+    id_serializer_class = SliceTagIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','slice','name','value',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return SliceTag.select_by_user(self.request.user)
 
@@ -2262,6 +3476,14 @@
 class SliceTagDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = SliceTag.objects.select_related().all()
     serializer_class = SliceTagSerializer
+    id_serializer_class = SliceTagIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return SliceTag.select_by_user(self.request.user)
@@ -2286,7 +3508,17 @@
 class NetworkTemplateList(generics.ListCreateAPIView):
     queryset = NetworkTemplate.objects.select_related().all()
     serializer_class = NetworkTemplateSerializer
-    
+    id_serializer_class = NetworkTemplateIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','description','guaranteedBandwidth','visibility','translation','sharedNetworkName','sharedNetworkId',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return NetworkTemplate.select_by_user(self.request.user)
 
@@ -2302,6 +3534,14 @@
 class NetworkTemplateDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = NetworkTemplate.objects.select_related().all()
     serializer_class = NetworkTemplateSerializer
+    id_serializer_class = NetworkTemplateIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return NetworkTemplate.select_by_user(self.request.user)
@@ -2326,7 +3566,17 @@
 class RouterList(generics.ListCreateAPIView):
     queryset = Router.objects.select_related().all()
     serializer_class = RouterSerializer
-    
+    id_serializer_class = RouterIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','name','owner',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return Router.select_by_user(self.request.user)
 
@@ -2342,6 +3592,14 @@
 class RouterDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = Router.objects.select_related().all()
     serializer_class = RouterSerializer
+    id_serializer_class = RouterIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return Router.select_by_user(self.request.user)
@@ -2366,7 +3624,17 @@
 class ServiceResourceList(generics.ListCreateAPIView):
     queryset = ServiceResource.objects.select_related().all()
     serializer_class = ServiceResourceSerializer
-    
+    id_serializer_class = ServiceResourceIdSerializer
+    filter_backends = (filters.DjangoFilterBackend,)
+    filter_fields = ('id','created','updated','enacted','backend_status','deleted','serviceClass','name','maxUnitsDeployment','maxUnitsNode','maxDuration','bucketInRate','bucketMaxSize','cost','calendarReservable',)
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
+
     def get_queryset(self):
         return ServiceResource.select_by_user(self.request.user)
 
@@ -2382,6 +3650,14 @@
 class ServiceResourceDetail(generics.RetrieveUpdateDestroyAPIView):
     queryset = ServiceResource.objects.select_related().all()
     serializer_class = ServiceResourceSerializer
+    id_serializer_class = ServiceResourceIdSerializer
+
+    def get_serializer_class(self):
+        no_hyperlinks = self.request.QUERY_PARAMS.get('no_hyperlinks', False)
+        if (no_hyperlinks):
+            return self.id_serializer_class
+        else:
+            return self.serializer_class
     
     def get_queryset(self):
         return ServiceResource.select_by_user(self.request.user)
