diff --git a/api.go b/api.go
index 010e872..972b8eb 100644
--- a/api.go
+++ b/api.go
@@ -31,6 +31,11 @@
 	API_ERR_INTERNAL
 )
 
+const (
+	sqlTimeFormat = "2006-01-02 15:04:05.999 -0700 MST"
+	iso8601       = "2006-01-02T15:04:05.999Z07:00"
+)
+
 type deploymentsResult struct {
 	deployments []DataDeployment
 	err         error
@@ -246,9 +251,9 @@
 		apiDeps = append(apiDeps, ApiDeployment{
 			ID:               d.ID,
 			ScopeId:          d.DataScopeID,
-			Created:          d.Created,
+			Created:          convertTime(d.Created),
 			CreatedBy:        d.CreatedBy,
-			Updated:          d.Updated,
+			Updated:          convertTime(d.Updated),
 			UpdatedBy:        d.UpdatedBy,
 			BundleConfigJson: []byte(d.BundleConfigJSON),
 			ConfigJson:       []byte(d.ConfigJSON),
@@ -382,3 +387,18 @@
 	e := atomic.LoadInt64(&eTag)
 	return strconv.FormatInt(e, 10)
 }
+
+func convertTime(t string) string {
+	if t == "" {
+		return ""
+	}
+	formats := []string{sqlTimeFormat, iso8601, time.RFC3339}
+	for _, f := range formats {
+		timestamp, err := time.Parse(f, t)
+		if err == nil {
+			return timestamp.Format(iso8601)
+		}
+	}
+	log.Panic("convertTime: Unsupported time format: " + t)
+	return ""
+}
diff --git a/api_test.go b/api_test.go
index 665074e..127e124 100644
--- a/api_test.go
+++ b/api_test.go
@@ -11,6 +11,7 @@
 
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
+	"strconv"
 )
 
 var _ = Describe("api", func() {
@@ -361,6 +362,37 @@
 
 			Expect(uploaded).To(Equal(deploymentResults))
 		})
+
+		It("should get iso8601 time", func() {
+			testTimes := []string{"2017-04-05 04:47:36.462 +0000 UTC", "2017-04-05 04:47:36.462 -0700 MST"}
+			isoTime := []string{"2017-04-05T04:47:36.462Z", "2017-04-05T04:47:36.462-07:00"}
+			for i, t := range testTimes {
+				log.Debug("insert deployment with timestamp: " + t)
+				deploymentID := "api_time_iso8601_" + strconv.Itoa(i)
+				insertTimeDeployment(testServer, deploymentID, t)
+			}
+
+			uri, err := url.Parse(testServer.URL)
+			uri.Path = deploymentsEndpoint
+
+			res, err := http.Get(uri.String())
+			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())
+			json.Unmarshal(body, &depRes)
+
+			Expect(len(depRes)).To(Equal(2))
+
+			for i, dep := range depRes {
+				Expect(dep.Created).To(Equal(isoTime[i]))
+				Expect(dep.Updated).To(Equal(isoTime[i]))
+			}
+		})
 	})
 })
 
@@ -410,3 +442,50 @@
 	err = tx.Commit()
 	Expect(err).ShouldNot(HaveOccurred())
 }
+
+func insertTimeDeployment(testServer *httptest.Server, deploymentID string, timestamp string) {
+
+	uri, err := url.Parse(testServer.URL)
+	Expect(err).ShouldNot(HaveOccurred())
+
+	uri.Path = "/bundles/1"
+	bundleUri := uri.String()
+	bundle := bundleConfigJson{
+		Name:         uri.Path,
+		URI:          bundleUri,
+		ChecksumType: "crc32",
+	}
+	bundle.Checksum = testGetChecksum(bundle.ChecksumType, bundleUri)
+	bundleJson, err := json.Marshal(bundle)
+	Expect(err).ShouldNot(HaveOccurred())
+
+	tx, err := getDB().Begin()
+	Expect(err).ShouldNot(HaveOccurred())
+
+	dep := DataDeployment{
+		ID:                 deploymentID,
+		BundleConfigID:     deploymentID,
+		ApidClusterID:      deploymentID,
+		DataScopeID:        deploymentID,
+		BundleConfigJSON:   string(bundleJson),
+		ConfigJSON:         string(bundleJson),
+		Created:            timestamp,
+		CreatedBy:          "",
+		Updated:            timestamp,
+		UpdatedBy:          "",
+		BundleName:         deploymentID,
+		BundleURI:          bundle.URI,
+		BundleChecksum:     bundle.Checksum,
+		BundleChecksumType: bundle.ChecksumType,
+		LocalBundleURI:     "x",
+		DeployStatus:       "",
+		DeployErrorCode:    0,
+		DeployErrorMessage: "",
+	}
+
+	err = InsertDeployment(tx, dep)
+	Expect(err).ShouldNot(HaveOccurred())
+
+	err = tx.Commit()
+	Expect(err).ShouldNot(HaveOccurred())
+}
