diff --git a/api.go b/api.go
index 0366f7f..ae92a0d 100644
--- a/api.go
+++ b/api.go
@@ -175,12 +175,6 @@
 		return
 	}
 
-	// send not found if no timeout
-	if len(deployments) == 0 && timeout == 0 {
-		w.WriteHeader(http.StatusNotFound)
-		return
-	}
-
 	// send results if different eTag
 	if eTag != ifNoneMatch {
 		sendDeployments(w, deployments, eTag)
@@ -198,14 +192,14 @@
 		if ifNoneMatch != "" {
 			w.WriteHeader(http.StatusNotModified)
 		} else {
-			w.WriteHeader(http.StatusNotFound)
+			sendDeployments(w, deployments, eTag)
 		}
 	}
 }
 
 func sendDeployments(w http.ResponseWriter, dataDeps []DataDeployment, eTag string) {
 
-	var apiDeps ApiDeploymentResponse
+	apiDeps := ApiDeploymentResponse{}
 
 	for _, d := range dataDeps {
 		apiDeps = append(apiDeps, ApiDeployment{
@@ -229,7 +223,7 @@
 		return
 	}
 
-	log.Debugf("sending deployment %s: %s", eTag, b)
+	log.Debugf("sending deployments %s: %s", eTag, b)
 	w.Header().Set("ETag", eTag)
 	w.Write(b)
 }
diff --git a/api_test.go b/api_test.go
index c95369f..373648d 100644
--- a/api_test.go
+++ b/api_test.go
@@ -3,20 +3,21 @@
 import (
 	"bytes"
 	"encoding/json"
-	. "github.com/onsi/ginkgo"
-	. "github.com/onsi/gomega"
 	"io/ioutil"
 	"net/http"
 	"net/http/httptest"
 	"net/url"
 	"time"
+
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
 )
 
 var _ = Describe("api", func() {
 
 	Context("GET /deployments", func() {
 
-		It("should get an empty array if no deployments", func() {
+		It("should get empty set if no deployments", func() {
 
 			uri, err := url.Parse(testServer.URL)
 			uri.Path = deploymentsEndpoint
@@ -24,7 +25,16 @@
 			res, err := http.Get(uri.String())
 			Expect(err).ShouldNot(HaveOccurred())
 			defer res.Body.Close()
-			Expect(res.StatusCode).Should(Equal(http.StatusNotFound))
+
+			Expect(res.StatusCode).Should(Equal(http.StatusOK))
+
+			var depRes ApiDeploymentResponse
+			body, err := ioutil.ReadAll(res.Body)
+			Expect(err).ShouldNot(HaveOccurred())
+			json.Unmarshal(body, &depRes)
+
+			Expect(len(depRes)).To(Equal(0))
+			Expect(string(body)).Should(Equal("[]"))
 		})
 
 		It("should debounce requests", func() {
@@ -50,6 +60,8 @@
 			Expect(err).ShouldNot(HaveOccurred())
 			defer res.Body.Close()
 
+			Expect(res.StatusCode).Should(Equal(http.StatusOK))
+
 			var depRes ApiDeploymentResponse
 			body, err := ioutil.ReadAll(res.Body)
 			Expect(err).ShouldNot(HaveOccurred())
@@ -103,14 +115,21 @@
 			query := uri.Query()
 			query.Add("block", "1")
 			uri.RawQuery = query.Encode()
+
 			res, err := http.Get(uri.String())
 			Expect(err).ShouldNot(HaveOccurred())
 			defer res.Body.Close()
 
+			var depRes ApiDeploymentResponse
+			body, err := ioutil.ReadAll(res.Body)
+			Expect(err).ShouldNot(HaveOccurred())
+			json.Unmarshal(body, &depRes)
+
 			Expect(res.StatusCode).Should(Equal(http.StatusOK))
+			Expect(string(body)).Should(Equal("[]"))
 		})
 
-		It("should get new deployment after blocking", func(done Done) {
+		It("should get new deployment set after blocking", func(done Done) {
 
 			deploymentID := "api_get_current_blocking"
 			insertTestDeployment(testServer, deploymentID)
@@ -301,6 +320,7 @@
 		})
 
 		It("should communicate status to tracking server", func() {
+
 			deploymentResults := apiDeploymentResults{
 				apiDeploymentResult{
 					ID:        "deploymentID",
