diff --git a/README.md b/README.md
index aef30fa..c5bf99a 100644
--- a/README.md
+++ b/README.md
@@ -30,10 +30,35 @@
     
 Command line options:
 
-* -bundle <file path> -config <file path>
+* -deployments <file path>
 
-If you use the `-bundle` option, the server will start using a clean database that contains only the
- deployment bundle specified. 
+If you use the `-deployments` option, the server will start using a clean database that contains only the
+ deployments contained in the file specified. 
+ 
+The file should be the JSON for an array of deployments. JSON format is:
+
+        [
+          {
+            "id": "",
+            "scopeId": "",
+            "created": "",
+            "createdBy": "",
+            "updated": "",
+            "updatedBy": "",
+            "configuration": {
+              "key": "value"
+            },
+            "bundleConfiguration": {
+              "key": "value"
+            },
+            "displayName": "",
+            "uri": ""
+          }
+        ]
+ 
+Notes:
+* id must be unique
+* uri should point to a bundle file
  
 Once the process is running, you should be able to manually give the plugin's API a whirl...
 
diff --git a/api.go b/api.go
index fed9e55..8a54a31 100644
--- a/api.go
+++ b/api.go
@@ -28,20 +28,21 @@
 	Reason    string `json:"reason"`
 }
 
-type apiDeployment struct {
-	ID                string `json:"id"`
-	ScopeId           string `json:"scopeId"`
-	Created           string `json:"created"`
-	CreatedBy         string `json:"createdBy"`
-	Updated           string `json:"updated"`
-	UpdatedBy         string `json:"updatedBy"`
-	ConfigurationJson string `json:"configurationJson"`
-	DisplayName       string `json:"displayName"`
-	URI               string `json:"uri"`
+type ApiDeployment struct {
+	ID               string          `json:"id"`
+	ScopeId          string          `json:"scopeId"`
+	Created          string          `json:"created"`
+	CreatedBy        string          `json:"createdBy"`
+	Updated          string          `json:"updated"`
+	UpdatedBy        string          `json:"updatedBy"`
+	ConfigJson       json.RawMessage `json:"configuration"`
+	BundleConfigJson json.RawMessage `json:"bundleConfiguration"`
+	DisplayName      string          `json:"displayName"`
+	URI              string          `json:"uri"`
 }
 
 // sent to client
-type apiDeploymentResponse []apiDeployment
+type ApiDeploymentResponse []ApiDeployment
 
 type apiDeploymentResult struct {
 	ID        string `json:"id"`
@@ -184,17 +185,18 @@
 
 func sendDeployments(w http.ResponseWriter, dataDeps []DataDeployment, eTag string) {
 
-	var apiDeps apiDeploymentResponse
+	var apiDeps ApiDeploymentResponse
 
 	for _, d := range dataDeps {
-		apiDeps = append(apiDeps, apiDeployment{
+		apiDeps = append(apiDeps, ApiDeployment{
 			ID:                d.ID,
 			ScopeId:           d.DataScopeID,
 			Created:           d.Created,
 			CreatedBy:         d.CreatedBy,
 			Updated:           d.Updated,
 			UpdatedBy:         d.UpdatedBy,
-			ConfigurationJson: d.ConfigJSON,
+			BundleConfigJson:  []byte(d.BundleConfigJSON),
+			ConfigJson:        []byte(d.ConfigJSON),
 			DisplayName:       d.BundleName,
 			URI:               d.LocalBundleURI,
 		})
diff --git a/api_test.go b/api_test.go
index be29bd1..cb8ec38 100644
--- a/api_test.go
+++ b/api_test.go
@@ -44,7 +44,7 @@
 			Expect(err).ShouldNot(HaveOccurred())
 			defer res.Body.Close()
 
-			var depRes apiDeploymentResponse
+			var depRes ApiDeploymentResponse
 			body, err := ioutil.ReadAll(res.Body)
 			Expect(err).ShouldNot(HaveOccurred())
 			json.Unmarshal(body, &depRes)
@@ -57,8 +57,15 @@
 			Expect(dep.ScopeId).To(Equal(deploymentID))
 			Expect(dep.DisplayName).To(Equal(deploymentID))
 
-			// todo: more tests
-			//dep.ConfigurationJson
+			var config bundleConfigJson
+
+			err = json.Unmarshal(dep.ConfigJson, &config)
+			Expect(err).ShouldNot(HaveOccurred())
+			Expect(config.Name).To(Equal("/bundles/1"))
+
+			err = json.Unmarshal(dep.BundleConfigJson, &config)
+			Expect(err).ShouldNot(HaveOccurred())
+			Expect(config.Name).To(Equal("/bundles/1"))
 		})
 
 		It("should get 304 for no change", func() {
@@ -124,7 +131,7 @@
 				defer res.Body.Close()
 				Expect(res.StatusCode).To(Equal(http.StatusOK))
 
-				var depRes apiDeploymentResponse
+				var depRes ApiDeploymentResponse
 				body, err := ioutil.ReadAll(res.Body)
 				Expect(err).ShouldNot(HaveOccurred())
 				json.Unmarshal(body, &depRes)
@@ -315,7 +322,7 @@
 		ApidClusterID: deploymentID,
 		DataScopeID: deploymentID,
 		BundleConfigJSON: string(bundleJson),
-		ConfigJSON: "",
+		ConfigJSON: string(bundleJson),
 		Status: "",
 		Created: "",
 		CreatedBy: "",
diff --git a/cmd/apidGatewayDeploy/deployments.json b/cmd/apidGatewayDeploy/deployments.json
new file mode 100644
index 0000000..72efd9f
--- /dev/null
+++ b/cmd/apidGatewayDeploy/deployments.json
@@ -0,0 +1,24 @@
+[
+  {
+    "id": "api_no_change_blocking",
+    "scopeId": "api_no_change_blocking",
+    "created": "",
+    "createdBy": "",
+    "updated": "",
+    "updatedBy": "",
+    "configuration": {
+      "name": "/bundles/1",
+      "uri": "http://127.0.0.1:53589/bundles/1",
+      "checksumType": "crc-32",
+      "checksum": "c65a0f2a"
+    },
+    "bundleConfiguration": {
+      "name": "/bundles/1",
+      "uri": "http://127.0.0.1:53589/bundles/1",
+      "checksumType": "crc-32",
+      "checksum": "c65a0f2a"
+    },
+    "displayName": "api_no_change_blocking",
+    "uri": "x"
+  }
+]
\ No newline at end of file
diff --git a/cmd/apidGatewayDeploy/main.go b/cmd/apidGatewayDeploy/main.go
index 32de317..63961f5 100644
--- a/cmd/apidGatewayDeploy/main.go
+++ b/cmd/apidGatewayDeploy/main.go
@@ -2,24 +2,19 @@
 
 import (
 	"flag"
-	"io/ioutil"
-	"os"
-	"strings"
-
-	"fmt"
-
 	"github.com/30x/apid"
 	"github.com/30x/apid/factory"
-	"github.com/30x/apidGatewayDeploy"
 	_ "github.com/30x/apidGatewayDeploy"
+	"io/ioutil"
+	"github.com/30x/apidGatewayDeploy"
+	"os"
+	"encoding/json"
 )
 
 func main() {
-	bundleFlag := flag.String("bundle", "", "file path to a bundle file (for testing)")
-	configFlag := flag.String("config", "", "file path to a bundle config file (for testing)")
+	deploymentsFlag := flag.String("deployments", "", "file path to a deployments file (for testing)")
 	flag.Parse()
-	bundleFile := *bundleFlag
-	configFile := *configFlag
+	deploymentsFile := *deploymentsFlag
 
 	apid.Initialize(factory.DefaultServicesFactory())
 
@@ -28,10 +23,9 @@
 
 	configService := apid.Config()
 
-	// if bundle is specified, start in a temp dir for testing
-	var bundleConfig string
-	if bundleFile != "" {
-		log.Printf("Running in temp dir with bundle file: %s", bundleFile)
+	var deployments apiGatewayDeploy.ApiDeploymentResponse
+	if deploymentsFile != "" {
+		log.Printf("Running in temp dir using deployments file: %s", deploymentsFile)
 		tmpDir, err := ioutil.TempDir("", "apidGatewayDeploy")
 		if err != nil {
 			log.Panicf("ERROR: Unable to create temp dir", err)
@@ -39,37 +33,27 @@
 		defer os.RemoveAll(tmpDir)
 
 		configService.Set("data_path", tmpDir)
-		configService.Set("gatewaydeploy_bundle_dir", tmpDir)
+		configService.Set("gatewaydeploy_bundle_dir", tmpDir) // todo: legacy?
 
-		if configFile != "" {
-			bundleConfigBytes, err := ioutil.ReadFile(configFile)
+		if deploymentsFile != "" {
+			bytes, err := ioutil.ReadFile(deploymentsFile)
 			if err != nil {
-				log.Errorf("ERROR: Unable to read bundle config file at %s", configFile)
+				log.Errorf("ERROR: Unable to read bundle config file at %s", deploymentsFile)
 				return
 
 			}
-			bundleConfig = string(bundleConfigBytes)
+
+			err = json.Unmarshal(bytes, &deployments)
+			if err != nil {
+				log.Errorf("ERROR: Unable to parse deployments %v", err)
+				return
+			}
 		}
 	}
 
 	apid.InitializePlugins()
 
-	if bundleFile != "" {
-		if strings.ContainsAny(bundleFile, ",") {
-			for deploymentCount, singleBundleFile := range strings.Split(bundleFile, ",") {
-				deployment := fmt.Sprintf("testDeployment-%d", deploymentCount)
-				err := insertTestDeployment(singleBundleFile, bundleConfig, deployment)
-				if err != nil {
-					log.Fatal(err)
-				}
-			}
-		} else {
-			err := insertTestDeployment(bundleFile, bundleConfig, "testDeployment")
-			if err != nil {
-				log.Fatal(err)
-			}
-		}
-	}
+	insertTestDeployments(deployments)
 
 	// print the base url to the console
 	basePath := "/deployments"
@@ -84,25 +68,10 @@
 	log.Fatalf("Error. Is something already running on port %d? %s", port, err)
 }
 
-func insertTestDeployment(bundleFile, bundleConfig string, deploymentID string) error {
+func insertTestDeployments(deployments apiGatewayDeploy.ApiDeploymentResponse) error {
 
-	dep := apiGatewayDeploy.DataDeployment{
-		ID:                 deploymentID,
-		BundleConfigID:     deploymentID,
-		ApidClusterID:      deploymentID,
-		DataScopeID:        deploymentID,
-		BundleConfigJSON:   bundleConfig,
-		ConfigJSON:         "",
-		Status:             "",
-		Created:            "",
-		CreatedBy:          "",
-		Updated:            "",
-		UpdatedBy:          "",
-		BundleName:         deploymentID,
-		BundleURI:          bundleFile,
-		BundleChecksum:     "",
-		BundleChecksumType: "",
-		LocalBundleURI:     bundleFile,
+	if len(deployments) == 0 {
+		return nil
 	}
 
 	log := apid.Log()
@@ -123,10 +92,34 @@
 		return err
 	}
 
-	err = apiGatewayDeploy.InsertDeployment(tx, dep)
-	if err != nil {
-		log.Error("Unable to insert deployment")
-		return err
+	for _, ad := range deployments {
+
+		dep := apiGatewayDeploy.DataDeployment{
+			ID:                 ad.ID,
+			BundleConfigID:     ad.ID,
+			ApidClusterID:      ad.ID,
+			DataScopeID:        ad.ScopeId,
+			BundleConfigJSON:   string(ad.BundleConfigJson),
+			ConfigJSON:         string(ad.ConfigJson),
+			Status:             "",
+			Created:            "",
+			CreatedBy:          "",
+			Updated:            "",
+			UpdatedBy:          "",
+			BundleName:         deploymentID,
+			BundleURI:          bundleFile,
+			BundleChecksum:     "",
+			BundleChecksumType: "",
+			LocalBundleURI:     bundleFile,
+		}
+
+
+		err = apiGatewayDeploy.InsertDeployment(tx, dep)
+		if err != nil {
+			log.Error("Unable to insert deployment")
+			return err
+		}
+
 	}
 
 	err = tx.Commit()
@@ -137,4 +130,4 @@
 	apiGatewayDeploy.InitAPI()
 
 	return nil
-}
+}
\ No newline at end of file
diff --git a/data.go b/data.go
index d21070a..45ad641 100644
--- a/data.go
+++ b/data.go
@@ -2,9 +2,9 @@
 
 import (
 	"database/sql"
+	"fmt"
 	"github.com/30x/apid"
 	"sync"
-	"fmt"
 )
 
 var (
@@ -13,22 +13,22 @@
 )
 
 type DataDeployment struct {
-	ID                string
-	BundleConfigID    string
-	ApidClusterID     string
-	DataScopeID       string
-	BundleConfigJSON  string
-	ConfigJSON  	  string
-	Status		  string
-	Created		  string
-	CreatedBy         string
-	Updated           string
-	UpdatedBy         string
-	BundleName	  string
-	BundleURI	  string
-	BundleChecksum	  string
+	ID                 string
+	BundleConfigID     string
+	ApidClusterID      string
+	DataScopeID        string
+	BundleConfigJSON   string
+	ConfigJSON         string
+	Status             string
+	Created            string
+	CreatedBy          string
+	Updated            string
+	UpdatedBy          string
+	BundleName         string
+	BundleURI          string
+	BundleChecksum     string
 	BundleChecksumType string
-	LocalBundleURI    string
+	LocalBundleURI     string
 }
 
 type SQLExec interface {
@@ -171,7 +171,7 @@
 		return err
 	}
 
-	deploymentsChanged<- depID
+	deploymentsChanged <- depID
 
 	log.Debugf("deleteDeployment %s succeeded", depID)
 	return err
@@ -190,7 +190,7 @@
 	WHERE local_bundle_uri != ""
 	`)
 	if err != nil {
-		if err == sql.ErrNoRows{
+		if err == sql.ErrNoRows {
 			return deployments, nil
 		}
 		log.Errorf("Error querying deployments: %v", err)
