diff --git a/controller/cmd/main.go b/controller/cmd/main.go
new file mode 100644
index 0000000..af2e019
--- /dev/null
+++ b/controller/cmd/main.go
@@ -0,0 +1,89 @@
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"flag"
+	"fmt"
+	"io/ioutil"
+	"log"
+	"net/http"
+
+	"github.com/golang/glog"
+	"github.com/itaysk/regogo"
+)
+
+var port = flag.Int("port", 123, "Port to listen on.")
+var apiAddr = flag.String("api_addr", "", "PCloud GraphQL API server address.")
+
+var jsonContentType = "application/json"
+
+var addImgTmpl = `
+mutation {
+  addImage(input: [%s]) {
+    image {
+      id
+    }
+  }
+}`
+
+type image struct {
+	ObjectPath string
+}
+
+type query struct {
+	Query string
+}
+
+func minioHandler(w http.ResponseWriter, r *http.Request) {
+	body, err := ioutil.ReadAll(r.Body)
+	if err != nil {
+		glog.Error(err)
+		http.Error(w, "Could not read HTTP request body", http.StatusInternalServerError)
+		return
+	}
+	if len(body) == 0 {
+		// Just a health check from Minio
+		return
+	}
+	bodyStr := string(body)
+	glog.Infof("Received event from Minio: %s", bodyStr)
+	key, err := regogo.Get(bodyStr, "input.Key")
+	if err != nil {
+		glog.Error(err)
+		http.Error(w, "Could not find object key", http.StatusBadRequest)
+		return
+	}
+	img := image{key.String()}
+	imgJson, err := json.Marshal(img)
+	if err != nil {
+		panic(err)
+	}
+	q := query{fmt.Sprintf(addImgTmpl, imgJson)}
+	glog.Info(q)
+	queryJson, err := json.Marshal(q)
+	if err != nil {
+		panic(err)
+	}
+	resp, err := http.Post(
+		*apiAddr,
+		jsonContentType,
+		bytes.NewReader(queryJson))
+	if err != nil {
+		glog.Error(err)
+		http.Error(w, "Query failed", http.StatusInternalServerError)
+		return
+	}
+	respBody, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		panic(err)
+	}
+	glog.Info(string(respBody))
+}
+
+func main() {
+	flag.Parse()
+
+	http.HandleFunc("/minio_webhook", minioHandler)
+	log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
+}
