diff --git a/include/grpc/compression.h b/include/grpc/compression.h
index 630fa1656ae28c4db28b4e570e255c8caef9d9d8..207898f60541972971b2a7c23d73bd82332c1f1e 100644
--- a/include/grpc/compression.h
+++ b/include/grpc/compression.h
@@ -34,6 +34,9 @@
 #ifndef GRPC_COMPRESSION_H
 #define GRPC_COMPRESSION_H
 
+/** To be used in channel arguments */
+#define GRPC_COMPRESSION_LEVEL_ARG "grpc.compression_level"
+
 /* The various compression algorithms supported by GRPC */
 typedef enum {
   GRPC_COMPRESS_NONE = 0,
@@ -43,7 +46,17 @@ typedef enum {
   GRPC_COMPRESS_ALGORITHMS_COUNT
 } grpc_compression_algorithm;
 
+typedef enum {
+  GRPC_COMPRESS_LEVEL_NONE = 0,
+  GRPC_COMPRESS_LEVEL_LOW,
+  GRPC_COMPRESS_LEVEL_MED,
+  GRPC_COMPRESS_LEVEL_HIGH
+} grpc_compression_level;
+
 const char *grpc_compression_algorithm_name(
     grpc_compression_algorithm algorithm);
 
+grpc_compression_algorithm grpc_compression_algorithm_for_level(
+    grpc_compression_level level);
+
 #endif  /* GRPC_COMPRESSION_H */
diff --git a/src/core/compression/algorithm.c b/src/core/compression/algorithm.c
index 36ead843d26f666396691b01e21e22e8af57c0e9..6c25733ba98a5616ea912440eda031ff1fc9c775 100644
--- a/src/core/compression/algorithm.c
+++ b/src/core/compression/algorithm.c
@@ -31,6 +31,7 @@
  *
  */
 
+#include <stdlib.h>
 #include <grpc/compression.h>
 
 const char *grpc_compression_algorithm_name(
@@ -47,3 +48,21 @@ const char *grpc_compression_algorithm_name(
   }
   return "error";
 }
+
+/* TODO(dgq): Add the ability to specify parameters to the individual
+ * compression algorithms */
+grpc_compression_algorithm grpc_compression_algorithm_for_level(
+    grpc_compression_level level) {
+  switch (level) {
+    case GRPC_COMPRESS_NONE:
+      return GRPC_COMPRESS_NONE;
+    case GRPC_COMPRESS_LEVEL_LOW:
+    case GRPC_COMPRESS_LEVEL_MED:
+      return GRPC_COMPRESS_DEFLATE;
+    case GRPC_COMPRESS_LEVEL_HIGH:
+      return GRPC_COMPRESS_GZIP;
+    default:
+      /* we shouldn't be making it here */
+      abort();
+  }
+}