Repository: moov-io/customers
Pull request #263 (2020-10-22 20:34:55)

all: updates from upgrading paygate and localdev testing
- account validation failed from amount model change
   - extra code wasn't deleted from the original change
- missing `X-Organization` on some service->service requests
- improper use of old userID value 

codecov-io: # [Codecov](https://codecov.io/gh/moov-io/customers/pull/263?src=pr&el=h1) Report
> Merging [#263](https://codecov.io/gh/moov-io/customers/pull/263?src=pr&el=desc) into [master](https://codecov.io/gh/moov-io/customers/commit/cb1479436a31b4b30397d021c3ff6083f9d575b2?el=desc) will **decrease** coverage by `0.15%`.
> The diff coverage is `66.66%`.


```diff
@@            Coverage Diff             @@
##           master     #263      +/-   ##
==========================================
- Coverage   61.46%   61.31%   -0.16%     
==========================================
  Files          51       50       -1     
  Lines        2943     2921      -22     
==========================================
- Hits         1809     1791      -18     
+ Misses        816      814       -2     
+ Partials      318      316       -2     
```


Patch:
diff --git a/api/client.yaml b/api/client.yaml
index 2942445..b6e5af9 100644
--- a/api/client.yaml
+++ b/api/client.yaml
@@ -2029,9 +2029,7 @@ components:
         micro-deposits:
           type: array
           items:
-            type: string
-          description: Amounts used to validate the account is owned by the customer.
-          example: ["USD 0.01", "USD 0.13"]
+            $ref: 'https://raw.githubusercontent.com/moov-io/paygate/master/api/client.yaml#/components/schemas/Amount'
       required:
         - strategy
     Disclaimer:
diff --git a/go.mod b/go.mod
index 25621cc..00cb31b 100644
--- a/go.mod
+++ b/go.mod
@@ -12,7 +12,7 @@ require (
 	github.com/go-sql-driver/mysql v1.5.0 // indirect
 	github.com/golang/snappy v0.0.2 // indirect
 	github.com/google/go-cmp v0.5.2
-	github.com/google/gofuzz v1.0.0
+	github.com/google/gofuzz v1.2.0
 	github.com/gorilla/mux v1.8.0
 	github.com/hashicorp/errwrap v1.1.0 // indirect
 	github.com/hashicorp/go-multierror v1.1.0 // indirect
@@ -27,7 +27,7 @@ require (
 	github.com/moov-io/ach v1.4.4
 	github.com/moov-io/base v0.13.1
 	github.com/moov-io/fed v0.5.1
-	github.com/moov-io/paygate v0.8.0
+	github.com/moov-io/paygate v0.9.0-dev1.0.20201022020358-75870ae7acfc
 	github.com/moov-io/watchman v0.15.1
 	github.com/mxenabled/atrium-go v1.2.1-0.20200616191425-c9e0ead005ba
 	github.com/ory/dockertest/v3 v3.6.1
diff --git a/go.sum b/go.sum
index 15fd8f6..3a5965d 100644
--- a/go.sum
+++ b/go.sum
@@ -40,6 +40,7 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k
 cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
 cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
 cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/spanner v1.2.0/go.mod h1:LfwGAsK42Yz8IeLsd/oagGFBqTXt3xVWtm8/KD2vrEI=
 cloud.google.com/go/spanner v1.8.0/go.mod h1:mdAPDiFUbE9vCmhHHlxyDUtaPPsIK+pUdf5KmHaUfT8=
 cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
 cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
@@ -68,6 +69,7 @@ github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9a
 github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4=
 github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY=
 github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc=
+github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
 github.com/Azure/azure-sdk-for-go v21.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/azure-sdk-for-go v27.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
@@ -80,6 +82,7 @@ github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHN
 github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0=
 github.com/Azure/azure-storage-blob-go v0.9.0 h1:kORqvzXP8ORhKbW13FflGUaSE5CMyDWun9UwMxY8gPs=
 github.com/Azure/azure-storage-blob-go v0.9.0/go.mod h1:8UBPbiOhrMQ4pLPi3gA1tXnpjrS76UYE/fo5A40vf4g=
+github.com/Azure/azure-storage-blob-go v0.10.0/go.mod h1:ep1edmW+kNQx4UfWM9heESNmQdijykocJ0YOxmMX8SE=
 github.com/Azure/go-amqp v0.12.6/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo=
 github.com/Azure/go-amqp v0.12.7/go.mod h1:qApuH6OFTSKZFmCOxccvAv5rLizBQf4v8pRmG138DPo=
 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
@@ -122,9 +125,12 @@ github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jB
 github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw=
 github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/PagerDuty/go-pagerduty v1.3.0/go.mod h1:W5hSIIPrzSgAkNBDiuymWN5g9yQVzimL7BUBL44f3RY=
 github.com/Pallinder/go-randomdata v1.2.0/go.mod h1:yHmJgulpD2Nfrm0cR9tI/+oAgRqCQQixsA8HyRZfV9Y=
+github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
 github.com/Shopify/sarama v1.26.1/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU=
+github.com/Shopify/sarama v1.26.4/go.mod h1:NbSGBSSndYaIhRcBtY9V0U7AyH+x71bG668AuWys/yU=
 github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
 github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
 github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
@@ -135,6 +141,7 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
 github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
 github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -145,6 +152,7 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
+github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
 github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
 github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
 github.com/aws/aws-sdk-go v1.17.7/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
@@ -201,6 +209,7 @@ github.com/containerd/continuity v0.0.0-20200928162600-f2cc35102c2a h1:jEIoR0aA5
 github.com/containerd/continuity v0.0.0-20200928162600-f2cc35102c2a/go.mod h1:W0qIOTD7mp2He++YVq+kgfXezRYqzP1uDuMVH1bITDY=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
 github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
@@ -216,6 +225,7 @@ github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369/go.mod h1:e6NPNENfs
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
 github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
 github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
@@ -257,6 +267,8 @@ github.com/frankban/quicktest v1.7.2 h1:2QxQoC1TS09S7fhCPsrvqYdvP1H5M1P1ih5ABm3B
 github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
 github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
@@ -272,6 +284,9 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=
 github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-ozzo/ozzo-validation v3.6.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU=
+github.com/go-ozzo/ozzo-validation/v4 v4.2.1/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew=
+github.com/go-ozzo/ozzo-validation/v4 v4.2.2/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew=
 github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
 github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
@@ -282,6 +297,8 @@ github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3a
 github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
 github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI=
 github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM=
+github.com/gobuffalo/here v0.6.2 h1:ZtCqC7F9ou3moLbYfHM1Tj+gwHGgWhjyRjVjsir9BE0=
+github.com/gobuffalo/here v0.6.2/go.mod h1:D75Sq0p2BVHdgQu3vCRsXbg85rx943V19urJpqAVWjI=
 github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0=
 github.com/goftp/file-driver v0.0.0-20180502053751-5d604a0fc0c9/go.mod h1:GpOj6zuVBG3Inr9qjEnuVTgBlk2lZ1S9DcoFiXWyKss=
 github.com/goftp/server v0.0.0-20190712054601-1149070ae46b/go.mod h1:k/SS6VWkxY7dHPhoMQ8IdRu8L4lQtmGbhyXGg+vCnXE=
@@ -290,6 +307,7 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a
 github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang-migrate/migrate/v4 v4.11.0/go.mod h1:nqbpDbckcYjsCD5I8q5+NI9Tkk7SVcmaF40Ax1eAWhg=
 github.com/golang-migrate/migrate/v4 v4.12.2 h1:QI43Tlouiwpp2dK5Y767OouX0snJNRP/NubsVaArzDU=
 github.com/golang-migrate/migrate/v4 v4.12.2/go.mod h1:HQ1DaC8uLHkg4afY8ZQ8D/P5SG+YW9X5INZBVvm+d2k=
 github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
@@ -348,6 +366,9 @@ github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep
 github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE=
 github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
@@ -378,6 +399,7 @@ github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
 github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
 github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
@@ -492,7 +514,9 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0f
 github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
 github.com/jaegertracing/jaeger-lib v2.2.0+incompatible/go.mod h1:VqeqQrZmZr9G4WdLw4ei9tAHU54iJRkfoFHvTTQn4jQ=
 github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
+github.com/jlaffaye/ftp v0.0.0-20190624084859-c1312a7102bf/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY=
 github.com/jlaffaye/ftp v0.0.0-20200422224957-b9f3ade29122/go.mod h1:PwUeyujmhaGohgOf0kJKxPfk3HcRv8QD/wAUN44go4k=
+github.com/jlaffaye/ftp v0.0.0-20200715164256-5d10dd64f695/go.mod h1:2lmrmq866uF2tnje75wQHzmPXhmSWUt7Gyx2vgK1RCU=
 github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
@@ -522,6 +546,8 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.9.8/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
@@ -547,11 +573,13 @@ github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0U
 github.com/lopezator/migrator v0.2.0/go.mod h1:bpVAVPkWSvTw8ya2Pk7E/KiNAyDWNImgivQY79o8/8I=
 github.com/lopezator/migrator v0.3.0 h1:VW/rR+J8NYwPdkBxjrFdjwejpgvP59LbmANJxXuNbuk=
 github.com/lopezator/migrator v0.3.0/go.mod h1:bpVAVPkWSvTw8ya2Pk7E/KiNAyDWNImgivQY79o8/8I=
+github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4=
 github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
 github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
 github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI=
+github.com/markbates/pkger v0.17.0/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI=
 github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno=
 github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@@ -581,6 +609,8 @@ github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW
 github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/minio/minio-go/v6 v6.0.46/go.mod h1:qD0lajrGW49lKZLtXKtCB4X/qkMf0a5tBvN2PaZg7Gg=
+github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=
 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
 github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
 github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
@@ -609,6 +639,11 @@ github.com/moov-io/ach v1.4.0-rc1.0.20200601221243-548e8020ed0b/go.mod h1:NykiZm
 github.com/moov-io/ach v1.4.0/go.mod h1:NykiZmpbunOekMWxW4USJ7kkbCdOH2imRB/ZrjRcVOQ=
 github.com/moov-io/ach v1.4.4 h1:lNp/Acq2xhz3MmmlY8NTMJ3EagCT+xR9Ox3L8D5cgRI=
 github.com/moov-io/ach v1.4.4/go.mod h1:q0jS0WXzgLPlkKkbHSZN1yWyCUoDiSllWucHCfwDqGM=
+github.com/moov-io/authn v0.0.0-20200617215513-66004d37afbf/go.mod h1:V1B1hPjcF1qgt7SmDGwX1DKv7JdVUAaON7ToDVbaU0A=
+github.com/moov-io/authn v0.0.0-20200624134956-322faea3c757/go.mod h1:X5Cbe60BsdDXJIr8mwExQrc7giJdO3dCl0UXOHaEAHQ=
+github.com/moov-io/authn v0.0.0-20200709161736-a03007d9f67a/go.mod h1:6ojOGG2NjByRcs6lRXs47MOCasanEDS26CqA95tjlEw=
+github.com/moov-io/authn v0.2.1/go.mod h1:gQAzwEgTbMVTOZVT8c9Qn52HYSv8xVk2wHt288vLDSY=
+github.com/moov-io/authn v0.3.0/go.mod h1:0LUJtO6ByjseHLT4L0jI7juWiR/W9tS3WWsdgOGb5ug=
 github.com/moov-io/base v0.10.0/go.mod h1:pPu/TAc9PkaaegbREVEeDHsGqyAlvji9vqTuARuAnd0=
 github.com/moov-io/base v0.11.0/go.mod h1:jEkZukoSaJ4rDFoe00S5zuoLE+p3U3BEunSEPchgSbU=
 github.com/moov-io/base v0.11.1 h1:5qGfUr3eKWFmjttK2WllKgBg0Pnzx50+JBnRQQi8Gl0=
@@ -623,13 +658,31 @@ github.com/moov-io/customers v0.4.0-rc4/go.mod h1:wNz/qIiG24rJrjnK3VOvzj0MbdfGzn
 github.com/moov-io/customers v0.4.0-rc4.0.20200519011716-05c4c319c49b/go.mod h1:wmBTMaZ7OzoXhDtLqGngNrEaRlsk7VFLxY0kl3HzoHc=
 github.com/moov-io/customers v0.4.0-rc5.0.20200605165738-057f20d4d580/go.mod h1:2viqzwFr1cp5gXL9lhOIXl7KE1pDIA8Z4I5smZBRUSo=
 github.com/moov-io/customers v0.4.1/go.mod h1:YYpD3WdP4u6tujf7yE4vQ8o5apMDvPsbO7ai52UaPnA=
+github.com/moov-io/customers v0.5.0-rc4.0.20201013202949-f2a316c3b0fe/go.mod h1:BpcYZOYSojuQuhHdGcYnp4Myo401kB3bOkbODn0n12g=
 github.com/moov-io/fed v0.5.0/go.mod h1:dvWhJv0X7xYixKuJ9JnfVL+AHfG5YDmLRBxQkwJ0958=
 github.com/moov-io/fed v0.5.1 h1:ccxiWjpL9O20Q/7YnXbj8Sstbs82St2WqK55LR9Zhoc=
 github.com/moov-io/fed v0.5.1/go.mod h1:0OetA16WhCDqI7s7d/u2c2q+mn+IJeSzG8LFbnI63iw=
+github.com/moov-io/identity v0.0.0-20200616225744-0dba4de79fed/go.mod h1:8cp+tvEWLT4l5+KaYAm39a54/Eazk21x3+124QWm1cQ=
+github.com/moov-io/identity v0.0.0-20200617215100-dfd904ab610b/go.mod h1:knCJJiEPe0/yYmPe30LdKddeXZsUFk9TXPp7ynWXRP4=
+github.com/moov-io/identity v0.0.0-20200617222838-75f18c632b1b/go.mod h1:vht1EqhyPooW+PIrhryhmFG9sUbKKI8F9MmV/zaruWM=
+github.com/moov-io/identity v0.0.0-20200629175045-a9c82645ec0c/go.mod h1:1l0U9OBLjsYD66+L1wIBm/69vM2VnhxKK/MwSUS/8tI=
+github.com/moov-io/identity v0.1.1-0.20200715212009-1ee844d5d729/go.mod h1:QMOE24R2XH6jkMHD5WYifaDiYlgWcAEHsn+ob5lVFlE=
+github.com/moov-io/identity v0.2.3/go.mod h1:xKYtZYn6958RXNa+jCYR+qBwSezNIyV/9u1QC9fQeLg=
+github.com/moov-io/identity v0.2.7/go.mod h1:39dRdXj6eeIoR5zwAInHgLzTnLNo4IB9f+Gj/jos9jY=
 github.com/moov-io/ofac v0.12.0/go.mod h1:WEJCy1cN57rcaIBO63kHQyu/1eSEJNN7Rh1lSRgJ6s0=
 github.com/moov-io/paygate v0.8.0-rc6.0.20200520001659-d9ac068978be/go.mod h1:MelgQuJl86HfGYPRogj4OAM7EFA2xNb3eQxfr6nwIg8=
 github.com/moov-io/paygate v0.8.0 h1:BW0QZ3/ysaEIz/2IExVZR6DZJLouIY1iLnpueeteVPE=
 github.com/moov-io/paygate v0.8.0/go.mod h1:uILR/57ihGBfBx1+ltKtE29Q5zfUSE5XDwZtmgLu0H4=
+github.com/moov-io/paygate v0.9.0-dev1.0.20201022020358-75870ae7acfc h1:JHof9FYs4giqVfuMLiC+XLHIn7TTu+fyx0iNE9IdGi8=
+github.com/moov-io/paygate v0.9.0-dev1.0.20201022020358-75870ae7acfc/go.mod h1:mutrtSP2mUm22SeynlSr/DWcYXzc2NQgnk4zZmovnAQ=
+github.com/moov-io/tumbler v0.0.0-20200617212523-2a85ad22d0a9/go.mod h1:NmMeFW5pxs9+UXWRdykFOBq0vywh1s//VPzReT72W0s=
+github.com/moov-io/tumbler v0.0.0-20200617215154-5dcc2086b159/go.mod h1:DygEzjd1S/5WoTOYhDyP3tqXQNae/yRx4Vywy20oA9g=
+github.com/moov-io/tumbler v0.0.0-20200617223608-90d44979500f/go.mod h1:DygEzjd1S/5WoTOYhDyP3tqXQNae/yRx4Vywy20oA9g=
+github.com/moov-io/tumbler v0.0.0-20200624142544-e34edfe5e2b4/go.mod h1:yy5fEWtKoxxfh8KCewMHLJ+V1kWXEIPzFLt/h5zVTsc=
+github.com/moov-io/tumbler v0.0.0-20200702154909-c9a5dbdd4b59/go.mod h1:2oPTr8Ne5jVLFui5yGrP6K8bDFSfHALjtO9ZIQb+Phw=
+github.com/moov-io/tumbler v0.1.0/go.mod h1:2oPTr8Ne5jVLFui5yGrP6K8bDFSfHALjtO9ZIQb+Phw=
+github.com/moov-io/tumbler v0.2.1-0.20200729213046-363c03b59922/go.mod h1:jaDvgmeUed0m3+WFiBslkZyUbl/zLWb4iXtWNxpL7Ik=
+github.com/moov-io/tumbler v0.4.0/go.mod h1:XyEboLLJKOxIvvgUgjY3jdV+86VVMpJXjhVjPSksMgA=
 github.com/moov-io/watchman v0.14.0/go.mod h1:sZ3m3uL87WFImgS/SNDB0Sf0q9190HPyw94j0PUBV2A=
 github.com/moov-io/watchman v0.15.1 h1:pXgs+N8hkmdIMlLxP5BkVKjMeychj72omwpo2Y1eD5Q=
 github.com/moov-io/watchman v0.15.1/go.mod h1:DYvA7dSE94eztS5T8ppiD0plvRvZNQuAVR1nDOcVAwk=
@@ -647,6 +700,8 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE
 github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
 github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
 github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
+github.com/neo4j-drivers/gobolt v1.7.4/go.mod h1:O9AUbip4Dgre+CD3p40dnMD4a4r52QBIfblg5k7CTbE=
+github.com/neo4j/neo4j-go-driver v1.7.4/go.mod h1:aPO0vVr+WnhEJne+FgFjfsjzAnssPFLucHgGZ76Zb/U=
 github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI=
 github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
@@ -673,6 +728,7 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go
 github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
 github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
 github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
 github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
@@ -693,6 +749,8 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T
 github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
 github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw=
+github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
 github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
 github.com/pierrec/lz4 v1.0.1 h1:w6GMGWSsCI04fTM8wQRdnW74MuJISakuUU0onU0TYB4=
 github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
@@ -708,12 +766,14 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
+github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
 github.com/pkg/sftp v1.11.0/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
 github.com/plaid/plaid-go v0.0.0-20201008151351-db360ae03a8b h1:kh0W2Xs0TUDjuYAUbxqQNOx3zVBz4WrvOxnMeaPjK8o=
 github.com/plaid/plaid-go v0.0.0-20201008151351-db360ae03a8b/go.mod h1:c7cDT1Lkcr0AgKJGVIG+oCa07jOrrg4Um8nduQ1eQN0=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
 github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
@@ -759,6 +819,7 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
 github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
 github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/rickar/cal v1.0.1/go.mod h1:3GBx8OBrvh4/y/JTxM0e1bUUIHMnqILl1rMANHWExxQ=
 github.com/rickar/cal v1.0.5 h1:ccTH7okdpqbT+X7hlWgQM4Hv3rTvpV8Stu7enQx7ywY=
@@ -790,6 +851,8 @@ github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
+github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/snowflakedb/glog v0.0.0-20180824191149-f5055e6f21ce/go.mod h1:EB/w24pR5VKI60ecFnKqXzxX3dOorz1rnVicQTQrGM0=
@@ -799,19 +862,28 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ
 github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.3.2 h1:GDarE4TJQI52kYSbSAmLiId1Elfj+xgSDqrUZxFhxlU=
+github.com/spf13/afero v1.3.2/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
 github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
+github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
 github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
+github.com/square/go-jose v2.5.1+incompatible/go.mod h1:7MxpAF/1WTVUu8Am+T5kNy+t0902CaLWM4Z745MkOa8=
 github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
 github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -834,6 +906,7 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1
 github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
 github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
 github.com/uber/jaeger-client-go v2.23.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
 github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
 github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
@@ -884,10 +957,12 @@ gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI=
 gocloud.dev v0.20.0 h1:mbEKMfnyPV7W1Rj35R1xXfjszs9dXkwSOq2KoFr25g8=
 gocloud.dev v0.20.0/go.mod h1:+Y/RpSXrJthIOM8uFNzWp6MRu9pFPNFEEZrQMxpkfIc=
 gocloud.dev/pubsub/kafkapubsub v0.19.0/go.mod h1:tQgteR3gnYFlcU5riE/96KZkbB5UXUL6AweVJNJiW4k=
+gocloud.dev/pubsub/kafkapubsub v0.20.0/go.mod h1:pqTFZxM+LcuJyWwYi8V/b7AztXRt9YuH42Evb4BD5JY=
 gocloud.dev/secrets/hashivault v0.19.0/go.mod h1:doHlds85r+VwAs0T46bhjLwboWUfgfo3ovqDA8azNWo=
 gocloud.dev/secrets/hashivault v0.20.0 h1:919urzRWksXrZNNqqlHvek9IE6lWvYM4m8dvFqXq4HU=
 gocloud.dev/secrets/hashivault v0.20.0/go.mod h1:2nNlZ76i4JlT9qrPVKbINB01L8BGgv4wmq2Cqyz22dA=
 gocloud.dev/secrets/vault v0.15.0/go.mod h1:e4fxJocdhqd+lnNxqmxrjjl4pohRfy4z9zS4f2n1Mxg=
+goftp.io/server v0.4.0/go.mod h1:hFZeR656ErRt3ojMKt7H10vQ5nuWV1e0YeUTeorlR6k=
 golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -897,6 +972,7 @@ golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACk
 golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
 golang.org/x/crypto v0.0.0-20190422183909-d864b10871cd/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -905,11 +981,13 @@ golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPh
 golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200206161412-a0c6ece9d31a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI=
 golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -921,6 +999,7 @@ golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u0
 golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200213203834-85f925bdd4d0/go.mod h1:IX6Eufr4L0ErOUlzqX/aFlHqsiKZRbV42Kb69e9VsTE=
 golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -944,6 +1023,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -964,6 +1044,7 @@ golang.org/x/net v0.0.0-20190420063019-afa5a82059c6/go.mod h1:t9HGtf8HONx5eT2rtn
 golang.org/x/net v0.0.0-20190424112056-4829fb13d2c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -1049,6 +1130,7 @@ golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200121082415-34d275377bf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1124,10 +1206,12 @@ golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapK
 golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200128002243-345141a36859/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200213224642-88e652f7a869/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
@@ -1220,6 +1304,7 @@ google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvx
 google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
 google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
 google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200128133413-58ce757ed39b/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
 google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
 google.golang.org/genproto v0.0.0-20200205142000-a86caf926a67/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
 google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
@@ -1302,10 +1387,14 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
 gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
+gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
 gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww=
+gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo=
 gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q=
 gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4=
@@ -1342,6 +1431,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 modernc.org/b v1.0.0/go.mod h1:uZWcZfRj1BpYzfN9JTerzlNUnnPsV9O2ZA8JsRcubNg=
 modernc.org/db v1.0.0/go.mod h1:kYD/cO29L/29RM0hXYl4i3+Q5VojL31kTUVpVJDw0s8=
 modernc.org/file v1.0.0/go.mod h1:uqEokAEn1u6e+J45e54dsEA/pw4o7zLrA2GwyntZzjw=
diff --git a/pkg/accounts/micro_deposits.go b/pkg/accounts/micro_deposits.go
deleted file mode 100644
index 7a5220f..0000000
--- a/pkg/accounts/micro_deposits.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright 2020 The Moov Authors
-// Use of this source code is governed by an Apache License
-// license that can be found in the LICENSE file.
-
-package accounts
-
-import (
-	"errors"
-	"fmt"
-	"sort"
-	"strings"
-
-	"github.com/moov-io/paygate/pkg/client"
-
-	customerClient "github.com/moov-io/customers/pkg/client"
-	"github.com/moov-io/customers/pkg/paygate"
-)
-
-func handleMicroDepositValidation(repo Repository, paygateClient paygate.Client, accountID, customerID, userID string, microDeposits []string) error {
-	micro, err := paygateClient.GetMicroDeposits(accountID, userID)
-	if err != nil {
-		return fmt.Errorf("problem reading micro-deposits for accountID=%s: %v", accountID, err)
-	}
-
-	// If no micro-deposit was found then initiate them.
-	if micro == nil || micro.MicroDepositID == "" {
-		err = paygateClient.InitiateMicroDeposits(userID, client.Destination{
-			CustomerID: customerID,
-			AccountID:  accountID,
-		})
-		if err != nil {
-			return fmt.Errorf("problem initiating micro-deposits for acocuntID=%s: %v", accountID, err)
-		}
-		return nil
-	}
-
-	// If the micro-deposits have been processed then require amounts as we will only call
-	// handleMicroDepositValidation when the account needs to be VALIDATED still.
-	if strings.EqualFold(string(micro.Status), string(client.PROCESSED)) {
-		// Check the amounts in the request against what PayGate created
-		if err := validateAmounts(micro, microDeposits); err != nil {
-			return err
-		}
-		// Amounts validated, so mark the Account has approved
-		return repo.updateAccountStatus(accountID, customerClient.ACCOUNTSTATUS_VALIDATED)
-	}
-
-	return fmt.Errorf("microDepositID=%s is in status: %s", micro.MicroDepositID, micro.Status)
-}
-
-func validateAmounts(micro *client.MicroDeposits, requestAmounts []string) error {
-	if len(requestAmounts) == 0 {
-		return errors.New("missing micro-deposits for validation")
-	}
-	sort.Strings(requestAmounts)
-
-	requiredAmounts := micro.Amounts
-	sort.Strings(requiredAmounts)
-
-	if len(requestAmounts) != len(requiredAmounts) {
-		return fmt.Errorf("invalid number of micro-deposits, got %d", len(requestAmounts))
-	}
-	for i := range requestAmounts {
-		if requestAmounts[i] != requiredAmounts[i] {
-			return errors.New("incorrect micro-deposit")
-		}
-	}
-
-	return nil
-}
diff --git a/pkg/accounts/validate.go b/pkg/accounts/validate.go
index 2d01c1e..d881859 100644
--- a/pkg/accounts/validate.go
+++ b/pkg/accounts/validate.go
@@ -26,10 +26,6 @@ func getAccountValidation(logger log.Logger, accounts Repository, validations va
 		w = route.Responder(logger, w, r)
 
 		vars := mux.Vars(r)
-		// ASK do we need userID here and in methods below?
-		// with micro-deposits it's clear that we need to pass it
-		// to paygate. But
-		// userID := moovhttp.GetUserID(r)
 
 		customerID := vars["customerID"]
 		accountID := vars["accountID"]
@@ -67,10 +63,14 @@ func initAccountValidation(logger log.Logger, accounts Repository, validations v
 		w = route.Responder(logger, w, r)
 
 		vars := mux.Vars(r)
-		userID := moovhttp.GetUserID(r)
 		customerID := vars["customerID"]
 		accountID := vars["accountID"]
 
+		organization := route.GetOrganization(w, r)
+		if organization == "" {
+			return
+		}
+
 		account, err := accounts.getCustomerAccount(customerID, accountID)
 		if err != nil {
 			moovhttp.Problem(w, err)
@@ -120,7 +120,7 @@ func initAccountValidation(logger log.Logger, accounts Repository, validations v
 		}
 
 		// execute strategy and get vendor response
-		vendorResponse, err := strategy.InitAccountValidation(userID, accountID, customerID)
+		vendorResponse, err := strategy.InitAccountValidation(organization, accountID, customerID)
 		if err != nil {
 			moovhttp.Problem(w, err)
 			return
@@ -148,11 +148,15 @@ func completeAccountValidation(logger log.Logger, repo Repository, validations v
 		w = route.Responder(logger, w, r)
 
 		vars := mux.Vars(r)
-		userID := moovhttp.GetUserID(r)
 		customerID := vars["customerID"]
 		accountID := vars["accountID"]
 		validationID := vars["validationID"]
 
+		organization := route.GetOrganization(w, r)
+		if organization == "" {
+			return
+		}
+
 		account, err := repo.getCustomerAccount(customerID, accountID)
 		if err != nil {
 			moovhttp.Problem(w, err)
@@ -193,9 +197,6 @@ func completeAccountValidation(logger log.Logger, repo Repository, validations v
 			return
 		}
 
-		// get organization
-		organization := route.GetOrganization(w, r)
-
 		// grab encrypted account number
 		encrypted, err := repo.getEncryptedAccountNumber(organization, customerID, accountID)
 		if err != nil {
@@ -211,7 +212,7 @@ func completeAccountValidation(logger log.Logger, repo Repository, validations v
 		}
 
 		vendorRequest := validator.VendorRequest(req.VendorRequest)
-		vendorResponse, err := strategy.CompleteAccountValidation(userID, customerID, account, accountNumber, &vendorRequest)
+		vendorResponse, err := strategy.CompleteAccountValidation(organization, customerID, account, accountNumber, &vendorRequest)
 		if err != nil {
 			moovhttp.Problem(w, err)
 			return
diff --git a/pkg/client/README.md b/pkg/client/README.md
index 317bfbb..36d74ec 100644
--- a/pkg/client/README.md
+++ b/pkg/client/README.md
@@ -82,6 +82,7 @@ Class | Method | HTTP request | Description
  - [AccountType](docs/AccountType.md)
  - [AccountValidationResponse](docs/AccountValidationResponse.md)
  - [AddressType](docs/AddressType.md)
+ - [Amount](docs/Amount.md)
  - [CompleteAccountValidationRequest](docs/CompleteAccountValidationRequest.md)
  - [CompleteAccountValidationResponse](docs/CompleteAccountValidationResponse.md)
  - [CreateAccount](docs/CreateAccount.md)
@@ -119,6 +120,3 @@ Class | Method | HTTP request | Description
 
 
 ## Author
-
-
-
diff --git a/pkg/client/api/openapi.yaml b/pkg/client/api/openapi.yaml
index 2a1f305..f8bfe9b 100644
--- a/pkg/client/api/openapi.yaml
+++ b/pkg/client/api/openapi.yaml
@@ -2502,12 +2502,8 @@ components:
           example: micro-deposits
           type: string
         micro-deposits:
-          description: Amounts used to validate the account is owned by the customer.
-          example:
-          - USD 0.01
-          - USD 0.13
           items:
-            type: string
+            $ref: '#/components/schemas/Amount'
           type: array
       required:
       - strategy
@@ -2862,3 +2858,17 @@ components:
           type: string
       required:
       - error
+    Amount:
+      properties:
+        currency:
+          description: A 3-letter ISO 4217 currency code
+          example: USD
+          type: string
+        value:
+          description: Quantity in the smallest unit of the specified currency. In
+            USD this is cents, so $12.04 is 1204 and $0.99 would be 99.
+          example: 1204
+          type: integer
+      required:
+      - currency
+      - value
diff --git a/pkg/client/docs/Amount.md b/pkg/client/docs/Amount.md
new file mode 100644
index 0000000..30a5345
--- /dev/null
+++ b/pkg/client/docs/Amount.md
@@ -0,0 +1,12 @@
+# Amount
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Currency** | **string** | A 3-letter ISO 4217 currency code | 
+**Value** | **int32** | Quantity in the smallest unit of the specified currency. In USD this is cents, so $12.04 is 1204 and $0.99 would be 99. | 
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
+
diff --git a/pkg/client/docs/UpdateValidation.md b/pkg/client/docs/UpdateValidation.md
index 9c27eb5..833fed8 100644
--- a/pkg/client/docs/UpdateValidation.md
+++ b/pkg/client/docs/UpdateValidation.md
@@ -5,7 +5,7 @@
 Name | Type | Description | Notes
 ------------ | ------------- | ------------- | -------------
 **Strategy** | **string** | Validation strategy to use for the account.  micro-deposits:   Initiate two small credits to the account along with a later balancing debit. Only provide amounts to attempt validation.  | 
-**MicroDeposits** | **[]string** | Amounts used to validate the account is owned by the customer. | [optional] 
+**MicroDeposits** | [**[]Amount**](Amount.md) |  | [optional] 
 
 [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 
diff --git a/pkg/client/model_amount.go b/pkg/client/model_amount.go
new file mode 100644
index 0000000..dd28dd4
--- /dev/null
+++ b/pkg/client/model_amount.go
@@ -0,0 +1,18 @@
+/*
+ * Customers API
+ *
+ * Customers focuses on solving authentic identification of humans who are legally able to hold and transfer currency within the US. Primarily this project solves [Know Your Customer](https://en.wikipedia.org/wiki/Know_your_customer) (KYC), [Customer Identification Program](https://en.wikipedia.org/wiki/Customer_Identification_Program) (CIP), [Office of Foreign Asset Control](https://www.treasury.gov/about/organizational-structure/offices/Pages/Office-of-Foreign-Assets-Control.aspx) (OFAC) checks and verification workflows to comply with US federal law and ensure authentic transfers. Customers has an objective to be a service for detailed due diligence on individuals and companies for Financial Institutions and services in a modernized and extensible way.  Customer phone numbers and addresses are stored and partially used in KYC/OFAC validation. Arbitrary key/value pairs can be stored for a Customer. Documents and Disclaimers, and their acknowledgement are also stored under a Customer as they're accepted. Bank Accounts, which can be validated with micro-deposits currently, are stored under each Customer.  ![](https://raw.githubusercontent.com/adamdecaf/customers/create-accounts/docs/images/customer.png)
+ *
+ * API version: v1
+ * Generated by: OpenAPI Generator (https://openapi-generator.tech)
+ */
+
+package client
+
+// Amount struct for Amount
+type Amount struct {
+	// A 3-letter ISO 4217 currency code
+	Currency string `json:"currency"`
+	// Quantity in the smallest unit of the specified currency. In USD this is cents, so $12.04 is 1204 and $0.99 would be 99.
+	Value int32 `json:"value"`
+}
diff --git a/pkg/client/model_update_validation.go b/pkg/client/model_update_validation.go
index f63de2b..f74cef8 100644
--- a/pkg/client/model_update_validation.go
+++ b/pkg/client/model_update_validation.go
@@ -12,7 +12,6 @@ package client
 // UpdateValidation struct for UpdateValidation
 type UpdateValidation struct {
 	// Validation strategy to use for the account.  micro-deposits:   Initiate two small credits to the account along with a later balancing debit. Only provide amounts to attempt validation.
-	Strategy string `json:"strategy"`
-	// Amounts used to validate the account is owned by the customer.
-	MicroDeposits []string `json:"micro-deposits,omitempty"`
+	Strategy      string   `json:"strategy"`
+	MicroDeposits []Amount `json:"micro-deposits,omitempty"`
 }
diff --git a/pkg/paygate/client.go b/pkg/paygate/client.go
index ae305ec..ed198cb 100644
--- a/pkg/paygate/client.go
+++ b/pkg/paygate/client.go
@@ -22,8 +22,8 @@ import (
 type Client interface {
 	Ping() error
 
-	GetMicroDeposits(accountID, userID string) (*client.MicroDeposits, error)
-	InitiateMicroDeposits(userID string, destination client.Destination) error
+	GetMicroDeposits(accountID, organization string) (*client.MicroDeposits, error)
+	InitiateMicroDeposits(organization string, destination client.Destination) error
 }
 
 type moovClient struct {
@@ -60,11 +60,11 @@ func sqlNoRows(err error) error {
 	return err
 }
 
-func (c *moovClient) GetMicroDeposits(accountID, userID string) (*client.MicroDeposits, error) {
+func (c *moovClient) GetMicroDeposits(accountID, organization string) (*client.MicroDeposits, error) {
 	ctx, cancelFn := context.WithTimeout(context.TODO(), 10*time.Second)
 	defer cancelFn()
 
-	micro, resp, err := c.underlying.ValidationApi.GetAccountMicroDeposits(ctx, accountID, userID)
+	micro, resp, err := c.underlying.ValidationApi.GetAccountMicroDeposits(ctx, accountID, organization)
 	if resp != nil && resp.Body != nil {
 		resp.Body.Close()
 	}
@@ -81,11 +81,11 @@ func (c *moovClient) GetMicroDeposits(accountID, userID string) (*client.MicroDe
 	return &micro, nil
 }
 
-func (c *moovClient) InitiateMicroDeposits(userID string, destination client.Destination) error {
+func (c *moovClient) InitiateMicroDeposits(organization string, destination client.Destination) error {
 	ctx, cancelFn := context.WithTimeout(context.TODO(), 10*time.Second)
 	defer cancelFn()
 
-	micro, resp, err := c.underlying.ValidationApi.InitiateMicroDeposits(ctx, userID, client.CreateMicroDeposits{
+	micro, resp, err := c.underlying.ValidationApi.InitiateMicroDeposits(ctx, organization, client.CreateMicroDeposits{
 		Destination: destination,
 	})
 	if resp != nil && resp.Body != nil {
diff --git a/pkg/paygate/mock_client.go b/pkg/paygate/mock_client.go
index fdf7f1a..7979c03 100644
--- a/pkg/paygate/mock_client.go
+++ b/pkg/paygate/mock_client.go
@@ -17,13 +17,13 @@ func (c *MockClient) Ping() error {
 	return c.Err
 }
 
-func (c *MockClient) GetMicroDeposits(accountID, userID string) (*client.MicroDeposits, error) {
+func (c *MockClient) GetMicroDeposits(accountID, organization string) (*client.MicroDeposits, error) {
 	if c.Err != nil {
 		return nil, c.Err
 	}
 	return c.Micro, nil
 }
 
-func (c *MockClient) InitiateMicroDeposits(userID string, destination client.Destination) error {
+func (c *MockClient) InitiateMicroDeposits(organization string, destination client.Destination) error {
 	return c.Err
 }
diff --git a/pkg/reports/router.go b/pkg/reports/router.go
index e229f1c..320c6ac 100644
--- a/pkg/reports/router.go
+++ b/pkg/reports/router.go
@@ -75,12 +75,11 @@ func getCustomerAccounts(
 			})
 		}
 
-		err = json.NewEncoder(w).Encode(results)
-		if err != nil {
+		w.Header().Set("Content-Type", "application/json; charset=utf-8")
+		w.WriteHeader(http.StatusOK)
+		if err := json.NewEncoder(w).Encode(results); err != nil {
 			moovhttp.Problem(w, err)
 			return
 		}
-		w.Header().Set("Content-Type", "application/json; charset=utf-8")
-		w.WriteHeader(http.StatusOK)
 	}
 }
diff --git a/pkg/validator/microdeposits/strategy.go b/pkg/validator/microdeposits/strategy.go
index 43c48f7..78acca5 100644
--- a/pkg/validator/microdeposits/strategy.go
+++ b/pkg/validator/microdeposits/strategy.go
@@ -7,7 +7,6 @@ package microdeposits
 import (
 	"errors"
 	"fmt"
-	"sort"
 	"strings"
 
 	"github.com/mitchellh/mapstructure"
@@ -17,6 +16,10 @@ import (
 	"github.com/moov-io/paygate/pkg/client"
 )
 
+var (
+	errInvalidMicroDeposit = errors.New("incorrect micro-deposit")
+)
+
 type microdepositsStrategy struct {
 	client paygate.Client
 }
@@ -27,8 +30,8 @@ func NewStrategy(paygateClient paygate.Client) validator.Strategy {
 	}
 }
 
-func (t *microdepositsStrategy) InitAccountValidation(userID, accountID, customerID string) (*validator.VendorResponse, error) {
-	micro, err := t.client.GetMicroDeposits(accountID, userID)
+func (t *microdepositsStrategy) InitAccountValidation(organization, accountID, customerID string) (*validator.VendorResponse, error) {
+	micro, err := t.client.GetMicroDeposits(accountID, organization)
 	if err != nil {
 		return nil, fmt.Errorf("problem reading micro-deposits for accountID=%s: %v", accountID, err)
 	}
@@ -37,12 +40,12 @@ func (t *microdepositsStrategy) InitAccountValidation(userID, accountID, custome
 		return nil, fmt.Errorf("micro-deposits were already created for accountID=%s", accountID)
 	}
 
-	err = t.client.InitiateMicroDeposits(userID, client.Destination{
+	err = t.client.InitiateMicroDeposits(organization, client.Destination{
 		CustomerID: customerID,
 		AccountID:  accountID,
 	})
 	if err != nil {
-		return nil, fmt.Errorf("problem initiating micro-deposits for accountID=%s: %v", accountID, err)
+		return nil, fmt.Errorf("validator: problem initiating micro-deposits for accountID=%s: %v", accountID, err)
 	}
 
 	return &validator.VendorResponse{
@@ -51,11 +54,11 @@ func (t *microdepositsStrategy) InitAccountValidation(userID, accountID, custome
 }
 
 type completeAccountValidationRequest struct {
-	MicroDeposits []string `json:"micro-deposits,omitempty" mapstructure:"micro-deposits"`
+	MicroDeposits []client.Amount `json:"micro-deposits" mapstructure:"micro-deposits"`
 }
 
-func (t *microdepositsStrategy) CompleteAccountValidation(userID, customerID string, account *customersclient.Account, accountID string, request *validator.VendorRequest) (*validator.VendorResponse, error) {
-	micro, err := t.client.GetMicroDeposits(accountID, userID)
+func (t *microdepositsStrategy) CompleteAccountValidation(organization, customerID string, account *customersclient.Account, accountID string, request *validator.VendorRequest) (*validator.VendorResponse, error) {
+	micro, err := t.client.GetMicroDeposits(accountID, organization)
 	if err != nil {
 		return nil, fmt.Errorf("problem reading micro-deposits for accountID=%s: %v", accountID, err)
 	}
@@ -86,23 +89,29 @@ func (t *microdepositsStrategy) CompleteAccountValidation(userID, customerID str
 	return nil, fmt.Errorf("microDepositID=%s is in status: %s but expected to be in %s", micro.MicroDepositID, micro.Status, client.PROCESSED)
 }
 
-func validateAmounts(micro *client.MicroDeposits, requestAmounts []string) error {
+func validateAmounts(micro *client.MicroDeposits, requestAmounts []client.Amount) error {
 	if len(requestAmounts) == 0 {
 		return errors.New("missing micro-deposits for validation")
 	}
-	sort.Strings(requestAmounts)
 
 	requiredAmounts := micro.Amounts
-	sort.Strings(requiredAmounts)
-
 	if len(requestAmounts) != len(requiredAmounts) {
 		return fmt.Errorf("invalid number of micro-deposits, got %d", len(requestAmounts))
 	}
+
+	matched := 0
 	for i := range requestAmounts {
-		if requestAmounts[i] != requiredAmounts[i] {
-			return errors.New("incorrect micro-deposit")
+		for j := range requiredAmounts {
+			if (requestAmounts[i].Currency == requiredAmounts[j].Currency) && (requestAmounts[i].Value == requiredAmounts[j].Value) {
+				// micro-deposit matched, so check the next
+				matched++
+				break
+			}
 		}
 	}
 
-	return nil
+	if matched > 0 && matched == len(requiredAmounts) {
+		return nil
+	}
+	return errInvalidMicroDeposit
 }
diff --git a/version.go b/version.go
index deae9ad..f148208 100644
--- a/version.go
+++ b/version.go
@@ -5,4 +5,4 @@
 package customers
 
 // Version number
-const Version = "v0.5.0-dev28"
+const Version = "v0.5.0-dev31"


Test patch:
diff --git a/pkg/accounts/micro_deposits_test.go b/pkg/accounts/micro_deposits_test.go
deleted file mode 100644
index 7f4cac5..0000000
--- a/pkg/accounts/micro_deposits_test.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2020 The Moov Authors
-// Use of this source code is governed by an Apache License
-// license that can be found in the LICENSE file.
-
-package accounts
-
-import (
-	"errors"
-	"strings"
-	"testing"
-
-	"github.com/moov-io/base"
-	"github.com/moov-io/customers/pkg/paygate"
-	"github.com/moov-io/paygate/pkg/client"
-)
-
-func TestAccounts__handleMicroDepositValidation(t *testing.T) {
-	repo := &mockRepository{}
-	paygateClient := &paygate.MockClient{}
-
-	accountID := base.ID()
-	customerID := base.ID()
-	userID := base.ID()
-
-	var requestAmounts []string
-
-	// initiate micro-deposits
-	err := handleMicroDepositValidation(repo, paygateClient, accountID, customerID, userID, requestAmounts)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	// validate amounts
-	requestAmounts = []string{"USD 0.04", "USD 0.09"}
-	paygateClient.Micro = &client.MicroDeposits{
-		MicroDepositID: base.ID(),
-		Amounts:        requestAmounts,
-		Status:         client.PROCESSED,
-	}
-	err = handleMicroDepositValidation(repo, paygateClient, accountID, customerID, userID, requestAmounts)
-	if err != nil {
-		t.Fatal(err)
-	}
-}
-
-func TestAccounts__RejectPendingMicroDeposits(t *testing.T) {
-	repo := &mockRepository{}
-
-	accountID, customerID := base.ID(), base.ID()
-	userID := base.ID()
-
-	requestAmounts := []string{"USD 0.04", "USD 0.09"}
-	paygateClient := &paygate.MockClient{
-		Micro: &client.MicroDeposits{
-			MicroDepositID: base.ID(),
-			Amounts:        requestAmounts,
-			Status:         client.PENDING,
-		},
-	}
-
-	// initiate micro-deposits
-	err := handleMicroDepositValidation(repo, paygateClient, accountID, customerID, userID, requestAmounts)
-	if err == nil {
-		t.Fatal("expected error")
-	}
-	if !strings.Contains(err.Error(), "is in status: pending") {
-		t.Fatal(err)
-	}
-}
-
-func TestAccounts__handleMicroDepositValidationErr(t *testing.T) {
-	repo := &mockRepository{}
-	paygateClient := &paygate.MockClient{
-		Err: errors.New("bad error"),
-	}
-
-	if err := handleMicroDepositValidation(repo, paygateClient, "", "", "", nil); err == nil {
-		t.Error("expected error")
-	}
-}
-
-func TestAccounts__validateAmounts(t *testing.T) {
-	micro := &client.MicroDeposits{
-		Amounts: []string{"USD 0.04", "USD 0.09"},
-	}
-	requestAmounts := []string{"USD 0.04", "USD 0.09"}
-
-	if err := validateAmounts(micro, requestAmounts); err != nil {
-		t.Error(err)
-	}
-
-	requestAmounts = []string{"USD 0.04"}
-	if err := validateAmounts(micro, requestAmounts); err != nil {
-		if !strings.Contains(err.Error(), "invalid number of micro-deposits") {
-			t.Error(err)
-		}
-	}
-
-	requestAmounts = []string{"USD 0.04", "USD 0.07"}
-	if err := validateAmounts(micro, requestAmounts); err != nil {
-		if !strings.Contains(err.Error(), "incorrect micro-deposit") {
-			t.Error(err)
-		}
-	}
-}
-
-func TestAccounts__validateAmountsErr(t *testing.T) {
-	if err := validateAmounts(nil, nil); err == nil {
-		t.Error("expected error")
-	}
-
-	micro := &client.MicroDeposits{
-		Amounts: []string{"USD 0.04"},
-	}
-	if err := validateAmounts(micro, nil); err == nil {
-		t.Error("expected error")
-	}
-}
diff --git a/pkg/accounts/router_test.go b/pkg/accounts/router_test.go
index c6305d1..130355b 100644
--- a/pkg/accounts/router_test.go
+++ b/pkg/accounts/router_test.go
@@ -413,6 +413,7 @@ func httpInitAccountValidation(t *testing.T, handler *mux.Router, customerID, ac
 
 	w := httptest.NewRecorder()
 	req := httptest.NewRequest("POST", fmt.Sprintf("/customers/%s/accounts/%s/validations", customerID, accountID), body)
+	req.Header.Set("X-Organization", "moov")
 	handler.ServeHTTP(w, req)
 	w.Flush()
 
@@ -502,6 +503,7 @@ func httpDecryptAccountNumber(t *testing.T, handler *mux.Router, customerID, acc
 func httpReadAccountOfacSearch(t *testing.T, handler *mux.Router, customerID, accountID string) *client.OfacSearch {
 	w := httptest.NewRecorder()
 	req := httptest.NewRequest("GET", fmt.Sprintf("/customers/%s/accounts/%s/ofac", customerID, accountID), nil)
+	req.Header.Set("X-Organization", "moov")
 	handler.ServeHTTP(w, req)
 	w.Flush()
 
@@ -519,6 +521,7 @@ func httpReadAccountOfacSearch(t *testing.T, handler *mux.Router, customerID, ac
 func httpRefreshAccountOfac(t *testing.T, handler *mux.Router, customerID, accountID string) *client.OfacSearch {
 	w := httptest.NewRecorder()
 	req := httptest.NewRequest("PUT", fmt.Sprintf("/customers/%s/accounts/%s/refresh/ofac", customerID, accountID), nil)
+	req.Header.Set("X-Organization", "moov")
 	handler.ServeHTTP(w, req)
 	w.Flush()
 
diff --git a/pkg/accounts/validate_test.go b/pkg/accounts/validate_test.go
index 756f2db..3f1656c 100644
--- a/pkg/accounts/validate_test.go
+++ b/pkg/accounts/validate_test.go
@@ -77,6 +77,7 @@ func TestRouter__AccountValidation(t *testing.T) {
 		req, err := http.NewRequest("GET", "/", nil)
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
+		req.Header.Set("X-Organization", organization)
 		req = mux.SetURLVars(req, map[string]string{
 			"customerID":   customerID,
 			"accountID":    acc.AccountID,
@@ -100,6 +101,7 @@ func TestRouter__AccountValidation(t *testing.T) {
 
 func TestRouter__InitAccountValidation(t *testing.T) {
 	customerID, userID := base.ID(), base.ID()
+	organization := "moov"
 	accounts := setupTestAccountRepository(t)
 	validations := &validator.MockRepository{}
 
@@ -137,6 +139,7 @@ func TestRouter__InitAccountValidation(t *testing.T) {
 
 		w := httptest.NewRecorder()
 		req, err := http.NewRequest("POST", "/", body)
+		req.Header.Set("X-Organization", organization)
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
 		req = mux.SetURLVars(req, map[string]string{"customerID": customerID, "accountID": acc.AccountID})
@@ -160,6 +163,7 @@ func TestRouter__InitAccountValidation(t *testing.T) {
 
 		w := httptest.NewRecorder()
 		req, err := http.NewRequest("POST", "/", body)
+		req.Header.Set("X-Organization", organization)
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
 		req = mux.SetURLVars(req, map[string]string{"customerID": customerID, "accountID": acc.AccountID})
@@ -183,6 +187,7 @@ func TestRouter__InitAccountValidation(t *testing.T) {
 
 		w := httptest.NewRecorder()
 		req, err := http.NewRequest("POST", "/", body)
+		req.Header.Set("X-Organization", organization)
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
 		req = mux.SetURLVars(req, map[string]string{"customerID": customerID, "accountID": acc.AccountID})
@@ -236,6 +241,7 @@ func TestRouter__InitAccountValidation(t *testing.T) {
 
 		w := httptest.NewRecorder()
 		req, err := http.NewRequest("POST", "/", body)
+		req.Header.Set("X-Organization", organization)
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
 		req = mux.SetURLVars(req, map[string]string{"customerID": customerID, "accountID": acc.AccountID})
@@ -292,6 +298,7 @@ func TestRouter__CompleteAccountValidation(t *testing.T) {
 		req, err := http.NewRequest("POST", "/", body)
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
+		req.Header.Set("X-Organization", organization)
 		req = mux.SetURLVars(req, map[string]string{
 			"customerID":   customerID,
 			"accountID":    acc.AccountID,
@@ -310,6 +317,7 @@ func TestRouter__CompleteAccountValidation(t *testing.T) {
 		req, err := http.NewRequest("POST", "/", bytes.NewReader([]byte("{}")))
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
+		req.Header.Set("X-Organization", organization)
 		req = mux.SetURLVars(req, map[string]string{
 			"customerID":   customerID,
 			"accountID":    acc.AccountID,
@@ -340,6 +348,7 @@ func TestRouter__CompleteAccountValidation(t *testing.T) {
 		req, err := http.NewRequest("POST", "/", bytes.NewReader([]byte("{}")))
 		require.NoError(t, err)
 		req.Header.Set("Content-Type", "application/json")
+		req.Header.Set("X-Organization", organization)
 		req = mux.SetURLVars(req, map[string]string{
 			"customerID":   customerID,
 			"accountID":    acc.AccountID,
@@ -462,8 +471,11 @@ func TestRouter__CompleteAccountValidation(t *testing.T) {
 		paygateClient := &paygate.MockClient{
 			Micro: &payclient.MicroDeposits{
 				MicroDepositID: base.ID(),
-				Amounts:        []string{"USD 0.03", "USD 0.07"},
-				Status:         payclient.PROCESSED,
+				Amounts: []payclient.Amount{
+					{Currency: "USD", Value: 3},
+					{Currency: "USD", Value: 7},
+				},
+				Status: payclient.PROCESSED,
 			},
 		}
 
@@ -486,7 +498,10 @@ func TestRouter__CompleteAccountValidation(t *testing.T) {
 		// build request with strategy params
 		params := &client.CompleteAccountValidationRequest{
 			VendorRequest: validator.VendorRequest{
-				"micro-deposits": []string{"USD 0.03", "USD 0.07"},
+				"micro-deposits": []payclient.Amount{
+					{Currency: "USD", Value: 3},
+					{Currency: "USD", Value: 7},
+				},
 			},
 		}
 
diff --git a/pkg/paygate/client_test.go b/pkg/paygate/client_test.go
index 47b672f..3c8c3c1 100644
--- a/pkg/paygate/client_test.go
+++ b/pkg/paygate/client_test.go
@@ -21,9 +21,6 @@ import (
 	"gopkg.in/yaml.v2"
 )
 
-// GetMicroDeposits(accountID, userID string) (*client.MicroDeposits, error)
-// InitiateMicroDeposits(userID string, destination client.Destination) error
-
 type deployment struct {
 	res    *dockertest.Resource
 	client Client
diff --git a/pkg/validator/microdeposits/strategy_test.go b/pkg/validator/microdeposits/strategy_test.go
index 054cbb0..ecf129d 100644
--- a/pkg/validator/microdeposits/strategy_test.go
+++ b/pkg/validator/microdeposits/strategy_test.go
@@ -21,7 +21,7 @@ func TestInitAccountValidation(t *testing.T) {
 		paygateClient := &paygate.MockClient{}
 		strategy := NewStrategy(paygateClient)
 
-		response, err := strategy.InitAccountValidation("userID", "accountID", "customerID")
+		response, err := strategy.InitAccountValidation("moov", "accountID", "customerID")
 		require.NoError(t, err)
 		require.Equal(t, &validator.VendorResponse{"result": "initiated"}, response)
 	})
@@ -30,12 +30,15 @@ func TestInitAccountValidation(t *testing.T) {
 		paygateClient := &paygate.MockClient{
 			Micro: &payclient.MicroDeposits{
 				MicroDepositID: base.ID(),
-				Amounts:        []string{"USD 0.03", "USD 0.07"},
-				Status:         payclient.PROCESSED,
+				Amounts: []payclient.Amount{
+					{Currency: "USD", Value: 3},
+					{Currency: "USD", Value: 7},
+				},
+				Status: payclient.PROCESSED,
 			},
 		}
 		strategy := NewStrategy(paygateClient)
-		_, err := strategy.InitAccountValidation("userID", "accountID", "customerID")
+		_, err := strategy.InitAccountValidation("moov", "accountID", "customerID")
 		require.Error(t, err, "micro-deposits were already created for accountID=accountID")
 	})
 }
@@ -44,15 +47,21 @@ func TestCompleteAccountValidation(t *testing.T) {
 	paygateClient := &paygate.MockClient{
 		Micro: &payclient.MicroDeposits{
 			MicroDepositID: base.ID(),
-			Amounts:        []string{"USD 0.03", "USD 0.07"},
-			Status:         payclient.PROCESSED,
+			Amounts: []payclient.Amount{
+				{Currency: "USD", Value: 3},
+				{Currency: "USD", Value: 7},
+			},
+			Status: payclient.PROCESSED,
 		},
 	}
 	strategy := NewStrategy(paygateClient)
 
 	// test successful completion
 	request := &validator.VendorRequest{
-		"micro-deposits": []string{"USD 0.03", "USD 0.07"},
+		"micro-deposits": []payclient.Amount{
+			{Currency: "USD", Value: 3},
+			{Currency: "USD", Value: 7},
+		},
 	}
 
 	account := &client.Account{
@@ -64,7 +73,7 @@ func TestCompleteAccountValidation(t *testing.T) {
 	t.Run("Test when micro-deposits were processed", func(t *testing.T) {
 		paygateClient.Micro.Status = payclient.PROCESSED
 
-		response, err := strategy.CompleteAccountValidation("userID", "customerID", account, accountNumber, request)
+		response, err := strategy.CompleteAccountValidation("moov", "customerID", account, accountNumber, request)
 		require.NoError(t, err)
 		require.Equal(t, &validator.VendorResponse{"result": "validated"}, response)
 	})
@@ -72,8 +81,69 @@ func TestCompleteAccountValidation(t *testing.T) {
 	t.Run("Test when micro-deposits status in not processed", func(t *testing.T) {
 		paygateClient.Micro.Status = payclient.PENDING
 
-		_, err := strategy.CompleteAccountValidation("userID", "customerID", account, accountNumber, request)
+		_, err := strategy.CompleteAccountValidation("moov", "customerID", account, accountNumber, request)
 		require.Error(t, err)
 		require.Contains(t, err.Error(), "is in status: pending but expected to be in processed")
 	})
 }
+
+func TestValidateAmountsErr(t *testing.T) {
+	micro := &payclient.MicroDeposits{
+		MicroDepositID: base.ID(),
+		Amounts: []payclient.Amount{
+			{Currency: "USD", Value: 3},
+			{Currency: "USD", Value: 7},
+		},
+		Status: payclient.PROCESSED,
+	}
+	requestAmounts := []payclient.Amount{
+		{Currency: "GBP", Value: 1},
+	}
+
+	if err := validateAmounts(micro, nil); err == nil {
+		t.Error(err)
+	}
+
+	if err := validateAmounts(micro, requestAmounts); err == nil {
+		t.Error(err)
+	}
+
+	requestAmounts = append(requestAmounts, payclient.Amount{Currency: "USD", Value: 3})
+	if err := validateAmounts(micro, requestAmounts); err != errInvalidMicroDeposit {
+		t.Error(err)
+	}
+
+	requestAmounts = []payclient.Amount{
+		{Currency: "USD", Value: 3},
+		{Currency: "USD", Value: 8}, // invalid
+	}
+	if err := validateAmounts(micro, requestAmounts); err == nil {
+		t.Error(err)
+	}
+
+	micro.Amounts = []payclient.Amount{
+		{Currency: "USD", Value: 3},
+	}
+	if err := validateAmounts(micro, requestAmounts); err == nil {
+		t.Error(err)
+	}
+}
+
+func TestValidateAmounts(t *testing.T) {
+	micro := &payclient.MicroDeposits{
+		MicroDepositID: base.ID(),
+		Amounts: []payclient.Amount{
+			{Currency: "USD", Value: 3},
+			{Currency: "USD", Value: 7},
+		},
+		Status: payclient.PROCESSED,
+	}
+	requestAmounts := []payclient.Amount{
+		{Currency: "USD", Value: 3},
+		{Currency: "USD", Value: 7},
+	}
+
+	if err := validateAmounts(micro, requestAmounts); err != nil {
+		t.Error(err)
+	}
+}