diff --git a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java
index 4e1a688ead05ae7f864cfa4c981a7ad41204a2cb..960c2ae042f6761df57d3629fab6768ddad42ccb 100644
--- a/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java
+++ b/src/hazard/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfController.java
@@ -112,7 +112,7 @@ public class NetcdfController {
                       "Annual Frequency of Exceedence,0.036386,0.026034,0.018125,0.012197, ...\n"))
       })
   @Get(uri = "/{longitude}/{latitude}/{siteClass}/{imt}{?format}",
-      produces = MediaType.APPLICATION_JSON)
+      produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
   public HttpResponse<String> doGetSlashByImt(
       HttpRequest<?> request,
       @Schema(required = true) @PathVariable Double latitude,
@@ -177,7 +177,7 @@ public class NetcdfController {
 
       })
   @Get(uri = "/{longitude}/{latitude}/{siteClass}{?format}",
-      produces = MediaType.APPLICATION_JSON)
+      produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
   public HttpResponse<String> doGetSlashBySite(
       HttpRequest<?> request,
       @Schema(required = true) @PathVariable Double latitude,
@@ -238,7 +238,8 @@ public class NetcdfController {
                       "..."))
 
       })
-  @Get(uri = "/{longitude}/{latitude}{?format}", produces = MediaType.APPLICATION_JSON)
+  @Get(uri = "/{longitude}/{latitude}{?format}",
+      produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
   public HttpResponse<String> doGetSlash(
       HttpRequest<?> request,
       @Schema(required = true) @PathVariable Double longitude,
@@ -300,10 +301,10 @@ public class NetcdfController {
                       "Annual Frequency of Exceedence,0.036386,0.026034,0.018125,0.012197, ...\n" +
                       "\n" +
                       "..."))
-
       })
-  @Get(uri = "{?longitude,latitude,siteClass,imt,format}",
-      produces = MediaType.APPLICATION_JSON)
+  @Get(
+      uri = "{?longitude,latitude,siteClass,imt,format}",
+      produces = { MediaType.APPLICATION_JSON, MediaType.TEXT_CSV })
   public HttpResponse<String> doGet(
       HttpRequest<?> request,
       @Schema(required = true) @QueryValue @Nullable Double longitude,
diff --git a/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java b/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
index 9d88e3cfa083f37dae1b03ff0ffc6c271e2a248e..8cb6efced68d8ec5f1a38afbd4651ae89d367a70 100644
--- a/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
+++ b/src/lib/src/main/java/gov/usgs/earthquake/nshmp/netcdf/www/NetcdfService.java
@@ -22,6 +22,7 @@ import gov.usgs.earthquake.nshmp.www.ResponseBody;
 
 import io.micronaut.http.HttpRequest;
 import io.micronaut.http.HttpResponse;
+import io.micronaut.http.MediaType;
 
 /**
  * Abstract service handler for {@code NetcdfController}.
@@ -89,7 +90,14 @@ public abstract class NetcdfService<S, T extends Query> {
       var service = getService(query);
       var response = processRequest(httpRequest, query, service);
       LOGGER.fine("Result:\n" + response);
-      return HttpResponse.ok(response);
+
+      var httpResponse = HttpResponse.ok(response);
+
+      if (query.format == ResponseFormat.CSV) {
+        httpResponse.header("Content-Type", MediaType.TEXT_CSV.toString());
+      }
+
+      return httpResponse;
     } catch (Exception e) {
       var url = httpRequest.getUri().toString();
       return NetcdfWsUtils.handleError(e, getServiceName(), url);