diff --git a/Calls.md b/Calls.md
new file mode 100644
index 0000000000000000000000000000000000000000..b7419b6788cd2de07d75e9c9a8c51916f7c2c69f
--- /dev/null
+++ b/Calls.md
@@ -0,0 +1,32 @@
+###  Campaign POST
+
+```
+curl -H "Content-Type: application/json" -d '{"name":"Covid","organizerName":"Martin","donationMinimum":2,"targetAmount":100, "account":{"name":"Martin","bankName":"DKB","number":"123456"}}' localhost:8000/campaigns
+```
+
+### Campaign PUT
+```
+curl -X PUT -H "Content-Type: application/json" -d '{"name":"Covid","organizerName":"Martin","donationMinimum":2,"targetAmount":100, "account":{"name":"Bombardillo Crocodillo","bankName":"Sacur","number":"123456"}}' localhost:8000/campaigns/1
+```
+
+###  Campaign all GET
+```
+curl localhost:8000/campaigns
+```
+
+###  Campaign one GET
+```
+curl localhost:8000/campaigns/1
+```
+
+###  Campaign Delete
+```
+curl -X DELETE localhost:8000/campaigns/1
+```
+
+###  Donation POST:
+```
+curl -X POST -H "Content-Type: application/json" -d '{"amount": 50.0, "donorName": "Max Mustermann", "receiptRequested": true, "status": "TRANSFERRED", "account": {"name": "Max Mustermann", "bankname": "Bank AG", "number": "1234567890"}}' localhost:8000/campaigns/1/donation
+```
+
+
diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go
index 8dddcbedbc9335639c2ad99d2824c9e28b734ceb..9b220a71dc4758f1b97eaa19f8f360b218b72acf 100644
--- a/src/myaktion/handler/campaign.go
+++ b/src/myaktion/handler/campaign.go
@@ -24,6 +24,46 @@ func CreateCampaign(w http.ResponseWriter, r *http.Request) {
 	sendJson(w, campaign)
 }
 
+func UpdateCampaign(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		log.Printf("Error retrieving ID from request: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
+	campaign, err := getCampaign(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+
+	error := service.UpdateCampaign(campaign, id)
+	if error != nil {
+		http.Error(w, error.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, campaign)
+}
+
+func GetCampaign(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+	if err != nil {
+		log.Printf("Error retrieving ID from request: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
+	campaign, err := service.GetCampaign(id)
+	if err != nil {
+		log.Printf("Error calling service GetCampagin: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
+	sendJson(w, campaign)
+}
+
 func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
 	campaigns, err := service.GetCampaigns()
 	if err != nil {
@@ -34,6 +74,43 @@ func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
 	sendJson(w, campaigns)
 }
 
+func DeleteCampaign(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+
+	if err != nil {
+		log.Printf("Error retrieving ID from request: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	var campaign model.Campaign
+	err = service.DeleteCampaign(&campaign, id)
+
+	if err != nil {
+		log.Printf("Error calling service DeleteCampaign: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
+}
+
+func AddDonation(w http.ResponseWriter, r *http.Request) {
+	id, err := getId(r)
+
+	if err != nil {
+		log.Printf("Error retrieving ID from request: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
+	donation, err := getDonation(r)
+
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+
+	err = service.AddDonation(donation, id)
+}
 func getCampaign(r *http.Request) (*model.Campaign, error) {
 	var campaign model.Campaign
 	err := json.NewDecoder(r.Body).Decode(&campaign)
@@ -43,3 +120,14 @@ func getCampaign(r *http.Request) (*model.Campaign, error) {
 	}
 	return &campaign, nil
 }
+
+func getDonation(r *http.Request) (*model.Donation, error) {
+	var donation model.Donation
+
+	err := json.NewDecoder(r.Body).Decode(&donation)
+	if err != nil {
+		log.Errorf("Can't serialize request body to donation struct:  %v", err)
+		return nil, err
+	}
+	return &donation, nil
+}
diff --git a/src/myaktion/main.go b/src/myaktion/main.go
index 977002565602270c32f1171922dfa53abc1b99e5..9c69c595a6d359df5338aa3ba7320e5c66cb1736 100644
--- a/src/myaktion/main.go
+++ b/src/myaktion/main.go
@@ -24,8 +24,14 @@ func main() {
 	log.Println("Starting My-Aktion API server")
 	router := mux.NewRouter()
 	router.HandleFunc("/health", handler.Health).Methods("GET")
+
 	router.HandleFunc("/campaigns", handler.CreateCampaign).Methods("POST")
+	router.HandleFunc("/campaigns/{id}", handler.UpdateCampaign).Methods("PUT")
+	router.HandleFunc("/campaigns/{id}", handler.GetCampaign).Methods("GET")
 	router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
+	router.HandleFunc("/campaigns/{id}", handler.DeleteCampaign).Methods("DELETE")
+
+	router.HandleFunc("/campaigns/{id}/donation", handler.AddDonation).Methods("POST")
 	if err := http.ListenAndServe(":8000", router); err != nil {
 		log.Fatal(err)
 	}
diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go
index 46e77f39c1d1e448de9c4cafaa7552669a850353..3755b229f1d4eee4fecf138247b7cab55b2b0d14 100644
--- a/src/myaktion/service/campaign.go
+++ b/src/myaktion/service/campaign.go
@@ -29,3 +29,52 @@ func GetCampaigns() ([]model.Campaign, error) {
 	log.Tracef("Retrieved: %v", campaigns)
 	return campaigns, nil
 }
+
+func GetCampaign(id uint) (*model.Campaign, error) {
+	var campaign *model.Campaign
+
+	result := db.DB.First(&campaign, id)
+
+	if result.Error != nil {
+		return nil, result.Error
+	}
+	log.Tracef("Retrieved: %v", campaign)
+	return campaign, nil
+}
+
+func UpdateCampaign(campaign *model.Campaign, id uint) error {
+	result := db.DB.Model(&campaign).Where("id = ?", id).Updates(campaign)
+	if result.Error != nil {
+		return result.Error
+	}
+	return nil
+}
+
+func DeleteCampaign(campaign *model.Campaign, id uint) error {
+
+	result := db.DB.Model(&campaign).Where("id = ?", id).Delete(campaign)
+
+	if result.Error != nil {
+		return result.Error
+	}
+
+	log.Infof("Successfully deleted campaign with ID %v in database.", campaign.ID)
+	log.Tracef("Deleted: %v", campaign)
+
+	return nil
+
+}
+
+func AddDonation(donation *model.Donation, id uint) error {
+
+	donation.CampaignID = id
+
+	result := db.DB.Create(&donation)
+
+	if result.Error != nil {
+		return result.Error
+	}
+	log.Infof("Successfully stored new donation in database.")
+	log.Tracef("Stored: %v", donation)
+	return nil
+}