diff --git a/reviewboard/webapi/resources/review_group_user.py b/reviewboard/webapi/resources/review_group_user.py
index ab538f48cc4cd392c4a7ddff18062ae081ab31eb..0fdaf3b0785ea4e6074cca39be343c7d98d42357 100644
--- a/reviewboard/webapi/resources/review_group_user.py
+++ b/reviewboard/webapi/resources/review_group_user.py
@@ -20,6 +20,19 @@ from reviewboard.webapi.resources.user import UserResource
 
 class ReviewGroupUserResource(UserResource):
     """Provides information on users that are members of a review group."""
+
+    name = 'review_group_user'
+    item_result_key = 'user'
+    list_result_key = 'users'
+    model_parent_key = 'review_groups'
+    uri_name = 'users'
+
+    # We do not want the watched resource to be available under this resource
+    # as it will have the wrong URL and does not make sense as a sub-resource;
+    # we will be serializing a link to the user resource and it can be found
+    # from there.
+    item_child_resources = []
+
     allowed_methods = ('GET', 'POST', 'DELETE')
 
     def get_queryset(self, request, group_name, local_site_name=None,
@@ -28,6 +41,62 @@ class ReviewGroupUserResource(UserResource):
                                   local_site__name=local_site_name)
         return group.users.all()
 
+    def get_related_links(self, obj=None, request=None, *args, **kwargs):
+        """Return the related links for the resource.
+
+        Args:
+            obj (django.contrib.auth.models.User, optional):
+                The user for which links are being generated.
+
+            request (django.http.HttpRequest):
+                The current HTTP request.
+
+            *args (tuple):
+                Additional positional arguments.
+
+            **kwargs (dict):
+                Additional keyword arguments.
+
+        Returns:
+            dict:
+            The related links for the resource.
+        """
+        links = super(ReviewGroupUserResource, self).get_related_links(
+            obj, request, *args, **kwargs)
+
+        # We only want the 'user' link when this is an item resource.
+        if self.uri_object_key in kwargs:
+            username = kwargs[self.uri_object_key]
+            links['user'] = {
+                'href': resources.user.get_item_url(username=username),
+                'method': 'GET',
+            }
+
+        return links
+
+    def get_serializer_for_object(self, obj):
+        """Return the serializer for an object.
+
+        If the object is a :py:class:`~django.contrib.auth.models.User`
+        instance, we will serialize it (instead of the
+        :py:class:`~reviewboard.webapi.resources.user.UserResource` resource
+        so that the links will be correct. Otherwise, the POST and DELETE links
+        will be for the actual user instead of for this resource.
+
+        Args:
+            obj (django.db.models.base.Model):
+                The model being serialized.
+
+        Returns:
+            djblets.webapi.resources.base.WebAPIResource:
+            The resource that should be used to serialize the object.
+        """
+        if isinstance(obj, User):
+            return self
+
+        return super(ReviewGroupUserResource, self).get_serializer_for_object(
+            obj)
+
     def has_access_permissions(self, request, user, *args, **kwargs):
         group = resources.review_group.get_object(request, *args, **kwargs)
         return group.is_accessible_by(request.user)
diff --git a/reviewboard/webapi/tests/mimetypes.py b/reviewboard/webapi/tests/mimetypes.py
index 883da57a13961a0e4812fc0372669dbedf876e06..0aea7b071bed3914d2fe23d938daefa3bda78627 100644
--- a/reviewboard/webapi/tests/mimetypes.py
+++ b/reviewboard/webapi/tests/mimetypes.py
@@ -75,6 +75,10 @@ review_group_list_mimetype = _build_mimetype('review-groups')
 review_group_item_mimetype = _build_mimetype('review-group')
 
 
+review_group_user_list_mimetype = _build_mimetype('review-group-users')
+review_group_user_item_mimetype = _build_mimetype('review-group-user')
+
+
 review_reply_list_mimetype = _build_mimetype('review-replies')
 review_reply_item_mimetype = _build_mimetype('review-reply')
 
diff --git a/reviewboard/webapi/tests/test_review_group_user.py b/reviewboard/webapi/tests/test_review_group_user.py
index 7f0ac0e03c7ac1aa4c103e8b362bf3a2cb48b8ac..1ff0e62f16ca00da25089c9f9a6d6cfb56b2c880 100644
--- a/reviewboard/webapi/tests/test_review_group_user.py
+++ b/reviewboard/webapi/tests/test_review_group_user.py
@@ -9,11 +9,12 @@ from reviewboard.site.models import LocalSite
 from reviewboard.webapi.resources import resources
 from reviewboard.webapi.errors import INVALID_USER
 from reviewboard.webapi.tests.base import BaseWebAPITestCase
-from reviewboard.webapi.tests.mimetypes import (user_item_mimetype,
-                                                user_list_mimetype)
+from reviewboard.webapi.tests.mimetypes import (
+    review_group_user_item_mimetype, review_group_user_list_mimetype)
 from reviewboard.webapi.tests.mixins import BasicTestsMetaclass
 from reviewboard.webapi.tests.urls import (get_review_group_user_item_url,
-                                           get_review_group_user_list_url)
+                                           get_review_group_user_list_url,
+                                           get_user_item_url)
 
 
 @six.add_metaclass(BasicTestsMetaclass)
@@ -48,7 +49,7 @@ class ResourceListTests(BaseWebAPITestCase):
             items = []
 
         return (get_review_group_user_list_url(group.name, local_site_name),
-                user_list_mimetype,
+                review_group_user_list_mimetype,
                 items)
 
     def test_get_with_no_access(self):
@@ -77,7 +78,7 @@ class ResourceListTests(BaseWebAPITestCase):
             post_data = {}
 
         return (get_review_group_user_list_url(group.name, local_site_name),
-                user_item_mimetype,
+                review_group_user_item_mimetype,
                 post_data,
                 [group])
 
@@ -124,7 +125,7 @@ class ResourceListTests(BaseWebAPITestCase):
         rsp = self.api_post(
             get_review_group_user_list_url(group.name),
             {'username': self.user.username},
-            expected_mimetype=user_item_mimetype)
+            expected_mimetype=review_group_user_item_mimetype)
         self.assertEqual(rsp['stat'], 'ok')
 
         self.assertEqual(group.users.count(), 1)
@@ -161,7 +162,7 @@ class ResourceListTests(BaseWebAPITestCase):
         rsp = self.api_post(
             get_review_group_user_list_url(group.name, self.local_site_name),
             {'username': self.user.username},
-            expected_mimetype=user_item_mimetype)
+            expected_mimetype=review_group_user_item_mimetype)
         self.assertEqual(rsp['stat'], 'ok')
 
         self.assertEqual(group.users.count(), 1)
@@ -266,5 +267,55 @@ class ResourceItemTests(BaseWebAPITestCase):
 
         return (get_review_group_user_item_url(group.name, doc.username,
                                                local_site_name),
-                user_item_mimetype,
+                review_group_user_item_mimetype,
                 doc)
+
+    def test_get_delete_link(self):
+        """Testing GET groups/<name>/users/<username>/ API contains the correct
+        DELETE link
+        """
+        doc = User.objects.get(username='doc')
+        group = self.create_review_group()
+        group.users.add(doc)
+
+        rsp = self.api_get(
+            get_review_group_user_item_url(group.name, doc.username),
+            expected_mimetype=review_group_user_item_mimetype)
+
+        delete_href = \
+            rsp['user']['links']['delete']['href'][len(self.base_url):]
+
+        self.assertEqual(
+            delete_href,
+            get_review_group_user_item_url(group.name, doc.username))
+
+        self.assertNotEqual(delete_href, get_user_item_url(doc.username))
+
+    def test_get_delete_link_local_site(self):
+        """Testing GET groups/<name>/users/<username>/ API contains the correct
+        DELETE link with a local site
+        """
+        doc = User.objects.get(username='doc')
+
+        local_site = LocalSite.objects.create(name='local-site-1')
+        local_site.users.add(self.user)
+        local_site.users.add(doc)
+
+        group = self.create_review_group(local_site=local_site)
+        group.users.add(doc)
+
+        rsp = self.api_get(
+            get_review_group_user_item_url(group.name, doc.username,
+                                           local_site.name),
+            expected_mimetype=review_group_user_item_mimetype)
+
+        delete_href = \
+            rsp['user']['links']['delete']['href'][len(self.base_url):]
+
+        self.assertEqual(
+            delete_href,
+            get_review_group_user_item_url(group.name, doc.username,
+                                           local_site.name))
+
+        self.assertNotEqual(delete_href, get_user_item_url(doc.username,
+                                                           local_site.name))
diff --git a/reviewboard/webapi/tests/urls.py b/reviewboard/webapi/tests/urls.py
index 3c311eb3f8dfdfc1a1d92eceaaf71a2365b02e65..2a5a77dd1379aa961c0b4d87b119d43b50beaf92 100644
--- a/reviewboard/webapi/tests/urls.py
+++ b/reviewboard/webapi/tests/urls.py
@@ -365,13 +365,13 @@ def get_review_group_item_url(group_name, local_site_name=None):
 # ReviewGroupUserResource
 #
 def get_review_group_user_list_url(group_name, local_site_name=None):
-    return resources.user.get_list_url(
+    return resources.review_group_user.get_list_url(
         local_site_name=local_site_name,
         group_name=group_name)
 
 
 def get_review_group_user_item_url(group_name, username, local_site_name=None):
-    return resources.user.get_item_url(
+    return resources.review_group_user.get_item_url(
         local_site_name=local_site_name,
         group_name=group_name,
         username=username)
