diff --git a/core/dns-api/main.go b/core/dns-api/main.go
index c3d429d..f1f9250 100644
--- a/core/dns-api/main.go
+++ b/core/dns-api/main.go
@@ -2,6 +2,7 @@
 
 import (
 	"flag"
+	"fmt"
 	"strings"
 )
 
@@ -23,8 +24,10 @@
 	if err != nil {
 		panic(err)
 	}
-	if err := store.Log(); err != nil {
+	if all, err := store.All(); err != nil {
 		panic(err)
+	} else {
+		fmt.Println(all)
 	}
 	server := NewServer(*port, *zone, ds, store, nameserverIP)
 	server.Start()
diff --git a/core/dns-api/server.go b/core/dns-api/server.go
index d67ccf6..1156d8d 100644
--- a/core/dns-api/server.go
+++ b/core/dns-api/server.go
@@ -2,6 +2,7 @@
 
 import (
 	"encoding/json"
+	"io"
 	"fmt"
 	"net/http"
 	"strings"
@@ -34,6 +35,7 @@
 	m.HandleFunc("/create-a-record", s.createARecord)
 	m.HandleFunc("/delete-a-record", s.deleteARecord)
 	m.HandleFunc("/delete-txt-record", s.deleteTxtRecord)
+	m.HandleFunc("/", s.getAll)
 	return s
 }
 
@@ -41,10 +43,13 @@
 	return s.s.ListenAndServe()
 }
 
-type record struct {
-	Domain string `json:"domain,omitempty"`
-	Entry  string `json:"entry,omitempty"`
-	Text   string `json:"text,omitempty"`
+func (s *Server) getAll(w http.ResponseWriter, r *http.Request) {
+	all, err := s.store.All()
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	io.WriteString(w, all)
 }
 
 func (s *Server) recordsToPublish(w http.ResponseWriter, r *http.Request) {
@@ -65,6 +70,12 @@
 	}
 }
 
+type record struct {
+	Domain string `json:"domain,omitempty"`
+	Entry  string `json:"entry,omitempty"`
+	Text   string `json:"text,omitempty"`
+}
+
 func (s *Server) createTxtRecord(w http.ResponseWriter, r *http.Request) {
 	var req record
 	if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
diff --git a/core/dns-api/store.go b/core/dns-api/store.go
index 8dfd914..588a2f2 100644
--- a/core/dns-api/store.go
+++ b/core/dns-api/store.go
@@ -7,7 +7,7 @@
 )
 
 type RecordStore interface {
-	Log() error
+	All() (string, error)
 	Add(entry, txt string) error
 	AddARecord(entry, ip string) error
 	Delete(entry, txt string) error
@@ -21,14 +21,17 @@
 	db       string
 }
 
-func (s *fsRecordStore) Log() error {
+func (s *fsRecordStore) All() (string, error) {
 	r, err := s.fs.Reader(s.db)
 	if err != nil {
-		return err
+		return "", err
 	}
 	defer r.Close()
-	_, err = io.Copy(os.Stdout, r)
-	return err
+	ret, err := io.ReadAll(r)
+	if err != nil {
+		return "", err
+	}
+	return string(ret), nil
 }
 
 func (s *fsRecordStore) read() (*RecordsFile, error) {
