diff --git a/handlers/population.go b/handlers/population.go
new file mode 100644
index 0000000000000000000000000000000000000000..ba9bd61792f32a76d455ece956f85d2fa89d3019
--- /dev/null
+++ b/handlers/population.go
@@ -0,0 +1,41 @@
+package handlers
+
+import (
+	"CountryAPI/utils"
+	"encoding/json"
+	"fmt"
+	"net/http"
+	"strconv"
+	"strings"
+)
+
+func HandlePopulation(rw http.ResponseWriter, r *http.Request) {
+	pathParts := strings.Split(r.URL.Path, "/")
+	countryCode := pathParts[len(pathParts)-1]
+	startYear, endYear := 0, 0
+	myQuery := r.URL.Query()
+	limitString := myQuery.Get("limit")
+	if limitString != "" {
+		//extracting the years and splitting them
+		years := strings.Split(limitString, "-")
+		var err1, err2 error
+		startYear, err1 = strconv.Atoi(years[0]) // converting the years into ints
+		endYear, err2 = strconv.Atoi(years[1])
+		if err1 != nil || err2 != nil {
+			http.Error(rw, "Seems to be a invalid year range or format", http.StatusBadRequest)
+
+		}
+	}
+
+	populationData, err := utils.FetchPopulationData(countryCode, startYear, endYear)
+	if err != nil {
+		http.Error(rw, fmt.Sprintf("Error fetching population data: %v", err), http.StatusInternalServerError)
+		return
+	}
+
+	rw.Header().Set("Content-Type", "application/json")
+	rw.WriteHeader(http.StatusOK)
+
+	json.NewEncoder(rw).Encode(populationData)
+
+}