diff --git a/AppMgr/serializers.py b/AppMgr/serializers.py
new file mode 100644
index 0000000..fc669e4
--- /dev/null
+++ b/AppMgr/serializers.py
@@ -0,0 +1,53 @@
+from rest_framework import serializers
+
+from custom_user.models import EmailUser
+
+from AppMgr.models import UserProfile, Organization, Membership, Application, AppVersion
+
+class MembershipSerializer(serializers.ModelSerializer):
+    user = serializers.PrimaryKeyRelatedField(queryset=UserProfile.objects.all())
+    org = serializers.PrimaryKeyRelatedField(queryset=Organization.objects.all())
+    class Meta:
+        model = Membership
+        fields = ('org', 'user', 'join_date')
+
+class UserSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = EmailUser
+        fields = ('id', 'email', 'date_joined',
+                  'is_staff', 'is_active', )
+
+class UserProfileSerializer(serializers.ModelSerializer):
+    memberships = MembershipSerializer(source='membership_set', many=True)
+    user_details = UserSerializer(source='user', many=False)
+    class Meta:
+        model = UserProfile
+        fields = ('id', 'user_details', 'memberships')
+
+class OrganizationSerializer(serializers.ModelSerializer):
+    memberships = MembershipSerializer(source='membership_set', many=True)
+    class Meta:
+        model = Organization
+        fields = ('id', 'name', 'memberships')
+
+class OwnerRelatedField(serializers.RelatedField):
+    def to_representation(self, value):
+        if isinstance(value, UserProfile):
+            serializer = UserProfileSerializer(value)
+        elif isinstance(value, Organization):
+            serializer = OrganizationSerializer(value)
+        else:
+            raise Exception('Unexpected type for owner')
+      
+        return serializer.data
+
+class AppVersionSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = AppVersion
+        fields = ('id', 'name', 'domain', 'aliases')
+
+class ApplicationSerializer(serializers.ModelSerializer):
+    versions = AppVersionSerializer(source='appversion_set', many=True)
+    class Meta:
+        model = Application
+        fields = ('id', 'name', 'isPublic', 'versions')
