diff --git a/src/api/serializers.py b/src/api/serializers.py
index fc125a402c9c11d813e979c6c27732fd6430bbb5..bbad60a25ca8a057c2da409cb7360f97f328f9af 100644
--- a/src/api/serializers.py
+++ b/src/api/serializers.py
@@ -51,6 +51,42 @@ class ParameterisedHyperlinkedIdentityField(HyperlinkedIdentityField):
         return reverse(view_name, kwargs=kwargs, request=request, format=format)
 
 
+class HubHyperlinkedIdentityField(HyperlinkedIdentityField):
+    """
+    Represents the instance, or a property on the instance, using hyperlinking.
+
+    lookup_fields is a tuple of tuples of the form:
+        ('model_field', 'url_parameter')
+
+    taken from https://github.com/encode/django-rest-framework/issues/1024
+    """
+
+    lookup_fields = (('pk', 'pk'),)
+
+    def __init__(self, *args, **kwargs):
+        self.lookup_fields = kwargs.pop('lookup_fields', self.lookup_fields)
+        super().__init__(*args, **kwargs)
+
+    def get_url(self, obj, view_name, request, format):  # pylint: disable=redefined-builtin
+        """
+        Given an object, return the URL that hyperlinks to the object.
+
+        May raise a `NoReverseMatch` if the `view_name` and `lookup_field`
+        attributes are not configured to correctly match the URL conf.
+        """
+        kwargs = {}
+        for model_field, url_param in self.lookup_fields:
+            attr = obj
+            for field in model_field.split('.'):
+                attr = getattr(attr, field)
+            kwargs[url_param] = attr
+
+        from core.templatetags.hub_absolute import hub_absolute  # pylint: disable=import-outside-toplevel
+
+        # TODO: add request=request, format=format,
+        return hub_absolute(view_name, **kwargs, i18n=False)
+
+
 class LinkRelatedField(serializers.RelatedField):
     """
     A read only field that represents its targets using their
@@ -237,6 +273,8 @@ class RoomSerializer(HubModelSerializer):
         read_only=True,
     )
 
+    public_url = HubHyperlinkedIdentityField(view_name='plainui:room', lookup_fields=(('slug', 'slug'),))
+
     class Meta:
         model = Room
         read_only_fields = ['id']
@@ -251,6 +289,7 @@ class RoomSerializer(HubModelSerializer):
             'assembly',
             'links',
             'backend_link',
+            'public_url',
         ]
         staff_only_fields = ['blocked', 'backend_link']