diff --git a/controller/main.go b/controller/main.go
index 3c2f238..4802b3e 100644
--- a/controller/main.go
+++ b/controller/main.go
@@ -2,6 +2,7 @@
 
 import (
 	"context"
+	"errors"
 	"flag"
 	"fmt"
 	"io"
@@ -90,20 +91,43 @@
 	glog.Infof("Created deployment %q.\n", result.GetObjectMeta().GetName())
 }
 
+type query struct {
+	query     string
+	operation string
+	variables string
+}
+
+func extractQuery(r *http.Request) (*query, error) {
+	if r.Method == "GET" {
+		if err := r.ParseForm(); err != nil {
+			return nil, err
+		}
+		q, ok := r.Form["query"]
+		if !ok || len(q) != 1 {
+			return nil, errors.New("Exactly one query must be provided")
+		}
+		return &query{query: q[0]}, nil
+	} else {
+		body, err := ioutil.ReadAll(r.Body)
+		if err != nil {
+			return nil, err
+		}
+		q, err := regogo.Get(string(body), "input.query")
+		if err != nil {
+			return nil, err
+		}
+		return &query{query: q.String()}, nil
+	}
+}
+
 func (m *MinioWebhook) graphqlHandler(w http.ResponseWriter, r *http.Request) {
 	glog.Infof("New GraphQL query received: %s", r.Method)
-	err := r.ParseForm()
+	q, err := extractQuery(r)
 	if err != nil {
-		glog.Error(err)
-		http.Error(w, "Could not read query", http.StatusInternalServerError)
-		return
+		glog.Error(err.Error())
+		http.Error(w, "Could not extract query", http.StatusBadRequest)
 	}
-	query, ok := r.Form["query"]
-	if !ok || len(query) != 1 {
-		http.Error(w, "Exactly ouery parameter must be provided", http.StatusBadRequest)
-		return
-	}
-	resp, err := m.gql.RunQuery(query[0])
+	resp, err := m.gql.RunQuery(q.query)
 	if err != nil {
 		glog.Error(err)
 		http.Error(w, err.Error(), http.StatusInternalServerError)
