diff --git a/apigee_sync.go b/apigee_sync.go
index e02a790..a065389 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -201,10 +201,15 @@
 	}
 	uri.Path = path.Join(uri.Path, "/accesstoken")
 	tokenActive = false
-
 	form := url.Values{}
 	form.Set("grant_type", "client_credentials")
 	form.Add("client_id", config.GetString(configConsumerKey))
+	form.Add("display_name", ginstName)
+	form.Add("apid_instance_id", guuid)
+	form.Add("apid_cluster_Id", gapidConfigId)
+	form.Add("status", "ONLINE")
+	form.Add("created_at", time.Now().Format(time.RFC3339))
+	form.Add("plugin_details", gpgInfo)
 	form.Add("client_secret", config.GetString(configConsumerSecret))
 	req, err := http.NewRequest("POST", uri.String(), bytes.NewBufferString(form.Encode()))
 	req.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value")
diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index 55dc432..d6825b3 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -17,6 +17,7 @@
 var _ = Describe("api", func() {
 
 	var server *httptest.Server
+	var plugInfo []pluginDetail
 
 	BeforeSuite(func() {
 		apid.Initialize(factory.DefaultServicesFactory())
@@ -45,6 +46,13 @@
 				err := req.ParseForm()
 				Expect(err).NotTo(HaveOccurred())
 				Expect(req.Form.Get("grant_type")).To(Equal("client_credentials"))
+				Expect(req.Form.Get("status")).To(Equal("ONLINE"))
+				Expect(req.Form.Get("apid_cluster_Id")).To(Equal("bootstrap"))
+				Expect(req.Form.Get("display_name")).To(Equal("testhost"))
+				plinfo := []byte(req.Form.Get("plugin_details"))
+				err = json.Unmarshal(plinfo, &plugInfo)
+				Expect(err).NotTo(HaveOccurred())
+				Expect(plugInfo[0].Name).To(Equal("apidApigeeSync"))
 
 				res := oauthTokenResp{}
 				res.AccessToken = "accesstoken"
@@ -196,6 +204,8 @@
 		config.Set(configSnapServerBaseURI, server.URL)
 		config.Set(configChangeServerBaseURI, server.URL)
 		config.Set(configScopeId, "apid_config_scope_0")
+		config.Set(configName, "testhost")
+
 		config.Set(configSnapshotProtocol, "json")
 		config.Set(configScopeId, scope)
 		config.Set(configConsumerKey, key)
diff --git a/init.go b/init.go
index 3d1dd85..dd290c1 100644
--- a/init.go
+++ b/init.go
@@ -1,8 +1,11 @@
 package apidApigeeSync
 
 import (
+	"crypto/rand"
+	"encoding/json"
 	"fmt"
 	"github.com/30x/apid"
+	"time"
 )
 
 const (
@@ -14,7 +17,7 @@
 	configConsumerSecret      = "apigeesync_consumer_secret"
 	configScopeId             = "apigeesync_bootstrap_id"
 	configSnapshotProtocol    = "apigeesync_snapshot_proto"
-	configUnitTestMode        = "apigeesync_UnitTest_mode"
+	configName                = "apigeesync_instance_name"
 	ApigeeSyncEventSelector   = "ApigeeSync"
 )
 
@@ -24,22 +27,60 @@
 	data          apid.DataService
 	events        apid.EventsService
 	gapidConfigId string
+	guuid         string
+	ginstName     string
+	gpgInfo       string
 )
 
+type pluginDetail struct {
+	Name          string `json:"name"`
+	SchemaVersion string `json:"schemaVer"`
+}
+
+/*
+ * generates a random uuid (mix of timestamp & crypto random string)
+ */
+func generate_uuid() string {
+	unix32bits := uint32(time.Now().UTC().Unix())
+	buff := make([]byte, 12)
+	numRead, err := rand.Read(buff)
+	if numRead != len(buff) || err != nil {
+		panic(err)
+	}
+	return fmt.Sprintf("%x-%x-%x-%x-%x-%x\n", unix32bits, buff[0:2], buff[2:4], buff[4:6], buff[6:8], buff[8:])
+}
+
 func init() {
 	apid.RegisterPlugin(initPlugin)
 }
 
 func postInitPlugins(event apid.Event) {
-
+	var plinfoDetails []pluginDetail
 	if pie, ok := event.(apid.PluginsInitializedEvent); ok {
 
-		// todo: temporary example. do whatever registration logic is needed...
+		/*
+		 * Store the plugin details in the heap. Needed during
+		 * Bearer token generation request
+		 */
 		for _, plugin := range pie.Plugins {
 			name := plugin.Name
 			version := plugin.Version
-			schemaVersion := plugin.ExtraData["schemaVersion"]
-			log.Debugf("plugin %s is version %s, schemaVersion: %s", name, version, schemaVersion)
+			log.Debugf("plugin %s is version %s, schemaVersion: %s", name, version)
+			if schemaVersion, ok := plugin.ExtraData["schemaVersion"].(string); ok {
+				inf := pluginDetail{
+					Name:          name,
+					SchemaVersion: schemaVersion}
+				plinfoDetails = append(plinfoDetails, inf)
+			}
+		}
+		if plinfoDetails == nil {
+			log.Panicf("No Plugins registered!")
+		} else {
+			pgInfo, err := json.Marshal(plinfoDetails)
+			if err != nil {
+				log.Panic("Unable to masrhal plugin data", err)
+			}
+			gpgInfo = (string(pgInfo[:]))
 		}
 
 		log.Debug("start post plugin init")
@@ -62,6 +103,13 @@
 	config = services.Config()
 	data = services.Data()
 	events = services.Events()
+	guuid = generate_uuid()
+
+	/* If The Instance has no name configured, just re-use UUID */
+	ginstName = config.GetString(configName)
+	if ginstName == "" {
+		ginstName = guuid
+	}
 
 	/* This callback function will get called, once all the plugins are
 	 * initialized (not just this plugin). This is needed because,
diff --git a/pluginData.go b/pluginData.go
index d5ef00a..b65effc 100644
--- a/pluginData.go
+++ b/pluginData.go
@@ -3,9 +3,9 @@
 import "github.com/30x/apid"
 
 var pluginData = apid.PluginData{
-	Name: "apidApigeeSync",
+	Name:    "apidApigeeSync",
 	Version: "0.0.1",
 	ExtraData: map[string]interface{}{
-		"syncSchemaVersion": "0.0.1",
+		"schemaVersion": "0.0.1",
 	},
 }
