diff --git a/horizon.dhall b/horizon.dhall
index 64c981e5f27f3fe5f6dc17ddf8bcdf810429d32c..c86fc0b6a0f630938fdee5dce265b2bb0d13b97f 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -219,6 +219,7 @@ let otherLibraries =
           "https://github.com/locallycompact/nothunks"
           "0d7e3565407aa4eb21d861d075dff6f20d090f97"
           (None H.Subdir)
+      , H.callHackage "openapi3" "3.2.2"
       , H.callHackage "optparse-generic" "1.4.8"
       , H.callHackage "partial-order" "0.2.0.0"
       , H.callCabal2nix
diff --git a/overlay.nix b/overlay.nix
index 6e4be8069b457c0392ba3ccf1e7c2aeeab522e01..836b01ed3494f1ba4d33de166c4d5190c7582537 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -171,6 +171,8 @@ final: prev: with pkgs.haskell.lib; {
 
   nothunks = final.callPackage (./pkgs/nothunks.nix) { };
 
+  openapi3 = final.callPackage (./pkgs/openapi3.nix) { };
+
   optparse-generic = final.callPackage (./pkgs/optparse-generic.nix) { };
 
   partial-order = final.callPackage (./pkgs/partial-order.nix) { };
diff --git a/pkgs/openapi3.nix b/pkgs/openapi3.nix
new file mode 100644
index 0000000000000000000000000000000000000000..09f22ae22bc697acfdcfa85f8768a8abfda8179d
--- /dev/null
+++ b/pkgs/openapi3.nix
@@ -0,0 +1,111 @@
+{ mkDerivation
+, Cabal
+, Glob
+, HUnit
+, QuickCheck
+, aeson
+, aeson-pretty
+, base
+, base-compat-batteries
+, bytestring
+, cabal-doctest
+, containers
+, cookie
+, doctest
+, generics-sop
+, hashable
+, hspec
+, hspec-discover
+, http-media
+, insert-ordered-containers
+, lens
+, lib
+, mtl
+, network
+, optics-core
+, optics-th
+, quickcheck-instances
+, scientific
+, template-haskell
+, text
+, time
+, transformers
+, unordered-containers
+, utf8-string
+, uuid-types
+, vector
+}:
+mkDerivation {
+  pname = "openapi3";
+  version = "3.2.2";
+  sha256 = "325d491e305de60510f5267b3eccdc2719d4a8e5784577d7e79aef28368d6134";
+  revision = "2";
+  editedCabalFile = "1yc3wlc8j84glav3hzx1l4yq33k05bll252a8yl6ld275jjswn8p";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  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
+  ];
+  executableHaskellDepends = [ aeson base lens text ];
+  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 ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/biocad/openapi3";
+  description = "OpenAPI 3.0 data model";
+  license = lib.licenses.bsd3;
+  broken = false;
+}