diff --git a/horizon.dhall b/horizon.dhall
index 78020ae37be15f6b6f9384805543bdfa5aa8c67c..35a3e6ee018d6956d67c03f00c5013f3621da2dd 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -389,6 +389,7 @@ let packages =
       , hls-retrie-plugin = H.callHackage "hls-retrie-plugin" "2.4.0.0"
       , hls-splice-plugin = H.callHackage "hls-splice-plugin" "2.4.0.0"
       , hls-test-utils = H.callHackage "hls-test-utils" "2.4.0.0"
+      , hoauth2 = H.callHackage "hoauth2" "2.10.0"
       , hosc = H.callHackage "hosc" "0.20"
       , hp2pretty = H.callHackage "hp2pretty" "0.10"
       , hslogger = H.callHackage "hslogger" "1.3.1.0"
@@ -823,6 +824,7 @@ let packages =
       , unix-bytestring = H.callHackage "unix-bytestring" "0.4.0"
       , unix-memory = H.callHackage "unix-memory" "0.1.2"
       , uri-bytestring = H.callHackage "uri-bytestring" "0.3.3.1"
+      , uri-bytestring-aeson = H.callHackage "uri-bytestring-aeson" "0.1.0.8"
       , url-slug = H.callHackage "url-slug" "0.1.0.0"
       , uuid = H.callHackage "uuid" "1.3.15"
       , validation = H.callHackage "validation" "1.1.3"
diff --git a/horizon.lock b/horizon.lock
index e4646d94599c8ebb552067f139930f43ca0a1ab1..c67c7adaedc33fb4038ac113973bcfc2e7ca2885 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -1214,6 +1214,10 @@
   , mapValue =
       "736b6e8bd716787854b17ee1cf070ca2bf7c7d5829e950c6be1878db3f11e431"
   }
+, { mapKey = "hoauth2"
+  , mapValue =
+      "801fba9abf801d2dac5d7b0d840fa51d479abd4191253d629b67a50b606b8b93"
+  }
 , { mapKey = "hosc"
   , mapValue =
       "61ce61b7fbcfe75955e073c3c970f975f124f7b8ece777e46be7988aaf104530"
@@ -2726,6 +2730,10 @@
   , mapValue =
       "dc7dfefcdaa0223acc8469272c692653f9ecd97bcd88989613f526378a66f9b1"
   }
+, { mapKey = "uri-bytestring-aeson"
+  , mapValue =
+      "4066c016bcb7cb46ec1576279dddc0e06d66b7a8b4253f4728979c8f2181172e"
+  }
 , { mapKey = "url-slug"
   , mapValue =
       "4b0ac48095b558c25a270b4477148c2fdca42e1bdbe30bd159e12cac284c06a7"
diff --git a/overlay.nix b/overlay.nix
index ef14da7ca4ef19ec506421d87d0b25f97c56dcf9..fdabdee4d99e2bf2d9376f7a14f60555ec502abf 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -609,6 +609,8 @@ final: prev: with pkgs.haskell.lib; {
 
   hls-test-utils = final.callPackage (./pkgs/hls-test-utils.nix) { };
 
+  hoauth2 = final.callPackage (./pkgs/hoauth2.nix) { };
+
   hosc = final.callPackage (./pkgs/hosc.nix) { };
 
   hp2pretty = final.callPackage (./pkgs/hp2pretty.nix) { };
@@ -1365,6 +1367,8 @@ final: prev: with pkgs.haskell.lib; {
 
   uri-bytestring = final.callPackage (./pkgs/uri-bytestring.nix) { };
 
+  uri-bytestring-aeson = final.callPackage (./pkgs/uri-bytestring-aeson.nix) { };
+
   url-slug = final.callPackage (./pkgs/url-slug.nix) { };
 
   uuid = final.callPackage (./pkgs/uuid.nix) { };
diff --git a/pkgs/hoauth2.nix b/pkgs/hoauth2.nix
new file mode 100644
index 0000000000000000000000000000000000000000..275fb431633ae7da20a58a0e9792065a44163b9b
--- /dev/null
+++ b/pkgs/hoauth2.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, aeson, base, base64, binary, bytestring, containers
+, cryptonite, data-default, exceptions, hspec, hspec-discover
+, http-conduit, http-types, lib, memory, microlens, text
+, transformers, uri-bytestring, uri-bytestring-aeson
+}:
+mkDerivation {
+  pname = "hoauth2";
+  version = "2.10.0";
+  sha256 = "7802585a4d6d3b2fc2d8a63b8b0895b8a9726710b5837085b512dcc17ea2538f";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson base base64 binary bytestring containers cryptonite
+    data-default exceptions http-conduit http-types memory microlens
+    text transformers uri-bytestring uri-bytestring-aeson
+  ];
+  testHaskellDepends = [ aeson base hspec uri-bytestring ];
+  testToolDepends = [ hspec-discover ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/freizl/hoauth2";
+  description = "Haskell OAuth2 authentication client";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/uri-bytestring-aeson.nix b/pkgs/uri-bytestring-aeson.nix
new file mode 100644
index 0000000000000000000000000000000000000000..16fba50e0a9e67ca8ad66af88cafd94b42f3179d
--- /dev/null
+++ b/pkgs/uri-bytestring-aeson.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, aeson, base, bytestring, lib, text, uri-bytestring
+}:
+mkDerivation {
+  pname = "uri-bytestring-aeson";
+  version = "0.1.0.8";
+  sha256 = "612accdae921dd7a5d00fedaa377d994be5ab585ae75b1f9f0dcaa10412e7509";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson base bytestring text uri-bytestring
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/reactormonk/uri-bytestring-aeson";
+  description = "Aeson instances for URI Bytestring";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file