diff --git a/service.go b/service.go
new file mode 100644
index 0000000..ba009b8
--- /dev/null
+++ b/service.go
@@ -0,0 +1,80 @@
+package main
+
+import (
+	"log"
+	"net/http"
+
+	badger "github.com/dgraph-io/badger/v3"
+	"github.com/gin-gonic/gin"
+)
+
+var db *badger.DB
+
+func CheckSaleUrl(c *gin.Context) {
+
+	corpusID := c.Param("corpus_id")
+	docID := c.Param("doc_id")
+	textID := c.Param("text_id")
+
+	err := db.View(func(txn *badger.Txn) error {
+
+		item, err := txn.Get([]byte(corpusID + "/" + docID + "/" + textID))
+
+		if err != nil {
+			c.String(http.StatusNotFound, "No entry found")
+		}
+
+		err = item.Value(func(v []byte) error {
+			c.String(http.StatusOK, string(v))
+			return nil
+		})
+
+		if err != nil {
+			c.String(http.StatusNotFound, err.Error())
+		}
+
+		return nil
+	})
+
+	if err != nil {
+		c.String(http.StatusNotFound, err.Error())
+	}
+
+	c.String(http.StatusExpectationFailed, err.Error())
+}
+
+func add(corpusID, docID, textID string, url string) error {
+	err := db.Update(func(txn *badger.Txn) error {
+		err := txn.Set([]byte(corpusID+"/"+docID+"/"+textID), []byte(url))
+		return err
+	})
+	return err
+}
+
+func initDB(dir string) {
+	if db != nil {
+		return
+	}
+	var err error
+	db, err = badger.Open(badger.DefaultOptions(dir))
+	if err != nil {
+		log.Fatal(err)
+	}
+}
+
+func closeDB() {
+	db.Close()
+}
+
+func setupRouter() *gin.Engine {
+	r := gin.Default()
+	r.GET("/:corpus_id/:doc_id/:text_id", CheckSaleUrl)
+	return r
+}
+
+func main() {
+	initDB("db")
+	r := setupRouter()
+	r.Run(":8080")
+	defer closeDB()
+}
