diff --git a/service/planner/handler/group.go b/service/planner/handler/group.go
index abeebd162ee44d9c076ced7c51310c2501f7b7af..4cd476ba1ad918f2f7a64fcf0d4693a8d30d43b4 100644
--- a/service/planner/handler/group.go
+++ b/service/planner/handler/group.go
@@ -1 +1,75 @@
 package handler
+
+import (
+	"net/http"
+
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service"
+)
+
+func CreateGroup(w http.ResponseWriter, r *http.Request) {
+	if err := service.CreateGroup(); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
+
+func GetGroup(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	group, err := service.GetGroup(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	sendJson(w, group)
+}
+
+func DeleteGroup(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteGroup(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
+
+func CreateUserGroupRelation(w http.ResponseWriter, r *http.Request) {
+	userId, err := getUserId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	groupId, err := getGroupId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateUserGroupRelation(userId, groupId); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
+
+func DeleteUserGroupRelation(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteUserGroupRelation(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
diff --git a/service/planner/handler/meal.go b/service/planner/handler/meal.go
index abeebd162ee44d9c076ced7c51310c2501f7b7af..793190ec2d4bac04e09197c73107e41062f2ece0 100644
--- a/service/planner/handler/meal.go
+++ b/service/planner/handler/meal.go
@@ -1 +1,83 @@
 package handler
+
+import (
+	"encoding/json"
+	"net/http"
+
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model"
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service"
+)
+
+func getUserMeal(r *http.Request) (*model.UserMeal, error) {
+	var meal model.UserMeal
+	err := json.NewDecoder(r.Body).Decode(&meal)
+	if err != nil {
+		return nil, err
+	}
+
+	return &meal, nil
+}
+
+func getGroupMeal(r *http.Request) (*model.GroupMeal, error) {
+	var meal model.GroupMeal
+	err := json.NewDecoder(r.Body).Decode(&meal)
+	if err != nil {
+		return nil, err
+	}
+
+	return &meal, nil
+}
+
+func CreateUserMeal(w http.ResponseWriter, r *http.Request) {
+	meal, err := getUserMeal(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateUserMeal(meal); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, meal)
+}
+
+func DeleteUserMeal(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteUserMeal(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
+
+func CreateGroupMeal(w http.ResponseWriter, r *http.Request) {
+	meal, err := getGroupMeal(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateGroupMeal(meal); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, meal)
+}
+
+func DeleteGroupMeal(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteGroupMeal(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
diff --git a/service/planner/handler/shopping.go b/service/planner/handler/shopping.go
index abeebd162ee44d9c076ced7c51310c2501f7b7af..ab6254d723d40b289af79434008469cc2c4c38c3 100644
--- a/service/planner/handler/shopping.go
+++ b/service/planner/handler/shopping.go
@@ -1 +1,46 @@
 package handler
+
+import (
+	"encoding/json"
+	"net/http"
+
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model"
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service"
+)
+
+func getShoppingDate(r *http.Request) (*model.ShoppingDate, error) {
+	var shoppingDate model.ShoppingDate
+	err := json.NewDecoder(r.Body).Decode(&shoppingDate)
+	if err != nil {
+		return nil, err
+	}
+
+	return &shoppingDate, nil
+}
+
+func CreateShoppingDate(w http.ResponseWriter, r *http.Request) {
+	shoppingDate, err := getShoppingDate(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateShoppingDate(shoppingDate); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, shoppingDate)
+}
+
+func DeleteShoppingDate(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteShoppingDate(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
diff --git a/service/planner/handler/user.go b/service/planner/handler/user.go
index abeebd162ee44d9c076ced7c51310c2501f7b7af..3517dbbddc234c0d91ce85c72a4665d00102b380 100644
--- a/service/planner/handler/user.go
+++ b/service/planner/handler/user.go
@@ -1 +1,79 @@
 package handler
+
+import (
+	"encoding/json"
+	"net/http"
+
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model"
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service"
+)
+
+func getUser(r *http.Request) (*model.User, error) {
+	var user model.User
+	err := json.NewDecoder(r.Body).Decode(&user)
+	if err != nil {
+		return nil, err
+	}
+
+	return &user, nil
+}
+
+func CreateUser(w http.ResponseWriter, r *http.Request) {
+	user, err := getUser(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateUser(user); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, user)
+}
+
+func GetUser(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	user, err := service.GetUser(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	sendJson(w, user)
+}
+
+func UpdateUser(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	user, err := getUser(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.UpdateUser(id, user)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, user)
+}
+
+func DeleteUser(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	err = service.DeleteUser(id)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, nil)
+}
diff --git a/service/planner/handler/utils.go b/service/planner/handler/utils.go
new file mode 100644
index 0000000000000000000000000000000000000000..92a7066b5edc415fe8333499672c7f1cebd3477c
--- /dev/null
+++ b/service/planner/handler/utils.go
@@ -0,0 +1,43 @@
+package handler
+
+import (
+	"encoding/json"
+	"net/http"
+	"strconv"
+
+	"github.com/gorilla/mux"
+)
+
+func sendJson(w http.ResponseWriter, value interface{}) {
+	w.Header().Set("Content-Type", "application/json")
+	if err := json.NewEncoder(w).Encode(value); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+	}
+}
+
+func getId(r *http.Request) (int, error) {
+	vars := mux.Vars(r)
+	id, err := strconv.Atoi(vars["id"])
+	if err != nil {
+		return 0, err
+	}
+	return id, nil
+}
+
+func getUserId(r *http.Request) (int, error) {
+	vars := mux.Vars(r)
+	id, err := strconv.Atoi(vars["userId"])
+	if err != nil {
+		return 0, err
+	}
+	return id, nil
+}
+
+func getGroupId(r *http.Request) (int, error) {
+	vars := mux.Vars(r)
+	id, err := strconv.Atoi(vars["groupId"])
+	if err != nil {
+		return 0, err
+	}
+	return id, nil
+}
diff --git a/service/planner/main.go b/service/planner/main.go
index f4e311e00b804cbe79298526973d5e4defd7673d..7e3687ebcd8d9370beeade5f1521800845a9a10d 100644
--- a/service/planner/main.go
+++ b/service/planner/main.go
@@ -7,6 +7,7 @@ import (
 
 	"github.com/gorilla/mux"
 	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db"
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/handler"
 )
 
 func init() {
@@ -19,7 +20,21 @@ func init() {
 func main() {
 	port := 8000
 	router := mux.NewRouter()
-
+	router.HandleFunc("/user/date/{id}", handler.DeleteShoppingDate).Methods(http.MethodDelete)
+	router.HandleFunc("/user/date", handler.CreateShoppingDate).Methods(http.MethodPost)
+	router.HandleFunc("/user/meal/{id}", handler.DeleteUserMeal).Methods(http.MethodDelete)
+	router.HandleFunc("/user/meal", handler.CreateUserMeal).Methods(http.MethodPost)
+	router.HandleFunc("/user/{id}", handler.GetUser).Methods(http.MethodGet)
+	router.HandleFunc("/user/{id}", handler.UpdateUser).Methods(http.MethodPut)
+	router.HandleFunc("/user/{id}", handler.DeleteUser).Methods(http.MethodDelete)
+	router.HandleFunc("/user", handler.CreateUser).Methods(http.MethodPost)
+	router.HandleFunc("/group/{groupId}/{userId}", handler.CreateUserGroupRelation).Methods(http.MethodPost)
+	router.HandleFunc("/group/{groupId}/{userId}", handler.DeleteUserGroupRelation).Methods(http.MethodDelete)
+	router.HandleFunc("/group/meal/{id}", handler.DeleteGroupMeal).Methods(http.MethodDelete)
+	router.HandleFunc("/group/meal", handler.CreateGroupMeal).Methods(http.MethodPost)
+	router.HandleFunc("/group/{id}", handler.GetGroup).Methods(http.MethodGet)
+	router.HandleFunc("/group/{id}", handler.DeleteGroup).Methods(http.MethodDelete)
+	router.HandleFunc("/group", handler.CreateGroup).Methods(http.MethodPost)
 	fmt.Printf("Server is listening on port :%v\n", port)
 	if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil {
 		log.Fatal(err)
diff --git a/service/planner/service/meal.go b/service/planner/service/meal.go
index e4d76e40b8d02eb650e9f15ebc33dd5a7c3cec1f..5bc1d17690c70e4a77e4617903024e08b5ed2a39 100644
--- a/service/planner/service/meal.go
+++ b/service/planner/service/meal.go
@@ -1,9 +1,12 @@
 package service
 
-import "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db"
+import (
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db"
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model"
+)
 
-func CreateUserMeal(userId int, mealId int, date string) error {
-	err := db.CreateUserMeal(userId, mealId, date)
+func CreateUserMeal(meal *model.UserMeal) error {
+	err := db.CreateUserMeal(meal.UserID, meal.MealID, meal.Date)
 	if err != nil {
 		return err
 	}
@@ -20,8 +23,8 @@ func DeleteUserMeal(id int) error {
 	return nil
 }
 
-func CreateGroupMeal(groupId int, mealId int, date string) error {
-	err := db.CreateGroupMeal(groupId, mealId, date)
+func CreateGroupMeal(meal *model.GroupMeal) error {
+	err := db.CreateGroupMeal(meal.GroupID, meal.MealID, meal.Date)
 	if err != nil {
 		return err
 	}
diff --git a/service/planner/service/shopping.go b/service/planner/service/shopping.go
index 79355170dd4b74411ca29c653d7cb2ced9d3f15c..296d0f4182cfcfd60ff87135b9922ccb2f150fc5 100644
--- a/service/planner/service/shopping.go
+++ b/service/planner/service/shopping.go
@@ -1,9 +1,12 @@
 package service
 
-import "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db"
+import (
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db"
+	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model"
+)
 
-func CreateShoppingDate(userId int, date string) error {
-	err := db.CreateShoppingDate(userId, date)
+func CreateShoppingDate(shoppingDate *model.ShoppingDate) error {
+	err := db.CreateShoppingDate(shoppingDate.UserID, shoppingDate.Date)
 	if err != nil {
 		return err
 	}
diff --git a/service/planner/service/user.go b/service/planner/service/user.go
index 8ce8fcbfb0acab6a574a6442b1cee7fa2dbf0690..1426ca0286d39c0d208da46cb0647c54018d2b92 100644
--- a/service/planner/service/user.go
+++ b/service/planner/service/user.go
@@ -5,8 +5,8 @@ import (
 	"gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model"
 )
 
-func CreateUser(mail string, firstName string, lastName string) error {
-	err := db.CreateUser(mail, firstName, lastName)
+func CreateUser(user *model.User) error {
+	err := db.CreateUser(user.Mail, user.FirstName, user.LastName)
 	if err != nil {
 		return err
 	}
@@ -23,8 +23,8 @@ func GetUser(id int) (*model.User, error) {
 	return user, nil
 }
 
-func UpdateUser(id int, mail string, firstName string, lastName string) error {
-	err := db.UpdateUser(id, mail, firstName, lastName)
+func UpdateUser(id int, user *model.User) error {
+	err := db.UpdateUser(id, user.Mail, user.FirstName, user.LastName)
 	if err != nil {
 		return err
 	}