diff --git a/cachix-api.cabal b/cachix-api.cabal
--- a/cachix-api.cabal
+++ b/cachix-api.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.2
 name:            cachix-api
-version:         1.6.1
+version:         1.7
 synopsis:        Servant HTTP API specification for https://cachix.org
 homepage:        https://github.com/cachix/cachix#readme
 bug-reports:     https://github.com/cachix/cachix/issues
@@ -23,13 +23,13 @@
 common defaults
   build-depends:      base >=4.7 && <5
   default-extensions:
-    NoImplicitPrelude
-    NoImportQualifiedPost
     DeriveAnyClass
     DeriveGeneric
     DerivingVia
     LambdaCase
     NamedFieldPuns
+    NoImplicitPrelude
+    NoImportQualifiedPost
     OverloadedStrings
     RecordWildCards
     ScopedTypeVariables
diff --git a/src/Cachix/Types/BinaryCache.hs b/src/Cachix/Types/BinaryCache.hs
--- a/src/Cachix/Types/BinaryCache.hs
+++ b/src/Cachix/Types/BinaryCache.hs
@@ -5,6 +5,7 @@
 import Data.Swagger (ToParamSchema (..), ToSchema)
 import Protolude
 import Servant.API
+import Text.Read
 
 type BinaryCacheName = Text
 
@@ -20,7 +21,15 @@
   deriving (Show, Generic, FromJSON, ToJSON, ToSchema, NFData)
 
 data CompressionMethod = XZ | ZSTD
-  deriving (Show, Read, Generic, FromJSON, ToJSON, ToSchema, NFData)
+  deriving (Show, Eq, Generic, FromJSON, ToJSON, ToSchema, NFData)
+
+instance Read CompressionMethod where
+  readsPrec _ value =
+    case map toUpper value of
+      "XZ" -> [(XZ, "")]
+      "ZST" -> [(ZSTD, "")]
+      "ZSTD" -> [(ZSTD, "")]
+      _ -> []
 
 instance FromHttpApiData CompressionMethod where
   parseUrlPiece "xz" = Right XZ
diff --git a/src/Cachix/Types/MultipartUpload.hs b/src/Cachix/Types/MultipartUpload.hs
--- a/src/Cachix/Types/MultipartUpload.hs
+++ b/src/Cachix/Types/MultipartUpload.hs
@@ -10,14 +10,14 @@
   { narId :: UUID,
     uploadId :: Text
   }
-  deriving stock (Generic, Show)
+  deriving stock (Generic, Eq, Show)
   deriving anyclass (ToJSON, FromJSON, ToSchema, NFData)
 
 -- | Any hashes or headers required to create the presigned URL.
 data SigningData = SigningData
   { contentMD5 :: Text
   }
-  deriving stock (Generic, Show)
+  deriving stock (Generic, Eq, Show)
   deriving anyclass (ToJSON, FromJSON, ToSchema, NFData)
 
 newtype UploadPartResponse = UploadPartResponse {uploadUrl :: Text}
@@ -29,8 +29,11 @@
     -- | An opaque identifier for the uploaded part.
     eTag :: Text
   }
-  deriving stock (Generic, Show)
+  deriving stock (Generic, Eq, Show)
   deriving anyclass (ToJSON, FromJSON, ToSchema, NFData)
+
+instance Ord CompletedPart where
+  p1 `compare` p2 = partNumber p1 `compare` partNumber p2
 
 type CompletedParts = Maybe (NonEmpty CompletedPart)
 
