diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..921dbe8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,8 @@
+bazel-bin
+bazel-genfiles
+bazel-istioApigeeAdapter
+bazel-out
+bazel-testlogs
+*.pb.go
+
+
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..0aa7eec
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,7 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_prefix")
+
+go_prefix("github.com/apid/istioApigeeAdapter")
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..9f076a0
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,60 @@
+workspace(name = "com_github_apid_apigeeIstioAdapter")
+
+git_repository(
+    name = "io_bazel_rules_go",
+    commit = "87cdda3fc0fd65c63ef0316533be03ea4956f809",
+    remote = "https://github.com/bazelbuild/rules_go.git",
+)
+
+load("@io_bazel_rules_go//go:def.bzl", "go_repositories", "new_go_repository")
+go_repositories()
+
+git_repository(
+    name = "io_istio_mixer",
+    commit = "5bae502af7492b59d0a59d7f2e89bd95d1088efe",
+    remote = "https://github.com/istio/mixer.git",
+)
+
+# Replace the above with the below to build with your own local copy of mixer
+#local_repository(
+#    name = "io_istio_mixer",
+#    path = "PATH_TO_MIXER_CODE_ON_YOUR_BOX",
+#)
+
+git_repository(
+    name = "org_pubref_rules_protobuf",
+    commit = "9ede1dbc38f0b89ae6cd8e206a22dd93cc1d5637", 
+    remote = "https://github.com/pubref/rules_protobuf",
+)
+load("@org_pubref_rules_protobuf//protobuf:rules.bzl", "proto_repositories")
+
+proto_repositories()
+
+load("@org_pubref_rules_protobuf//gogo:rules.bzl", "gogo_proto_repositories")
+
+gogo_proto_repositories()
+
+new_go_repository(
+    name = "com_github_golang_protobuf",
+    commit = "8ee79997227bf9b34611aee7946ae64735e6fd93",
+    importpath = "github.com/golang/protobuf",
+)
+
+new_go_repository(
+    name = "com_github_hashicorp_go_multierror",
+    commit = "ed905158d87462226a13fe39ddf685ea65f1c11f",
+    importpath = "github.com/hashicorp/go-multierror",
+)
+
+new_go_repository(
+    name = "com_github_hashicorp_errwrap",
+    commit = "7554cd9344cec97297fa6649b055a8c98c2a1e55",
+    importpath = "github.com/hashicorp/errwrap",
+)
+
+new_git_repository(
+    name = "com_github_googleapis_googleapis",
+    build_file = "bazel/BUILD.googleapis",
+    commit = "13ac2436c5e3d568bd0e938f6ed58b77a48aba15",
+    remote = "https://github.com/googleapis/googleapis.git",
+)
\ No newline at end of file
diff --git a/adapter/BUILD b/adapter/BUILD
new file mode 100644
index 0000000..cde5ace
--- /dev/null
+++ b/adapter/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//visibility:public"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
+
+go_library(
+    name = "go_default_library",
+    srcs = [
+        "apigee.go",
+        "apigeeKeyChecker.go",
+        "apigeeReport.go",
+    ],
+    deps = [
+        "//adapter/config:go_default_library",
+        "@com_github_hashicorp_go_multierror//:go_default_library",
+        "@io_istio_mixer//pkg/adapter:go_default_library",
+    ],
+)
+
+go_test(
+    name = "small_tests",
+    size = "small",
+    srcs = ["apigeeKeyChecker_test.go"],
+    library = ":go_default_library",
+    deps = [],
+)
diff --git a/adapter/apigee.go b/adapter/apigee.go
new file mode 100644
index 0000000..cddcfb1
--- /dev/null
+++ b/adapter/apigee.go
@@ -0,0 +1,27 @@
+// Copyright 2017 Istio Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package apigee
+
+import (
+	"istio.io/mixer/pkg/adapter"
+)
+
+// Register records the builders exposed by this adapter.
+// For the apigee adapter, we will eventually expose multiple builders, each for a different
+// aspect of the Apigee functionality.
+func Register(r adapter.Registrar) {
+	r.RegisterListsBuilder(newKeyCheckBuilder())
+	r.RegisterAccessLogsBuilder(newReportBuilder())
+}
diff --git a/adapter/apigeeKeyChecker.go b/adapter/apigeeKeyChecker.go
new file mode 100644
index 0000000..3aeeaf8
--- /dev/null
+++ b/adapter/apigeeKeyChecker.go
@@ -0,0 +1,100 @@
+// Copyright 2017 Istio Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package apigee
+
+import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"net/http"
+
+	"github.com/apid/istioApigeeAdapter/adapter/config"
+	"istio.io/mixer/pkg/adapter"
+)
+
+const (
+	checkName = "apigeeKeyChecker"
+	checkDesc = "Verify an API key from a parameter"
+)
+
+var checkConf = &config.VerifyKeyParams{}
+
+type keyCheckBuilder struct {
+	adapter.DefaultBuilder
+}
+
+type keyChecker struct {
+	keyParam     string
+	organization string
+	environment  string
+}
+
+type APIKeyBody struct {
+	APIKey string `json:"apiKey"`
+}
+
+func newKeyCheckBuilder() keyCheckBuilder {
+	return keyCheckBuilder{
+		adapter.NewDefaultBuilder(checkName, checkDesc, checkConf),
+	}
+}
+
+func (keyCheckBuilder) NewListsAspect(env adapter.Env, c adapter.Config) (adapter.ListsAspect, error) {
+	return newKeyChecker(c.(*config.VerifyKeyParams))
+}
+
+func newKeyChecker(c *config.VerifyKeyParams) (*keyChecker, error) {
+	return &keyChecker{
+		keyParam:     c.KeyParameter,
+		organization: c.Organization,
+		environment:  c.Environment,
+	}, nil
+}
+
+func (l *keyChecker) Close() error {
+	return nil
+}
+
+// CheckList is part of the interface for a "list checker" adapter. It's the part that
+// gets whatever the value is (we want it to be the API key in our case) and checks it.
+
+// Test command ./bazel-bin/cmd/client/mixc check -a target.service=f.default.svc.cluster.local --stringmap_attributes request.headers=x-api-key:1tu9pl04Srua2MtsAGtu6ViPxSYSSX2I
+
+func (l *keyChecker) CheckList(symbol string) (bool, error) {
+	fmt.Printf("*** Going to check \"%s\" against \"%s\"\n", symbol, l.organization)
+
+	edge_url := "https://" + l.organization + "-" + l.environment + ".apigee.net/edgemicro-auth/verifyApiKey"
+
+	fmt.Printf("*** edge_url  \"%s\"\n", edge_url)
+
+	return verifyApiKey(symbol, edge_url), nil
+}
+
+func verifyApiKey(apiKey string, uri string) bool {
+	apiKeyBody := APIKeyBody{
+		APIKey: apiKey,
+	}
+	serializedBody, _ := json.Marshal(&apiKeyBody)
+	req, _ := http.NewRequest("POST", uri, bytes.NewBuffer(serializedBody))
+	req.Header.Add("x-dna-api-key", apiKey)
+	req.Header.Add("content-type", "application/json")
+	client := &http.Client{}
+	resp, _ := client.Do(req)
+	if resp.StatusCode != 200 {
+		return false
+	} else {
+		return true
+	}
+}
diff --git a/adapter/apigeeKeyChecker_test.go b/adapter/apigeeKeyChecker_test.go
new file mode 100644
index 0000000..b4a2f26
--- /dev/null
+++ b/adapter/apigeeKeyChecker_test.go
@@ -0,0 +1,2 @@
+package apigee
+
diff --git a/adapter/apigeeReport.go b/adapter/apigeeReport.go
new file mode 100644
index 0000000..7caa87c
--- /dev/null
+++ b/adapter/apigeeReport.go
@@ -0,0 +1,131 @@
+package apigee
+
+import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"io"
+	"net/http"
+	"os"
+
+	"github.com/apid/istioApigeeAdapter/adapter/config"
+	me "github.com/hashicorp/go-multierror"
+	"istio.io/mixer/pkg/adapter"
+)
+
+type (
+	builder struct{ adapter.DefaultBuilder }
+
+	logger struct{ logStream io.Writer }
+
+	analyticsRecord struct {
+		ClientReceivedStartTimestamp int    `json:"client_received_start_timestamp"`
+		ClientReceivedEndTimestamp   int    `json:"client_received_end_timestamp"`
+		RecordType                   string `json:"recordType"`
+		ApiProxy                     string `json:"apiproxy"`
+		RequestUri                   string `json:"request_uri"`
+		RequestPath                  string `json:"request_path"`
+		RequestVerb                  string `json:"request_verb"`
+		ClientIp                     string `json:"request_path"`
+		UserAgent                    string `json:"useragent"`
+		ApiProxyRevision             string `json:"apiproxy_revision"`
+		ResponseStatusCode           int    `json:"response_status_code"`
+		ClientSentStartTimestamp     int    `json:"client_sent_start_timestamp"`
+		ClientSentEndTimestamp       int    `json:"client_sent_end_timestamp"`
+		DeveloperEmail               string `json:"developer_email,omitempty"`
+		DeveloperApp                 string `json:"developer_app"`
+		AccessToken                  string `json:"access_token,omitempty"`
+		ClientId                     string `json:"client_id,omitempty"`
+		ApiProduct                   string `json:"api_product"`
+	}
+
+	analyticsRecordCollection struct {
+		Records []analyticsRecord `json:"records"`
+	}
+
+	edgemicroKeys struct {
+		Key    string
+		Secret string
+	}
+)
+
+func newReportBuilder() builder {
+	return builder{adapter.NewDefaultBuilder(
+		"apigeeReport",
+		"Report logs to apigee",
+		&config.ReportParams{},
+	)}
+}
+
+func (builder) NewApplicationLogsAspect(env adapter.Env, cfg adapter.Config) (adapter.ApplicationLogsAspect, error) {
+	return newLogger(cfg)
+}
+
+func (builder) NewAccessLogsAspect(env adapter.Env, cfg adapter.Config) (adapter.AccessLogsAspect, error) {
+	return newLogger(cfg)
+}
+
+func newLogger(cfg adapter.Config) (*logger, error) {
+	c := cfg.(*config.ReportParams)
+
+	w := os.Stderr
+	if c.LogStream == config.STDOUT {
+		w = os.Stdout
+	}
+
+	return &logger{w}, nil
+}
+
+func (l *logger) Log(entries []adapter.LogEntry) error {
+	return l.log(entries)
+}
+
+func (l *logger) LogAccess(entries []adapter.LogEntry) error {
+	fmt.Println("*** here")
+	return l.log(entries)
+}
+
+func (l *logger) log(entries []adapter.LogEntry) error {
+	var recordsCollection []analyticsRecord
+
+	var errors *me.Error
+	for _, entry := range entries {
+
+		if err := writeJSON(l.logStream, entry); err != nil {
+			errors = me.Append(errors, err)
+		}
+
+		ax_data := analyticsRecord{
+			ClientReceivedStartTimestamp: 33,
+			DeveloperApp:                 "microgateway-demo",
+		}
+
+		recordsCollection = append(recordsCollection, ax_data)
+
+	}
+
+	res2B, _ := json.Marshal(recordsCollection)
+	fmt.Println(string(res2B))
+
+	return errors.ErrorOrNil()
+}
+
+func (l *logger) Close() error { return nil }
+
+func writeJSON(w io.Writer, le interface{}) error {
+	return json.NewEncoder(w).Encode(le)
+}
+
+func sendAnalyticsRecords(collection analyticsRecordCollection, keys edgemicroKeys, uri string) bool {
+	serializedBody, _ := json.Marshal(&collection)
+	req, _ := http.NewRequest("POST", uri, bytes.NewBuffer(serializedBody))
+	req.SetBasicAuth(keys.Key, keys.Secret)
+	req.Header.Add("content-type", "application/json")
+	client := &http.Client{}
+	resp, _ := client.Do(req)
+	if resp.StatusCode != 200 {
+		return false
+	} else {
+		return true
+	}
+}
diff --git a/adapter/config/BUILD b/adapter/config/BUILD
new file mode 100644
index 0000000..cdde8c7
--- /dev/null
+++ b/adapter/config/BUILD
@@ -0,0 +1,26 @@
+package(default_visibility = ["//visibility:public"])
+
+load("@org_pubref_rules_protobuf//gogo:rules.bzl", "gogoslick_proto_library")
+
+gogoslick_proto_library(
+    name = "go_default_library",
+    importmap = {
+        "gogoproto/gogo.proto": "github.com/gogo/protobuf/gogoproto",
+    },
+    imports = [
+        "external/com_github_gogo_protobuf",
+        "external/com_github_google_protobuf/src",
+    ],
+    inputs = [
+        "@com_github_google_protobuf//:well_known_protos",
+        "@com_github_gogo_protobuf//gogoproto:go_default_library_protos",
+    ],
+    protos = [
+        "config.proto",
+    ],
+    verbose = 0,
+    visibility = ["//adapter:__pkg__"],
+    deps = [
+        "@com_github_gogo_protobuf//gogoproto:go_default_library",
+    ],
+)
diff --git a/adapter/config/config.proto b/adapter/config/config.proto
new file mode 100644
index 0000000..6c3c680
--- /dev/null
+++ b/adapter/config/config.proto
@@ -0,0 +1,56 @@
+// Copyright 2017 Istio Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+package adapter.apigee.config;
+
+import "gogoproto/gogo.proto";
+
+option go_package="config";
+option (gogoproto.goproto_getters_all) = false;
+option (gogoproto.equal_all) = false;
+option (gogoproto.gostring_all) = false;
+
+message VerifyKeyParams {
+  // The name of the parameter where the API key is stored.
+  string key_parameter = 1;
+
+  string organization = 2;
+
+  string environment = 3;
+}
+
+message ReportParams {
+
+    // Stream is used to select between different logs output sinks.
+    enum Stream {
+        // STDERR refers to os.Stderr.
+        STDERR = 0;
+        // STDOUT refers to os.Stdout.
+        STDOUT = 1;
+    }
+
+    // Selects which standard stream to write to for log entries.
+    // STDERR is the default Stream.
+    Stream log_stream = 1;
+
+    string organization = 2;
+
+    string environment = 3;
+
+    string key = 4;
+
+    string secret = 5;
+}
diff --git a/bazel/BUILD.googleapis b/bazel/BUILD.googleapis
new file mode 100644
index 0000000..bf13dbe
--- /dev/null
+++ b/bazel/BUILD.googleapis
@@ -0,0 +1,52 @@
+package(default_visibility = ["//visibility:public"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_prefix")
+go_prefix("github.com/googleapis/googleapis")
+
+load("@org_pubref_rules_protobuf//gogo:rules.bzl", "gogoslick_proto_library")
+
+gogoslick_proto_library(
+    name = "google/rpc",
+    protos = [
+        "google/rpc/code.proto",
+	"google/rpc/error_details.proto",
+        "google/rpc/status.proto",
+    ],
+    importmap = {
+	"google/protobuf/any.proto": "github.com/gogo/protobuf/types",
+        "google/protobuf/duration.proto": "github.com/gogo/protobuf/types",
+    },
+    imports = [
+        "../../external/com_github_google_protobuf/src",
+    ],
+    inputs = [
+        "@com_github_google_protobuf//:well_known_protos",
+    ],
+    deps = [
+        "@com_github_gogo_protobuf//types:go_default_library",
+    ],
+    verbose = 0,
+)
+
+load("@org_pubref_rules_protobuf//cpp:rules.bzl", "cc_proto_library")
+
+cc_proto_library(
+    name = "cc_status_proto",
+    protos = [
+        "google/rpc/status.proto",
+    ],
+    imports = [
+        "../../external/com_github_google_protobuf/src",
+    ],
+    verbose = 0,
+)
+
+filegroup(
+    name = "status_proto",
+    srcs = [ "google/rpc/status.proto" ],
+)
+
+filegroup(
+    name = "code_proto",
+    srcs = [ "google/rpc/code.proto" ],
+)
