diff --git a/docs/manual/admin/configuration/webhooks.rst b/docs/manual/admin/configuration/webhooks.rst
index d74bf20230813c463e850599eb74fc232521f81d..80e3932fd94244da55dece0e1cd3cfc11500cf0e 100644
--- a/docs/manual/admin/configuration/webhooks.rst
+++ b/docs/manual/admin/configuration/webhooks.rst
@@ -131,6 +131,8 @@ objects:
   A list of file attachment comments in the review.
 ``screenshot_comments``
   A list of screenshot comments in the review.
+``review_request``
+  The parent review request for the review.
 
 
 ``reply_published`` event
@@ -146,6 +148,8 @@ objects:
   A list of file attachment comment replies.
 ``screenshot_comments``
   A list of screenshot comment replies.
+``review_request``
+  The parent review request for the reply.
 
 
 Example payload
diff --git a/reviewboard/notifications/tests.py b/reviewboard/notifications/tests.py
index 26a138989d82b6eeb981fbb89aad528f05e42eee..8c464ddacae24299a0fbd6e61038acd112f964b3 100644
--- a/reviewboard/notifications/tests.py
+++ b/reviewboard/notifications/tests.py
@@ -2171,6 +2171,8 @@ class WebHookSignalDispatchTests(SpyAgency, TestCase):
 
         payload = last_call.args[3]
         self.assertEqual(payload['event'], 'review_published')
+        self.assertEqual(payload['review_request']['id'],
+                         review_request.display_id)
         self.assertEqual(payload['review']['id'], review.pk)
         self.assertIn('diff_comments', payload)
         self.assertIn('screenshot_comments', payload)
@@ -2203,6 +2205,8 @@ class WebHookSignalDispatchTests(SpyAgency, TestCase):
 
         payload = last_call.args[3]
         self.assertEqual(payload['event'], 'review_published')
+        self.assertEqual(payload['review_request']['id'],
+                         review_request.display_id)
         self.assertEqual(payload['review']['id'], review.pk)
         self.assertIn('diff_comments', payload)
         self.assertIn('screenshot_comments', payload)
@@ -2228,6 +2232,8 @@ class WebHookSignalDispatchTests(SpyAgency, TestCase):
 
         payload = last_call.args[3]
         self.assertEqual(payload['event'], 'reply_published')
+        self.assertEqual(payload['review_request']['id'],
+                         review_request.display_id)
         self.assertEqual(payload['reply']['id'], reply.pk)
         self.assertIn('diff_comments', payload)
         self.assertIn('screenshot_comments', payload)
@@ -2266,6 +2272,8 @@ class WebHookSignalDispatchTests(SpyAgency, TestCase):
 
         payload = last_call.args[3]
         self.assertEqual(payload['event'], 'reply_published')
+        self.assertEqual(payload['review_request']['id'],
+                         review_request.display_id)
         self.assertEqual(payload['reply']['id'], reply.pk)
         self.assertIn('diff_comments', payload)
         self.assertIn('screenshot_comments', payload)
diff --git a/reviewboard/notifications/webhooks.py b/reviewboard/notifications/webhooks.py
index 494f277777fcf1b42ef03cac5e65a8ac7a14fe2e..fc044a31b6cd23fefbe8ad8658fbe84784b04da7 100644
--- a/reviewboard/notifications/webhooks.py
+++ b/reviewboard/notifications/webhooks.py
@@ -172,6 +172,8 @@ def dispatch_webhook_event(request, webhook_targets, event, payload):
 
 def _serialize_review(review, request):
     return {
+        'review_request': resources.review_request.serialize_object(
+            review.review_request, request=request),
         'review': resources.review.serialize_object(
             review, request=request),
         'diff_comments': [
@@ -199,6 +201,8 @@ def _serialize_review(review, request):
 
 def _serialize_reply(reply, request):
     return {
+        'review_request': resources.review_request.serialize_object(
+            reply.review_request, request=request),
         'reply': resources.review_reply.serialize_object(
             reply, request=request),
         'diff_comments': [
