diff --git a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/RequestHazardCurves.java b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/RequestHazardCurves.java
new file mode 100644
index 0000000000000000000000000000000000000000..58e917ae385c7c3de4f654958d08b5e06aea626d
--- /dev/null
+++ b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/RequestHazardCurves.java
@@ -0,0 +1,68 @@
+package gov.usgs.earthquake.nshmp.netcdf.www;
+
+import java.util.List;
+
+import gov.usgs.earthquake.nshmp.Text;
+import gov.usgs.earthquake.nshmp.Text.Delimiter;
+import gov.usgs.earthquake.nshmp.geo.Location;
+import gov.usgs.earthquake.nshmp.gmm.Imt;
+import gov.usgs.earthquake.nshmp.gmm.NehrpSiteClass;
+import gov.usgs.earthquake.nshmp.netcdf.Nshm;
+import gov.usgs.earthquake.nshmp.netcdf.reader.NetcdfUtils.Key;
+import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestData;
+import gov.usgs.earthquake.nshmp.netcdf.www.Request.RequestDataSiteClass;
+
+/**
+ * Request data for hazard services.
+ *
+ * @author U.S. Geological Survey
+ */
+public class RequestHazardCurves {
+
+  static class HazardRequestData extends RequestData {
+    public Nshm nshm;
+
+    HazardRequestData(Nshm nshm, Location site, ResponseFormat format) {
+      super(site, format);
+      this.nshm = nshm;
+    }
+  }
+
+  /**
+   * Request data with site class and imt
+   */
+  static class HazardRequestDataImt extends HazardRequestDataSiteClass {
+    public Imt imt;
+
+    HazardRequestDataImt(Nshm nshm, Location site, NehrpSiteClass siteClass, Imt imt,
+        ResponseFormat format) {
+      super(nshm, site, siteClass, format);
+      this.imt = imt;
+    }
+
+    @Override
+    public String toCsv() {
+      return String.format("%s,%s",
+          super.toCsv(), Text.join(List.of(Key.IMT.toString(), imt.name()), Delimiter.COMMA));
+    }
+  }
+
+  /**
+   * Request data with site class
+   */
+  static class HazardRequestDataSiteClass extends RequestDataSiteClass {
+    public Nshm nshm;
+
+    HazardRequestDataSiteClass(Nshm nshm, Location site, NehrpSiteClass siteClass,
+        ResponseFormat format) {
+      super(site, siteClass, format);
+      this.nshm = nshm;
+    }
+
+    @Override
+    public String toCsv() {
+      return String.format("%s,%s",
+          super.toCsv(), Text.join(List.of(Key.SITE_CLASS.toString(), siteClass), Delimiter.COMMA));
+    }
+  }
+}