diff --git a/manifest.dhall b/manifest.dhall
index 55bdd58ecb3384896fbf48246284d7e2bb94026e..9870ff740b6447523da9a62bb27a74de9e2bef66 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -74,6 +74,9 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "apecs" "0.9.4"
     , callHackage "assoc" "1.0.2"
     , callHackage "async" "2.2.4"
+    , callHackage "autodocodec" "0.2.0.1"
+    , callHackage "autodocodec-schema" "0.1.0.2"
+    , callHackage "autodocodec-servant-multipart" "0.0.0.0"
     , callHackage "autodocodec-yaml" "0.2.0.2"
     , callHackage "basement" "0.0.15"
     , callHackage "base64" "0.4.2.4"
@@ -319,11 +322,15 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "servant-lucid" "0.9.0.5"
     , callHackage "servant-multipart" "0.12.1"
     , callHackage "servant-multipart-api" "0.12.1"
+    , callHackage "servant-polysemy" "0.1.3"
     , callCabal2nix
         "servant-server"
         "https://github.com/TeofilC/servant"
         (Some "76fc90a51f915230bbe1e0d1dbe9727fcdc7a0fc")
         (Some "servant-server")
+    , callHackage "servant-swagger" "1.1.11"  
+    , callHackage "servant-swagger-ui" "0.3.5.4.5.0"
+    , callHackage "servant-swagger-ui-core" "0.3.5"
     , callHackage "shake" "0.19.6"
     , callHackage "shelly" "1.10.0"
     , callHackage "singleton-bool" "0.1.6"
@@ -335,8 +342,9 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "string-interpolate" "0.3.1.2"
     , callHackage "string-qq" "0.0.4"
     , callHackage "stylish-haskell" "0.14.2.0"
+    , callHackage "swagger2" "2.8.5"
     , callHackage "syb" "0.7.2.1"
-    , callHackage "sydtest" "0.12.0.1"
+    , callHackage "sydtest" "0.13.0.0"
     , callHackage "sydtest-discover" "0.0.0.2"
     , callCabal2nix
         "tasty"
@@ -369,6 +377,7 @@ in  [ callHackage "Cabal" "3.8.1.0"
     , callHackage "unicode-collation" "0.1.3.2"
     , callHackage "unicode-data" "0.4.0"
     , callHackage "unicode-transforms" "0.4.0.1"
+    , callHackage "universe-base" "1.1.3"
     , callHackage "unordered-containers" "0.2.19.1"
     , callHackage "validity" "0.12.0.1"
     , callHackage "validity-aeson" "0.2.0.5"
diff --git a/overlay.nix b/overlay.nix
index e71510b43b3be61c9ec213343ff70d6d1604834c..efc62b82e103665d5ba3d4b91a3627a003d0da2b 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -31,6 +31,12 @@ final: prev: with pkgs.haskell.lib; {
 
     async = prev.callPackage (./pkgs/async.nix) { };
 
+    autodocodec = prev.callPackage (./pkgs/autodocodec.nix) { };
+
+    autodocodec-schema = prev.callPackage (./pkgs/autodocodec-schema.nix) { };
+
+    autodocodec-servant-multipart = prev.callPackage (./pkgs/autodocodec-servant-multipart.nix) { };
+
     autodocodec-yaml = prev.callPackage (./pkgs/autodocodec-yaml.nix) { };
 
     base-compat = prev.callPackage (./pkgs/base-compat.nix) { };
@@ -407,8 +413,16 @@ final: prev: with pkgs.haskell.lib; {
 
     servant-multipart-api = prev.callPackage (./pkgs/servant-multipart-api.nix) { };
 
+    servant-polysemy = prev.callPackage (./pkgs/servant-polysemy.nix) { };
+
     servant-server = prev.callPackage (./pkgs/servant-server.nix) { };
 
+    servant-swagger = prev.callPackage (./pkgs/servant-swagger.nix) { };
+
+    servant-swagger-ui = prev.callPackage (./pkgs/servant-swagger-ui.nix) { };
+
+    servant-swagger-ui-core = prev.callPackage (./pkgs/servant-swagger-ui-core.nix) { };
+
     shake = prev.callPackage (./pkgs/shake.nix) { };
 
     shelly = prev.callPackage (./pkgs/shelly.nix) { };
@@ -431,6 +445,8 @@ final: prev: with pkgs.haskell.lib; {
 
     stylish-haskell = prev.callPackage (./pkgs/stylish-haskell.nix) { };
 
+    swagger2 = prev.callPackage (./pkgs/swagger2.nix) { };
+
     syb = prev.callPackage (./pkgs/syb.nix) { };
 
     sydtest = prev.callPackage (./pkgs/sydtest.nix) { };
@@ -475,6 +491,8 @@ final: prev: with pkgs.haskell.lib; {
 
     unicode-transforms = prev.callPackage (./pkgs/unicode-transforms.nix) { };
 
+    universe-base = prev.callPackage (./pkgs/universe-base.nix) { };
+
     unordered-containers = prev.callPackage (./pkgs/unordered-containers.nix) { };
 
     validity = prev.callPackage (./pkgs/validity.nix) { };
diff --git a/pkgs/autodocodec-schema.nix b/pkgs/autodocodec-schema.nix
new file mode 100644
index 0000000000000000000000000000000000000000..165c045d8c45981ae73226f8494a4f1aaccade2f
--- /dev/null
+++ b/pkgs/autodocodec-schema.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, aeson, autodocodec, base, containers, lib, mtl
+, text, unordered-containers, validity, validity-aeson
+, validity-containers, validity-text
+}:
+mkDerivation {
+  pname = "autodocodec-schema";
+  version = "0.1.0.2";
+  sha256 = "7178bc6b356bf744918202312a71eb0c4fb9b2dfe70680c4acd8d8a5d0977c6f";
+  libraryHaskellDepends = [
+    aeson autodocodec base containers mtl text unordered-containers
+    validity validity-aeson validity-containers validity-text
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/NorfairKing/autodocodec#readme";
+  description = "Autodocodec interpreters for JSON Schema";
+  license = lib.licenses.mit;
+}
\ No newline at end of file
diff --git a/pkgs/autodocodec-servant-multipart.nix b/pkgs/autodocodec-servant-multipart.nix
new file mode 100644
index 0000000000000000000000000000000000000000..70cf395a68053915e5e9ee83b7cdacd76049b605
--- /dev/null
+++ b/pkgs/autodocodec-servant-multipart.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, aeson, autodocodec, base, bytestring, lib
+, servant-multipart, servant-multipart-api, text
+, unordered-containers, vector
+}:
+mkDerivation {
+  pname = "autodocodec-servant-multipart";
+  version = "0.0.0.0";
+  sha256 = "fa0983ebc5d83ec0d510542adf4004011cb204aab0719428fc5bb70b8b4a5fdf";
+  libraryHaskellDepends = [
+    aeson autodocodec base bytestring servant-multipart
+    servant-multipart-api text unordered-containers vector
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/NorfairKing/autodocodec#readme";
+  description = "Autodocodec interpreters for Servant Multipart";
+  license = lib.licenses.mit;
+}
\ No newline at end of file
diff --git a/pkgs/autodocodec.nix b/pkgs/autodocodec.nix
new file mode 100644
index 0000000000000000000000000000000000000000..037b3e9f2e70853e1f5aa7c810f7278acd53368c
--- /dev/null
+++ b/pkgs/autodocodec.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, aeson, base, bytestring, containers, hashable, lib
+, mtl, scientific, text, time, unordered-containers, validity
+, validity-scientific, vector
+}:
+mkDerivation {
+  pname = "autodocodec";
+  version = "0.2.0.1";
+  sha256 = "4f4e2c2c57608a7e3060247a0f1b86e3f1257c2ba15af3c4649b9d87a6155bde";
+  libraryHaskellDepends = [
+    aeson base bytestring containers hashable mtl scientific text time
+    unordered-containers validity validity-scientific vector
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/NorfairKing/autodocodec#readme";
+  description = "Self-documenting encoder and decoder";
+  license = lib.licenses.mit;
+}
\ No newline at end of file
diff --git a/pkgs/servant-polysemy.nix b/pkgs/servant-polysemy.nix
new file mode 100644
index 0000000000000000000000000000000000000000..960626f79bd813b5683bca96c8239966558eaa73
--- /dev/null
+++ b/pkgs/servant-polysemy.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, base, deepseq, http-client, http-client-tls, lens
+, lib, mtl, polysemy, polysemy-plugin, polysemy-zoo, servant
+, servant-client, servant-server, servant-swagger
+, servant-swagger-ui, swagger2, text, wai, warp
+}:
+mkDerivation {
+  pname = "servant-polysemy";
+  version = "0.1.3";
+  sha256 = "11a10a26a55962dc36518ca8d1b0d21d29a6bf9bdceb54d0988642709d715e8c";
+  isLibrary = true;
+  isExecutable = true;
+  libraryHaskellDepends = [
+    base deepseq http-client http-client-tls mtl polysemy
+    polysemy-plugin polysemy-zoo servant-client servant-server wai warp
+  ];
+  executableHaskellDepends = [
+    base deepseq http-client http-client-tls lens mtl polysemy
+    polysemy-plugin polysemy-zoo servant servant-client servant-server
+    servant-swagger servant-swagger-ui swagger2 text wai warp
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/AJChapman/servant-polysemy#readme";
+  description = "Utilities for using servant in a polysemy stack";
+  license = lib.licenses.bsd3;
+}
\ No newline at end of file
diff --git a/pkgs/servant-swagger-ui-core.nix b/pkgs/servant-swagger-ui-core.nix
new file mode 100644
index 0000000000000000000000000000000000000000..39c1c25d984d885b18b4dc2957048d0c5b9f7d2e
--- /dev/null
+++ b/pkgs/servant-swagger-ui-core.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, aeson, base, blaze-markup, bytestring, http-media
+, lib, servant, servant-blaze, servant-server, text, transformers
+, transformers-compat, wai-app-static
+}:
+mkDerivation {
+  pname = "servant-swagger-ui-core";
+  version = "0.3.5";
+  sha256 = "ed0bf0b2fbdb1751350df6780335de00ae08dd90ac4728a88369f4b132cf7b32";
+  revision = "4";
+  editedCabalFile = "16183mrmxipa3l3ffpibsrr41mbi2iikw66y80hplmnl6jjhnyzd";
+  libraryHaskellDepends = [
+    aeson base blaze-markup bytestring http-media servant servant-blaze
+    servant-server text transformers transformers-compat wai-app-static
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/haskell-servant/servant-swagger-ui";
+  description = "Servant swagger ui core components";
+  license = lib.licenses.bsd3;
+}
\ No newline at end of file
diff --git a/pkgs/servant-swagger-ui.nix b/pkgs/servant-swagger-ui.nix
new file mode 100644
index 0000000000000000000000000000000000000000..7519f80c108102ba7752b061f684bfd9fafffb15
--- /dev/null
+++ b/pkgs/servant-swagger-ui.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, aeson, base, bytestring, file-embed-lzma, lib
+, servant, servant-server, servant-swagger-ui-core, text
+}:
+mkDerivation {
+  pname = "servant-swagger-ui";
+  version = "0.3.5.4.5.0";
+  sha256 = "efa528edc055dc6c9e83dfdfe4b892be439bbcfb83a73847f6cfdb35c42f878b";
+  revision = "2";
+  editedCabalFile = "05g4gnvr8ljg5mszan5cr9zzi40p6d8sr7343mm2yc3ps45vy9g1";
+  libraryHaskellDepends = [
+    aeson base bytestring file-embed-lzma servant servant-server
+    servant-swagger-ui-core text
+  ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/haskell-servant/servant-swagger-ui";
+  description = "Servant swagger ui";
+  license = lib.licenses.bsd3;
+}
\ No newline at end of file
diff --git a/pkgs/servant-swagger.nix b/pkgs/servant-swagger.nix
new file mode 100644
index 0000000000000000000000000000000000000000..67fb44354ecaef5f8c4f07e18b5fd12d00ae94e6
--- /dev/null
+++ b/pkgs/servant-swagger.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, aeson, aeson-pretty, base, base-compat, bytestring
+, Cabal, cabal-doctest, directory, doctest, filepath, hspec
+, hspec-discover, http-media, insert-ordered-containers, lens
+, lens-aeson, lib, QuickCheck, servant, singleton-bool, swagger2
+, template-haskell, text, time, unordered-containers, utf8-string
+, vector
+}:
+mkDerivation {
+  pname = "servant-swagger";
+  version = "1.1.11";
+  sha256 = "f4b985007ab0520c177f8dcf7bfabf8cc88d480e087db5ea5b1d311c079676cf";
+  setupHaskellDepends = [ base Cabal cabal-doctest ];
+  libraryHaskellDepends = [
+    aeson aeson-pretty base base-compat bytestring hspec http-media
+    insert-ordered-containers lens QuickCheck servant singleton-bool
+    swagger2 text unordered-containers
+  ];
+  testHaskellDepends = [
+    aeson base base-compat directory doctest filepath hspec lens
+    lens-aeson QuickCheck servant swagger2 template-haskell text time
+    utf8-string vector
+  ];
+  testToolDepends = [ hspec-discover ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/haskell-servant/servant/tree/master/servant-swagger#readme";
+  description = "Generate a Swagger/OpenAPI/OAS 2.0 specification for your servant API.";
+  license = lib.licenses.bsd3;
+}
\ No newline at end of file
diff --git a/pkgs/swagger2.nix b/pkgs/swagger2.nix
new file mode 100644
index 0000000000000000000000000000000000000000..8f2ee2bb25cd5799ebcd643af8d1926c87239761
--- /dev/null
+++ b/pkgs/swagger2.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, aeson, aeson-pretty, base, base-compat-batteries
+, bytestring, Cabal, cabal-doctest, containers, cookie, doctest
+, generics-sop, Glob, hashable, hspec, hspec-discover, http-media
+, HUnit, insert-ordered-containers, lens, lib, mtl, network
+, optics-core, optics-th, QuickCheck, quickcheck-instances
+, scientific, template-haskell, text, time, transformers
+, unordered-containers, utf8-string, uuid-types, vector
+}:
+mkDerivation {
+  pname = "swagger2";
+  version = "2.8.5";
+  sha256 = "660787d11c0aebd6668dcace2414d54e42fbb63dd703cd2491fb9bab4f31299b";
+  setupHaskellDepends = [ base Cabal cabal-doctest ];
+  libraryHaskellDepends = [
+    aeson aeson-pretty base base-compat-batteries bytestring containers
+    cookie generics-sop hashable http-media insert-ordered-containers
+    lens mtl network optics-core optics-th QuickCheck scientific
+    template-haskell text time transformers unordered-containers
+    uuid-types vector
+  ];
+  testHaskellDepends = [
+    aeson base base-compat-batteries bytestring containers doctest Glob
+    hashable hspec HUnit insert-ordered-containers lens mtl QuickCheck
+    quickcheck-instances template-haskell text time
+    unordered-containers utf8-string vector
+  ];
+  testToolDepends = [ hspec-discover ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/GetShopTV/swagger2";
+  description = "Swagger 2.0 data model";
+  license = lib.licenses.bsd3;
+}
\ No newline at end of file
diff --git a/pkgs/sydtest.nix b/pkgs/sydtest.nix
index 3df70cbba007f6ad7f469c04bd0adbcc44ba7ffd..a63ac4eeeb09b6aaab1966fea7d9d1f7cffc6990 100644
--- a/pkgs/sydtest.nix
+++ b/pkgs/sydtest.nix
@@ -1,75 +1,23 @@
-{ mkDerivation
-, async
-, autodocodec
-, autodocodec-yaml
-, base
-, bytestring
-, containers
-, Diff
-, dlist
-, envparse
-, filepath
-, lib
-, MonadRandom
-, mtl
-, optparse-applicative
-, path
-, path-io
-, pretty-show
-, QuickCheck
-, quickcheck-io
-, random
-, random-shuffle
-, safe
-, safe-coloured-text
-, safe-coloured-text-terminfo
-, split
-, stm
-, sydtest-discover
-, text
+{ mkDerivation, async, autodocodec, autodocodec-yaml, base
+, bytestring, containers, Diff, dlist, envparse, filepath, lib
+, MonadRandom, mtl, optparse-applicative, path, path-io
+, pretty-show, QuickCheck, quickcheck-io, random, random-shuffle
+, safe, safe-coloured-text, safe-coloured-text-terminfo, split, stm
+, sydtest-discover, text
 }:
 mkDerivation {
   pname = "sydtest";
-  version = "0.12.0.1";
-  sha256 = "1c7186d0e41145aefcb6eae9727938d757e07ebd8f8287feb19a447567d8565f";
+  version = "0.13.0.0";
+  sha256 = "856583d832d8b9e52a4d0ba6290b70e984ad1663cb300464961800ea8c2f4a57";
   libraryHaskellDepends = [
-    async
-    autodocodec
-    autodocodec-yaml
-    base
-    bytestring
-    containers
-    Diff
-    dlist
-    envparse
-    filepath
-    MonadRandom
-    mtl
-    optparse-applicative
-    path
-    path-io
-    pretty-show
-    QuickCheck
-    quickcheck-io
-    random
-    random-shuffle
-    safe
-    safe-coloured-text
-    safe-coloured-text-terminfo
-    split
-    stm
-    text
+    async autodocodec autodocodec-yaml base bytestring containers Diff
+    dlist envparse filepath MonadRandom mtl optparse-applicative path
+    path-io pretty-show QuickCheck quickcheck-io random random-shuffle
+    safe safe-coloured-text safe-coloured-text-terminfo split stm text
   ];
   testHaskellDepends = [
-    base
-    bytestring
-    path
-    path-io
-    QuickCheck
-    random
-    safe-coloured-text
-    stm
-    text
+    base bytestring path path-io QuickCheck random safe-coloured-text
+    stm text
   ];
   testToolDepends = [ sydtest-discover ];
   doHaddock = false;
@@ -79,4 +27,4 @@ mkDerivation {
   homepage = "https://github.com/NorfairKing/sydtest#readme";
   description = "A modern testing framework for Haskell with good defaults and advanced testing features";
   license = "unknown";
-}
+}
\ No newline at end of file
diff --git a/pkgs/universe-base.nix b/pkgs/universe-base.nix
new file mode 100644
index 0000000000000000000000000000000000000000..90451507185300f38fd6a27233ae55d4a2d66c2d
--- /dev/null
+++ b/pkgs/universe-base.nix
@@ -0,0 +1,19 @@
+{ mkDerivation, base, containers, lib, QuickCheck, tagged
+, transformers
+}:
+mkDerivation {
+  pname = "universe-base";
+  version = "1.1.3";
+  sha256 = "c59dfe99b76435d13483eff888e020a282ae8451b7b692dc98f348dcec95db52";
+  revision = "3";
+  editedCabalFile = "0hnd5vxsncwyjsindfmsvp9jbixanhmzczhrmd8s8g6imgb0mzyk";
+  libraryHaskellDepends = [ base containers tagged transformers ];
+  testHaskellDepends = [ base containers QuickCheck ];
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/dmwit/universe";
+  description = "A class for finite and recursively enumerable types";
+  license = lib.licenses.bsd3;
+}
\ No newline at end of file