diff --git a/src/highlanderticketing/handler/match.go b/src/highlanderticketing/handler/match.go
index abeebd162ee44d9c076ced7c51310c2501f7b7af..4bee86e12c38f388a3dcca30c15f28fd4bb02f47 100644
--- a/src/highlanderticketing/handler/match.go
+++ b/src/highlanderticketing/handler/match.go
@@ -1 +1,146 @@
 package handler
+
+import (
+	"encoding/json"
+	"net/http"
+
+	log "github.com/sirupsen/logrus"
+
+	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model"
+	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/service"
+)
+
+func CreateMatch(w http.ResponseWriter, r *http.Request) {
+	var match *model.Match
+	match, err := getMatch(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateMatch(match); err != nil {
+		log.Errorf("Error calling service CreateMatch: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, match)
+}
+
+// noch testen
+/*func CreateMatches(w http.ResponseWriter, r *http.Request) {
+	var match *model.Match
+	match, err := getMatch(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateMatch(match); err != nil {
+		log.Errorf("Error calling service CreateMatch: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, match)
+}
+*/
+func UpdateMatch(w http.ResponseWriter, r *http.Request) {
+	id, err := getID(r)
+	if err != nil {
+		log.Errorf("Please parse in ID at the url %v", err)
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	MatchToUpdate, err := getMatch(r)
+	if err != nil {
+		log.Errorf("Match not found %v", err)
+		return
+	}
+	MatchUpdated, err := service.UpdateMatch(id, MatchToUpdate)
+	if err != nil {
+		log.Errorf("Campaign could not be updated %v", err)
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	sendJson(w, MatchUpdated)
+}
+
+func GetAllMatches(w http.ResponseWriter, r *http.Request) {
+	matches, err := service.GetAllMatches()
+	if err != nil {
+		log.Errorf("Error calling service GetAllMatches: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, matches)
+}
+
+func GetMatchByID(w http.ResponseWriter, r *http.Request) {
+	id, err := getID(r)
+	if err != nil {
+		log.Errorf("Please parse in ID at the url %v", err)
+		http.Error(w, err.Error(), http.StatusBadRequest)
+	}
+	campaign, err := service.GetMatchByID(id)
+	if err != nil {
+		log.Errorf("No Match with this ID %v", err)
+		return
+	}
+	sendJson(w, campaign)
+}
+
+func DeleteMatch(w http.ResponseWriter, r *http.Request) {
+	id, err := getID(r)
+	if err != nil {
+		log.Errorf("Please parse in ID at the url %v", err)
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	} else {
+		log.Infof("ID to delete was found in struct")
+	}
+	err1 := service.DeleteMatch(id)
+	if err1 != nil {
+		log.Errorf("Match could not be deleted %v", err1)
+		http.Error(w, err1.Error(), http.StatusInternalServerError)
+		return
+	} else {
+		log.Infof("ID deleted")
+		log.Tracef("ID: %v deleted", id)
+	}
+	sendJson(w, result{Success: "OK"})
+}
+
+// nur intern
+/*func DeleteAllMatches(w http.ResponseWriter, r *http.Request) {
+	err := service.DeleteAllMatches()
+	if err != nil {
+		log.Errorf("Match could not be deleted %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	} else {
+		log.Infof("Matches deleted")
+	}
+	sendJson(w, result{Success: "OK"})
+}*/
+func getMatch(r *http.Request) (*model.Match, error) {
+	var match model.Match
+	err := json.NewDecoder(r.Body).Decode(&match)
+	if err != nil {
+		log.Errorf("Can't serialize request body to campaign struct: %v", err)
+		return nil, err
+	} else {
+		log.Infof("request body seralized to campaign struct")
+		log.Tracef("body seralized in struct campaign: %v", match)
+	}
+	return &match, nil
+}
+
+/*func getMatches(r *http.Request) (*[]model.Match, error){
+	var match model.Match
+	err := json.NewDecoder(r.Body).Decode(&match)
+	if err != nil {
+		log.Errorf("Can't serialize request body to campaign struct: %v", err)
+		return nil, err
+	} else {
+		log.Infof("request body seralized to campaign struct")
+		log.Tracef("body seralized in struct campaign: %v", match)
+	}
+	return &matches, nil
+}*/
diff --git a/src/highlanderticketing/handler/utils.go b/src/highlanderticketing/handler/utils.go
new file mode 100644
index 0000000000000000000000000000000000000000..cca142c4d441eca008ebbc9a157c419a65ca0c44
--- /dev/null
+++ b/src/highlanderticketing/handler/utils.go
@@ -0,0 +1,34 @@
+package handler
+
+import (
+	"encoding/json"
+	"net/http"
+
+	"github.com/gorilla/mux"
+	log "github.com/sirupsen/logrus"
+	"go.mongodb.org/mongo-driver/bson/primitive"
+)
+
+type result struct {
+	Success string `json:"success"`
+}
+
+func sendJson(w http.ResponseWriter, value interface{}) {
+	w.Header().Set("Content-Type", "application/json")
+	if err := json.NewEncoder(w).Encode(value); err != nil {
+		log.Errorf("Failure encoding value to JSON: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+	}
+}
+func getID(r *http.Request) (primitive.ObjectID, error) {
+	vars := mux.Vars(r)
+	id := vars["id"]
+
+	objectID, err := primitive.ObjectIDFromHex(id)
+	if err != nil {
+		log.Errorf("Can't get ObjectID from request: %v", err)
+		return primitive.NilObjectID, err
+	}
+
+	return objectID, nil
+}
diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go
index 42cf66afb09f42aa5e7a9823b89d707baa499586..b667c44259b3b0be169532da3b2e1d1e9bfc0ba8 100644
--- a/src/highlanderticketing/main.go
+++ b/src/highlanderticketing/main.go
@@ -1,7 +1,6 @@
 package main
 
 import (
-	"fmt"
 	"net/http"
 	"os"
 
@@ -9,50 +8,22 @@ import (
 	log "github.com/sirupsen/logrus"
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/db"
 	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/handler"
-	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/model"
-	"gitlab.reutlingen-university.de/ege/highlander-ticketing-go-ss2023/src/highlanderticketing/service"
-	"go.mongodb.org/mongo-driver/bson/primitive"
 )
 
 func main() {
-	router := mux.NewRouter()
+	//init db
 	_, err := db.GetMongoClient()
 	if err != nil {
 		log.Fatal(err)
 	}
-
-	// Testen
-	objectID := primitive.NewObjectID()
-	var initialMatch = model.Match{ID: objectID, InitialTicketAmount: 1, AvailableTicketAmount: 1, AwayMatch: true, Location: "Stuttgart"}
-	err1 := service.CreateMatch(&initialMatch)
-	if err1 != nil {
-		fmt.Println(err)
-	}
-	matches, err := service.GetAllMatches()
-	if err != nil {
-		fmt.Println(err)
-	}
-	fmt.Println(matches)
-
-	var updateModel = model.Match{ID: objectID, InitialTicketAmount: 1, AvailableTicketAmount: 1, AwayMatch: true, Location: "Schalke"}
-	updatedmatch, err := service.UpdateMatch(objectID, &updateModel)
-	if err != nil {
-		fmt.Println(err)
-	}
-	fmt.Println(updatedmatch)
-	match, err := service.GetMatchByID(objectID)
-	if err != nil {
-		fmt.Println(err)
-	}
-	fmt.Println(match)
-	deleted := service.DeleteAllMatches()
-	if err != nil {
-		fmt.Println(deleted)
-	}
-
-	// ende tests
-
+	log.Println("Starting Highlander Ticketing server")
+	router := mux.NewRouter()
 	router.HandleFunc("/health", handler.Health).Methods("GET")
+	router.HandleFunc("/match", handler.CreateMatch).Methods("POST")
+	router.HandleFunc("/matches", handler.GetAllMatches).Methods("GET")
+	router.HandleFunc("/match/{id}", handler.GetMatchByID).Methods("GET")
+	router.HandleFunc("/match/{id}", handler.UpdateMatch).Methods("PUT")
+	router.HandleFunc("/match/{id}", handler.DeleteMatch).Methods("DELETE")
 	if err := http.ListenAndServe(":8000", router); err != nil {
 		log.Fatal(err)
 	}
diff --git a/src/highlanderticketing/model/match.go b/src/highlanderticketing/model/match.go
index 1311852f811ca4c72f9a5d8c3628dd841a16dc29..3d36e57ca41831a0701ff73ded32a9bef38399e5 100644
--- a/src/highlanderticketing/model/match.go
+++ b/src/highlanderticketing/model/match.go
@@ -1,17 +1,36 @@
 package model
 
-import "go.mongodb.org/mongo-driver/bson/primitive"
+import (
+	"go.mongodb.org/mongo-driver/bson/primitive"
+	"google.golang.org/genproto/googleapis/type/date"
+)
 
 type Match struct {
-	ID                    primitive.ObjectID `bson:"_id"`
+	ID                    primitive.ObjectID `bson:"_id, omitempty"`
 	InitialTicketAmount   int32              `bson:"initial_ticket_amount"`
 	AvailableTicketAmount int32              `bson:"available_ticket_amount"`
 	AwayMatch             bool               `bson:"away_match"`
 	Location              string             `bson:"location"`
-	//Date                  date.Date
-	//Travel                Travel
-	//Orders                []Order
+	Date                  date.Date          `bson:"date"`
+	Travel                Travel             `bson:"travel, omitempty"`
+	Orders                []Order            `bson:"orders"`
 }
 
-// Funktion ins Modell (siehe
-//Myaktion), welche den available_ Ticket_Amount berechnet
+/*func calculateAmountDonated(matchID primitive.ObjectID) (int32, error) {
+	collection := client.Database("your_db").Collection("orders")
+	pipeline := []bson.M{
+		{"$match": bson.M{"match_id": matchID}},
+		{"$group": bson.M{"_id": nil, "totalAmount": bson.M{"$sum": "$amount"}}},
+	}
+
+	var result struct {
+		TotalAmount int32 `bson:"totalAmount"`
+	}
+
+	err := collection.Aggregate(context.TODO(), pipeline).Decode(&result)
+	if err != nil {
+		return 0, err
+	}
+
+	return result.TotalAmount, nil
+}*/ // muss nach jedem update , erstellen gemacht werden , funktion anpassen
diff --git a/src/highlanderticketing/service/match.go b/src/highlanderticketing/service/match.go
index 6c119cfd569d32e5a721af2c2f8181457398e63f..575eaf0404e9474bab555080b64258329ce13571 100644
--- a/src/highlanderticketing/service/match.go
+++ b/src/highlanderticketing/service/match.go
@@ -12,6 +12,7 @@ import (
 )
 
 func CreateMatch(match *model.Match) error {
+	match.ID = primitive.NewObjectID()
 	client, err := db.GetMongoClient()
 	if err != nil {
 		return err
@@ -25,7 +26,7 @@ func CreateMatch(match *model.Match) error {
 	return nil
 }
 
-// noch testen
+// noch testen nur intern für anbindung an die api
 func CreateMatches(list *[]model.Match) error {
 	insertableList := make([]interface{}, len(*list))
 	for i, v := range *list {
@@ -61,7 +62,7 @@ func UpdateMatch(matchID primitive.ObjectID, match *model.Match) (*model.Match,
 		primitive.E{Key: "available_ticket_amount", Value: match.AvailableTicketAmount},
 		primitive.E{Key: "away_match", Value: match.AwayMatch},
 		primitive.E{Key: "location", Value: match.Location},
-		//primitive.E{Key: "date", Value: existingMatch.Date},
+		//primitive.E{Key: "date", Value: match.Date},
 	}}}
 
 	client, err := db.GetMongoClient()