diff --git a/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php b/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php
index 6b5bc72cd5..720743982c 100644
--- a/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php
+++ b/src/applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php
@@ -59,16 +59,21 @@ public function execute(
 
     $method = nonempty(idx($settings, 'method'), 'POST');
 
-    $content_type = $settings['content_type'];
-
     $future = id(new HTTPSFuture($uri))
       ->setMethod($method)
       ->setTimeout(60);
 
+    $content_type = $settings['content_type'];
     if ($content_type) {
       $future->addHeader('Content-Type', $content_type);
     }
 
+    $body = $settings['http_body'];
+    if ($body) {
+      $body = $this->mergeVariables('vurisprintf', $body, $variables);
+      $future->setData($body);
+    }
+
     $credential_phid = $this->getSetting('credential');
     if ($credential_phid) {
       $key = PassphrasePasswordKey::loadFromPHID(
@@ -117,6 +122,11 @@ public function getFieldSpecifications() {
         'type' => 'text',
         'required' => false,
       ),
+      'http_body' => array(
+        'name' => pht('HTTP Body'),
+        'type' => 'text',
+        'required' => false,
+      ),
     );
   }