diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go
new file mode 100644
index 0000000000000000000000000000000000000000..c14c362e8184a95c4b1fed3b204afcd769aa36ce
--- /dev/null
+++ b/src/myaktion/handler/campaign.go
@@ -0,0 +1,46 @@
+package handler
+
+import (
+	"encoding/json"
+	"net/http"
+
+	log "github.com/sirupsen/logrus"
+
+	"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model"
+	"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/service"
+)
+
+func CreateCampaign(w http.ResponseWriter, r *http.Request) {
+	var campaign *model.Campaign
+	campaign, err := GetCampaign(r)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	if err := service.CreateCampaign(campaign); err != nil {
+		log.Printf("Error calling service CreateCampaign: %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 {
+		log.Printf("Error calling service GetCampaigns: %v", err)
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	sendJson(w, campaigns)
+}
+
+func GetCampaign(r *http.Request) (*model.Campaign, error) {
+	var campaign model.Campaign
+	err := json.NewDecoder(r.Body).Decode(&campaign)
+	if err != nil {
+		log.Errorf("Can't serialize request body to campaign struct: %v", err)
+		return nil, err
+	}
+	return &campaign, nil
+}
diff --git a/src/myaktion/handler/utils.go b/src/myaktion/handler/utils.go
new file mode 100644
index 0000000000000000000000000000000000000000..026e93ab3cc45a87eb8150094f3846fdd63af799
--- /dev/null
+++ b/src/myaktion/handler/utils.go
@@ -0,0 +1,32 @@
+package handler
+
+import (
+	"encoding/json"
+	"net/http"
+	"strconv"
+
+	"github.com/gorilla/mux"
+	log "github.com/sirupsen/logrus"
+)
+
+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) (uint, error) {
+	vars := mux.Vars(r)
+	id, err := strconv.ParseUint(vars["id"], 10, 0)
+	if err != nil {
+		log.Errorf("Can't get ID from request: %v", err)
+		return 0, err
+	}
+	return uint(id), nil
+}
diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go
new file mode 100644
index 0000000000000000000000000000000000000000..c8f2a843e250e916ee8468da7928bc6e9d0e140d
--- /dev/null
+++ b/src/myaktion/service/campaign.go
@@ -0,0 +1,34 @@
+package service
+
+import (
+	"log"
+
+	"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model"
+)
+
+var (
+	campaignStore map[uint]*model.Campaign
+	actCampaignId uint = 1
+)
+
+func init() {
+	campaignStore = make(map[uint]*model.Campaign)
+}
+
+func CreateCampaign(campaign *model.Campaign) error {
+	campaign.ID = actCampaignId
+	campaignStore[actCampaignId] = campaign
+	actCampaignId += 1
+	log.Printf("Successfully stored new campaign with ID %v in database.", campaign.ID)
+	log.Printf("Stored: %v", campaign)
+	return nil
+}
+
+func GetCampaigns() ([]model.Campaign, error) {
+	var campaigns []model.Campaign
+	for _, campaign := range campaignStore {
+		campaigns = append(campaigns, *campaign)
+	}
+	log.Printf("Retrieved: %v", campaigns)
+	return campaigns, nil
+}