diff --git a/greg/api/serializers/person.py b/greg/api/serializers/person.py
index a42ab80575d78b5741dc1c75e2a95900942d230d..77eec13afec9c235552e84b503b085ee80c44a77 100644
--- a/greg/api/serializers/person.py
+++ b/greg/api/serializers/person.py
@@ -6,7 +6,14 @@ from greg.models import Person, PersonRole, Role
 class PersonSerializer(serializers.ModelSerializer):
     class Meta:
         model = Person
-        fields = ("id", "first_name", "last_name")
+        fields = [
+            "id",
+            "first_name",
+            "last_name",
+            "date_of_birth",
+            "email",
+            "mobile_phone",
+        ]
 
 
 class PersonRoleSerializer(serializers.ModelSerializer):
@@ -16,6 +23,10 @@ class PersonRoleSerializer(serializers.ModelSerializer):
         model = PersonRole
         fields = [
             "id",
+            "start_date",
+            "end_date",
+            "registered_by",
+            "unit",
             "created",
             "updated",
             "role",
diff --git a/greg/api/urls.py b/greg/api/urls.py
index 62ee2d499a1cc1ab3e866522c8dd7b8e6c1159f3..3d92c2682e9ec665f74ebec6820cebeac181d771 100644
--- a/greg/api/urls.py
+++ b/greg/api/urls.py
@@ -23,7 +23,7 @@ urlpatterns += [
     path("health/", Health.as_view()),
     url(
         r"^persons/(?P<person_id>[0-9]+)/roles/$",
-        PersonRoleViewSet.as_view({"get": "list"}),
+        PersonRoleViewSet.as_view({"get": "list", "post": "create"}),
         name="person_role-list",
     ),
     url(
diff --git a/greg/api/views/person.py b/greg/api/views/person.py
index 556cc8ce2ade09badc0c386cd6c9da67869d4cee..c856392bf83084053a417f424c61f4bacb5d8dfa 100644
--- a/greg/api/views/person.py
+++ b/greg/api/views/person.py
@@ -1,3 +1,4 @@
+from django.core.exceptions import BadRequest
 from django_filters import rest_framework as filters
 
 from rest_framework import viewsets
@@ -38,3 +39,12 @@ class PersonRoleViewSet(viewsets.ModelViewSet):
         if person_role_id:
             qs = qs.filter(id=person_role_id)
         return qs
+
+    def perform_create(self, serializer):
+        person_id = self.kwargs["person_id"]
+
+        if person_id is None:
+            # Should not happen, the person ID is part of the API path
+            raise BadRequest("No person id")
+
+        serializer.save(person_id=person_id)
diff --git a/greg/tests/test_api_person.py b/greg/tests/test_api_person.py
index cc0b0932a73859aee37327cb38ced81f4187f77b..9a4ae2afbe7d7b4dfe75dbb671e942a8303221dd 100644
--- a/greg/tests/test_api_person.py
+++ b/greg/tests/test_api_person.py
@@ -8,6 +8,7 @@ from rest_framework.test import (
 )
 
 from greg.models import Person
+from greg.tests.populate_database import DatabasePopulation
 
 
 class GregAPITestCase(APITestCase):
@@ -44,6 +45,11 @@ class PersonTestData(GregAPITestCase):
 
 
 class PersonAPITestCase(PersonTestData):
+    def setUp(self):
+        super().setUp()
+        database_populater = DatabasePopulation()
+        database_populater.populate_database()
+
     def test_get_person(self):
         url = reverse("person-detail", kwargs={"id": self.person_foo.id})
         response = self.client.get(url)
@@ -58,4 +64,30 @@ class PersonAPITestCase(PersonTestData):
         response = self.client.get(url)
         data = response.json()
         self.assertEqual(response.status_code, status.HTTP_200_OK)
-        self.assertEqual(2, len(data["results"]))
+        # The DatabasePopulation class will add 10 persons and then there 2 added by the
+        # test class, so there should be 12 persons in total
+        self.assertEqual(12, len(data["results"]))
+
+    def test_add_role(self):
+        url = reverse("person_role-list", kwargs={"person_id": self.person_foo.id})
+        roles_for_person = self.client.get(url).json()["results"]
+
+        # Check that there are no roles for the person, and then add one
+        self.assertEqual(0, len(roles_for_person))
+
+        role_data = {
+            "role": "Visiting Professor",
+            "start_date": "2021-06-10",
+            "end_date": "2021-08-10",
+            "registered_by": "1",
+            "unit": "1",
+        }
+        response = self.client.post(url, role_data)
+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+
+        response_data = response.json()
+        roles_for_person = self.client.get(url).json()["results"]
+
+        # Check that the role shows up when listing roles for the person now
+        self.assertEqual(1, len(roles_for_person))
+        self.assertEqual(response_data["id"], roles_for_person[0]["id"])