diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,109 @@
+## Neptune high-level API
+
+```haskell
+main = do
+    -- Experiment 'sandbox' must be created from the Neptune dashboard
+    withNept "jiasen/sandbox" $ \_ experiment -> do
+        forM_ [1..10::Int] $ \i -> do
+            -- You can log arbitrary name/value (current limited to double values)
+            nlog experiment "counter" (fromIntegral (i * i) :: Double)
+            threadDelay 1000000
+```
+
+## OpenAPI Auto-Generated http-client Bindings to Neptune Backend API
+
+This library is intended to be imported qualified.
+
+### Modules
+
+| MODULE              | NOTES                                               |
+| ------------------- | --------------------------------------------------- |
+| NeptuneBackend.Client    | use the "dispatch" functions to send requests       |
+| NeptuneBackend.Core      | core funcions, config and request types             |
+| NeptuneBackend.API       | construct api requests                              |
+| NeptuneBackend.Model     | describes api models                                |
+| NeptuneBackend.MimeTypes | encoding/decoding MIME types (content-types/accept) |
+| NeptuneBackend.ModelLens | lenses for model fields                             |
+| NeptuneBackend.Logging   | logging functions and utils                         |
+
+
+### MimeTypes
+
+This library adds type safety around what OpenAPI specifies as
+Produces and Consumes for each Operation (e.g. the list of MIME types an
+Operation can Produce (using 'accept' headers) and Consume (using 'content-type' headers).
+
+For example, if there is an Operation named _addFoo_, there will be a
+data type generated named _AddFoo_ (note the capitalization), which
+describes additional constraints and actions on the _addFoo_ operation
+via its typeclass instances. These typeclass instances can be viewed
+in GHCi or via the Haddocks.
+
+* required parameters are included as function arguments to _addFoo_
+* optional non-body parameters are included by using  `applyOptionalParam`
+* optional body parameters are set by using  `setBodyParam`
+
+Example code generated for pretend _addFoo_ operation: 
+
+```haskell
+data AddFoo 	
+instance Consumes AddFoo MimeJSON
+instance Produces AddFoo MimeJSON
+instance Produces AddFoo MimeXML
+instance HasBodyParam AddFoo FooModel
+instance HasOptionalParam AddFoo FooName
+instance HasOptionalParam AddFoo FooId
+```
+
+this would indicate that:
+
+* the _addFoo_ operation can consume JSON
+* the _addFoo_ operation produces JSON or XML, depending on the argument passed to the dispatch function
+* the _addFoo_ operation can set it's body param of _FooModel_ via `setBodyParam`
+* the _addFoo_ operation can set 2 different optional parameters via `applyOptionalParam`
+
+If the OpenAPI spec doesn't declare it can accept or produce a certain
+MIME type for a given Operation, you should either add a Produces or
+Consumes instance for the desired MIME types (assuming the server
+supports it), use `dispatchLbsUnsafe` or modify the OpenAPI spec and
+run the generator again.
+
+New MIME type instances can be added via MimeType/MimeRender/MimeUnrender
+
+Only JSON instances are generated by default, and in some case
+x-www-form-urlencoded instances (FromFrom, ToForm) will also be
+generated if the model fields are primitive types, and there are
+Operations using x-www-form-urlencoded which use those models.
+
+### Authentication
+
+A haskell data type will be generated for each OpenAPI authentication type.
+
+If for example the AuthMethod `AuthOAuthFoo` is generated for OAuth operations, then
+`addAuthMethod` should be used to add the AuthMethod config.
+
+When a request is dispatched, if a matching auth method is found in
+the config, it will be applied to the request.
+
+### Example
+
+```haskell
+mgr <- newManager defaultManagerSettings
+config0 <- withStdoutLogging =<< newConfig 
+let config = config0
+    `addAuthMethod` AuthOAuthFoo "secret-key"
+
+let addFooRequest = 
+  addFoo 
+    (ContentType MimeJSON) 
+    (Accept MimeXML) 
+    (ParamBar paramBar)
+    (ParamQux paramQux)
+    modelBaz
+  `applyOptionalParam` FooId 1
+  `applyOptionalParam` FooName "name"
+  `setHeader` [("qux_header","xxyy")]
+addFooResult <- dispatchMime mgr config addFooRequest
+```
+
+See the example app and the haddocks for details.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/examples/Main.hs b/examples/Main.hs
new file mode 100644
--- /dev/null
+++ b/examples/Main.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE DataKinds                 #-}
+{-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE FlexibleContexts          #-}
+{-# LANGUAGE Rank2Types                #-}
+{-# LANGUAGE RecordWildCards           #-}
+{-# LANGUAGE ScopedTypeVariables       #-}
+{-# LANGUAGE StandaloneDeriving        #-}
+{-# LANGUAGE TemplateHaskell           #-}
+{-# LANGUAGE TypeApplications          #-}
+{-# LANGUAGE TypeFamilies              #-}
+{-# LANGUAGE TypeOperators             #-}
+module Main where
+
+import           Neptune
+import           RIO
+
+main = do
+    withNept "jiasen/sandbox" $ \_ experiment -> do
+        forM_ [1..10::Int] $ \i -> do
+            nlog experiment "counter" (fromIntegral (i * i) :: Double)
+            threadDelay 1000000
diff --git a/lib/Neptune.hs b/lib/Neptune.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune.hs
@@ -0,0 +1,19 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune
+-}
+
+module Neptune
+  ( module Neptune.Client
+  ) where
+
+import           Neptune.Client
diff --git a/lib/Neptune/Backend/API.hs b/lib/Neptune/Backend/API.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/API.hs
@@ -0,0 +1,19 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : NeptuneBackend.API
+-}
+
+module Neptune.Backend.API
+  ( module Neptune.Backend.API.ApiDefault
+  ) where
+
+import           Neptune.Backend.API.ApiDefault
diff --git a/lib/Neptune/Backend/API/ApiDefault.hs b/lib/Neptune/Backend/API/ApiDefault.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/API/ApiDefault.hs
@@ -0,0 +1,3076 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.API.ApiDefault
+-}
+
+{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MonoLocalBinds        #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedStrings     #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-}
+
+module Neptune.Backend.API.ApiDefault where
+
+import           Neptune.Backend.Core
+import           Neptune.Backend.MimeTypes
+import           Neptune.Backend.Model                 as M
+
+import qualified Data.Aeson                            as A
+import qualified Data.ByteString                       as B
+import qualified Data.ByteString.Lazy                  as BL
+import qualified Data.Data                             as P (TypeRep, Typeable,
+                                                             typeOf, typeRep)
+import qualified Data.Foldable                         as P
+import qualified Data.Map                              as Map
+import qualified Data.Maybe                            as P
+import qualified Data.Proxy                            as P (Proxy (..))
+import qualified Data.Set                              as Set
+import qualified Data.String                           as P
+import qualified Data.Text                             as T
+import qualified Data.Text.Encoding                    as T
+import qualified Data.Text.Lazy                        as TL
+import qualified Data.Text.Lazy.Encoding               as TL
+import qualified Data.Time                             as TI
+import qualified Network.HTTP.Client.MultipartFormData as NH
+import qualified Network.HTTP.Media                    as ME
+import qualified Network.HTTP.Types                    as NH
+import qualified Web.FormUrlEncoded                    as WH
+import qualified Web.HttpApiData                       as WH
+
+import           Data.Text                             (Text)
+import           GHC.Base                              ((<|>))
+
+import           Prelude                               (Applicative, Bool (..),
+                                                        Char, Double, FilePath,
+                                                        Float, Functor, Int,
+                                                        Integer, Maybe (..),
+                                                        Monad, String, fmap,
+                                                        maybe, mempty, pure,
+                                                        undefined, ($), (.),
+                                                        (/=), (<$>), (<*>),
+                                                        (==), (>>=))
+import qualified Prelude                               as P
+
+-- * Operations
+
+
+-- ** Default
+
+-- *** abortExperiments
+
+-- | @POST \/api\/leaderboard\/v1\/experiments\/abort@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+abortExperiments
+  :: (Consumes AbortExperiments contentType, MimeRender contentType ExperimentIds)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentIds -- ^ "experimentIds"
+  -> NeptuneBackendRequest AbortExperiments contentType [BatchExperimentUpdateResult] accept
+abortExperiments _  _ experimentIds =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments/abort"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` experimentIds
+
+data AbortExperiments
+instance HasBodyParam AbortExperiments ExperimentIds
+instance HasOptionalParam AbortExperiments MarkOnly where
+  applyOptionalParam req (MarkOnly xs) =
+    req `addQuery` toQuery ("markOnly", Just xs)
+
+-- | @*/*@
+instance MimeType mtype => Consumes AbortExperiments mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces AbortExperiments mtype
+
+
+-- *** acceptOrganizationInvitation
+
+-- | @POST \/api\/backend\/v1\/invitations\/organization\/{invitationId}\/accept@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+acceptOrganizationInvitation
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest AcceptOrganizationInvitation MimeNoContent res accept
+acceptOrganizationInvitation  _ (InvitationId invitationId) =
+  _mkRequest "POST" ["/api/backend/v1/invitations/organization/",toPath invitationId,"/accept"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data AcceptOrganizationInvitation
+-- | @*/*@
+instance MimeType mtype => Produces AcceptOrganizationInvitation mtype
+
+
+-- *** acceptProjectInvitation
+
+-- | @POST \/api\/backend\/v1\/invitations\/project\/{invitationId}\/accept@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+acceptProjectInvitation
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest AcceptProjectInvitation MimeNoContent res accept
+acceptProjectInvitation  _ (InvitationId invitationId) =
+  _mkRequest "POST" ["/api/backend/v1/invitations/project/",toPath invitationId,"/accept"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data AcceptProjectInvitation
+-- | @*/*@
+instance MimeType mtype => Produces AcceptProjectInvitation mtype
+
+
+-- *** addOrganizationMember
+
+-- | @POST \/api\/backend\/v1\/organizations2\/{organizationIdentifier}\/members@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+addOrganizationMember
+  :: (Consumes AddOrganizationMember contentType, MimeRender contentType NewOrganizationMemberDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> NewOrganizationMemberDTO -- ^ "member"
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest AddOrganizationMember contentType OrganizationMemberDTO accept
+addOrganizationMember _  _ member (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "POST" ["/api/backend/v1/organizations2/",toPath organizationIdentifier,"/members"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` member
+
+data AddOrganizationMember
+instance HasBodyParam AddOrganizationMember NewOrganizationMemberDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes AddOrganizationMember mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces AddOrganizationMember mtype
+
+
+-- *** addProjectMember
+
+-- | @POST \/api\/backend\/v1\/projects\/members@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+addProjectMember
+  :: (Consumes AddProjectMember contentType, MimeRender contentType NewProjectMemberDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> NewProjectMemberDTO -- ^ "member"
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest AddProjectMember contentType ProjectMemberDTO accept
+addProjectMember _  _ member (ProjectIdentifier projectIdentifier) =
+  _mkRequest "POST" ["/api/backend/v1/projects/members"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` member
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data AddProjectMember
+instance HasBodyParam AddProjectMember NewProjectMemberDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes AddProjectMember mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces AddProjectMember mtype
+
+
+-- *** addUserProfileLink
+
+-- | @POST \/api\/backend\/v1\/userProfile\/links@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+addUserProfileLink
+  :: (Consumes AddUserProfileLink contentType, MimeRender contentType UserProfileLinkDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> UserProfileLinkDTO -- ^ "link"
+  -> NeptuneBackendRequest AddUserProfileLink contentType res accept
+addUserProfileLink _  _ link =
+  _mkRequest "POST" ["/api/backend/v1/userProfile/links"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` link
+
+data AddUserProfileLink
+instance HasBodyParam AddUserProfileLink UserProfileLinkDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes AddUserProfileLink mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces AddUserProfileLink mtype
+
+
+-- *** authorize
+
+-- | @GET \/api\/backend\/v1\/authorization\/authorize@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+authorize
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest Authorize MimeNoContent AuthorizedUserDTO accept
+authorize  _ =
+  _mkRequest "GET" ["/api/backend/v1/authorization/authorize"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data Authorize
+-- | @*/*@
+instance MimeType mtype => Produces Authorize mtype
+
+
+-- *** cancelSubscription
+
+-- | @POST \/api\/backend\/v1\/organizations2\/{organizationId}\/cancelSubscription@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+cancelSubscription
+  :: (Consumes CancelSubscription contentType, MimeRender contentType SubscriptionCancelInfoDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> SubscriptionCancelInfoDTO -- ^ "subscriptionCancel"
+  -> OrganizationId -- ^ "organizationId"
+  -> NeptuneBackendRequest CancelSubscription contentType res accept
+cancelSubscription _  _ subscriptionCancel (OrganizationId organizationId) =
+  _mkRequest "POST" ["/api/backend/v1/organizations2/",toPath organizationId,"/cancelSubscription"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` subscriptionCancel
+
+data CancelSubscription
+instance HasBodyParam CancelSubscription SubscriptionCancelInfoDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CancelSubscription mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CancelSubscription mtype
+
+
+-- *** changePassword
+
+-- | @PUT \/api\/backend\/v1\/userProfile\/password@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+changePassword
+  :: (Consumes ChangePassword contentType, MimeRender contentType PasswordChangeDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> PasswordChangeDTO -- ^ "passwordToUpdate"
+  -> NeptuneBackendRequest ChangePassword contentType PasswordChangeDTO accept
+changePassword _  _ passwordToUpdate =
+  _mkRequest "PUT" ["/api/backend/v1/userProfile/password"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` passwordToUpdate
+
+data ChangePassword
+instance HasBodyParam ChangePassword PasswordChangeDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes ChangePassword mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces ChangePassword mtype
+
+
+-- *** configInfoGet
+
+-- | @GET \/api\/backend\/v1\/configInfo@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+configInfoGet
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest ConfigInfoGet MimeNoContent ConfigInfo accept
+configInfoGet  _ =
+  _mkRequest "GET" ["/api/backend/v1/configInfo"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data ConfigInfoGet
+-- | @*/*@
+instance MimeType mtype => Produces ConfigInfoGet mtype
+
+
+-- *** createCardUpdateSession
+
+-- | @POST \/api\/backend\/v1\/payments\/{organizationIdentifier}\/creditCard@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createCardUpdateSession
+  :: (Consumes CreateCardUpdateSession contentType, MimeRender contentType CreateSessionParamsDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> CreateSessionParamsDTO -- ^ "createSessionParams" -  Stripe Checkout Session details
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest CreateCardUpdateSession contentType SessionDTO accept
+createCardUpdateSession _  _ createSessionParams (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "POST" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/creditCard"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` createSessionParams
+
+data CreateCardUpdateSession
+
+-- | /Body Param/ "createSessionParams" - Stripe Checkout Session details
+instance HasBodyParam CreateCardUpdateSession CreateSessionParamsDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateCardUpdateSession mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateCardUpdateSession mtype
+
+
+-- *** createChannel
+
+-- | @POST \/api\/leaderboard\/v1\/channels\/user@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createChannel
+  :: (Consumes CreateChannel contentType, MimeRender contentType ChannelParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChannelParams -- ^ "channelToCreate"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest CreateChannel contentType ChannelDTO accept
+createChannel _  _ channelToCreate (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/channels/user"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` channelToCreate
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data CreateChannel
+instance HasBodyParam CreateChannel ChannelParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateChannel mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateChannel mtype
+
+
+-- *** createChart
+
+-- | @POST \/api\/backend\/v1\/chartSets\/{chartSetId}\/charts@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createChart
+  :: (Consumes CreateChart contentType, MimeRender contentType ChartDefinition)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChartDefinition -- ^ "chartToCreate"
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest CreateChart contentType Chart accept
+createChart _  _ chartToCreate (ChartSetId chartSetId) =
+  _mkRequest "POST" ["/api/backend/v1/chartSets/",toPath chartSetId,"/charts"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` chartToCreate
+
+data CreateChart
+instance HasBodyParam CreateChart ChartDefinition
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateChart mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateChart mtype
+
+
+-- *** createChartSet
+
+-- | @POST \/api\/backend\/v1\/chartSets@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createChartSet
+  :: (Consumes CreateChartSet contentType, MimeRender contentType ChartSetParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChartSetParams -- ^ "chartSetToCreate"
+  -> ProjectId -- ^ "projectId"
+  -> NeptuneBackendRequest CreateChartSet contentType ChartSet accept
+createChartSet _  _ chartSetToCreate (ProjectId projectId) =
+  _mkRequest "POST" ["/api/backend/v1/chartSets"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` chartSetToCreate
+    `addQuery` toQuery ("projectId", Just projectId)
+
+data CreateChartSet
+instance HasBodyParam CreateChartSet ChartSetParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateChartSet mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateChartSet mtype
+
+
+-- *** createCheckoutSession
+
+-- | @POST \/api\/backend\/v1\/payments\/{organizationIdentifier}\/session@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createCheckoutSession
+  :: (Consumes CreateCheckoutSession contentType, MimeRender contentType CreateSessionParamsDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> CreateSessionParamsDTO -- ^ "createSessionParams" -  Stripe Checkout Session details
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest CreateCheckoutSession contentType SessionDTO accept
+createCheckoutSession _  _ createSessionParams (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "POST" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/session"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` createSessionParams
+
+data CreateCheckoutSession
+
+-- | /Body Param/ "createSessionParams" - Stripe Checkout Session details
+instance HasBodyParam CreateCheckoutSession CreateSessionParamsDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateCheckoutSession mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateCheckoutSession mtype
+
+
+-- *** createExperiment
+
+-- | @POST \/api\/leaderboard\/v1\/experiments@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createExperiment
+  :: (Consumes CreateExperiment contentType, MimeRender contentType ExperimentCreationParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentCreationParams -- ^ "experimentCreationParams"
+  -> NeptuneBackendRequest CreateExperiment contentType Experiment accept
+createExperiment _  _ experimentCreationParams =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` experimentCreationParams
+
+data CreateExperiment
+instance HasBodyParam CreateExperiment ExperimentCreationParams
+instance HasOptionalParam CreateExperiment XNeptuneCliVersion where
+  applyOptionalParam req (XNeptuneCliVersion xs) =
+    req `addHeader` toHeader ("X-Neptune-CliVersion", xs)
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateExperiment mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateExperiment mtype
+
+
+-- *** createOrganization
+
+-- | @POST \/api\/backend\/v1\/organizations2@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createOrganization
+  :: (Consumes CreateOrganization contentType, MimeRender contentType OrganizationCreationParamsDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationCreationParamsDTO -- ^ "organizationToCreate"
+  -> NeptuneBackendRequest CreateOrganization contentType OrganizationDTO accept
+createOrganization _  _ organizationToCreate =
+  _mkRequest "POST" ["/api/backend/v1/organizations2"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` organizationToCreate
+
+data CreateOrganization
+instance HasBodyParam CreateOrganization OrganizationCreationParamsDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateOrganization mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateOrganization mtype
+
+
+-- *** createOrganizationInvitation
+
+-- | @POST \/api\/backend\/v1\/invitations\/organization@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createOrganizationInvitation
+  :: (Consumes CreateOrganizationInvitation contentType, MimeRender contentType NewOrganizationInvitationDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> NewOrganizationInvitationDTO -- ^ "newOrganizationInvitation" -  addToAllProjects flag is ignored when roleGrant value is admin
+  -> NeptuneBackendRequest CreateOrganizationInvitation contentType OrganizationInvitationDTO accept
+createOrganizationInvitation _  _ newOrganizationInvitation =
+  _mkRequest "POST" ["/api/backend/v1/invitations/organization"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` newOrganizationInvitation
+
+data CreateOrganizationInvitation
+
+-- | /Body Param/ "newOrganizationInvitation" - addToAllProjects flag is ignored when roleGrant value is admin
+instance HasBodyParam CreateOrganizationInvitation NewOrganizationInvitationDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateOrganizationInvitation mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateOrganizationInvitation mtype
+
+
+-- *** createProject
+
+-- | @POST \/api\/backend\/v1\/projects@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createProject
+  :: (Consumes CreateProject contentType, MimeRender contentType NewProjectDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> NewProjectDTO -- ^ "projectToCreate"
+  -> NeptuneBackendRequest CreateProject contentType ProjectWithRoleDTO accept
+createProject _  _ projectToCreate =
+  _mkRequest "POST" ["/api/backend/v1/projects"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` projectToCreate
+
+data CreateProject
+instance HasBodyParam CreateProject NewProjectDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateProject mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateProject mtype
+
+
+-- *** createProjectInvitation
+
+-- | @POST \/api\/backend\/v1\/invitations\/project@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createProjectInvitation
+  :: (Consumes CreateProjectInvitation contentType, MimeRender contentType NewProjectInvitationDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> NewProjectInvitationDTO -- ^ "newProjectInvitation"
+  -> NeptuneBackendRequest CreateProjectInvitation contentType ProjectInvitationDTO accept
+createProjectInvitation _  _ newProjectInvitation =
+  _mkRequest "POST" ["/api/backend/v1/invitations/project"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` newProjectInvitation
+
+data CreateProjectInvitation
+instance HasBodyParam CreateProjectInvitation NewProjectInvitationDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateProjectInvitation mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateProjectInvitation mtype
+
+
+-- *** createReservation
+
+-- | @POST \/api\/backend\/v1\/reservations@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+createReservation
+  :: (Consumes CreateReservation contentType, MimeRender contentType NewReservationDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> NewReservationDTO -- ^ "newReservation"
+  -> NeptuneBackendRequest CreateReservation contentType res accept
+createReservation _  _ newReservation =
+  _mkRequest "POST" ["/api/backend/v1/reservations"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` newReservation
+
+data CreateReservation
+instance HasBodyParam CreateReservation NewReservationDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateReservation mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateReservation mtype
+
+
+-- *** createSystemChannel
+
+-- | @POST \/api\/backend\/v1\/channels\/system@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createSystemChannel
+  :: (Consumes CreateSystemChannel contentType, MimeRender contentType ChannelParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChannelParams -- ^ "channelToCreate"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest CreateSystemChannel contentType ChannelDTO accept
+createSystemChannel _  _ channelToCreate (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/backend/v1/channels/system"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` channelToCreate
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data CreateSystemChannel
+instance HasBodyParam CreateSystemChannel ChannelParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateSystemChannel mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateSystemChannel mtype
+
+
+-- *** createSystemMetric
+
+-- | @POST \/api\/backend\/v1\/experiments\/{experimentId}\/system\/metrics@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+createSystemMetric
+  :: (Consumes CreateSystemMetric contentType, MimeRender contentType SystemMetricParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> SystemMetricParams -- ^ "metricToCreate"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest CreateSystemMetric contentType SystemMetric accept
+createSystemMetric _  _ metricToCreate (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/backend/v1/experiments/",toPath experimentId,"/system/metrics"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` metricToCreate
+
+data CreateSystemMetric
+instance HasBodyParam CreateSystemMetric SystemMetricParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes CreateSystemMetric mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces CreateSystemMetric mtype
+
+
+-- *** deleteChart
+
+-- | @DELETE \/api\/backend\/v1\/chartSets\/{chartSetId}\/charts\/{chartId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteChart
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChartId -- ^ "chartId"
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest DeleteChart MimeNoContent res accept
+deleteChart  _ (ChartId chartId) (ChartSetId chartSetId) =
+  _mkRequest "DELETE" ["/api/backend/v1/chartSets/",toPath chartSetId,"/charts/",toPath chartId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DeleteChart
+-- | @*/*@
+instance MimeType mtype => Produces DeleteChart mtype
+
+
+-- *** deleteChartSet
+
+-- | @DELETE \/api\/backend\/v1\/chartSets\/{chartSetId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteChartSet
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest DeleteChartSet MimeNoContent res accept
+deleteChartSet  _ (ChartSetId chartSetId) =
+  _mkRequest "DELETE" ["/api/backend/v1/chartSets/",toPath chartSetId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DeleteChartSet
+-- | @*/*@
+instance MimeType mtype => Produces DeleteChartSet mtype
+
+
+-- *** deleteExperimentOutput
+
+-- | @DELETE \/api\/leaderboard\/v1\/storage\/deleteOutput@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteExperimentOutput
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentIdentifier -- ^ "experimentIdentifier"
+  -> Path -- ^ "path"
+  -> NeptuneBackendRequest DeleteExperimentOutput MimeNoContent res accept
+deleteExperimentOutput  _ (ExperimentIdentifier experimentIdentifier) (Path path) =
+  _mkRequest "DELETE" ["/api/leaderboard/v1/storage/deleteOutput"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("experimentIdentifier", Just experimentIdentifier)
+    `addQuery` toQuery ("path", Just path)
+
+data DeleteExperimentOutput
+-- | @*/*@
+instance MimeType mtype => Produces DeleteExperimentOutput mtype
+
+
+-- *** deleteOrganization
+
+-- | @DELETE \/api\/backend\/v1\/organizations2\/{organizationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteOrganization
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationId -- ^ "organizationId"
+  -> NeptuneBackendRequest DeleteOrganization MimeNoContent res accept
+deleteOrganization  _ (OrganizationId organizationId) =
+  _mkRequest "DELETE" ["/api/backend/v1/organizations2/",toPath organizationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DeleteOrganization
+-- | @*/*@
+instance MimeType mtype => Produces DeleteOrganization mtype
+
+
+-- *** deleteOrganizationMember
+
+-- | @DELETE \/api\/backend\/v1\/organizations2\/{organizationIdentifier}\/members\/{userId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteOrganizationMember
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> UserId -- ^ "userId"
+  -> NeptuneBackendRequest DeleteOrganizationMember MimeNoContent res accept
+deleteOrganizationMember  _ (OrganizationIdentifier organizationIdentifier) (UserId userId) =
+  _mkRequest "DELETE" ["/api/backend/v1/organizations2/",toPath organizationIdentifier,"/members/",toPath userId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DeleteOrganizationMember
+-- | @*/*@
+instance MimeType mtype => Produces DeleteOrganizationMember mtype
+
+
+-- *** deleteProject
+
+-- | @DELETE \/api\/backend\/v1\/projects@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteProject
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest DeleteProject MimeNoContent res accept
+deleteProject  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "DELETE" ["/api/backend/v1/projects"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data DeleteProject
+-- | @*/*@
+instance MimeType mtype => Produces DeleteProject mtype
+
+
+-- *** deleteProjectMember
+
+-- | @DELETE \/api\/backend\/v1\/projects\/members\/{userId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteProjectMember
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> UserId -- ^ "userId"
+  -> NeptuneBackendRequest DeleteProjectMember MimeNoContent res accept
+deleteProjectMember  _ (ProjectIdentifier projectIdentifier) (UserId userId) =
+  _mkRequest "DELETE" ["/api/backend/v1/projects/members/",toPath userId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data DeleteProjectMember
+-- | @*/*@
+instance MimeType mtype => Produces DeleteProjectMember mtype
+
+
+-- *** deleteUserProfileLink
+
+-- | @DELETE \/api\/backend\/v1\/userProfile\/links@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deleteUserProfileLink
+  :: (Consumes DeleteUserProfileLink contentType, MimeRender contentType LinkDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> LinkDTO -- ^ "link"
+  -> NeptuneBackendRequest DeleteUserProfileLink contentType res accept
+deleteUserProfileLink _  _ link =
+  _mkRequest "DELETE" ["/api/backend/v1/userProfile/links"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` link
+
+data DeleteUserProfileLink
+instance HasBodyParam DeleteUserProfileLink LinkDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes DeleteUserProfileLink mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces DeleteUserProfileLink mtype
+
+
+-- *** deprecatedGetChannelValues
+
+-- | @GET \/api\/backend\/v1\/channels\/{channelId}\/values@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+deprecatedGetChannelValues
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChannelId -- ^ "channelId"
+  -> NeptuneBackendRequest DeprecatedGetChannelValues MimeNoContent LimitedChannelValuesDTO accept
+deprecatedGetChannelValues  _ (ChannelId channelId) =
+  _mkRequest "GET" ["/api/backend/v1/channels/",toPath channelId,"/values"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DeprecatedGetChannelValues
+instance HasOptionalParam DeprecatedGetChannelValues Offset where
+  applyOptionalParam req (Offset xs) =
+    req `addQuery` toQuery ("offset", Just xs)
+instance HasOptionalParam DeprecatedGetChannelValues Limit where
+  applyOptionalParam req (Limit xs) =
+    req `addQuery` toQuery ("limit", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces DeprecatedGetChannelValues mtype
+
+
+-- *** deprecatedGetChannelValuesCSV
+
+-- | @GET \/api\/backend\/v1\/channels\/{channelId}\/csv@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+deprecatedGetChannelValuesCSV
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChannelId -- ^ "channelId"
+  -> NeptuneBackendRequest DeprecatedGetChannelValuesCSV MimeNoContent res accept
+deprecatedGetChannelValuesCSV  _ (ChannelId channelId) =
+  _mkRequest "GET" ["/api/backend/v1/channels/",toPath channelId,"/csv"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DeprecatedGetChannelValuesCSV
+instance HasOptionalParam DeprecatedGetChannelValuesCSV ExperimentId where
+  applyOptionalParam req (ExperimentId xs) =
+    req `addQuery` toQuery ("experimentId", Just xs)
+instance HasOptionalParam DeprecatedGetChannelValuesCSV Gzipped where
+  applyOptionalParam req (Gzipped xs) =
+    req `addQuery` toQuery ("gzipped", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces DeprecatedGetChannelValuesCSV mtype
+
+
+-- *** downgradeTeamOrganization
+
+-- | @DELETE \/api\/backend\/v1\/payments\/{organizationIdentifier}\/downgrade@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+downgradeTeamOrganization
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest DowngradeTeamOrganization MimeNoContent res accept
+downgradeTeamOrganization  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "DELETE" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/downgrade"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data DowngradeTeamOrganization
+-- | @*/*@
+instance MimeType mtype => Produces DowngradeTeamOrganization mtype
+
+
+-- *** downloadData
+
+-- | @GET \/api\/leaderboard\/v1\/storage\/legacy\/download@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+downloadData
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectId -- ^ "projectId"
+  -> Path -- ^ "path"
+  -> NeptuneBackendRequest DownloadData MimeNoContent res accept
+downloadData  _ (ProjectId projectId) (Path path) =
+  _mkRequest "GET" ["/api/leaderboard/v1/storage/legacy/download"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectId", Just projectId)
+    `addQuery` toQuery ("path", Just path)
+
+data DownloadData
+-- | @*/*@
+instance MimeType mtype => Produces DownloadData mtype
+
+
+-- *** emptyExperimentsTrash
+
+-- | @POST \/api\/leaderboard\/v1\/experiments\/trash\/empty@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+emptyExperimentsTrash
+  :: (Consumes EmptyExperimentsTrash contentType, MimeRender contentType ExperimentIds)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentIds -- ^ "experimentIds"
+  -> NeptuneBackendRequest EmptyExperimentsTrash contentType [BatchExperimentUpdateResult] accept
+emptyExperimentsTrash _  _ experimentIds =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments/trash/empty"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` experimentIds
+
+data EmptyExperimentsTrash
+instance HasBodyParam EmptyExperimentsTrash ExperimentIds
+
+-- | @*/*@
+instance MimeType mtype => Consumes EmptyExperimentsTrash mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces EmptyExperimentsTrash mtype
+
+
+-- *** exchangeApiToken
+
+-- | @GET \/api\/backend\/v1\/authorization\/oauth-token@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+exchangeApiToken
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> XNeptuneApiToken -- ^ "xNeptuneApiToken"
+  -> NeptuneBackendRequest ExchangeApiToken MimeNoContent NeptuneOauthToken accept
+exchangeApiToken  _ (XNeptuneApiToken xNeptuneApiToken) =
+  _mkRequest "GET" ["/api/backend/v1/authorization/oauth-token"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addHeader` toHeader ("X-Neptune-Api-Token", xNeptuneApiToken)
+
+data ExchangeApiToken
+-- | @*/*@
+instance MimeType mtype => Produces ExchangeApiToken mtype
+
+
+-- *** filterOrganizations
+
+-- | @GET \/api\/backend\/v1\/organizations2@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+filterOrganizations
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> Ids -- ^ "ids"
+  -> NeptuneBackendRequest FilterOrganizations MimeNoContent [OrganizationDTO] accept
+filterOrganizations  _ (Ids ids) =
+  _mkRequest "GET" ["/api/backend/v1/organizations2"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQueryColl MultiParamArray ("ids", Just ids)
+
+data FilterOrganizations
+-- | @*/*@
+instance MimeType mtype => Produces FilterOrganizations mtype
+
+
+-- *** generateProjectKey
+
+-- | @GET \/api\/backend\/v1\/projects\/key@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+generateProjectKey
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationId -- ^ "organizationId"
+  -> ProjectName -- ^ "projectName"
+  -> NeptuneBackendRequest GenerateProjectKey MimeNoContent ProjectKeyDTO accept
+generateProjectKey  _ (OrganizationId organizationId) (ProjectName projectName) =
+  _mkRequest "GET" ["/api/backend/v1/projects/key"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("organizationId", Just organizationId)
+    `addQuery` toQuery ("projectName", Just projectName)
+
+data GenerateProjectKey
+-- | @*/*@
+instance MimeType mtype => Produces GenerateProjectKey mtype
+
+
+-- *** getAchievements
+
+-- | @GET \/api\/backend\/v1\/achievements@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getAchievements
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest GetAchievements MimeNoContent AchievementsDTO accept
+getAchievements  _ =
+  _mkRequest "GET" ["/api/backend/v1/achievements"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetAchievements
+-- | @*/*@
+instance MimeType mtype => Produces GetAchievements mtype
+
+
+-- *** getApiToken
+
+-- | @GET \/api\/backend\/v1\/authorization\/api-token@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getApiToken
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest GetApiToken MimeNoContent NeptuneApiToken accept
+getApiToken  _ =
+  _mkRequest "GET" ["/api/backend/v1/authorization/api-token"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetApiToken
+-- | @*/*@
+instance MimeType mtype => Produces GetApiToken mtype
+
+
+-- *** getChannelValues
+
+-- | @GET \/api\/leaderboard\/v1\/channels\/{channelId}\/values@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getChannelValues
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChannelId -- ^ "channelId"
+  -> NeptuneBackendRequest GetChannelValues MimeNoContent LimitedChannelValuesDTO accept
+getChannelValues  _ (ChannelId channelId) =
+  _mkRequest "GET" ["/api/leaderboard/v1/channels/",toPath channelId,"/values"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetChannelValues
+instance HasOptionalParam GetChannelValues Offset where
+  applyOptionalParam req (Offset xs) =
+    req `addQuery` toQuery ("offset", Just xs)
+instance HasOptionalParam GetChannelValues Limit where
+  applyOptionalParam req (Limit xs) =
+    req `addQuery` toQuery ("limit", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces GetChannelValues mtype
+
+
+-- *** getChannelValuesCSV
+
+-- | @GET \/api\/leaderboard\/v1\/channels\/{channelId}\/csv@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getChannelValuesCSV
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChannelId -- ^ "channelId"
+  -> NeptuneBackendRequest GetChannelValuesCSV MimeNoContent res accept
+getChannelValuesCSV  _ (ChannelId channelId) =
+  _mkRequest "GET" ["/api/leaderboard/v1/channels/",toPath channelId,"/csv"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetChannelValuesCSV
+instance HasOptionalParam GetChannelValuesCSV ExperimentId where
+  applyOptionalParam req (ExperimentId xs) =
+    req `addQuery` toQuery ("experimentId", Just xs)
+instance HasOptionalParam GetChannelValuesCSV Gzipped where
+  applyOptionalParam req (Gzipped xs) =
+    req `addQuery` toQuery ("gzipped", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces GetChannelValuesCSV mtype
+
+
+-- *** getChannelsLastValues
+
+-- | @GET \/api\/backend\/v1\/channels\/lastValues@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getChannelsLastValues
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest GetChannelsLastValues MimeNoContent [ChannelWithValueDTO] accept
+getChannelsLastValues  _ (ExperimentId experimentId) =
+  _mkRequest "GET" ["/api/backend/v1/channels/lastValues"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data GetChannelsLastValues
+-- | @*/*@
+instance MimeType mtype => Produces GetChannelsLastValues mtype
+
+
+-- *** getChartSet
+
+-- | @GET \/api\/backend\/v1\/chartSets\/{chartSetId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getChartSet
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest GetChartSet MimeNoContent ChartSet accept
+getChartSet  _ (ChartSetId chartSetId) =
+  _mkRequest "GET" ["/api/backend/v1/chartSets/",toPath chartSetId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetChartSet
+-- | @*/*@
+instance MimeType mtype => Produces GetChartSet mtype
+
+
+-- *** getClientConfig
+
+-- | @GET \/api\/backend\/v1\/clients\/config@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getClientConfig
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> XNeptuneApiToken -- ^ "xNeptuneApiToken"
+  -> NeptuneBackendRequest GetClientConfig MimeNoContent ClientConfig accept
+getClientConfig  _ (XNeptuneApiToken xNeptuneApiToken) =
+  _mkRequest "GET" ["/api/backend/v1/clients/config"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addHeader` toHeader ("X-Neptune-Api-Token", xNeptuneApiToken)
+
+data GetClientConfig
+-- | @*/*@
+instance MimeType mtype => Produces GetClientConfig mtype
+
+
+-- *** getCreditCard
+
+-- | @GET \/api\/backend\/v1\/payments\/{organizationIdentifier}\/creditCard@
+--
+-- Returns a Stripe Source object
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getCreditCard
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest GetCreditCard MimeNoContent Text accept
+getCreditCard  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/creditCard"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetCreditCard
+-- | @*/*@
+instance MimeType mtype => Produces GetCreditCard mtype
+
+
+-- *** getCustomer
+
+-- | @GET \/api\/backend\/v1\/payments\/{organizationIdentifier}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getCustomer
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest GetCustomer MimeNoContent CustomerDTO accept
+getCustomer  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/payments/",toPath organizationIdentifier]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetCustomer
+-- | @*/*@
+instance MimeType mtype => Produces GetCustomer mtype
+
+
+-- *** getDownloadPrepareRequest
+
+-- | @GET \/api\/leaderboard\/v1\/storage\/downloadRequest@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getDownloadPrepareRequest
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> Id -- ^ "id"
+  -> NeptuneBackendRequest GetDownloadPrepareRequest MimeNoContent DownloadPrepareRequestDTO accept
+getDownloadPrepareRequest  _ (Id id) =
+  _mkRequest "GET" ["/api/leaderboard/v1/storage/downloadRequest"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("id", Just id)
+
+data GetDownloadPrepareRequest
+-- | @*/*@
+instance MimeType mtype => Produces GetDownloadPrepareRequest mtype
+
+
+-- *** getExperiment
+
+-- | @GET \/api\/leaderboard\/v1\/experiments@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getExperiment
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest GetExperiment MimeNoContent Experiment accept
+getExperiment  _ (ExperimentId experimentId) =
+  _mkRequest "GET" ["/api/leaderboard/v1/experiments"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data GetExperiment
+-- | @*/*@
+instance MimeType mtype => Produces GetExperiment mtype
+
+
+-- *** getExperimentCharts
+
+-- | @GET \/api\/backend\/v1\/experiments\/{experimentId}\/charts@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getExperimentCharts
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest GetExperimentCharts MimeNoContent Charts accept
+getExperimentCharts  _ (ExperimentId experimentId) (ChartSetId chartSetId) =
+  _mkRequest "GET" ["/api/backend/v1/experiments/",toPath experimentId,"/charts"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("chartSetId", Just chartSetId)
+
+data GetExperimentCharts
+-- | @*/*@
+instance MimeType mtype => Produces GetExperimentCharts mtype
+
+
+-- *** getExperimentsAttributesNames
+
+-- | @GET \/api\/leaderboard\/v1\/experiments-attributes-names@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getExperimentsAttributesNames
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest GetExperimentsAttributesNames MimeNoContent ExperimentsAttributesNamesDTO accept
+getExperimentsAttributesNames  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "GET" ["/api/leaderboard/v1/experiments-attributes-names"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data GetExperimentsAttributesNames
+-- | @*/*@
+instance MimeType mtype => Produces GetExperimentsAttributesNames mtype
+
+
+-- *** getLoginActions
+
+-- | @GET \/api\/backend\/v1\/login\/actions@
+--
+-- Returns a list of actions that backend requires the user to complete before he can start working with Neptune
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getLoginActions
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest GetLoginActions MimeNoContent LoginActionsListDTO accept
+getLoginActions  _ =
+  _mkRequest "GET" ["/api/backend/v1/login/actions"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetLoginActions
+-- | @*/*@
+instance MimeType mtype => Produces GetLoginActions mtype
+
+
+-- *** getOrganization
+
+-- | @GET \/api\/backend\/v1\/organizations2\/{organization}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getOrganization
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> Organization -- ^ "organization"
+  -> NeptuneBackendRequest GetOrganization MimeNoContent OrganizationDTO accept
+getOrganization  _ (Organization organization) =
+  _mkRequest "GET" ["/api/backend/v1/organizations2/",toPath organization]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetOrganization
+-- | @*/*@
+instance MimeType mtype => Produces GetOrganization mtype
+
+
+-- *** getOrganizationAvatar
+
+-- | @GET \/api\/backend\/v1\/organizations2\/{organizationName}\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getOrganizationAvatar
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationName -- ^ "organizationName"
+  -> NeptuneBackendRequest GetOrganizationAvatar MimeNoContent res accept
+getOrganizationAvatar  _ (OrganizationName organizationName) =
+  _mkRequest "GET" ["/api/backend/v1/organizations2/",toPath organizationName,"/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetOrganizationAvatar
+-- | @*/*@
+instance MimeType mtype => Produces GetOrganizationAvatar mtype
+
+
+-- *** getOrganizationInvitation
+
+-- | @GET \/api\/backend\/v1\/invitations\/organization\/{invitationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getOrganizationInvitation
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest GetOrganizationInvitation MimeNoContent OrganizationInvitationDTO accept
+getOrganizationInvitation  _ (InvitationId invitationId) =
+  _mkRequest "GET" ["/api/backend/v1/invitations/organization/",toPath invitationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetOrganizationInvitation
+-- | @*/*@
+instance MimeType mtype => Produces GetOrganizationInvitation mtype
+
+
+-- *** getOrganizationLimits
+
+-- | @GET \/api\/backend\/v1\/organizations2\/{organizationIdentifier}\/limits@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getOrganizationLimits
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest GetOrganizationLimits MimeNoContent OrganizationLimitsDTO accept
+getOrganizationLimits  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/organizations2/",toPath organizationIdentifier,"/limits"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetOrganizationLimits
+-- | @*/*@
+instance MimeType mtype => Produces GetOrganizationLimits mtype
+
+
+-- *** getPastInvoices
+
+-- | @GET \/api\/backend\/v1\/payments\/{organizationIdentifier}\/invoices\/past@
+--
+-- Pass-through to Stripe /v1/invoices
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getPastInvoices
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest GetPastInvoices MimeNoContent Text accept
+getPastInvoices  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/invoices/past"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetPastInvoices
+-- | @*/*@
+instance MimeType mtype => Produces GetPastInvoices mtype
+
+
+-- *** getPricingPlan
+
+-- | @GET \/api\/backend\/v1\/payments\/{organizationIdentifier}\/pricingPlan@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getPricingPlan
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest GetPricingPlan MimeNoContent OrganizationPricingPlanDTO accept
+getPricingPlan  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/pricingPlan"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetPricingPlan
+-- | @*/*@
+instance MimeType mtype => Produces GetPricingPlan mtype
+
+
+-- *** getProject
+
+-- | @GET \/api\/backend\/v1\/projects\/get@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getProject
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest GetProject MimeNoContent ProjectWithRoleDTO accept
+getProject  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/projects/get"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data GetProject
+-- | @*/*@
+instance MimeType mtype => Produces GetProject mtype
+
+
+-- *** getProjectAvatar
+
+-- | @GET \/api\/backend\/v1\/organizations\/{organizationName}\/projects\/{projectName}\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getProjectAvatar
+  :: OrganizationName -- ^ "organizationName"
+  -> ProjectName -- ^ "projectName"
+  -> NeptuneBackendRequest GetProjectAvatar MimeNoContent res MimeImagePng
+getProjectAvatar (OrganizationName organizationName) (ProjectName projectName) =
+  _mkRequest "GET" ["/api/backend/v1/organizations/",toPath organizationName,"/projects/",toPath projectName,"/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetProjectAvatar
+-- | @image/png@
+instance Produces GetProjectAvatar MimeImagePng
+
+
+-- *** getProjectBackground
+
+-- | @GET \/api\/backend\/v1\/organizations\/{organizationName}\/projects\/{projectName}\/background@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getProjectBackground
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationName -- ^ "organizationName"
+  -> ProjectName -- ^ "projectName"
+  -> NeptuneBackendRequest GetProjectBackground MimeNoContent res accept
+getProjectBackground  _ (OrganizationName organizationName) (ProjectName projectName) =
+  _mkRequest "GET" ["/api/backend/v1/organizations/",toPath organizationName,"/projects/",toPath projectName,"/background"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetProjectBackground
+-- | @*/*@
+instance MimeType mtype => Produces GetProjectBackground mtype
+
+
+-- *** getProjectInvitation
+
+-- | @GET \/api\/backend\/v1\/invitations\/project\/{invitationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getProjectInvitation
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest GetProjectInvitation MimeNoContent ProjectInvitationDTO accept
+getProjectInvitation  _ (InvitationId invitationId) =
+  _mkRequest "GET" ["/api/backend/v1/invitations/project/",toPath invitationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetProjectInvitation
+-- | @*/*@
+instance MimeType mtype => Produces GetProjectInvitation mtype
+
+
+-- *** getProjectMetadata
+
+-- | @GET \/api\/backend\/v1\/projects\/metadata@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getProjectMetadata
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest GetProjectMetadata MimeNoContent ProjectMetadataDTO accept
+getProjectMetadata  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/projects/metadata"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data GetProjectMetadata
+-- | @*/*@
+instance MimeType mtype => Produces GetProjectMetadata mtype
+
+
+-- *** getSsoConfig
+
+-- | @GET \/api\/backend\/v1\/clients\/sso@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getSsoConfig
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> WorkspaceName -- ^ "workspaceName"
+  -> NeptuneBackendRequest GetSsoConfig MimeNoContent WorkspaceConfig accept
+getSsoConfig  _ (WorkspaceName workspaceName) =
+  _mkRequest "GET" ["/api/backend/v1/clients/sso"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("workspaceName", Just workspaceName)
+
+data GetSsoConfig
+-- | @*/*@
+instance MimeType mtype => Produces GetSsoConfig mtype
+
+
+-- *** getSystemChannels
+
+-- | @GET \/api\/backend\/v1\/channels\/system@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getSystemChannels
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest GetSystemChannels MimeNoContent [ChannelDTO] accept
+getSystemChannels  _ (ExperimentId experimentId) =
+  _mkRequest "GET" ["/api/backend/v1/channels/system"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data GetSystemChannels
+-- | @*/*@
+instance MimeType mtype => Produces GetSystemChannels mtype
+
+
+-- *** getSystemMetricValues
+
+-- | @GET \/api\/backend\/v1\/experiments\/{experimentId}\/system\/metrics\/{metricId}\/values@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getSystemMetricValues
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> MetricId -- ^ "metricId"
+  -> NeptuneBackendRequest GetSystemMetricValues MimeNoContent [SystemMetricValues] accept
+getSystemMetricValues  _ (ExperimentId experimentId) (MetricId metricId) =
+  _mkRequest "GET" ["/api/backend/v1/experiments/",toPath experimentId,"/system/metrics/",toPath metricId,"/values"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetSystemMetricValues
+instance HasOptionalParam GetSystemMetricValues StartPoint where
+  applyOptionalParam req (StartPoint xs) =
+    req `addQuery` toQuery ("startPoint", Just xs)
+instance HasOptionalParam GetSystemMetricValues EndPoint where
+  applyOptionalParam req (EndPoint xs) =
+    req `addQuery` toQuery ("endPoint", Just xs)
+instance HasOptionalParam GetSystemMetricValues ItemCount where
+  applyOptionalParam req (ItemCount xs) =
+    req `addQuery` toQuery ("itemCount", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces GetSystemMetricValues mtype
+
+
+-- *** getSystemMetrics
+
+-- | @GET \/api\/backend\/v1\/experiments\/{experimentId}\/system\/metrics@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getSystemMetrics
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest GetSystemMetrics MimeNoContent [SystemMetric] accept
+getSystemMetrics  _ (ExperimentId experimentId) =
+  _mkRequest "GET" ["/api/backend/v1/experiments/",toPath experimentId,"/system/metrics"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetSystemMetrics
+-- | @*/*@
+instance MimeType mtype => Produces GetSystemMetrics mtype
+
+
+-- *** getSystemMetricsCSV
+
+-- | @GET \/api\/backend\/v1\/experiments\/{experimentId}\/system\/metrics\/csv@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getSystemMetricsCSV
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest GetSystemMetricsCSV MimeNoContent res accept
+getSystemMetricsCSV  _ (ExperimentId experimentId) =
+  _mkRequest "GET" ["/api/backend/v1/experiments/",toPath experimentId,"/system/metrics/csv"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetSystemMetricsCSV
+instance HasOptionalParam GetSystemMetricsCSV Gzipped where
+  applyOptionalParam req (Gzipped xs) =
+    req `addQuery` toQuery ("gzipped", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces GetSystemMetricsCSV mtype
+
+
+-- *** getUpcomingInvoice
+
+-- | @GET \/api\/backend\/v1\/payments\/{organizationIdentifier}\/invoices\/upcoming@
+--
+-- Pass-through to Stripe /v1/invoices/upcoming
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getUpcomingInvoice
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest GetUpcomingInvoice MimeNoContent Text accept
+getUpcomingInvoice  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/payments/",toPath organizationIdentifier,"/invoices/upcoming"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetUpcomingInvoice
+-- | @*/*@
+instance MimeType mtype => Produces GetUpcomingInvoice mtype
+
+
+-- *** getUserAvatar
+
+-- | @GET \/api\/backend\/v1\/users\/{username}\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getUserAvatar
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> UsernameText -- ^ "username"
+  -> NeptuneBackendRequest GetUserAvatar MimeNoContent res accept
+getUserAvatar  _ (UsernameText username) =
+  _mkRequest "GET" ["/api/backend/v1/users/",toPath username,"/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetUserAvatar
+-- | @*/*@
+instance MimeType mtype => Produces GetUserAvatar mtype
+
+
+-- *** getUserProfile
+
+-- | @GET \/api\/backend\/v1\/userProfile@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+getUserProfile
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest GetUserProfile MimeNoContent UserProfileDTO accept
+getUserProfile  _ =
+  _mkRequest "GET" ["/api/backend/v1/userProfile"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetUserProfile
+-- | @*/*@
+instance MimeType mtype => Produces GetUserProfile mtype
+
+
+-- *** getUserProfileAvatar
+
+-- | @GET \/api\/backend\/v1\/userProfile\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+getUserProfileAvatar
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest GetUserProfileAvatar MimeNoContent res accept
+getUserProfileAvatar  _ =
+  _mkRequest "GET" ["/api/backend/v1/userProfile/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GetUserProfileAvatar
+-- | @*/*@
+instance MimeType mtype => Produces GetUserProfileAvatar mtype
+
+
+-- *** globalConfiguration0
+
+-- | @GET \/api\/backend\/v1\/config@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+globalConfiguration0
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest GlobalConfiguration0 MimeNoContent GlobalConfiguration accept
+globalConfiguration0  _ =
+  _mkRequest "GET" ["/api/backend/v1/config"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data GlobalConfiguration0
+-- | @*/*@
+instance MimeType mtype => Produces GlobalConfiguration0 mtype
+
+
+-- *** healthz
+
+-- | @GET \/api\/backend\/healthz@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+healthz
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest Healthz MimeNoContent [ComponentStatus] accept
+healthz  _ =
+  _mkRequest "GET" ["/api/backend/healthz"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data Healthz
+-- | @*/*@
+instance MimeType mtype => Produces Healthz mtype
+
+
+-- *** isOrganizationNameAvailable
+
+-- | @GET \/api\/backend\/v1\/organizations2\/{organizationName}\/available@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+isOrganizationNameAvailable
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationName -- ^ "organizationName"
+  -> NeptuneBackendRequest IsOrganizationNameAvailable MimeNoContent OrganizationNameAvailableDTO accept
+isOrganizationNameAvailable  _ (OrganizationName organizationName) =
+  _mkRequest "GET" ["/api/backend/v1/organizations2/",toPath organizationName,"/available"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data IsOrganizationNameAvailable
+-- | @*/*@
+instance MimeType mtype => Produces IsOrganizationNameAvailable mtype
+
+
+-- *** leaveProject
+
+-- | @POST \/api\/backend\/v1\/projects\/leave@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+leaveProject
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest LeaveProject MimeNoContent res accept
+leaveProject  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "POST" ["/api/backend/v1/projects/leave"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data LeaveProject
+-- | @*/*@
+instance MimeType mtype => Produces LeaveProject mtype
+
+
+-- *** listMembers
+
+-- | @GET \/api\/backend\/v1\/projects\/users@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listMembers
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest ListMembers MimeNoContent [UserListDTO] accept
+listMembers  _ =
+  _mkRequest "GET" ["/api/backend/v1/projects/users"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data ListMembers
+instance HasOptionalParam ListMembers OrganizationIdentifier where
+  applyOptionalParam req (OrganizationIdentifier xs) =
+    req `addQuery` toQuery ("organizationIdentifier", Just xs)
+instance HasOptionalParam ListMembers ProjectIdentifier where
+  applyOptionalParam req (ProjectIdentifier xs) =
+    req `addQuery` toQuery ("projectIdentifier", Just xs)
+instance HasOptionalParam ListMembers UsernamePrefix where
+  applyOptionalParam req (UsernamePrefix xs) =
+    req `addQuery` toQuery ("usernamePrefix", Just xs)
+instance HasOptionalParam ListMembers Offset where
+  applyOptionalParam req (Offset xs) =
+    req `addQuery` toQuery ("offset", Just xs)
+instance HasOptionalParam ListMembers Limit where
+  applyOptionalParam req (Limit xs) =
+    req `addQuery` toQuery ("limit", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces ListMembers mtype
+
+
+-- *** listOrganizationMembers
+
+-- | @GET \/api\/backend\/v1\/organizations2\/{organizationIdentifier}\/members@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listOrganizationMembers
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> NeptuneBackendRequest ListOrganizationMembers MimeNoContent [OrganizationMemberDTO] accept
+listOrganizationMembers  _ (OrganizationIdentifier organizationIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/organizations2/",toPath organizationIdentifier,"/members"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data ListOrganizationMembers
+-- | @*/*@
+instance MimeType mtype => Produces ListOrganizationMembers mtype
+
+
+-- *** listOrganizations
+
+-- | @GET \/api\/backend\/v1\/myOrganizations@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listOrganizations
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest ListOrganizations MimeNoContent [OrganizationWithRoleDTO] accept
+listOrganizations  _ =
+  _mkRequest "GET" ["/api/backend/v1/myOrganizations"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data ListOrganizations
+-- | @*/*@
+instance MimeType mtype => Produces ListOrganizations mtype
+
+
+-- *** listProjectChartSets
+
+-- | @GET \/api\/backend\/v1\/chartSets@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listProjectChartSets
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectId -- ^ "projectId"
+  -> NeptuneBackendRequest ListProjectChartSets MimeNoContent [ChartSet] accept
+listProjectChartSets  _ (ProjectId projectId) =
+  _mkRequest "GET" ["/api/backend/v1/chartSets"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectId", Just projectId)
+
+data ListProjectChartSets
+-- | @*/*@
+instance MimeType mtype => Produces ListProjectChartSets mtype
+
+
+-- *** listProjectMembers
+
+-- | @GET \/api\/backend\/v1\/projects\/membersOf@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listProjectMembers
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest ListProjectMembers MimeNoContent [ProjectMemberDTO] accept
+listProjectMembers  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/projects/membersOf"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data ListProjectMembers
+-- | @*/*@
+instance MimeType mtype => Produces ListProjectMembers mtype
+
+
+-- *** listProjects
+
+-- | @GET \/api\/backend\/v1\/projects@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listProjects
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest ListProjects MimeNoContent ProjectListDTO accept
+listProjects  _ =
+  _mkRequest "GET" ["/api/backend/v1/projects"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data ListProjects
+instance HasOptionalParam ListProjects OrganizationIdentifier where
+  applyOptionalParam req (OrganizationIdentifier xs) =
+    req `addQuery` toQuery ("organizationIdentifier", Just xs)
+instance HasOptionalParam ListProjects ProjectKey where
+  applyOptionalParam req (ProjectKey xs) =
+    req `addQuery` toQuery ("projectKey", Just xs)
+instance HasOptionalParam ListProjects SearchTerm where
+  applyOptionalParam req (SearchTerm xs) =
+    req `addQuery` toQuery ("searchTerm", Just xs)
+instance HasOptionalParam ListProjects Visibility where
+  applyOptionalParam req (Visibility xs) =
+    req `addQuery` toQuery ("visibility", Just xs)
+instance HasOptionalParam ListProjects ViewedUsername where
+  applyOptionalParam req (ViewedUsername xs) =
+    req `addQuery` toQuery ("viewedUsername", Just xs)
+instance HasOptionalParam ListProjects UserRelation where
+  applyOptionalParam req (UserRelation xs) =
+    req `addQuery` toQuery ("userRelation", Just xs)
+instance HasOptionalParam ListProjects OrgRelation where
+  applyOptionalParam req (OrgRelation xs) =
+    req `addQuery` toQueryColl MultiParamArray ("orgRelation", Just xs)
+instance HasOptionalParam ListProjects SortBy where
+  applyOptionalParam req (SortBy xs) =
+    req `addQuery` toQueryColl MultiParamArray ("sortBy", Just xs)
+instance HasOptionalParam ListProjects SortDirection where
+  applyOptionalParam req (SortDirection xs) =
+    req `addQuery` toQueryColl MultiParamArray ("sortDirection", Just xs)
+instance HasOptionalParam ListProjects Offset where
+  applyOptionalParam req (Offset xs) =
+    req `addQuery` toQuery ("offset", Just xs)
+instance HasOptionalParam ListProjects Limit where
+  applyOptionalParam req (Limit xs) =
+    req `addQuery` toQuery ("limit", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces ListProjects mtype
+
+
+-- *** listProjectsMembers
+
+-- | @GET \/api\/backend\/v1\/projects\/members@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listProjectsMembers
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifierText -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest ListProjectsMembers MimeNoContent [ProjectMembersDTO] accept
+listProjectsMembers  _ (ProjectIdentifierText projectIdentifier) =
+  _mkRequest "GET" ["/api/backend/v1/projects/members"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQueryColl MultiParamArray ("projectIdentifier", Just projectIdentifier)
+
+data ListProjectsMembers
+instance HasOptionalParam ListProjectsMembers IncludeInvitations where
+  applyOptionalParam req (IncludeInvitations xs) =
+    req `addQuery` toQuery ("includeInvitations", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces ListProjectsMembers mtype
+
+
+-- *** listUsers
+
+-- | @GET \/api\/backend\/v1\/users@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+listUsers
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> Username -- ^ "username"
+  -> NeptuneBackendRequest ListUsers MimeNoContent [PublicUserProfileDTO] accept
+listUsers  _ (Username username) =
+  _mkRequest "GET" ["/api/backend/v1/users"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQueryColl MultiParamArray ("username", Just username)
+
+data ListUsers
+-- | @*/*@
+instance MimeType mtype => Produces ListUsers mtype
+
+
+-- *** markExperimentCompleted
+
+-- | @POST \/api\/leaderboard\/v1\/experiments\/markCompleted@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+markExperimentCompleted
+  :: (Consumes MarkExperimentCompleted contentType, MimeRender contentType CompletedExperimentParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> CompletedExperimentParams -- ^ "completedExperimentParams"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest MarkExperimentCompleted contentType res accept
+markExperimentCompleted _  _ completedExperimentParams (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments/markCompleted"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` completedExperimentParams
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data MarkExperimentCompleted
+instance HasBodyParam MarkExperimentCompleted CompletedExperimentParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes MarkExperimentCompleted mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces MarkExperimentCompleted mtype
+
+
+-- *** pingExperiment
+
+-- | @POST \/api\/leaderboard\/v1\/experiments\/ping@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+pingExperiment
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest PingExperiment MimeNoContent res accept
+pingExperiment  _ (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments/ping"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data PingExperiment
+-- | @*/*@
+instance MimeType mtype => Produces PingExperiment mtype
+
+
+-- *** postChannelValues
+
+-- | @POST \/api\/leaderboard\/v1\/channels\/values@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+postChannelValues
+  :: (Consumes PostChannelValues contentType, MimeRender contentType ChannelsValues)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChannelsValues -- ^ "channelsValues"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest PostChannelValues contentType [BatchChannelValueErrorDTO] accept
+postChannelValues _  _ channelsValues (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/channels/values"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` channelsValues
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data PostChannelValues
+instance HasBodyParam PostChannelValues ChannelsValues
+
+-- | @*/*@
+instance MimeType mtype => Consumes PostChannelValues mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces PostChannelValues mtype
+
+
+-- *** postSystemMetricValues
+
+-- | @POST \/api\/backend\/v1\/experiments\/{experimentId}\/system\/metrics\/values@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+postSystemMetricValues
+  :: (Consumes PostSystemMetricValues contentType, MimeRender contentType MetricValues)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> MetricValues -- ^ "metricValues"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest PostSystemMetricValues contentType res accept
+postSystemMetricValues _  _ metricValues (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/backend/v1/experiments/",toPath experimentId,"/system/metrics/values"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` metricValues
+
+data PostSystemMetricValues
+instance HasBodyParam PostSystemMetricValues MetricValues
+
+-- | @*/*@
+instance MimeType mtype => Consumes PostSystemMetricValues mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces PostSystemMetricValues mtype
+
+
+-- *** prepareForDownload
+
+-- | @POST \/api\/leaderboard\/v1\/storage\/legacy\/downloadRequest@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+prepareForDownload
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentIdentity -- ^ "experimentIdentity"
+  -> Resource -- ^ "resource"
+  -> Path -- ^ "path"
+  -> NeptuneBackendRequest PrepareForDownload MimeNoContent DownloadPrepareRequestDTO accept
+prepareForDownload  _ (ExperimentIdentity experimentIdentity) (Resource resource) (Path path) =
+  _mkRequest "POST" ["/api/leaderboard/v1/storage/legacy/downloadRequest"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("experimentIdentity", Just experimentIdentity)
+    `addQuery` toQuery ("resource", Just resource)
+    `addQuery` toQuery ("path", Just path)
+
+data PrepareForDownload
+-- | @*/*@
+instance MimeType mtype => Produces PrepareForDownload mtype
+
+
+-- *** resetChannel
+
+-- | @DELETE \/api\/leaderboard\/v1\/channels\/{id}\/values@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+resetChannel
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> Id -- ^ "id"
+  -> NeptuneBackendRequest ResetChannel MimeNoContent res accept
+resetChannel  _ (Id id) =
+  _mkRequest "DELETE" ["/api/leaderboard/v1/channels/",toPath id,"/values"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data ResetChannel
+-- | @*/*@
+instance MimeType mtype => Produces ResetChannel mtype
+
+
+-- *** restoreExperiments
+
+-- | @POST \/api\/leaderboard\/v1\/experiments\/trash\/restore@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+restoreExperiments
+  :: (Consumes RestoreExperiments contentType, MimeRender contentType ExperimentIds)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentIds -- ^ "experimentIds"
+  -> NeptuneBackendRequest RestoreExperiments contentType [BatchExperimentUpdateResult] accept
+restoreExperiments _  _ experimentIds =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments/trash/restore"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` experimentIds
+
+data RestoreExperiments
+instance HasBodyParam RestoreExperiments ExperimentIds
+
+-- | @*/*@
+instance MimeType mtype => Consumes RestoreExperiments mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces RestoreExperiments mtype
+
+
+-- *** revokeApiToken
+
+-- | @DELETE \/api\/backend\/v1\/authorization\/api-token@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+revokeApiToken
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest RevokeApiToken MimeNoContent res accept
+revokeApiToken  _ =
+  _mkRequest "DELETE" ["/api/backend/v1/authorization/api-token"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data RevokeApiToken
+-- | @*/*@
+instance MimeType mtype => Produces RevokeApiToken mtype
+
+
+-- *** revokeOrganizationInvitation
+
+-- | @DELETE \/api\/backend\/v1\/invitations\/organization\/{invitationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+revokeOrganizationInvitation
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest RevokeOrganizationInvitation MimeNoContent res accept
+revokeOrganizationInvitation  _ (InvitationId invitationId) =
+  _mkRequest "DELETE" ["/api/backend/v1/invitations/organization/",toPath invitationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data RevokeOrganizationInvitation
+-- | @*/*@
+instance MimeType mtype => Produces RevokeOrganizationInvitation mtype
+
+
+-- *** revokeProjectInvitation
+
+-- | @DELETE \/api\/backend\/v1\/invitations\/project\/{invitationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+revokeProjectInvitation
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest RevokeProjectInvitation MimeNoContent res accept
+revokeProjectInvitation  _ (InvitationId invitationId) =
+  _mkRequest "DELETE" ["/api/backend/v1/invitations/project/",toPath invitationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data RevokeProjectInvitation
+-- | @*/*@
+instance MimeType mtype => Produces RevokeProjectInvitation mtype
+
+
+-- *** sendQuestionnaire
+
+-- | @PUT \/api\/backend\/v1\/reservations\/{organizationName}\/questionnaire@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+sendQuestionnaire
+  :: (Consumes SendQuestionnaire contentType, MimeRender contentType QuestionnaireDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> QuestionnaireDTO -- ^ "questionnaireAnswers"
+  -> OrganizationName -- ^ "organizationName"
+  -> NeptuneBackendRequest SendQuestionnaire contentType res accept
+sendQuestionnaire _  _ questionnaireAnswers (OrganizationName organizationName) =
+  _mkRequest "PUT" ["/api/backend/v1/reservations/",toPath organizationName,"/questionnaire"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` questionnaireAnswers
+
+data SendQuestionnaire
+instance HasBodyParam SendQuestionnaire QuestionnaireDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes SendQuestionnaire mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces SendQuestionnaire mtype
+
+
+-- *** sendRegistrationSurvey
+
+-- | @POST \/api\/backend\/v1\/login\/survey@
+--
+-- Processes the survey. Sending {} means that user declined survey and action is removed
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+sendRegistrationSurvey
+  :: (Consumes SendRegistrationSurvey contentType, MimeRender contentType RegistrationSurveyDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> RegistrationSurveyDTO -- ^ "survey"
+  -> NeptuneBackendRequest SendRegistrationSurvey contentType res accept
+sendRegistrationSurvey _  _ survey =
+  _mkRequest "POST" ["/api/backend/v1/login/survey"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` survey
+
+data SendRegistrationSurvey
+instance HasBodyParam SendRegistrationSurvey RegistrationSurveyDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes SendRegistrationSurvey mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces SendRegistrationSurvey mtype
+
+
+-- *** setUsername
+
+-- | @POST \/api\/backend\/v1\/login\/username@
+--
+--  Sets the username as per param. Can be called once, subsequent calls will result in 403 error. Setting to an invalid username will result in 400 error. Setting to an unavailable username will result in 409 error.
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+setUsername
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> UsernameText -- ^ "username"
+  -> NeptuneBackendRequest SetUsername MimeNoContent res accept
+setUsername  _ (UsernameText username) =
+  _mkRequest "POST" ["/api/backend/v1/login/username"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("username", Just username)
+
+data SetUsername
+-- | @*/*@
+instance MimeType mtype => Produces SetUsername mtype
+
+
+-- *** statusGet
+
+-- | @GET \/api\/backend\/status@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+statusGet
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest StatusGet MimeNoContent A.Value accept
+statusGet  _ =
+  _mkRequest "GET" ["/api/backend/status"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data StatusGet
+-- | @*/*@
+instance MimeType mtype => Produces StatusGet mtype
+
+
+-- *** storageUsage0
+
+-- | @GET \/api\/backend\/v1\/storage\/usage@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+storageUsage0
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest StorageUsage0 MimeNoContent StorageUsage accept
+storageUsage0  _ =
+  _mkRequest "GET" ["/api/backend/v1/storage/usage"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data StorageUsage0
+instance HasOptionalParam StorageUsage0 OrganizationIdentifier where
+  applyOptionalParam req (OrganizationIdentifier xs) =
+    req `addQuery` toQuery ("organizationIdentifier", Just xs)
+instance HasOptionalParam StorageUsage0 ProjectIdentifier where
+  applyOptionalParam req (ProjectIdentifier xs) =
+    req `addQuery` toQuery ("projectIdentifier", Just xs)
+-- | @*/*@
+instance MimeType mtype => Produces StorageUsage0 mtype
+
+
+-- *** synchronizeSubscription
+
+-- | @PUT \/api\/backend\/v1\/payments\/{organizationName}\/synchronizeSubscription@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+synchronizeSubscription
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationName -- ^ "organizationName"
+  -> NeptuneBackendRequest SynchronizeSubscription MimeNoContent res accept
+synchronizeSubscription  _ (OrganizationName organizationName) =
+  _mkRequest "PUT" ["/api/backend/v1/payments/",toPath organizationName,"/synchronizeSubscription"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data SynchronizeSubscription
+-- | @*/*@
+instance MimeType mtype => Produces SynchronizeSubscription mtype
+
+
+-- *** tagsGet
+
+-- | @GET \/api\/leaderboard\/v1\/experiments\/tags@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+tagsGet
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest TagsGet MimeNoContent [Text] accept
+tagsGet  _ (ProjectIdentifier projectIdentifier) =
+  _mkRequest "GET" ["/api/leaderboard/v1/experiments/tags"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data TagsGet
+-- | @*/*@
+instance MimeType mtype => Produces TagsGet mtype
+
+
+-- *** trashExperiments
+
+-- | @POST \/api\/leaderboard\/v1\/experiments\/trash@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+trashExperiments
+  :: (Consumes TrashExperiments contentType, MimeRender contentType ExperimentIds)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentIds -- ^ "experimentIds"
+  -> NeptuneBackendRequest TrashExperiments contentType [BatchExperimentUpdateResult] accept
+trashExperiments _  _ experimentIds =
+  _mkRequest "POST" ["/api/leaderboard/v1/experiments/trash"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` experimentIds
+
+data TrashExperiments
+instance HasBodyParam TrashExperiments ExperimentIds
+
+-- | @*/*@
+instance MimeType mtype => Consumes TrashExperiments mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces TrashExperiments mtype
+
+
+-- *** updateChart
+
+-- | @PUT \/api\/backend\/v1\/chartSets\/{chartSetId}\/charts\/{chartId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateChart
+  :: (Consumes UpdateChart contentType, MimeRender contentType ChartDefinition)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChartDefinition -- ^ "chartToUpdate"
+  -> ChartId -- ^ "chartId"
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest UpdateChart contentType Chart accept
+updateChart _  _ chartToUpdate (ChartId chartId) (ChartSetId chartSetId) =
+  _mkRequest "PUT" ["/api/backend/v1/chartSets/",toPath chartSetId,"/charts/",toPath chartId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` chartToUpdate
+
+data UpdateChart
+instance HasBodyParam UpdateChart ChartDefinition
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateChart mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateChart mtype
+
+
+-- *** updateChartSet
+
+-- | @PUT \/api\/backend\/v1\/chartSets\/{chartSetId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateChartSet
+  :: (Consumes UpdateChartSet contentType, MimeRender contentType ChartSetParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ChartSetParams -- ^ "chartSetToUpdate"
+  -> ChartSetId -- ^ "chartSetId"
+  -> NeptuneBackendRequest UpdateChartSet contentType ChartSet accept
+updateChartSet _  _ chartSetToUpdate (ChartSetId chartSetId) =
+  _mkRequest "PUT" ["/api/backend/v1/chartSets/",toPath chartSetId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` chartSetToUpdate
+
+data UpdateChartSet
+instance HasBodyParam UpdateChartSet ChartSetParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateChartSet mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateChartSet mtype
+
+
+-- *** updateExperiment
+
+-- | @PATCH \/api\/leaderboard\/v1\/experiments@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateExperiment
+  :: (Consumes UpdateExperiment contentType, MimeRender contentType EditExperimentParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> EditExperimentParams -- ^ "editExperimentParams"
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest UpdateExperiment contentType Experiment accept
+updateExperiment _  _ editExperimentParams (ExperimentId experimentId) =
+  _mkRequest "PATCH" ["/api/leaderboard/v1/experiments"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` editExperimentParams
+    `addQuery` toQuery ("experimentId", Just experimentId)
+
+data UpdateExperiment
+instance HasBodyParam UpdateExperiment EditExperimentParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateExperiment mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateExperiment mtype
+
+
+-- *** updateLastViewed
+
+-- | @POST \/api\/backend\/v1\/projects\/updateLastViewed@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+updateLastViewed
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ProjectId -- ^ "projectId"
+  -> NeptuneBackendRequest UpdateLastViewed MimeNoContent res accept
+updateLastViewed  _ (ProjectId projectId) =
+  _mkRequest "POST" ["/api/backend/v1/projects/updateLastViewed"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `addQuery` toQuery ("projectId", Just projectId)
+
+data UpdateLastViewed
+-- | @*/*@
+instance MimeType mtype => Produces UpdateLastViewed mtype
+
+
+-- *** updateOrganization
+
+-- | @PUT \/api\/backend\/v1\/organizations2\/{organizationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateOrganization
+  :: (Consumes UpdateOrganization contentType, MimeRender contentType OrganizationUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationUpdateDTO -- ^ "organizationToUpdate"
+  -> OrganizationId -- ^ "organizationId"
+  -> NeptuneBackendRequest UpdateOrganization contentType OrganizationDTO accept
+updateOrganization _  _ organizationToUpdate (OrganizationId organizationId) =
+  _mkRequest "PUT" ["/api/backend/v1/organizations2/",toPath organizationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` organizationToUpdate
+
+data UpdateOrganization
+instance HasBodyParam UpdateOrganization OrganizationUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateOrganization mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateOrganization mtype
+
+
+-- *** updateOrganizationAvatar
+
+-- | @PUT \/api\/backend\/v1\/organizations2\/{organizationId}\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateOrganizationAvatar
+  :: (Consumes UpdateOrganizationAvatar MimeMultipartFormData)
+  => Accept accept -- ^ request accept ('MimeType')
+  -> AvatarFile -- ^ "avatarFile"
+  -> OrganizationId -- ^ "organizationId"
+  -> NeptuneBackendRequest UpdateOrganizationAvatar MimeMultipartFormData LinkDTO accept
+updateOrganizationAvatar  _ (AvatarFile avatarFile) (OrganizationId organizationId) =
+  _mkRequest "PUT" ["/api/backend/v1/organizations2/",toPath organizationId,"/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `_addMultiFormPart` NH.partFileSource "avatarFile" avatarFile
+
+data UpdateOrganizationAvatar
+
+-- | @multipart/form-data@
+instance Consumes UpdateOrganizationAvatar MimeMultipartFormData
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateOrganizationAvatar mtype
+
+
+-- *** updateOrganizationInvitation
+
+-- | @PUT \/api\/backend\/v1\/invitations\/organization\/{invitationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateOrganizationInvitation
+  :: (Consumes UpdateOrganizationInvitation contentType, MimeRender contentType OrganizationInvitationUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationInvitationUpdateDTO -- ^ "update"
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest UpdateOrganizationInvitation contentType OrganizationInvitationDTO accept
+updateOrganizationInvitation _  _ update (InvitationId invitationId) =
+  _mkRequest "PUT" ["/api/backend/v1/invitations/organization/",toPath invitationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` update
+
+data UpdateOrganizationInvitation
+instance HasBodyParam UpdateOrganizationInvitation OrganizationInvitationUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateOrganizationInvitation mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateOrganizationInvitation mtype
+
+
+-- *** updateOrganizationMember
+
+-- | @PATCH \/api\/backend\/v1\/organizations2\/{organizationIdentifier}\/members\/{userId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateOrganizationMember
+  :: (Consumes UpdateOrganizationMember contentType, MimeRender contentType OrganizationMemberUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> OrganizationMemberUpdateDTO -- ^ "member"
+  -> OrganizationIdentifier -- ^ "organizationIdentifier"
+  -> UserId -- ^ "userId"
+  -> NeptuneBackendRequest UpdateOrganizationMember contentType OrganizationMemberDTO accept
+updateOrganizationMember _  _ member (OrganizationIdentifier organizationIdentifier) (UserId userId) =
+  _mkRequest "PATCH" ["/api/backend/v1/organizations2/",toPath organizationIdentifier,"/members/",toPath userId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` member
+
+data UpdateOrganizationMember
+instance HasBodyParam UpdateOrganizationMember OrganizationMemberUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateOrganizationMember mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateOrganizationMember mtype
+
+
+-- *** updateProject
+
+-- | @PUT \/api\/backend\/v1\/projects@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateProject
+  :: (Consumes UpdateProject contentType, MimeRender contentType ProjectUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ProjectUpdateDTO -- ^ "projectToUpdate"
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> NeptuneBackendRequest UpdateProject contentType ProjectWithRoleDTO accept
+updateProject _  _ projectToUpdate (ProjectIdentifier projectIdentifier) =
+  _mkRequest "PUT" ["/api/backend/v1/projects"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` projectToUpdate
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data UpdateProject
+instance HasBodyParam UpdateProject ProjectUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateProject mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateProject mtype
+
+
+-- *** updateProjectAvatar
+
+-- | @PUT \/api\/backend\/v1\/projects1\/{projectId}\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateProjectAvatar
+  :: (Consumes UpdateProjectAvatar MimeMultipartFormData)
+  => Accept accept -- ^ request accept ('MimeType')
+  -> AvatarFile -- ^ "avatarFile"
+  -> ProjectId -- ^ "projectId"
+  -> NeptuneBackendRequest UpdateProjectAvatar MimeMultipartFormData Link accept
+updateProjectAvatar  _ (AvatarFile avatarFile) (ProjectId projectId) =
+  _mkRequest "PUT" ["/api/backend/v1/projects1/",toPath projectId,"/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `_addMultiFormPart` NH.partFileSource "avatarFile" avatarFile
+
+data UpdateProjectAvatar
+
+-- | @multipart/form-data@
+instance Consumes UpdateProjectAvatar MimeMultipartFormData
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateProjectAvatar mtype
+
+
+-- *** updateProjectBackground
+
+-- | @PUT \/api\/backend\/v1\/projects1\/{projectId}\/background@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateProjectBackground
+  :: (Consumes UpdateProjectBackground MimeMultipartFormData)
+  => Accept accept -- ^ request accept ('MimeType')
+  -> BackgroundFile -- ^ "backgroundFile"
+  -> ProjectId -- ^ "projectId"
+  -> NeptuneBackendRequest UpdateProjectBackground MimeMultipartFormData Link accept
+updateProjectBackground  _ (BackgroundFile backgroundFile) (ProjectId projectId) =
+  _mkRequest "PUT" ["/api/backend/v1/projects1/",toPath projectId,"/background"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `_addMultiFormPart` NH.partFileSource "backgroundFile" backgroundFile
+
+data UpdateProjectBackground
+
+-- | @multipart/form-data@
+instance Consumes UpdateProjectBackground MimeMultipartFormData
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateProjectBackground mtype
+
+
+-- *** updateProjectInvitation
+
+-- | @PUT \/api\/backend\/v1\/invitations\/project\/{invitationId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateProjectInvitation
+  :: (Consumes UpdateProjectInvitation contentType, MimeRender contentType ProjectInvitationUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ProjectInvitationUpdateDTO -- ^ "update"
+  -> InvitationId -- ^ "invitationId"
+  -> NeptuneBackendRequest UpdateProjectInvitation contentType ProjectInvitationDTO accept
+updateProjectInvitation _  _ update (InvitationId invitationId) =
+  _mkRequest "PUT" ["/api/backend/v1/invitations/project/",toPath invitationId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` update
+
+data UpdateProjectInvitation
+instance HasBodyParam UpdateProjectInvitation ProjectInvitationUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateProjectInvitation mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateProjectInvitation mtype
+
+
+-- *** updateProjectMember
+
+-- | @PATCH \/api\/backend\/v1\/projects\/members\/{userId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateProjectMember
+  :: (Consumes UpdateProjectMember contentType, MimeRender contentType ProjectMemberUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> ProjectMemberUpdateDTO -- ^ "member"
+  -> ProjectIdentifier -- ^ "projectIdentifier"
+  -> UserId -- ^ "userId"
+  -> NeptuneBackendRequest UpdateProjectMember contentType ProjectMemberDTO accept
+updateProjectMember _  _ member (ProjectIdentifier projectIdentifier) (UserId userId) =
+  _mkRequest "PATCH" ["/api/backend/v1/projects/members/",toPath userId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` member
+    `addQuery` toQuery ("projectIdentifier", Just projectIdentifier)
+
+data UpdateProjectMember
+instance HasBodyParam UpdateProjectMember ProjectMemberUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateProjectMember mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateProjectMember mtype
+
+
+-- *** updateTags
+
+-- | @PUT \/api\/leaderboard\/v1\/experiments\/tags@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+updateTags
+  :: (Consumes UpdateTags contentType, MimeRender contentType UpdateTagsParams)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> UpdateTagsParams -- ^ "updateTagsParams"
+  -> NeptuneBackendRequest UpdateTags contentType res accept
+updateTags _  _ updateTagsParams =
+  _mkRequest "PUT" ["/api/leaderboard/v1/experiments/tags"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` updateTagsParams
+
+data UpdateTags
+instance HasBodyParam UpdateTags UpdateTagsParams
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateTags mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateTags mtype
+
+
+-- *** updateUserProfile
+
+-- | @PATCH \/api\/backend\/v1\/userProfile@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateUserProfile
+  :: (Consumes UpdateUserProfile contentType, MimeRender contentType UserProfileUpdateDTO)
+  => ContentType contentType -- ^ request content-type ('MimeType')
+  -> Accept accept -- ^ request accept ('MimeType')
+  -> UserProfileUpdateDTO -- ^ "userProfileUpdate"
+  -> NeptuneBackendRequest UpdateUserProfile contentType UserProfileDTO accept
+updateUserProfile _  _ userProfileUpdate =
+  _mkRequest "PATCH" ["/api/backend/v1/userProfile"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `setBodyParam` userProfileUpdate
+
+data UpdateUserProfile
+instance HasBodyParam UpdateUserProfile UserProfileUpdateDTO
+
+-- | @*/*@
+instance MimeType mtype => Consumes UpdateUserProfile mtype
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateUserProfile mtype
+
+
+-- *** updateUserProfileAvatar
+
+-- | @PUT \/api\/backend\/v1\/userProfile\/avatar@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+updateUserProfileAvatar
+  :: (Consumes UpdateUserProfileAvatar MimeMultipartFormData)
+  => Accept accept -- ^ request accept ('MimeType')
+  -> AvatarFile -- ^ "avatarFile"
+  -> NeptuneBackendRequest UpdateUserProfileAvatar MimeMultipartFormData LinkDTO accept
+updateUserProfileAvatar  _ (AvatarFile avatarFile) =
+  _mkRequest "PUT" ["/api/backend/v1/userProfile/avatar"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+    `_addMultiFormPart` NH.partFileSource "avatarFile" avatarFile
+
+data UpdateUserProfileAvatar
+
+-- | @multipart/form-data@
+instance Consumes UpdateUserProfileAvatar MimeMultipartFormData
+
+-- | @*/*@
+instance MimeType mtype => Produces UpdateUserProfileAvatar mtype
+
+
+-- *** uploadExperimentOutput
+
+-- | @POST \/api\/leaderboard\/v1\/storage\/legacy\/uploadOutput\/{experimentId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+uploadExperimentOutput
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest UploadExperimentOutput MimeNoContent res accept
+uploadExperimentOutput  _ (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/storage/legacy/uploadOutput/",toPath experimentId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data UploadExperimentOutput
+-- | @*/*@
+instance MimeType mtype => Produces UploadExperimentOutput mtype
+
+
+-- *** uploadExperimentOutputAsTarstream
+
+-- | @POST \/api\/leaderboard\/v1\/storage\/legacy\/uploadOutputAsTarStream\/{experimentId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+uploadExperimentOutputAsTarstream
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest UploadExperimentOutputAsTarstream MimeNoContent res accept
+uploadExperimentOutputAsTarstream  _ (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/storage/legacy/uploadOutputAsTarStream/",toPath experimentId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data UploadExperimentOutputAsTarstream
+-- | @*/*@
+instance MimeType mtype => Produces UploadExperimentOutputAsTarstream mtype
+
+
+-- *** uploadExperimentSource
+
+-- | @POST \/api\/leaderboard\/v1\/storage\/legacy\/uploadSource\/{experimentId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+uploadExperimentSource
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest UploadExperimentSource MimeNoContent res accept
+uploadExperimentSource  _ (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/storage/legacy/uploadSource/",toPath experimentId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data UploadExperimentSource
+-- | @*/*@
+instance MimeType mtype => Produces UploadExperimentSource mtype
+
+
+-- *** uploadExperimentSourceAsTarstream
+
+-- | @POST \/api\/leaderboard\/v1\/storage\/legacy\/uploadSourceAsTarStream\/{experimentId}@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+-- Note: Has 'Produces' instances, but no response schema
+--
+uploadExperimentSourceAsTarstream
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> ExperimentId -- ^ "experimentId"
+  -> NeptuneBackendRequest UploadExperimentSourceAsTarstream MimeNoContent res accept
+uploadExperimentSourceAsTarstream  _ (ExperimentId experimentId) =
+  _mkRequest "POST" ["/api/leaderboard/v1/storage/legacy/uploadSourceAsTarStream/",toPath experimentId]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data UploadExperimentSourceAsTarstream
+-- | @*/*@
+instance MimeType mtype => Produces UploadExperimentSourceAsTarstream mtype
+
+
+-- *** userPricingStatus
+
+-- | @GET \/api\/backend\/v1\/payments\/user\/pricingStatus@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+userPricingStatus
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest UserPricingStatus MimeNoContent UserPricingStatusDTO accept
+userPricingStatus  _ =
+  _mkRequest "GET" ["/api/backend/v1/payments/user/pricingStatus"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data UserPricingStatus
+-- | @*/*@
+instance MimeType mtype => Produces UserPricingStatus mtype
+
+
+-- *** validateUsername
+
+-- | @GET \/api\/backend\/v1\/login\/username\/validate@
+--
+validateUsername
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> UsernameText -- ^ "username"
+  -> NeptuneBackendRequest ValidateUsername MimeNoContent UsernameValidationStatusDTO accept
+validateUsername  _ (UsernameText username) =
+  _mkRequest "GET" ["/api/backend/v1/login/username/validate"]
+    `addQuery` toQuery ("username", Just username)
+
+data ValidateUsername
+-- | @*/*@
+instance MimeType mtype => Produces ValidateUsername mtype
+
+
+-- *** version0
+
+-- | @GET \/api\/backend\/version@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+version0
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest Version0 MimeNoContent Version accept
+version0  _ =
+  _mkRequest "GET" ["/api/backend/version"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data Version0
+-- | @*/*@
+instance MimeType mtype => Produces Version0 mtype
+
+
+-- *** versionGet
+
+-- | @GET \/version@
+--
+-- AuthMethod: 'AuthOAuthOauth2'
+--
+versionGet
+  :: Accept accept -- ^ request accept ('MimeType')
+  -> NeptuneBackendRequest VersionGet MimeNoContent Version accept
+versionGet  _ =
+  _mkRequest "GET" ["/version"]
+    `_hasAuthType` (P.Proxy :: P.Proxy AuthOAuthOauth2)
+
+data VersionGet
+-- | @*/*@
+instance MimeType mtype => Produces VersionGet mtype
+
diff --git a/lib/Neptune/Backend/Client.hs b/lib/Neptune/Backend/Client.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/Client.hs
@@ -0,0 +1,217 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.Client
+-}
+
+{-# LANGUAGE DeriveFoldable      #-}
+{-# LANGUAGE DeriveFunctor       #-}
+{-# LANGUAGE DeriveTraversable   #-}
+{-# LANGUAGE FlexibleContexts    #-}
+{-# LANGUAGE OverloadedStrings   #-}
+{-# LANGUAGE RankNTypes          #-}
+{-# LANGUAGE RecordWildCards     #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-unused-imports #-}
+
+module Neptune.Backend.Client where
+
+import           Neptune.Backend.Core
+import           Neptune.Backend.Logging
+import           Neptune.Backend.MimeTypes
+
+import qualified Control.Exception.Safe                as E
+import qualified Control.Monad                         as P
+import qualified Control.Monad.IO.Class                as P
+import qualified Data.Aeson.Types                      as A
+import qualified Data.ByteString.Char8                 as BC
+import qualified Data.ByteString.Lazy                  as BL
+import qualified Data.ByteString.Lazy.Char8            as BCL
+import qualified Data.Proxy                            as P (Proxy (..))
+import qualified Data.Text                             as T
+import qualified Data.Text.Encoding                    as T
+import qualified Network.HTTP.Client                   as NH
+import qualified Network.HTTP.Client.MultipartFormData as NH
+import qualified Network.HTTP.Types                    as NH
+import qualified Web.FormUrlEncoded                    as WH
+import qualified Web.HttpApiData                       as WH
+
+import           Data.Function                         ((&))
+import           Data.Monoid                           ((<>))
+import           Data.Text                             (Text)
+import           GHC.Exts                              (IsString (..))
+
+-- * Dispatch
+
+-- ** Lbs
+
+-- | send a request returning the raw http response
+dispatchLbs
+  :: (Produces req accept, MimeType contentType)
+  => NH.Manager -- ^ http-client Connection manager
+  -> NeptuneBackendConfig -- ^ config
+  -> NeptuneBackendRequest req contentType res accept -- ^ request
+  -> IO (NH.Response BCL.ByteString) -- ^ response
+dispatchLbs manager config request  = do
+  initReq <- _toInitRequest config request
+  dispatchInitUnsafe manager config initReq
+
+-- ** Mime
+
+-- | pair of decoded http body and http response
+data MimeResult res =
+  MimeResult { mimeResult         :: Either MimeError res -- ^ decoded http body
+             , mimeResultResponse :: NH.Response BCL.ByteString -- ^ http response
+             }
+  deriving (Show, Functor, Foldable, Traversable)
+
+-- | pair of unrender/parser error and http response
+data MimeError =
+  MimeError {
+    mimeError         :: String -- ^ unrender/parser error
+  , mimeErrorResponse :: NH.Response BCL.ByteString -- ^ http response
+  } deriving (Eq, Show)
+
+-- | send a request returning the 'MimeResult'
+dispatchMime
+  :: forall req contentType res accept. (Produces req accept, MimeUnrender accept res, MimeType contentType)
+  => NH.Manager -- ^ http-client Connection manager
+  -> NeptuneBackendConfig -- ^ config
+  -> NeptuneBackendRequest req contentType res accept -- ^ request
+  -> IO (MimeResult res) -- ^ response
+dispatchMime manager config request = do
+  httpResponse <- dispatchLbs manager config request
+  let statusCode = NH.statusCode . NH.responseStatus $ httpResponse
+  parsedResult <-
+    runConfigLogWithExceptions "Client" config $
+    do if (statusCode >= 400 && statusCode < 600)
+         then do
+           let s = "error statusCode: " ++ show statusCode
+           _log "Client" levelError (T.pack s)
+           pure (Left (MimeError s httpResponse))
+         else case mimeUnrender (P.Proxy :: P.Proxy accept) (NH.responseBody httpResponse) of
+           Left s -> do
+             _log "Client" levelError (T.pack s)
+             pure (Left (MimeError s httpResponse))
+           Right r -> pure (Right r)
+  return (MimeResult parsedResult httpResponse)
+
+-- | like 'dispatchMime', but only returns the decoded http body
+dispatchMime'
+  :: (Produces req accept, MimeUnrender accept res, MimeType contentType)
+  => NH.Manager -- ^ http-client Connection manager
+  -> NeptuneBackendConfig -- ^ config
+  -> NeptuneBackendRequest req contentType res accept -- ^ request
+  -> IO (Either MimeError res) -- ^ response
+dispatchMime' manager config request  = do
+    MimeResult parsedResult _ <- dispatchMime manager config request
+    return parsedResult
+
+-- ** Unsafe
+
+-- | like 'dispatchReqLbs', but does not validate the operation is a 'Producer' of the "accept" 'MimeType'.  (Useful if the server's response is undocumented)
+dispatchLbsUnsafe
+  :: (MimeType accept, MimeType contentType)
+  => NH.Manager -- ^ http-client Connection manager
+  -> NeptuneBackendConfig -- ^ config
+  -> NeptuneBackendRequest req contentType res accept -- ^ request
+  -> IO (NH.Response BCL.ByteString) -- ^ response
+dispatchLbsUnsafe manager config request  = do
+  initReq <- _toInitRequest config request
+  dispatchInitUnsafe manager config initReq
+
+-- | dispatch an InitRequest
+dispatchInitUnsafe
+  :: NH.Manager -- ^ http-client Connection manager
+  -> NeptuneBackendConfig -- ^ config
+  -> InitRequest req contentType res accept -- ^ init request
+  -> IO (NH.Response BCL.ByteString) -- ^ response
+dispatchInitUnsafe manager config (InitRequest req) = do
+  runConfigLogWithExceptions src config $
+    do _log src levelInfo requestLogMsg
+       _log src levelDebug requestDbgLogMsg
+       res <- P.liftIO $ NH.httpLbs req manager
+       _log src levelInfo (responseLogMsg res)
+       _log src levelDebug ((T.pack . show) res)
+       return res
+  where
+    src = "Client"
+    endpoint =
+      T.pack $
+      BC.unpack $
+      NH.method req <> " " <> NH.host req <> NH.path req <> NH.queryString req
+    requestLogMsg = "REQ:" <> endpoint
+    requestDbgLogMsg =
+      "Headers=" <> (T.pack . show) (NH.requestHeaders req) <> " Body=" <>
+      (case NH.requestBody req of
+         NH.RequestBodyLBS xs -> T.decodeUtf8 (BL.toStrict xs)
+         _                    -> "<RequestBody>")
+    responseStatusCode = (T.pack . show) . NH.statusCode . NH.responseStatus
+    responseLogMsg res =
+      "RES:statusCode=" <> responseStatusCode res <> " (" <> endpoint <> ")"
+
+-- * InitRequest
+
+-- | wraps an http-client 'Request' with request/response type parameters
+newtype InitRequest req contentType res accept = InitRequest
+  { unInitRequest :: NH.Request
+  } deriving (Show)
+
+-- |  Build an http-client 'Request' record from the supplied config and request
+_toInitRequest
+  :: (MimeType accept, MimeType contentType)
+  => NeptuneBackendConfig -- ^ config
+  -> NeptuneBackendRequest req contentType res accept -- ^ request
+  -> IO (InitRequest req contentType res accept) -- ^ initialized request
+_toInitRequest config req0  =
+  runConfigLogWithExceptions "Client" config $ do
+    parsedReq <- P.liftIO $ NH.parseRequest $ BCL.unpack $ BCL.append (configHost config) (BCL.concat (rUrlPath req0))
+    req1 <- P.liftIO $ _applyAuthMethods req0 config
+    P.when
+        (configValidateAuthMethods config && (not . null . rAuthTypes) req1)
+        (E.throw $ AuthMethodException $ "AuthMethod not configured: " <> (show . head . rAuthTypes) req1)
+    let req2 = req1 & _setContentTypeHeader & _setAcceptHeader
+        reqHeaders = ("User-Agent", WH.toHeader (configUserAgent config)) : paramsHeaders (rParams req2)
+        reqQuery = NH.renderQuery True (paramsQuery (rParams req2))
+        pReq = parsedReq { NH.method = (rMethod req2)
+                        , NH.requestHeaders = reqHeaders
+                        , NH.queryString = reqQuery
+                        }
+    outReq <- case paramsBody (rParams req2) of
+        ParamBodyNone -> pure (pReq { NH.requestBody = mempty })
+        ParamBodyB bs -> pure (pReq { NH.requestBody = NH.RequestBodyBS bs })
+        ParamBodyBL bl -> pure (pReq { NH.requestBody = NH.RequestBodyLBS bl })
+        ParamBodyFormUrlEncoded form -> pure (pReq { NH.requestBody = NH.RequestBodyLBS (WH.urlEncodeForm form) })
+        ParamBodyMultipartFormData parts -> NH.formDataBody parts pReq
+
+    pure (InitRequest outReq)
+
+-- | modify the underlying Request
+modifyInitRequest :: InitRequest req contentType res accept -> (NH.Request -> NH.Request) -> InitRequest req contentType res accept
+modifyInitRequest (InitRequest req) f = InitRequest (f req)
+
+-- | modify the underlying Request (monadic)
+modifyInitRequestM :: Monad m => InitRequest req contentType res accept -> (NH.Request -> m NH.Request) -> m (InitRequest req contentType res accept)
+modifyInitRequestM (InitRequest req) f = fmap InitRequest (f req)
+
+-- ** Logging
+
+-- | Run a block using the configured logger instance
+runConfigLog
+  :: P.MonadIO m
+  => NeptuneBackendConfig -> LogExec m
+runConfigLog config = configLogExecWithContext config (configLogContext config)
+
+-- | Run a block using the configured logger instance (logs exceptions)
+runConfigLogWithExceptions
+  :: (E.MonadCatch m, P.MonadIO m)
+  => T.Text -> NeptuneBackendConfig -> LogExec m
+runConfigLogWithExceptions src config = runConfigLog config . logExceptions src
diff --git a/lib/Neptune/Backend/Core.hs b/lib/Neptune/Backend/Core.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/Core.hs
@@ -0,0 +1,568 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.Core
+-}
+
+{-# LANGUAGE DeriveDataTypeable         #-}
+{-# LANGUAGE ExistentialQuantification  #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE NamedFieldPuns             #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE RankNTypes                 #-}
+{-# LANGUAGE RecordWildCards            #-}
+{-# LANGUAGE ScopedTypeVariables        #-}
+{-# LANGUAGE TupleSections              #-}
+{-# LANGUAGE TypeFamilies               #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-binds -fno-warn-unused-imports #-}
+
+module Neptune.Backend.Core where
+
+import           Neptune.Backend.Logging
+import           Neptune.Backend.MimeTypes
+
+import qualified Control.Arrow                         as P (left)
+import qualified Control.DeepSeq                       as NF
+import qualified Control.Exception.Safe                as E
+import qualified Data.Aeson                            as A
+import qualified Data.ByteString                       as B
+import qualified Data.ByteString.Base64.Lazy           as BL64
+import qualified Data.ByteString.Builder               as BB
+import qualified Data.ByteString.Char8                 as BC
+import qualified Data.ByteString.Lazy                  as BL
+import qualified Data.ByteString.Lazy.Char8            as BCL
+import qualified Data.CaseInsensitive                  as CI
+import qualified Data.Data                             as P (Data, TypeRep,
+                                                             Typeable, typeRep)
+import qualified Data.Foldable                         as P
+import qualified Data.Ix                               as P
+import qualified Data.Maybe                            as P
+import qualified Data.Proxy                            as P (Proxy (..))
+import qualified Data.Text                             as T
+import qualified Data.Text.Encoding                    as T
+import qualified Data.Time                             as TI
+import qualified Data.Time.ISO8601                     as TI
+import qualified GHC.Base                              as P (Alternative)
+import qualified Lens.Micro                            as L
+import qualified Network.HTTP.Client.MultipartFormData as NH
+import qualified Network.HTTP.Types                    as NH
+import qualified Prelude                               as P
+import qualified Text.Printf                           as T
+import qualified Web.FormUrlEncoded                    as WH
+import qualified Web.HttpApiData                       as WH
+
+import           Control.Applicative                   (Alternative, (<|>))
+import           Control.Monad.Fail                    (MonadFail)
+import           Data.Foldable                         (foldlM)
+import           Data.Function                         ((&))
+import           Data.Monoid                           ((<>))
+import           Data.Text                             (Text)
+import           Prelude                               (Bool (..), Char,
+                                                        Functor, IO, Maybe (..),
+                                                        Monad, String, fmap,
+                                                        mempty, pure, return,
+                                                        show, ($), (.), (<$>),
+                                                        (<*>))
+
+-- * NeptuneBackendConfig
+
+-- |
+data NeptuneBackendConfig = NeptuneBackendConfig
+  { configHost                :: BCL.ByteString -- ^ host supplied in the Request
+  , configUserAgent           :: Text -- ^ user-agent supplied in the Request
+  , configLogExecWithContext  :: LogExecWithContext -- ^ Run a block using a Logger instance
+  , configLogContext          :: LogContext -- ^ Configures the logger
+  , configAuthMethods         :: [AnyAuthMethod] -- ^ List of configured auth methods
+  , configValidateAuthMethods :: Bool -- ^ throw exceptions if auth methods are not configured
+  }
+
+-- | display the config
+instance P.Show NeptuneBackendConfig where
+  show c =
+    T.printf
+      "{ configHost = %v, configUserAgent = %v, ..}"
+      (show (configHost c))
+      (show (configUserAgent c))
+
+-- | constructs a default NeptuneBackendConfig
+--
+-- configHost:
+--
+-- @http://localhost@
+--
+-- configUserAgent:
+--
+-- @"neptune-backend/0.1.0.0"@
+--
+newConfig :: IO NeptuneBackendConfig
+newConfig = do
+    logCxt <- initLogContext
+    return $ NeptuneBackendConfig
+        { configHost = "http://localhost"
+        , configUserAgent = "neptune-backend/0.1.0.0"
+        , configLogExecWithContext = runDefaultLogExecWithContext
+        , configLogContext = logCxt
+        , configAuthMethods = []
+        , configValidateAuthMethods = True
+        }
+
+-- | updates config use AuthMethod on matching requests
+addAuthMethod :: AuthMethod auth => NeptuneBackendConfig -> auth -> NeptuneBackendConfig
+addAuthMethod config@NeptuneBackendConfig {configAuthMethods = as} a =
+  config { configAuthMethods = AnyAuthMethod a : as}
+
+-- | updates the config to use stdout logging
+withStdoutLogging :: NeptuneBackendConfig -> IO NeptuneBackendConfig
+withStdoutLogging p = do
+    logCxt <- stdoutLoggingContext (configLogContext p)
+    return $ p { configLogExecWithContext = stdoutLoggingExec, configLogContext = logCxt }
+
+-- | updates the config to use stderr logging
+withStderrLogging :: NeptuneBackendConfig -> IO NeptuneBackendConfig
+withStderrLogging p = do
+    logCxt <- stderrLoggingContext (configLogContext p)
+    return $ p { configLogExecWithContext = stderrLoggingExec, configLogContext = logCxt }
+
+-- | updates the config to disable logging
+withNoLogging :: NeptuneBackendConfig -> NeptuneBackendConfig
+withNoLogging p = p { configLogExecWithContext =  runNullLogExec}
+
+-- * NeptuneBackendRequest
+
+-- | Represents a request.
+--
+--   Type Variables:
+--
+--   * req - request operation
+--   * contentType - 'MimeType' associated with request body
+--   * res - response model
+--   * accept - 'MimeType' associated with response body
+data NeptuneBackendRequest req contentType res accept = NeptuneBackendRequest
+  { rMethod    :: NH.Method   -- ^ Method of NeptuneBackendRequest
+  , rUrlPath   :: [BCL.ByteString] -- ^ Endpoint of NeptuneBackendRequest
+  , rParams    :: Params -- ^ params of NeptuneBackendRequest
+  , rAuthTypes :: [P.TypeRep] -- ^ types of auth methods
+  }
+  deriving (P.Show)
+
+-- | 'rMethod' Lens
+rMethodL :: Lens_' (NeptuneBackendRequest req contentType res accept) NH.Method
+rMethodL f NeptuneBackendRequest{..} = (\rMethod -> NeptuneBackendRequest { rMethod, ..} ) <$> f rMethod
+{-# INLINE rMethodL #-}
+
+-- | 'rUrlPath' Lens
+rUrlPathL :: Lens_' (NeptuneBackendRequest req contentType res accept) [BCL.ByteString]
+rUrlPathL f NeptuneBackendRequest{..} = (\rUrlPath -> NeptuneBackendRequest { rUrlPath, ..} ) <$> f rUrlPath
+{-# INLINE rUrlPathL #-}
+
+-- | 'rParams' Lens
+rParamsL :: Lens_' (NeptuneBackendRequest req contentType res accept) Params
+rParamsL f NeptuneBackendRequest{..} = (\rParams -> NeptuneBackendRequest { rParams, ..} ) <$> f rParams
+{-# INLINE rParamsL #-}
+
+-- | 'rParams' Lens
+rAuthTypesL :: Lens_' (NeptuneBackendRequest req contentType res accept) [P.TypeRep]
+rAuthTypesL f NeptuneBackendRequest{..} = (\rAuthTypes -> NeptuneBackendRequest { rAuthTypes, ..} ) <$> f rAuthTypes
+{-# INLINE rAuthTypesL #-}
+
+-- * HasBodyParam
+
+-- | Designates the body parameter of a request
+class HasBodyParam req param where
+  setBodyParam :: forall contentType res accept. (Consumes req contentType, MimeRender contentType param) => NeptuneBackendRequest req contentType res accept -> param -> NeptuneBackendRequest req contentType res accept
+  setBodyParam req xs =
+    req `_setBodyLBS` mimeRender (P.Proxy :: P.Proxy contentType) xs & _setContentTypeHeader
+
+-- * HasOptionalParam
+
+-- | Designates the optional parameters of a request
+class HasOptionalParam req param where
+  {-# MINIMAL applyOptionalParam | (-&-) #-}
+
+  -- | Apply an optional parameter to a request
+  applyOptionalParam :: NeptuneBackendRequest req contentType res accept -> param -> NeptuneBackendRequest req contentType res accept
+  applyOptionalParam = (-&-)
+  {-# INLINE applyOptionalParam #-}
+
+  -- | infix operator \/ alias for 'addOptionalParam'
+  (-&-) :: NeptuneBackendRequest req contentType res accept -> param -> NeptuneBackendRequest req contentType res accept
+  (-&-) = applyOptionalParam
+  {-# INLINE (-&-) #-}
+
+infixl 2 -&-
+
+-- | Request Params
+data Params = Params
+  { paramsQuery   :: NH.Query
+  , paramsHeaders :: NH.RequestHeaders
+  , paramsBody    :: ParamBody
+  }
+  deriving (P.Show)
+
+-- | 'paramsQuery' Lens
+paramsQueryL :: Lens_' Params NH.Query
+paramsQueryL f Params{..} = (\paramsQuery -> Params { paramsQuery, ..} ) <$> f paramsQuery
+{-# INLINE paramsQueryL #-}
+
+-- | 'paramsHeaders' Lens
+paramsHeadersL :: Lens_' Params NH.RequestHeaders
+paramsHeadersL f Params{..} = (\paramsHeaders -> Params { paramsHeaders, ..} ) <$> f paramsHeaders
+{-# INLINE paramsHeadersL #-}
+
+-- | 'paramsBody' Lens
+paramsBodyL :: Lens_' Params ParamBody
+paramsBodyL f Params{..} = (\paramsBody -> Params { paramsBody, ..} ) <$> f paramsBody
+{-# INLINE paramsBodyL #-}
+
+-- | Request Body
+data ParamBody
+  = ParamBodyNone
+  | ParamBodyB B.ByteString
+  | ParamBodyBL BL.ByteString
+  | ParamBodyFormUrlEncoded WH.Form
+  | ParamBodyMultipartFormData [NH.Part]
+  deriving (P.Show)
+
+-- ** NeptuneBackendRequest Utils
+
+_mkRequest :: NH.Method -- ^ Method
+          -> [BCL.ByteString] -- ^ Endpoint
+          -> NeptuneBackendRequest req contentType res accept -- ^ req: Request Type, res: Response Type
+_mkRequest m u = NeptuneBackendRequest m u _mkParams []
+
+_mkParams :: Params
+_mkParams = Params [] [] ParamBodyNone
+
+setHeader ::
+     NeptuneBackendRequest req contentType res accept
+  -> [NH.Header]
+  -> NeptuneBackendRequest req contentType res accept
+setHeader req header =
+  req `removeHeader` P.fmap P.fst header
+  & (`addHeader` header)
+
+addHeader ::
+     NeptuneBackendRequest req contentType res accept
+  -> [NH.Header]
+  -> NeptuneBackendRequest req contentType res accept
+addHeader req header = L.over (rParamsL . paramsHeadersL) (header P.++) req
+
+removeHeader :: NeptuneBackendRequest req contentType res accept -> [NH.HeaderName] -> NeptuneBackendRequest req contentType res accept
+removeHeader req header =
+  req &
+  L.over
+    (rParamsL . paramsHeadersL)
+    (P.filter (\h -> cifst h `P.notElem` P.fmap CI.mk header))
+  where
+    cifst = CI.mk . P.fst
+
+
+_setContentTypeHeader :: forall req contentType res accept. MimeType contentType => NeptuneBackendRequest req contentType res accept -> NeptuneBackendRequest req contentType res accept
+_setContentTypeHeader req =
+    case mimeType (P.Proxy :: P.Proxy contentType) of
+        Just m  -> req `setHeader` [("content-type", BC.pack $ P.show m)]
+        Nothing -> req `removeHeader` ["content-type"]
+
+_setAcceptHeader :: forall req contentType res accept. MimeType accept => NeptuneBackendRequest req contentType res accept -> NeptuneBackendRequest req contentType res accept
+_setAcceptHeader req =
+    case mimeType (P.Proxy :: P.Proxy accept) of
+        Just m  -> req `setHeader` [("accept", BC.pack $ P.show m)]
+        Nothing -> req `removeHeader` ["accept"]
+
+setQuery ::
+     NeptuneBackendRequest req contentType res accept
+  -> [NH.QueryItem]
+  -> NeptuneBackendRequest req contentType res accept
+setQuery req query =
+  req &
+  L.over
+    (rParamsL . paramsQueryL)
+    (P.filter (\q -> cifst q `P.notElem` P.fmap cifst query)) &
+  (`addQuery` query)
+  where
+    cifst = CI.mk . P.fst
+
+addQuery ::
+     NeptuneBackendRequest req contentType res accept
+  -> [NH.QueryItem]
+  -> NeptuneBackendRequest req contentType res accept
+addQuery req query = req & L.over (rParamsL . paramsQueryL) (query P.++)
+
+addForm :: NeptuneBackendRequest req contentType res accept -> WH.Form -> NeptuneBackendRequest req contentType res accept
+addForm req newform =
+    let form = case paramsBody (rParams req) of
+            ParamBodyFormUrlEncoded _form -> _form
+            _                             -> mempty
+    in req & L.set (rParamsL . paramsBodyL) (ParamBodyFormUrlEncoded (newform <> form))
+
+_addMultiFormPart :: NeptuneBackendRequest req contentType res accept -> NH.Part -> NeptuneBackendRequest req contentType res accept
+_addMultiFormPart req newpart =
+    let parts = case paramsBody (rParams req) of
+            ParamBodyMultipartFormData _parts -> _parts
+            _                                 -> []
+    in req & L.set (rParamsL . paramsBodyL) (ParamBodyMultipartFormData (newpart : parts))
+
+_setBodyBS :: NeptuneBackendRequest req contentType res accept -> B.ByteString -> NeptuneBackendRequest req contentType res accept
+_setBodyBS req body =
+    req & L.set (rParamsL . paramsBodyL) (ParamBodyB body)
+
+_setBodyLBS :: NeptuneBackendRequest req contentType res accept -> BL.ByteString -> NeptuneBackendRequest req contentType res accept
+_setBodyLBS req body =
+    req & L.set (rParamsL . paramsBodyL) (ParamBodyBL body)
+
+_hasAuthType :: AuthMethod authMethod => NeptuneBackendRequest req contentType res accept -> P.Proxy authMethod -> NeptuneBackendRequest req contentType res accept
+_hasAuthType req proxy =
+  req & L.over rAuthTypesL (P.typeRep proxy :)
+
+-- ** Params Utils
+
+toPath
+  :: WH.ToHttpApiData a
+  => a -> BCL.ByteString
+toPath = BB.toLazyByteString . WH.toEncodedUrlPiece
+
+toHeader :: WH.ToHttpApiData a => (NH.HeaderName, a) -> [NH.Header]
+toHeader x = [fmap WH.toHeader x]
+
+toForm :: WH.ToHttpApiData v => (BC.ByteString, v) -> WH.Form
+toForm (k,v) = WH.toForm [(BC.unpack k,v)]
+
+toQuery :: WH.ToHttpApiData a => (BC.ByteString, Maybe a) -> [NH.QueryItem]
+toQuery x = [(fmap . fmap) toQueryParam x]
+  where toQueryParam = T.encodeUtf8 . WH.toQueryParam
+
+-- *** OpenAPI `CollectionFormat` Utils
+
+-- | Determines the format of the array if type array is used.
+data CollectionFormat
+  = CommaSeparated -- ^ CSV format for multiple parameters.
+  | SpaceSeparated -- ^ Also called "SSV"
+  | TabSeparated -- ^ Also called "TSV"
+  | PipeSeparated -- ^ `value1|value2|value2`
+  | MultiParamArray -- ^ Using multiple GET parameters, e.g. `foo=bar&foo=baz`. This is valid only for parameters in "query" ('NH.Query') or "formData" ('WH.Form')
+
+toHeaderColl :: WH.ToHttpApiData a => CollectionFormat -> (NH.HeaderName, [a]) -> [NH.Header]
+toHeaderColl c xs = _toColl c toHeader xs
+
+toFormColl :: WH.ToHttpApiData v => CollectionFormat -> (BC.ByteString, [v]) -> WH.Form
+toFormColl c xs = WH.toForm $ fmap unpack $ _toColl c toHeader $ pack xs
+  where
+    pack (k,v) = (CI.mk k, v)
+    unpack (k,v) = (BC.unpack (CI.original k), BC.unpack v)
+
+toQueryColl :: WH.ToHttpApiData a => CollectionFormat -> (BC.ByteString, Maybe [a]) -> NH.Query
+toQueryColl c xs = _toCollA c toQuery xs
+
+_toColl :: P.Traversable f => CollectionFormat -> (f a -> [(b, BC.ByteString)]) -> f [a] -> [(b, BC.ByteString)]
+_toColl c encode xs = fmap (fmap P.fromJust) (_toCollA' c fencode BC.singleton (fmap Just xs))
+  where fencode = fmap (fmap Just) . encode . fmap P.fromJust
+        {-# INLINE fencode #-}
+
+_toCollA :: (P.Traversable f, P.Traversable t, P.Alternative t) => CollectionFormat -> (f (t a) -> [(b, t BC.ByteString)]) -> f (t [a]) -> [(b, t BC.ByteString)]
+_toCollA c encode xs = _toCollA' c encode BC.singleton xs
+
+_toCollA' :: (P.Monoid c, P.Traversable f, P.Traversable t, P.Alternative t) => CollectionFormat -> (f (t a) -> [(b, t c)]) -> (Char -> c) -> f (t [a]) -> [(b, t c)]
+_toCollA' c encode one xs = case c of
+  CommaSeparated  -> go (one ',')
+  SpaceSeparated  -> go (one ' ')
+  TabSeparated    -> go (one '\t')
+  PipeSeparated   -> go (one '|')
+  MultiParamArray -> expandList
+  where
+    go sep =
+      [P.foldl1 (\(sk, sv) (_, v) -> (sk, (combine sep <$> sv <*> v) <|> sv <|> v)) expandList]
+    combine sep x y = x <> sep <> y
+    expandList = (P.concatMap encode . (P.traverse . P.traverse) P.toList) xs
+    {-# INLINE go #-}
+    {-# INLINE expandList #-}
+    {-# INLINE combine #-}
+
+-- * AuthMethods
+
+-- | Provides a method to apply auth methods to requests
+class P.Typeable a =>
+      AuthMethod a  where
+  applyAuthMethod
+    :: NeptuneBackendConfig
+    -> a
+    -> NeptuneBackendRequest req contentType res accept
+    -> IO (NeptuneBackendRequest req contentType res accept)
+
+-- | An existential wrapper for any AuthMethod
+data AnyAuthMethod = forall a. AuthMethod a => AnyAuthMethod a deriving (P.Typeable)
+
+instance AuthMethod AnyAuthMethod where applyAuthMethod config (AnyAuthMethod a) req = applyAuthMethod config a req
+
+-- | indicates exceptions related to AuthMethods
+data AuthMethodException = AuthMethodException String deriving (P.Show, P.Typeable)
+
+instance E.Exception AuthMethodException
+
+-- | apply all matching AuthMethods in config to request
+_applyAuthMethods
+  :: NeptuneBackendRequest req contentType res accept
+  -> NeptuneBackendConfig
+  -> IO (NeptuneBackendRequest req contentType res accept)
+_applyAuthMethods req config@(NeptuneBackendConfig {configAuthMethods = as}) =
+  foldlM go req as
+  where
+    go r (AnyAuthMethod a) = applyAuthMethod config a r
+
+-- * Utils
+
+-- | Removes Null fields.  (OpenAPI-Specification 2.0 does not allow Null in JSON)
+_omitNulls :: [(Text, A.Value)] -> A.Value
+_omitNulls = A.object . P.filter notNull
+  where
+    notNull (_, A.Null) = False
+    notNull _           = True
+
+-- | Encodes fields using WH.toQueryParam
+_toFormItem :: (WH.ToHttpApiData a, Functor f) => t -> f a -> f (t, [Text])
+_toFormItem name x = (name,) . (:[]) . WH.toQueryParam <$> x
+
+-- | Collapse (Just "") to Nothing
+_emptyToNothing :: Maybe String -> Maybe String
+_emptyToNothing (Just "") = Nothing
+_emptyToNothing x         = x
+{-# INLINE _emptyToNothing #-}
+
+-- | Collapse (Just mempty) to Nothing
+_memptyToNothing :: (P.Monoid a, P.Eq a) => Maybe a -> Maybe a
+_memptyToNothing (Just x) | x P.== P.mempty = Nothing
+_memptyToNothing x = x
+{-# INLINE _memptyToNothing #-}
+
+-- * DateTime Formatting
+
+newtype DateTime = DateTime { unDateTime :: TI.UTCTime }
+  deriving (P.Eq,P.Data,P.Ord,P.Typeable,NF.NFData)
+instance A.FromJSON DateTime where
+  parseJSON = A.withText "DateTime" (_readDateTime . T.unpack)
+instance A.ToJSON DateTime where
+  toJSON (DateTime t) = A.toJSON (_showDateTime t)
+instance WH.FromHttpApiData DateTime where
+  parseUrlPiece = P.maybe (P.Left "parseUrlPiece @DateTime") P.Right . _readDateTime . T.unpack
+instance WH.ToHttpApiData DateTime where
+  toUrlPiece (DateTime t) = T.pack (_showDateTime t)
+instance P.Show DateTime where
+  show (DateTime t) = _showDateTime t
+instance MimeRender MimeMultipartFormData DateTime where
+  mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | @_parseISO8601@
+_readDateTime :: (MonadFail m, Alternative m) => String -> m DateTime
+_readDateTime s =
+  DateTime <$> _parseISO8601 s
+{-# INLINE _readDateTime #-}
+
+-- | @TI.formatISO8601Millis@
+_showDateTime :: (t ~ TI.UTCTime, TI.FormatTime t) => t -> String
+_showDateTime =
+  TI.formatISO8601Millis
+{-# INLINE _showDateTime #-}
+
+-- | parse an ISO8601 date-time string
+_parseISO8601 :: (TI.ParseTime t, MonadFail m, Alternative m) => String -> m t
+_parseISO8601 t =
+  P.asum $
+  P.flip (TI.parseTimeM True TI.defaultTimeLocale) t <$>
+  ["%FT%T%QZ", "%FT%T%Q%z", "%FT%T%Q%Z"]
+{-# INLINE _parseISO8601 #-}
+
+-- * Date Formatting
+
+newtype Date = Date { unDate :: TI.Day }
+  deriving (P.Enum,P.Eq,P.Data,P.Ord,P.Ix,NF.NFData)
+instance A.FromJSON Date where
+  parseJSON = A.withText "Date" (_readDate . T.unpack)
+instance A.ToJSON Date where
+  toJSON (Date t) = A.toJSON (_showDate t)
+instance WH.FromHttpApiData Date where
+  parseUrlPiece = P.maybe (P.Left "parseUrlPiece @Date") P.Right . _readDate . T.unpack
+instance WH.ToHttpApiData Date where
+  toUrlPiece (Date t) = T.pack (_showDate t)
+instance P.Show Date where
+  show (Date t) = _showDate t
+instance MimeRender MimeMultipartFormData Date where
+  mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | @TI.parseTimeM True TI.defaultTimeLocale "%Y-%m-%d"@
+_readDate :: MonadFail m => String -> m Date
+_readDate s = Date <$> TI.parseTimeM True TI.defaultTimeLocale "%Y-%m-%d" s
+{-# INLINE _readDate #-}
+
+-- | @TI.formatTime TI.defaultTimeLocale "%Y-%m-%d"@
+_showDate :: TI.FormatTime t => t -> String
+_showDate =
+  TI.formatTime TI.defaultTimeLocale "%Y-%m-%d"
+{-# INLINE _showDate #-}
+
+-- * Byte/Binary Formatting
+
+
+-- | base64 encoded characters
+newtype ByteArray = ByteArray { unByteArray :: BL.ByteString }
+  deriving (P.Eq,P.Data,P.Ord,P.Typeable,NF.NFData)
+
+instance A.FromJSON ByteArray where
+  parseJSON = A.withText "ByteArray" _readByteArray
+instance A.ToJSON ByteArray where
+  toJSON = A.toJSON . _showByteArray
+instance WH.FromHttpApiData ByteArray where
+  parseUrlPiece = P.maybe (P.Left "parseUrlPiece @ByteArray") P.Right . _readByteArray
+instance WH.ToHttpApiData ByteArray where
+  toUrlPiece = _showByteArray
+instance P.Show ByteArray where
+  show = T.unpack . _showByteArray
+instance MimeRender MimeMultipartFormData ByteArray where
+  mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | read base64 encoded characters
+_readByteArray :: MonadFail m => Text -> m ByteArray
+_readByteArray = P.either P.fail (pure . ByteArray) . BL64.decode . BL.fromStrict . T.encodeUtf8
+{-# INLINE _readByteArray #-}
+
+-- | show base64 encoded characters
+_showByteArray :: ByteArray -> Text
+_showByteArray = T.decodeUtf8 . BL.toStrict . BL64.encode . unByteArray
+{-# INLINE _showByteArray #-}
+
+-- | any sequence of octets
+newtype Binary = Binary { unBinary :: BL.ByteString }
+  deriving (P.Eq,P.Data,P.Ord,P.Typeable,NF.NFData)
+
+instance A.FromJSON Binary where
+  parseJSON = A.withText "Binary" _readBinaryBase64
+instance A.ToJSON Binary where
+  toJSON = A.toJSON . _showBinaryBase64
+instance WH.FromHttpApiData Binary where
+  parseUrlPiece = P.maybe (P.Left "parseUrlPiece @Binary") P.Right . _readBinaryBase64
+instance WH.ToHttpApiData Binary where
+  toUrlPiece = _showBinaryBase64
+instance P.Show Binary where
+  show = T.unpack . _showBinaryBase64
+instance MimeRender MimeMultipartFormData Binary where
+  mimeRender _ = unBinary
+
+_readBinaryBase64 :: MonadFail m => Text -> m Binary
+_readBinaryBase64 = P.either P.fail (pure . Binary) . BL64.decode . BL.fromStrict . T.encodeUtf8
+{-# INLINE _readBinaryBase64 #-}
+
+_showBinaryBase64 :: Binary -> Text
+_showBinaryBase64 = T.decodeUtf8 . BL.toStrict . BL64.encode . unBinary
+{-# INLINE _showBinaryBase64 #-}
+
+-- * Lens Type Aliases
+
+type Lens_' s a = Lens_ s s a a
+type Lens_ s t a b = forall (f :: * -> *). Functor f => (a -> f b) -> s -> f t
diff --git a/lib/Neptune/Backend/Logging.hs b/lib/Neptune/Backend/Logging.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/Logging.hs
@@ -0,0 +1,33 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.Logging
+Logging functions
+-}
+{-# LANGUAGE CPP #-}
+
+#ifdef USE_KATIP
+
+module Neptune.Backend.Logging
+  ( module Neptune.Backend.LoggingKatip
+  ) where
+
+import Neptune.Backend.LoggingKatip
+
+#else
+
+module Neptune.Backend.Logging
+  ( module Neptune.Backend.LoggingMonadLogger
+  ) where
+
+import Neptune.Backend.LoggingMonadLogger
+
+#endif
diff --git a/lib/Neptune/Backend/LoggingKatip.hs b/lib/Neptune/Backend/LoggingKatip.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/LoggingKatip.hs
@@ -0,0 +1,118 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.LoggingKatip
+Katip Logging functions
+-}
+
+{-# LANGUAGE OverloadedStrings   #-}
+{-# LANGUAGE RankNTypes          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Neptune.Backend.LoggingKatip where
+
+import qualified Control.Exception.Safe     as E
+import qualified Control.Monad.IO.Class     as P
+import qualified Control.Monad.Trans.Reader as P
+import qualified Data.Text                  as T
+import qualified Lens.Micro                 as L
+import qualified System.IO                  as IO
+
+import           Data.Text                  (Text)
+import           GHC.Exts                   (IsString (..))
+
+import qualified Katip                      as LG
+
+-- * Type Aliases (for compatibility)
+
+-- | Runs a Katip logging block with the Log environment
+type LogExecWithContext = forall m. P.MonadIO m =>
+                                    LogContext -> LogExec m
+
+-- | A Katip logging block
+type LogExec m = forall a. LG.KatipT m a -> m a
+
+-- | A Katip Log environment
+type LogContext = LG.LogEnv
+
+-- | A Katip Log severity
+type LogLevel = LG.Severity
+
+-- * default logger
+
+-- | the default log environment
+initLogContext :: IO LogContext
+initLogContext = LG.initLogEnv "Neptune.Backend" "dev"
+
+-- | Runs a Katip logging block with the Log environment
+runDefaultLogExecWithContext :: LogExecWithContext
+runDefaultLogExecWithContext = LG.runKatipT
+
+-- * stdout logger
+
+-- | Runs a Katip logging block with the Log environment
+stdoutLoggingExec :: LogExecWithContext
+stdoutLoggingExec = runDefaultLogExecWithContext
+
+-- | A Katip Log environment which targets stdout
+stdoutLoggingContext :: LogContext -> IO LogContext
+stdoutLoggingContext cxt = do
+    handleScribe <- LG.mkHandleScribe LG.ColorIfTerminal IO.stdout (LG.permitItem LG.InfoS) LG.V2
+    LG.registerScribe "stdout" handleScribe LG.defaultScribeSettings cxt
+
+-- * stderr logger
+
+-- | Runs a Katip logging block with the Log environment
+stderrLoggingExec :: LogExecWithContext
+stderrLoggingExec = runDefaultLogExecWithContext
+
+-- | A Katip Log environment which targets stderr
+stderrLoggingContext :: LogContext -> IO LogContext
+stderrLoggingContext cxt = do
+    handleScribe <- LG.mkHandleScribe LG.ColorIfTerminal IO.stderr (LG.permitItem LG.InfoS) LG.V2
+    LG.registerScribe "stderr" handleScribe LG.defaultScribeSettings cxt
+
+-- * Null logger
+
+-- | Disables Katip logging
+runNullLogExec :: LogExecWithContext
+runNullLogExec le (LG.KatipT f) = P.runReaderT f (L.set LG.logEnvScribes mempty le)
+
+-- * Log Msg
+
+-- | Log a katip message
+_log :: (Applicative m, LG.Katip m) => Text -> LogLevel -> Text -> m ()
+_log src level msg = do
+  LG.logMsg (fromString $ T.unpack src) level (LG.logStr msg)
+
+-- * Log Exceptions
+
+-- | re-throws exceptions after logging them
+logExceptions
+  :: (LG.Katip m, E.MonadCatch m, Applicative m)
+  => Text -> m a -> m a
+logExceptions src =
+  E.handle
+    (\(e :: E.SomeException) -> do
+       _log src LG.ErrorS ((T.pack . show) e)
+       E.throw e)
+
+-- * Log Level
+
+levelInfo :: LogLevel
+levelInfo = LG.InfoS
+
+levelError :: LogLevel
+levelError = LG.ErrorS
+
+levelDebug :: LogLevel
+levelDebug = LG.DebugS
+
diff --git a/lib/Neptune/Backend/LoggingMonadLogger.hs b/lib/Neptune/Backend/LoggingMonadLogger.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/LoggingMonadLogger.hs
@@ -0,0 +1,127 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.LoggingMonadLogger
+monad-logger Logging functions
+-}
+
+{-# LANGUAGE OverloadedStrings   #-}
+{-# LANGUAGE RankNTypes          #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Neptune.Backend.LoggingMonadLogger where
+
+import qualified Control.Exception.Safe as E
+import qualified Control.Monad.IO.Class as P
+import qualified Data.Text              as T
+import qualified Data.Time              as TI
+
+import           Data.Monoid            ((<>))
+import           Data.Text              (Text)
+
+import qualified Control.Monad.Logger   as LG
+
+-- * Type Aliases (for compatibility)
+
+-- | Runs a monad-logger  block with the filter predicate
+type LogExecWithContext = forall m. P.MonadIO m =>
+                                    LogContext -> LogExec m
+
+-- | A monad-logger block
+type LogExec m = forall a. LG.LoggingT m a -> m a
+
+-- | A monad-logger filter predicate
+type LogContext = LG.LogSource -> LG.LogLevel -> Bool
+
+-- | A monad-logger log level
+type LogLevel = LG.LogLevel
+
+-- * default logger
+
+-- | the default log environment
+initLogContext :: IO LogContext
+initLogContext = pure infoLevelFilter
+
+-- | Runs a monad-logger block with the filter predicate
+runDefaultLogExecWithContext :: LogExecWithContext
+runDefaultLogExecWithContext = runNullLogExec
+
+-- * stdout logger
+
+-- | Runs a monad-logger block targeting stdout, with the filter predicate
+stdoutLoggingExec :: LogExecWithContext
+stdoutLoggingExec cxt = LG.runStdoutLoggingT . LG.filterLogger cxt
+
+-- | @pure@
+stdoutLoggingContext :: LogContext -> IO LogContext
+stdoutLoggingContext = pure
+
+-- * stderr logger
+
+-- | Runs a monad-logger block targeting stderr, with the filter predicate
+stderrLoggingExec :: LogExecWithContext
+stderrLoggingExec cxt = LG.runStderrLoggingT . LG.filterLogger cxt
+
+-- | @pure@
+stderrLoggingContext :: LogContext -> IO LogContext
+stderrLoggingContext = pure
+
+-- * Null logger
+
+-- | Disables monad-logger logging
+runNullLogExec :: LogExecWithContext
+runNullLogExec = const (`LG.runLoggingT` nullLogger)
+
+-- | monad-logger which does nothing
+nullLogger :: LG.Loc -> LG.LogSource -> LG.LogLevel -> LG.LogStr -> IO ()
+nullLogger _ _ _ _ = return ()
+
+-- * Log Msg
+
+-- | Log a message using the current time
+_log :: (P.MonadIO m, LG.MonadLogger m) => Text -> LG.LogLevel -> Text -> m ()
+_log src level msg = do
+  now <- P.liftIO (formatTimeLog <$> TI.getCurrentTime)
+  LG.logOtherNS ("Neptune.Backend." <> src) level ("[" <> now <> "] " <> msg)
+ where
+  formatTimeLog =
+    T.pack . TI.formatTime TI.defaultTimeLocale "%Y-%m-%dT%H:%M:%S%Z"
+
+-- * Log Exceptions
+
+-- | re-throws exceptions after logging them
+logExceptions
+   :: (LG.MonadLogger m, E.MonadCatch m, P.MonadIO m)
+   => Text -> m a -> m a
+logExceptions src =
+   E.handle
+     (\(e :: E.SomeException) -> do
+        _log src LG.LevelError ((T.pack . show) e)
+        E.throw e)
+
+-- * Log Level
+
+levelInfo :: LogLevel
+levelInfo = LG.LevelInfo
+
+levelError :: LogLevel
+levelError = LG.LevelError
+
+levelDebug :: LogLevel
+levelDebug = LG.LevelDebug
+
+-- * Level Filter
+
+minLevelFilter :: LG.LogLevel -> LG.LogSource -> LG.LogLevel -> Bool
+minLevelFilter l _ l' = l' >= l
+
+infoLevelFilter :: LG.LogSource -> LG.LogLevel -> Bool
+infoLevelFilter = minLevelFilter LG.LevelInfo
diff --git a/lib/Neptune/Backend/MimeTypes.hs b/lib/Neptune/Backend/MimeTypes.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/MimeTypes.hs
@@ -0,0 +1,218 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.MimeTypes
+-}
+
+{-# LANGUAGE ConstraintKinds           #-}
+{-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE FlexibleContexts          #-}
+{-# LANGUAGE FlexibleInstances         #-}
+{-# LANGUAGE MultiParamTypeClasses     #-}
+{-# LANGUAGE OverloadedStrings         #-}
+{-# LANGUAGE ScopedTypeVariables       #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-unused-imports #-}
+
+module Neptune.Backend.MimeTypes where
+
+import qualified Control.Arrow              as P (left)
+import qualified Data.Aeson                 as A
+import qualified Data.ByteString            as B
+import qualified Data.ByteString.Builder    as BB
+import qualified Data.ByteString.Char8      as BC
+import qualified Data.ByteString.Lazy       as BL
+import qualified Data.ByteString.Lazy.Char8 as BCL
+import qualified Data.Data                  as P (Typeable)
+import qualified Data.Proxy                 as P (Proxy (..))
+import qualified Data.String                as P
+import qualified Data.Text                  as T
+import qualified Data.Text.Encoding         as T
+import qualified Network.HTTP.Media         as ME
+import qualified Web.FormUrlEncoded         as WH
+import qualified Web.HttpApiData            as WH
+
+import           Prelude                    (Bool (..), Char, Double, FilePath,
+                                             Float, Int, Integer, Maybe (..),
+                                             String, fmap, mempty, undefined,
+                                             ($), (.), (<$>), (<*>))
+import qualified Prelude                    as P
+
+-- * ContentType MimeType
+
+data ContentType a = MimeType a => ContentType { unContentType :: a }
+
+-- * Accept MimeType
+
+data Accept a = MimeType a => Accept { unAccept :: a }
+
+-- * Consumes Class
+
+class MimeType mtype => Consumes req mtype where
+
+-- * Produces Class
+
+class MimeType mtype => Produces req mtype where
+
+-- * Default Mime Types
+
+data MimeJSON = MimeJSON deriving (P.Typeable)
+data MimeXML = MimeXML deriving (P.Typeable)
+data MimePlainText = MimePlainText deriving (P.Typeable)
+data MimeFormUrlEncoded = MimeFormUrlEncoded deriving (P.Typeable)
+data MimeMultipartFormData = MimeMultipartFormData deriving (P.Typeable)
+data MimeOctetStream = MimeOctetStream deriving (P.Typeable)
+data MimeNoContent = MimeNoContent deriving (P.Typeable)
+data MimeAny = MimeAny deriving (P.Typeable)
+
+-- | A type for responses without content-body.
+data NoContent = NoContent
+  deriving (P.Show, P.Eq, P.Typeable)
+
+
+-- * MimeType Class
+
+class P.Typeable mtype => MimeType mtype  where
+  {-# MINIMAL mimeType | mimeTypes #-}
+
+  mimeTypes :: P.Proxy mtype -> [ME.MediaType]
+  mimeTypes p =
+    case mimeType p of
+      Just x  -> [x]
+      Nothing -> []
+
+  mimeType :: P.Proxy mtype -> Maybe ME.MediaType
+  mimeType p =
+    case mimeTypes p of
+      []    -> Nothing
+      (x:_) -> Just x
+
+  mimeType' :: mtype -> Maybe ME.MediaType
+  mimeType' _ = mimeType (P.Proxy :: P.Proxy mtype)
+  mimeTypes' :: mtype -> [ME.MediaType]
+  mimeTypes' _ = mimeTypes (P.Proxy :: P.Proxy mtype)
+
+-- Default MimeType Instances
+
+-- | @application/json; charset=utf-8@
+instance MimeType MimeJSON where
+  mimeType _ = Just $ P.fromString "application/json"
+-- | @application/xml; charset=utf-8@
+instance MimeType MimeXML where
+  mimeType _ = Just $ P.fromString "application/xml"
+-- | @application/x-www-form-urlencoded@
+instance MimeType MimeFormUrlEncoded where
+  mimeType _ = Just $ P.fromString "application/x-www-form-urlencoded"
+-- | @multipart/form-data@
+instance MimeType MimeMultipartFormData where
+  mimeType _ = Just $ P.fromString "multipart/form-data"
+-- | @text/plain; charset=utf-8@
+instance MimeType MimePlainText where
+  mimeType _ = Just $ P.fromString "text/plain"
+-- | @application/octet-stream@
+instance MimeType MimeOctetStream where
+  mimeType _ = Just $ P.fromString "application/octet-stream"
+-- | @"*/*"@
+instance MimeType MimeAny where
+  mimeType _ = Just $ P.fromString "*/*"
+instance MimeType MimeNoContent where
+  mimeType _ = Nothing
+
+-- * MimeRender Class
+
+class MimeType mtype => MimeRender mtype x where
+    mimeRender  :: P.Proxy mtype -> x -> BL.ByteString
+    mimeRender' :: mtype -> x -> BL.ByteString
+    mimeRender' _ x = mimeRender (P.Proxy :: P.Proxy mtype) x
+
+
+mimeRenderDefaultMultipartFormData :: WH.ToHttpApiData a => a -> BL.ByteString
+mimeRenderDefaultMultipartFormData = BL.fromStrict . T.encodeUtf8 . WH.toQueryParam
+
+-- Default MimeRender Instances
+
+-- | `A.encode`
+instance A.ToJSON a => MimeRender MimeJSON a where mimeRender _ = A.encode
+-- | @WH.urlEncodeAsForm@
+instance WH.ToForm a => MimeRender MimeFormUrlEncoded a where mimeRender _ = WH.urlEncodeAsForm
+
+-- | @P.id@
+instance MimeRender MimePlainText BL.ByteString where mimeRender _ = P.id
+-- | @BL.fromStrict . T.encodeUtf8@
+instance MimeRender MimePlainText T.Text where mimeRender _ = BL.fromStrict . T.encodeUtf8
+-- | @BCL.pack@
+instance MimeRender MimePlainText String where mimeRender _ = BCL.pack
+
+-- | @P.id@
+instance MimeRender MimeOctetStream BL.ByteString where mimeRender _ = P.id
+-- | @BL.fromStrict . T.encodeUtf8@
+instance MimeRender MimeOctetStream T.Text where mimeRender _ = BL.fromStrict . T.encodeUtf8
+-- | @BCL.pack@
+instance MimeRender MimeOctetStream String where mimeRender _ = BCL.pack
+
+instance MimeRender MimeMultipartFormData BL.ByteString where mimeRender _ = P.id
+
+instance MimeRender MimeMultipartFormData Bool where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData Char where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData Double where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData Float where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData Int where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData Integer where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData String where mimeRender _ = mimeRenderDefaultMultipartFormData
+instance MimeRender MimeMultipartFormData T.Text where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | @P.Right . P.const NoContent@
+instance MimeRender MimeNoContent NoContent where mimeRender _ = P.const BCL.empty
+
+
+-- * MimeUnrender Class
+
+class MimeType mtype => MimeUnrender mtype o where
+    mimeUnrender :: P.Proxy mtype -> BL.ByteString -> P.Either String o
+    mimeUnrender' :: mtype -> BL.ByteString -> P.Either String o
+    mimeUnrender' _ x = mimeUnrender (P.Proxy :: P.Proxy mtype) x
+
+-- Default MimeUnrender Instances
+
+-- | @A.eitherDecode@
+instance A.FromJSON a => MimeUnrender MimeJSON a where mimeUnrender _ = A.eitherDecode
+-- | @P.left T.unpack . WH.urlDecodeAsForm@
+instance WH.FromForm a => MimeUnrender MimeFormUrlEncoded a where mimeUnrender _ = P.left T.unpack . WH.urlDecodeAsForm
+-- | @P.Right . P.id@
+
+instance MimeUnrender MimePlainText BL.ByteString where mimeUnrender _ = P.Right . P.id
+-- | @P.left P.show . TL.decodeUtf8'@
+instance MimeUnrender MimePlainText T.Text where mimeUnrender _ = P.left P.show . T.decodeUtf8' . BL.toStrict
+-- | @P.Right . BCL.unpack@
+instance MimeUnrender MimePlainText String where mimeUnrender _ = P.Right . BCL.unpack
+
+-- | @P.Right . P.id@
+instance MimeUnrender MimeOctetStream BL.ByteString where mimeUnrender _ = P.Right . P.id
+-- | @P.left P.show . T.decodeUtf8' . BL.toStrict@
+instance MimeUnrender MimeOctetStream T.Text where mimeUnrender _ = P.left P.show . T.decodeUtf8' . BL.toStrict
+-- | @P.Right . BCL.unpack@
+instance MimeUnrender MimeOctetStream String where mimeUnrender _ = P.Right . BCL.unpack
+
+-- | @P.Right . P.const NoContent@
+instance MimeUnrender MimeNoContent NoContent where mimeUnrender _ = P.Right . P.const NoContent
+
+
+-- * Custom Mime Types
+
+-- ** MimeImagePng
+
+data MimeImagePng = MimeImagePng deriving (P.Typeable)
+
+-- | @image/png@
+instance MimeType MimeImagePng where
+  mimeType _ = Just $ P.fromString "image/png"
+-- instance MimeRender MimeImagePng T.Text where mimeRender _ = undefined
+-- instance MimeUnrender MimeImagePng T.Text where mimeUnrender _ = undefined
+
diff --git a/lib/Neptune/Backend/Model.hs b/lib/Neptune/Backend/Model.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/Model.hs
@@ -0,0 +1,5664 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.Model
+-}
+
+{-# LANGUAGE DeriveDataTypeable         #-}
+{-# LANGUAGE DeriveFoldable             #-}
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE DeriveTraversable          #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase                 #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE NamedFieldPuns             #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE RecordWildCards            #-}
+{-# LANGUAGE TupleSections              #-}
+{-# LANGUAGE TypeFamilies               #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches -fno-warn-unused-binds -fno-warn-unused-imports #-}
+
+module Neptune.Backend.Model where
+
+import           Neptune.Backend.Core
+import           Neptune.Backend.MimeTypes
+
+import           Data.Aeson                ((.:!), (.:), (.:?), (.=))
+
+import qualified Control.Arrow             as P (left)
+import qualified Data.Aeson                as A
+import qualified Data.ByteString           as B
+import qualified Data.ByteString.Base64    as B64
+import qualified Data.ByteString.Char8     as BC
+import qualified Data.ByteString.Lazy      as BL
+import qualified Data.Data                 as P (TypeRep, Typeable, typeOf,
+                                                 typeRep)
+import qualified Data.Foldable             as P
+import qualified Data.HashMap.Lazy         as HM
+import qualified Data.Map                  as Map
+import qualified Data.Maybe                as P
+import qualified Data.Set                  as Set
+import qualified Data.Text                 as T
+import qualified Data.Text.Encoding        as T
+import qualified Data.Time                 as TI
+import qualified Lens.Micro                as L
+import qualified Web.FormUrlEncoded        as WH
+import qualified Web.HttpApiData           as WH
+
+import           Control.Applicative       (Alternative, (<|>))
+import           Data.Function             ((&))
+import           Data.Monoid               ((<>))
+import           Data.Text                 (Text)
+import           Prelude                   (Applicative, Bool (..), Char,
+                                            Double, FilePath, Float, Functor,
+                                            Int, Integer, Maybe (..), Monad,
+                                            String, fmap, maybe, mempty, pure,
+                                            undefined, ($), (.), (/=), (<$>),
+                                            (<*>), (=<<), (>>=))
+
+import qualified Prelude                   as P
+
+
+
+-- * Parameter newtypes
+
+
+-- ** AvatarFile
+newtype AvatarFile = AvatarFile { unAvatarFile :: FilePath } deriving (P.Eq, P.Show)
+
+-- ** BackgroundFile
+newtype BackgroundFile = BackgroundFile { unBackgroundFile :: FilePath } deriving (P.Eq, P.Show)
+
+-- ** ChannelId
+newtype ChannelId = ChannelId { unChannelId :: Text } deriving (P.Eq, P.Show)
+
+-- ** ChannelsValues
+newtype ChannelsValues = ChannelsValues { unChannelsValues :: [InputChannelValues] } deriving (P.Eq, P.Show, A.ToJSON)
+
+-- ** ChartId
+newtype ChartId = ChartId { unChartId :: Text } deriving (P.Eq, P.Show)
+
+-- ** ChartSetId
+newtype ChartSetId = ChartSetId { unChartSetId :: Text } deriving (P.Eq, P.Show)
+
+-- ** EndPoint
+newtype EndPoint = EndPoint { unEndPoint :: Integer } deriving (P.Eq, P.Show)
+
+-- ** ExperimentId
+newtype ExperimentId = ExperimentId { unExperimentId :: Text } deriving (P.Eq, P.Show)
+
+-- ** ExperimentIdentifier
+newtype ExperimentIdentifier = ExperimentIdentifier { unExperimentIdentifier :: Text } deriving (P.Eq, P.Show)
+
+-- ** ExperimentIdentity
+newtype ExperimentIdentity = ExperimentIdentity { unExperimentIdentity :: Text } deriving (P.Eq, P.Show)
+
+-- ** ExperimentIds
+newtype ExperimentIds = ExperimentIds { unExperimentIds :: [Text] } deriving (P.Eq, P.Show, A.ToJSON)
+
+-- ** Gzipped
+newtype Gzipped = Gzipped { unGzipped :: Bool } deriving (P.Eq, P.Show)
+
+-- ** Id
+newtype Id = Id { unId :: Text } deriving (P.Eq, P.Show)
+
+-- ** Ids
+newtype Ids = Ids { unIds :: [Text] } deriving (P.Eq, P.Show)
+
+-- ** IncludeInvitations
+newtype IncludeInvitations = IncludeInvitations { unIncludeInvitations :: Bool } deriving (P.Eq, P.Show)
+
+-- ** InvitationId
+newtype InvitationId = InvitationId { unInvitationId :: Text } deriving (P.Eq, P.Show)
+
+-- ** ItemCount
+newtype ItemCount = ItemCount { unItemCount :: Int } deriving (P.Eq, P.Show)
+
+-- ** Limit
+newtype Limit = Limit { unLimit :: Int } deriving (P.Eq, P.Show)
+
+-- ** MarkOnly
+newtype MarkOnly = MarkOnly { unMarkOnly :: Bool } deriving (P.Eq, P.Show)
+
+-- ** MetricId
+newtype MetricId = MetricId { unMetricId :: Text } deriving (P.Eq, P.Show)
+
+-- ** MetricValues
+newtype MetricValues = MetricValues { unMetricValues :: [SystemMetricValues] } deriving (P.Eq, P.Show, A.ToJSON)
+
+-- ** Offset
+newtype Offset = Offset { unOffset :: Int } deriving (P.Eq, P.Show)
+
+-- ** OrgRelation
+newtype OrgRelation = OrgRelation { unOrgRelation :: [Text] } deriving (P.Eq, P.Show)
+
+-- ** Organization
+newtype Organization = Organization { unOrganization :: Text } deriving (P.Eq, P.Show)
+
+-- ** OrganizationId
+newtype OrganizationId = OrganizationId { unOrganizationId :: Text } deriving (P.Eq, P.Show)
+
+-- ** OrganizationIdentifier
+newtype OrganizationIdentifier = OrganizationIdentifier { unOrganizationIdentifier :: Text } deriving (P.Eq, P.Show)
+
+-- ** OrganizationName
+newtype OrganizationName = OrganizationName { unOrganizationName :: Text } deriving (P.Eq, P.Show)
+
+-- ** Path
+newtype Path = Path { unPath :: Text } deriving (P.Eq, P.Show)
+
+-- ** ProjectId
+newtype ProjectId = ProjectId { unProjectId :: Text } deriving (P.Eq, P.Show)
+
+-- ** ProjectIdentifier
+newtype ProjectIdentifier = ProjectIdentifier { unProjectIdentifier :: Text } deriving (P.Eq, P.Show)
+
+-- ** ProjectIdentifierText
+newtype ProjectIdentifierText = ProjectIdentifierText { unProjectIdentifierText :: [Text] } deriving (P.Eq, P.Show)
+
+-- ** ProjectKey
+newtype ProjectKey = ProjectKey { unProjectKey :: Text } deriving (P.Eq, P.Show)
+
+-- ** ProjectName
+newtype ProjectName = ProjectName { unProjectName :: Text } deriving (P.Eq, P.Show)
+
+-- ** Resource
+newtype Resource = Resource { unResource :: Text } deriving (P.Eq, P.Show)
+
+-- ** SearchTerm
+newtype SearchTerm = SearchTerm { unSearchTerm :: Text } deriving (P.Eq, P.Show)
+
+-- ** SortBy
+newtype SortBy = SortBy { unSortBy :: [Text] } deriving (P.Eq, P.Show)
+
+-- ** SortDirection
+newtype SortDirection = SortDirection { unSortDirection :: [Text] } deriving (P.Eq, P.Show)
+
+-- ** StartPoint
+newtype StartPoint = StartPoint { unStartPoint :: Integer } deriving (P.Eq, P.Show)
+
+-- ** UserId
+newtype UserId = UserId { unUserId :: Text } deriving (P.Eq, P.Show)
+
+-- ** UserRelation
+newtype UserRelation = UserRelation { unUserRelation :: Text } deriving (P.Eq, P.Show)
+
+-- ** Username
+newtype Username = Username { unUsername :: [Text] } deriving (P.Eq, P.Show)
+
+-- ** UsernamePrefix
+newtype UsernamePrefix = UsernamePrefix { unUsernamePrefix :: Text } deriving (P.Eq, P.Show)
+
+-- ** UsernameText
+newtype UsernameText = UsernameText { unUsernameText :: Text } deriving (P.Eq, P.Show)
+
+-- ** ViewedUsername
+newtype ViewedUsername = ViewedUsername { unViewedUsername :: Text } deriving (P.Eq, P.Show)
+
+-- ** Visibility
+newtype Visibility = Visibility { unVisibility :: Text } deriving (P.Eq, P.Show)
+
+-- ** WorkspaceName
+newtype WorkspaceName = WorkspaceName { unWorkspaceName :: Text } deriving (P.Eq, P.Show)
+
+-- ** XNeptuneApiToken
+newtype XNeptuneApiToken = XNeptuneApiToken { unXNeptuneApiToken :: Text } deriving (P.Eq, P.Show)
+
+-- ** XNeptuneCliVersion
+newtype XNeptuneCliVersion = XNeptuneCliVersion { unXNeptuneCliVersion :: Text } deriving (P.Eq, P.Show)
+
+-- * Models
+
+
+-- ** AchievementsDTO
+-- | AchievementsDTO
+data AchievementsDTO = AchievementsDTO
+    { achievementsDTOEarned :: !([AchievementTypeDTO]) -- ^ /Required/ "earned"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON AchievementsDTO
+instance A.FromJSON AchievementsDTO where
+  parseJSON = A.withObject "AchievementsDTO" $ \o ->
+    AchievementsDTO
+      <$> (o .:  "earned")
+
+-- | ToJSON AchievementsDTO
+instance A.ToJSON AchievementsDTO where
+  toJSON AchievementsDTO {..} =
+   _omitNulls
+      [ "earned" .= achievementsDTOEarned
+      ]
+
+
+-- | Construct a value of type 'AchievementsDTO' (by applying it's required fields, if any)
+mkAchievementsDTO
+  :: [AchievementTypeDTO] -- ^ 'achievementsDTOEarned'
+  -> AchievementsDTO
+mkAchievementsDTO achievementsDTOEarned =
+  AchievementsDTO
+  { achievementsDTOEarned
+  }
+
+-- ** AuthorizedUserDTO
+-- | AuthorizedUserDTO
+data AuthorizedUserDTO = AuthorizedUserDTO
+    { authorizedUserDTOUsername :: !(Text) -- ^ /Required/ "username"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON AuthorizedUserDTO
+instance A.FromJSON AuthorizedUserDTO where
+  parseJSON = A.withObject "AuthorizedUserDTO" $ \o ->
+    AuthorizedUserDTO
+      <$> (o .:  "username")
+
+-- | ToJSON AuthorizedUserDTO
+instance A.ToJSON AuthorizedUserDTO where
+  toJSON AuthorizedUserDTO {..} =
+   _omitNulls
+      [ "username" .= authorizedUserDTOUsername
+      ]
+
+
+-- | Construct a value of type 'AuthorizedUserDTO' (by applying it's required fields, if any)
+mkAuthorizedUserDTO
+  :: Text -- ^ 'authorizedUserDTOUsername'
+  -> AuthorizedUserDTO
+mkAuthorizedUserDTO authorizedUserDTOUsername =
+  AuthorizedUserDTO
+  { authorizedUserDTOUsername
+  }
+
+-- ** BatchChannelValueErrorDTO
+-- | BatchChannelValueErrorDTO
+data BatchChannelValueErrorDTO = BatchChannelValueErrorDTO
+    { batchChannelValueErrorDTOChannelId :: !(Text) -- ^ /Required/ "channelId"
+    -- ^ /Required/ "x"
+    , batchChannelValueErrorDTOX         :: !(Double) -- ^ /Required/ "x"
+    -- ^ /Required/ "error"
+    , batchChannelValueErrorDTOError     :: !(Error) -- ^ /Required/ "error"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON BatchChannelValueErrorDTO
+instance A.FromJSON BatchChannelValueErrorDTO where
+  parseJSON = A.withObject "BatchChannelValueErrorDTO" $ \o ->
+    BatchChannelValueErrorDTO
+      <$> (o .:  "channelId")
+      <*> (o .:  "x")
+      <*> (o .:  "error")
+
+-- | ToJSON BatchChannelValueErrorDTO
+instance A.ToJSON BatchChannelValueErrorDTO where
+  toJSON BatchChannelValueErrorDTO {..} =
+   _omitNulls
+      [ "channelId" .= batchChannelValueErrorDTOChannelId
+      , "x" .= batchChannelValueErrorDTOX
+      , "error" .= batchChannelValueErrorDTOError
+      ]
+
+
+-- | Construct a value of type 'BatchChannelValueErrorDTO' (by applying it's required fields, if any)
+mkBatchChannelValueErrorDTO
+  :: Text -- ^ 'batchChannelValueErrorDTOChannelId'
+  -> Double -- ^ 'batchChannelValueErrorDTOX'
+  -> Error -- ^ 'batchChannelValueErrorDTOError'
+  -> BatchChannelValueErrorDTO
+mkBatchChannelValueErrorDTO batchChannelValueErrorDTOChannelId batchChannelValueErrorDTOX batchChannelValueErrorDTOError =
+  BatchChannelValueErrorDTO
+  { batchChannelValueErrorDTOChannelId
+  , batchChannelValueErrorDTOX
+  , batchChannelValueErrorDTOError
+  }
+
+-- ** BatchExperimentUpdateResult
+-- | BatchExperimentUpdateResult
+data BatchExperimentUpdateResult = BatchExperimentUpdateResult
+    { batchExperimentUpdateResultExperimentId :: !(Text) -- ^ /Required/ "experimentId"
+    -- ^ "error"
+    , batchExperimentUpdateResultError        :: !(Maybe Error) -- ^ "error"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON BatchExperimentUpdateResult
+instance A.FromJSON BatchExperimentUpdateResult where
+  parseJSON = A.withObject "BatchExperimentUpdateResult" $ \o ->
+    BatchExperimentUpdateResult
+      <$> (o .:  "experimentId")
+      <*> (o .:? "error")
+
+-- | ToJSON BatchExperimentUpdateResult
+instance A.ToJSON BatchExperimentUpdateResult where
+  toJSON BatchExperimentUpdateResult {..} =
+   _omitNulls
+      [ "experimentId" .= batchExperimentUpdateResultExperimentId
+      , "error" .= batchExperimentUpdateResultError
+      ]
+
+
+-- | Construct a value of type 'BatchExperimentUpdateResult' (by applying it's required fields, if any)
+mkBatchExperimentUpdateResult
+  :: Text -- ^ 'batchExperimentUpdateResultExperimentId'
+  -> BatchExperimentUpdateResult
+mkBatchExperimentUpdateResult batchExperimentUpdateResultExperimentId =
+  BatchExperimentUpdateResult
+  { batchExperimentUpdateResultExperimentId
+  , batchExperimentUpdateResultError = Nothing
+  }
+
+-- ** Channel
+-- | Channel
+data Channel = Channel
+    { channelId          :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "name"
+    , channelName        :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "channelType"
+    , channelChannelType :: !(ChannelType) -- ^ /Required/ "channelType"
+    -- ^ "lastX"
+    , channelLastX       :: !(Maybe Double) -- ^ "lastX"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Channel
+instance A.FromJSON Channel where
+  parseJSON = A.withObject "Channel" $ \o ->
+    Channel
+      <$> (o .:  "id")
+      <*> (o .:  "name")
+      <*> (o .:  "channelType")
+      <*> (o .:? "lastX")
+
+-- | ToJSON Channel
+instance A.ToJSON Channel where
+  toJSON Channel {..} =
+   _omitNulls
+      [ "id" .= channelId
+      , "name" .= channelName
+      , "channelType" .= channelChannelType
+      , "lastX" .= channelLastX
+      ]
+
+
+-- | Construct a value of type 'Channel' (by applying it's required fields, if any)
+mkChannel
+  :: Text -- ^ 'channelId'
+  -> Text -- ^ 'channelName'
+  -> ChannelType -- ^ 'channelChannelType'
+  -> Channel
+mkChannel channelId channelName channelChannelType =
+  Channel
+  { channelId
+  , channelName
+  , channelChannelType
+  , channelLastX = Nothing
+  }
+
+-- ** ChannelDTO
+-- | ChannelDTO
+data ChannelDTO = ChannelDTO
+    { channelDTOId          :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "name"
+    , channelDTOName        :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "channelType"
+    , channelDTOChannelType :: !(ChannelTypeEnum) -- ^ /Required/ "channelType"
+    -- ^ "lastX"
+    , channelDTOLastX       :: !(Maybe Double) -- ^ "lastX"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChannelDTO
+instance A.FromJSON ChannelDTO where
+  parseJSON = A.withObject "ChannelDTO" $ \o ->
+    ChannelDTO
+      <$> (o .:  "id")
+      <*> (o .:  "name")
+      <*> (o .:  "channelType")
+      <*> (o .:? "lastX")
+
+-- | ToJSON ChannelDTO
+instance A.ToJSON ChannelDTO where
+  toJSON ChannelDTO {..} =
+   _omitNulls
+      [ "id" .= channelDTOId
+      , "name" .= channelDTOName
+      , "channelType" .= channelDTOChannelType
+      , "lastX" .= channelDTOLastX
+      ]
+
+
+-- | Construct a value of type 'ChannelDTO' (by applying it's required fields, if any)
+mkChannelDTO
+  :: Text -- ^ 'channelDTOId'
+  -> Text -- ^ 'channelDTOName'
+  -> ChannelTypeEnum -- ^ 'channelDTOChannelType'
+  -> ChannelDTO
+mkChannelDTO channelDTOId channelDTOName channelDTOChannelType =
+  ChannelDTO
+  { channelDTOId
+  , channelDTOName
+  , channelDTOChannelType
+  , channelDTOLastX = Nothing
+  }
+
+-- ** ChannelParams
+-- | ChannelParams
+data ChannelParams = ChannelParams
+    { channelParamsName        :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "channelType"
+    , channelParamsChannelType :: !(ChannelTypeEnum) -- ^ /Required/ "channelType"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChannelParams
+instance A.FromJSON ChannelParams where
+  parseJSON = A.withObject "ChannelParams" $ \o ->
+    ChannelParams
+      <$> (o .:  "name")
+      <*> (o .:  "channelType")
+
+-- | ToJSON ChannelParams
+instance A.ToJSON ChannelParams where
+  toJSON ChannelParams {..} =
+   _omitNulls
+      [ "name" .= channelParamsName
+      , "channelType" .= channelParamsChannelType
+      ]
+
+
+-- | Construct a value of type 'ChannelParams' (by applying it's required fields, if any)
+mkChannelParams
+  :: Text -- ^ 'channelParamsName'
+  -> ChannelTypeEnum -- ^ 'channelParamsChannelType'
+  -> ChannelParams
+mkChannelParams channelParamsName channelParamsChannelType =
+  ChannelParams
+  { channelParamsName
+  , channelParamsChannelType
+  }
+
+-- ** ChannelWithValue
+-- | ChannelWithValue
+data ChannelWithValue = ChannelWithValue
+    { channelWithValueX           :: !(Double) -- ^ /Required/ "x"
+    -- ^ /Required/ "y"
+    , channelWithValueY           :: !(Text) -- ^ /Required/ "y"
+    -- ^ /Required/ "channelType"
+    , channelWithValueChannelType :: !(ChannelType) -- ^ /Required/ "channelType"
+    -- ^ /Required/ "channelName"
+    , channelWithValueChannelName :: !(Text) -- ^ /Required/ "channelName"
+    -- ^ /Required/ "channelId"
+    , channelWithValueChannelId   :: !(Text) -- ^ /Required/ "channelId"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChannelWithValue
+instance A.FromJSON ChannelWithValue where
+  parseJSON = A.withObject "ChannelWithValue" $ \o ->
+    ChannelWithValue
+      <$> (o .:  "x")
+      <*> (o .:  "y")
+      <*> (o .:  "channelType")
+      <*> (o .:  "channelName")
+      <*> (o .:  "channelId")
+
+-- | ToJSON ChannelWithValue
+instance A.ToJSON ChannelWithValue where
+  toJSON ChannelWithValue {..} =
+   _omitNulls
+      [ "x" .= channelWithValueX
+      , "y" .= channelWithValueY
+      , "channelType" .= channelWithValueChannelType
+      , "channelName" .= channelWithValueChannelName
+      , "channelId" .= channelWithValueChannelId
+      ]
+
+
+-- | Construct a value of type 'ChannelWithValue' (by applying it's required fields, if any)
+mkChannelWithValue
+  :: Double -- ^ 'channelWithValueX'
+  -> Text -- ^ 'channelWithValueY'
+  -> ChannelType -- ^ 'channelWithValueChannelType'
+  -> Text -- ^ 'channelWithValueChannelName'
+  -> Text -- ^ 'channelWithValueChannelId'
+  -> ChannelWithValue
+mkChannelWithValue channelWithValueX channelWithValueY channelWithValueChannelType channelWithValueChannelName channelWithValueChannelId =
+  ChannelWithValue
+  { channelWithValueX
+  , channelWithValueY
+  , channelWithValueChannelType
+  , channelWithValueChannelName
+  , channelWithValueChannelId
+  }
+
+-- ** ChannelWithValueDTO
+-- | ChannelWithValueDTO
+data ChannelWithValueDTO = ChannelWithValueDTO
+    { channelWithValueDTOX           :: !(Double) -- ^ /Required/ "x"
+    -- ^ /Required/ "y"
+    , channelWithValueDTOY           :: !(Text) -- ^ /Required/ "y"
+    -- ^ /Required/ "channelType"
+    , channelWithValueDTOChannelType :: !(ChannelTypeEnum) -- ^ /Required/ "channelType"
+    -- ^ /Required/ "channelName"
+    , channelWithValueDTOChannelName :: !(Text) -- ^ /Required/ "channelName"
+    -- ^ /Required/ "channelId"
+    , channelWithValueDTOChannelId   :: !(Text) -- ^ /Required/ "channelId"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChannelWithValueDTO
+instance A.FromJSON ChannelWithValueDTO where
+  parseJSON = A.withObject "ChannelWithValueDTO" $ \o ->
+    ChannelWithValueDTO
+      <$> (o .:  "x")
+      <*> (o .:  "y")
+      <*> (o .:  "channelType")
+      <*> (o .:  "channelName")
+      <*> (o .:  "channelId")
+
+-- | ToJSON ChannelWithValueDTO
+instance A.ToJSON ChannelWithValueDTO where
+  toJSON ChannelWithValueDTO {..} =
+   _omitNulls
+      [ "x" .= channelWithValueDTOX
+      , "y" .= channelWithValueDTOY
+      , "channelType" .= channelWithValueDTOChannelType
+      , "channelName" .= channelWithValueDTOChannelName
+      , "channelId" .= channelWithValueDTOChannelId
+      ]
+
+
+-- | Construct a value of type 'ChannelWithValueDTO' (by applying it's required fields, if any)
+mkChannelWithValueDTO
+  :: Double -- ^ 'channelWithValueDTOX'
+  -> Text -- ^ 'channelWithValueDTOY'
+  -> ChannelTypeEnum -- ^ 'channelWithValueDTOChannelType'
+  -> Text -- ^ 'channelWithValueDTOChannelName'
+  -> Text -- ^ 'channelWithValueDTOChannelId'
+  -> ChannelWithValueDTO
+mkChannelWithValueDTO channelWithValueDTOX channelWithValueDTOY channelWithValueDTOChannelType channelWithValueDTOChannelName channelWithValueDTOChannelId =
+  ChannelWithValueDTO
+  { channelWithValueDTOX
+  , channelWithValueDTOY
+  , channelWithValueDTOChannelType
+  , channelWithValueDTOChannelName
+  , channelWithValueDTOChannelId
+  }
+
+-- ** Chart
+-- | Chart
+data Chart = Chart
+    { chartId     :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "name"
+    , chartName   :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "series"
+    , chartSeries :: !([Series]) -- ^ /Required/ "series"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Chart
+instance A.FromJSON Chart where
+  parseJSON = A.withObject "Chart" $ \o ->
+    Chart
+      <$> (o .:  "id")
+      <*> (o .:  "name")
+      <*> (o .:  "series")
+
+-- | ToJSON Chart
+instance A.ToJSON Chart where
+  toJSON Chart {..} =
+   _omitNulls
+      [ "id" .= chartId
+      , "name" .= chartName
+      , "series" .= chartSeries
+      ]
+
+
+-- | Construct a value of type 'Chart' (by applying it's required fields, if any)
+mkChart
+  :: Text -- ^ 'chartId'
+  -> Text -- ^ 'chartName'
+  -> [Series] -- ^ 'chartSeries'
+  -> Chart
+mkChart chartId chartName chartSeries =
+  Chart
+  { chartId
+  , chartName
+  , chartSeries
+  }
+
+-- ** ChartDefinition
+-- | ChartDefinition
+data ChartDefinition = ChartDefinition
+    { chartDefinitionName   :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "series"
+    , chartDefinitionSeries :: !([SeriesDefinition]) -- ^ /Required/ "series"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChartDefinition
+instance A.FromJSON ChartDefinition where
+  parseJSON = A.withObject "ChartDefinition" $ \o ->
+    ChartDefinition
+      <$> (o .:  "name")
+      <*> (o .:  "series")
+
+-- | ToJSON ChartDefinition
+instance A.ToJSON ChartDefinition where
+  toJSON ChartDefinition {..} =
+   _omitNulls
+      [ "name" .= chartDefinitionName
+      , "series" .= chartDefinitionSeries
+      ]
+
+
+-- | Construct a value of type 'ChartDefinition' (by applying it's required fields, if any)
+mkChartDefinition
+  :: Text -- ^ 'chartDefinitionName'
+  -> [SeriesDefinition] -- ^ 'chartDefinitionSeries'
+  -> ChartDefinition
+mkChartDefinition chartDefinitionName chartDefinitionSeries =
+  ChartDefinition
+  { chartDefinitionName
+  , chartDefinitionSeries
+  }
+
+-- ** ChartSet
+-- | ChartSet
+data ChartSet = ChartSet
+    { chartSetIsEditable           :: !(Maybe Bool) -- ^ "isEditable"
+    -- ^ "defaultChartsEnabled"
+    , chartSetDefaultChartsEnabled :: !(Maybe Bool) -- ^ "defaultChartsEnabled"
+    -- ^ /Required/ "projectId"
+    , chartSetProjectId            :: !(Text) -- ^ /Required/ "projectId"
+    -- ^ /Required/ "id"
+    , chartSetId                   :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "name"
+    , chartSetName                 :: !(Text) -- ^ /Required/ "name"
+    -- ^ "charts"
+    , chartSetCharts               :: !(Maybe [Chart]) -- ^ "charts"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChartSet
+instance A.FromJSON ChartSet where
+  parseJSON = A.withObject "ChartSet" $ \o ->
+    ChartSet
+      <$> (o .:? "isEditable")
+      <*> (o .:? "defaultChartsEnabled")
+      <*> (o .:  "projectId")
+      <*> (o .:  "id")
+      <*> (o .:  "name")
+      <*> (o .:? "charts")
+
+-- | ToJSON ChartSet
+instance A.ToJSON ChartSet where
+  toJSON ChartSet {..} =
+   _omitNulls
+      [ "isEditable" .= chartSetIsEditable
+      , "defaultChartsEnabled" .= chartSetDefaultChartsEnabled
+      , "projectId" .= chartSetProjectId
+      , "id" .= chartSetId
+      , "name" .= chartSetName
+      , "charts" .= chartSetCharts
+      ]
+
+
+-- | Construct a value of type 'ChartSet' (by applying it's required fields, if any)
+mkChartSet
+  :: Text -- ^ 'chartSetProjectId'
+  -> Text -- ^ 'chartSetId'
+  -> Text -- ^ 'chartSetName'
+  -> ChartSet
+mkChartSet chartSetProjectId chartSetId chartSetName =
+  ChartSet
+  { chartSetIsEditable = Nothing
+  , chartSetDefaultChartsEnabled = Nothing
+  , chartSetProjectId
+  , chartSetId
+  , chartSetName
+  , chartSetCharts = Nothing
+  }
+
+-- ** ChartSetParams
+-- | ChartSetParams
+data ChartSetParams = ChartSetParams
+    { chartSetParamsName                 :: !(Text) -- ^ /Required/ "name"
+    -- ^ "charts"
+    , chartSetParamsCharts               :: !(Maybe [ChartDefinition]) -- ^ "charts"
+    -- ^ "defaultChartsEnabled"
+    , chartSetParamsDefaultChartsEnabled :: !(Maybe Bool) -- ^ "defaultChartsEnabled"
+    -- ^ "isEditable"
+    , chartSetParamsIsEditable           :: !(Maybe Bool) -- ^ "isEditable"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ChartSetParams
+instance A.FromJSON ChartSetParams where
+  parseJSON = A.withObject "ChartSetParams" $ \o ->
+    ChartSetParams
+      <$> (o .:  "name")
+      <*> (o .:? "charts")
+      <*> (o .:? "defaultChartsEnabled")
+      <*> (o .:? "isEditable")
+
+-- | ToJSON ChartSetParams
+instance A.ToJSON ChartSetParams where
+  toJSON ChartSetParams {..} =
+   _omitNulls
+      [ "name" .= chartSetParamsName
+      , "charts" .= chartSetParamsCharts
+      , "defaultChartsEnabled" .= chartSetParamsDefaultChartsEnabled
+      , "isEditable" .= chartSetParamsIsEditable
+      ]
+
+
+-- | Construct a value of type 'ChartSetParams' (by applying it's required fields, if any)
+mkChartSetParams
+  :: Text -- ^ 'chartSetParamsName'
+  -> ChartSetParams
+mkChartSetParams chartSetParamsName =
+  ChartSetParams
+  { chartSetParamsName
+  , chartSetParamsCharts = Nothing
+  , chartSetParamsDefaultChartsEnabled = Nothing
+  , chartSetParamsIsEditable = Nothing
+  }
+
+-- ** Charts
+-- | Charts
+data Charts = Charts
+    { chartsManualCharts  :: !([Chart]) -- ^ /Required/ "manualCharts"
+    -- ^ /Required/ "defaultCharts"
+    , chartsDefaultCharts :: !([Chart]) -- ^ /Required/ "defaultCharts"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Charts
+instance A.FromJSON Charts where
+  parseJSON = A.withObject "Charts" $ \o ->
+    Charts
+      <$> (o .:  "manualCharts")
+      <*> (o .:  "defaultCharts")
+
+-- | ToJSON Charts
+instance A.ToJSON Charts where
+  toJSON Charts {..} =
+   _omitNulls
+      [ "manualCharts" .= chartsManualCharts
+      , "defaultCharts" .= chartsDefaultCharts
+      ]
+
+
+-- | Construct a value of type 'Charts' (by applying it's required fields, if any)
+mkCharts
+  :: [Chart] -- ^ 'chartsManualCharts'
+  -> [Chart] -- ^ 'chartsDefaultCharts'
+  -> Charts
+mkCharts chartsManualCharts chartsDefaultCharts =
+  Charts
+  { chartsManualCharts
+  , chartsDefaultCharts
+  }
+
+-- ** ClientConfig
+-- | ClientConfig
+data ClientConfig = ClientConfig
+    { clientConfigApiUrl         :: !(Text) -- ^ /Required/ "apiUrl"
+    -- ^ /Required/ "applicationUrl"
+    , clientConfigApplicationUrl :: !(Text) -- ^ /Required/ "applicationUrl"
+    -- ^ /Required/ "pyLibVersions"
+    , clientConfigPyLibVersions  :: !(ClientVersionsConfigDTO) -- ^ /Required/ "pyLibVersions"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ClientConfig
+instance A.FromJSON ClientConfig where
+  parseJSON = A.withObject "ClientConfig" $ \o ->
+    ClientConfig
+      <$> (o .:  "apiUrl")
+      <*> (o .:  "applicationUrl")
+      <*> (o .:  "pyLibVersions")
+
+-- | ToJSON ClientConfig
+instance A.ToJSON ClientConfig where
+  toJSON ClientConfig {..} =
+   _omitNulls
+      [ "apiUrl" .= clientConfigApiUrl
+      , "applicationUrl" .= clientConfigApplicationUrl
+      , "pyLibVersions" .= clientConfigPyLibVersions
+      ]
+
+
+-- | Construct a value of type 'ClientConfig' (by applying it's required fields, if any)
+mkClientConfig
+  :: Text -- ^ 'clientConfigApiUrl'
+  -> Text -- ^ 'clientConfigApplicationUrl'
+  -> ClientVersionsConfigDTO -- ^ 'clientConfigPyLibVersions'
+  -> ClientConfig
+mkClientConfig clientConfigApiUrl clientConfigApplicationUrl clientConfigPyLibVersions =
+  ClientConfig
+  { clientConfigApiUrl
+  , clientConfigApplicationUrl
+  , clientConfigPyLibVersions
+  }
+
+-- ** ClientVersionsConfigDTO
+-- | ClientVersionsConfigDTO
+data ClientVersionsConfigDTO = ClientVersionsConfigDTO
+    { clientVersionsConfigDTOMinRecommendedVersion :: !(Maybe Text) -- ^ "minRecommendedVersion"
+    -- ^ "minCompatibleVersion"
+    , clientVersionsConfigDTOMinCompatibleVersion  :: !(Maybe Text) -- ^ "minCompatibleVersion"
+    -- ^ "maxCompatibleVersion"
+    , clientVersionsConfigDTOMaxCompatibleVersion  :: !(Maybe Text) -- ^ "maxCompatibleVersion"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ClientVersionsConfigDTO
+instance A.FromJSON ClientVersionsConfigDTO where
+  parseJSON = A.withObject "ClientVersionsConfigDTO" $ \o ->
+    ClientVersionsConfigDTO
+      <$> (o .:? "minRecommendedVersion")
+      <*> (o .:? "minCompatibleVersion")
+      <*> (o .:? "maxCompatibleVersion")
+
+-- | ToJSON ClientVersionsConfigDTO
+instance A.ToJSON ClientVersionsConfigDTO where
+  toJSON ClientVersionsConfigDTO {..} =
+   _omitNulls
+      [ "minRecommendedVersion" .= clientVersionsConfigDTOMinRecommendedVersion
+      , "minCompatibleVersion" .= clientVersionsConfigDTOMinCompatibleVersion
+      , "maxCompatibleVersion" .= clientVersionsConfigDTOMaxCompatibleVersion
+      ]
+
+
+-- | Construct a value of type 'ClientVersionsConfigDTO' (by applying it's required fields, if any)
+mkClientVersionsConfigDTO
+  :: ClientVersionsConfigDTO
+mkClientVersionsConfigDTO =
+  ClientVersionsConfigDTO
+  { clientVersionsConfigDTOMinRecommendedVersion = Nothing
+  , clientVersionsConfigDTOMinCompatibleVersion = Nothing
+  , clientVersionsConfigDTOMaxCompatibleVersion = Nothing
+  }
+
+-- ** CompletedExperimentParams
+-- | CompletedExperimentParams
+data CompletedExperimentParams = CompletedExperimentParams
+    { completedExperimentParamsState     :: !(ExperimentState) -- ^ /Required/ "state"
+    -- ^ /Required/ "traceback"
+    , completedExperimentParamsTraceback :: !(Text) -- ^ /Required/ "traceback"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON CompletedExperimentParams
+instance A.FromJSON CompletedExperimentParams where
+  parseJSON = A.withObject "CompletedExperimentParams" $ \o ->
+    CompletedExperimentParams
+      <$> (o .:  "state")
+      <*> (o .:  "traceback")
+
+-- | ToJSON CompletedExperimentParams
+instance A.ToJSON CompletedExperimentParams where
+  toJSON CompletedExperimentParams {..} =
+   _omitNulls
+      [ "state" .= completedExperimentParamsState
+      , "traceback" .= completedExperimentParamsTraceback
+      ]
+
+
+-- | Construct a value of type 'CompletedExperimentParams' (by applying it's required fields, if any)
+mkCompletedExperimentParams
+  :: ExperimentState -- ^ 'completedExperimentParamsState'
+  -> Text -- ^ 'completedExperimentParamsTraceback'
+  -> CompletedExperimentParams
+mkCompletedExperimentParams completedExperimentParamsState completedExperimentParamsTraceback =
+  CompletedExperimentParams
+  { completedExperimentParamsState
+  , completedExperimentParamsTraceback
+  }
+
+-- ** ComponentStatus
+-- | ComponentStatus
+data ComponentStatus = ComponentStatus
+    { componentStatusName   :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "status"
+    , componentStatusStatus :: !(Text) -- ^ /Required/ "status"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ComponentStatus
+instance A.FromJSON ComponentStatus where
+  parseJSON = A.withObject "ComponentStatus" $ \o ->
+    ComponentStatus
+      <$> (o .:  "name")
+      <*> (o .:  "status")
+
+-- | ToJSON ComponentStatus
+instance A.ToJSON ComponentStatus where
+  toJSON ComponentStatus {..} =
+   _omitNulls
+      [ "name" .= componentStatusName
+      , "status" .= componentStatusStatus
+      ]
+
+
+-- | Construct a value of type 'ComponentStatus' (by applying it's required fields, if any)
+mkComponentStatus
+  :: Text -- ^ 'componentStatusName'
+  -> Text -- ^ 'componentStatusStatus'
+  -> ComponentStatus
+mkComponentStatus componentStatusName componentStatusStatus =
+  ComponentStatus
+  { componentStatusName
+  , componentStatusStatus
+  }
+
+-- ** ComponentVersion
+-- | ComponentVersion
+data ComponentVersion = ComponentVersion
+    { componentVersionName    :: !(NameEnum) -- ^ /Required/ "name"
+    -- ^ /Required/ "version"
+    , componentVersionVersion :: !(Text) -- ^ /Required/ "version"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ComponentVersion
+instance A.FromJSON ComponentVersion where
+  parseJSON = A.withObject "ComponentVersion" $ \o ->
+    ComponentVersion
+      <$> (o .:  "name")
+      <*> (o .:  "version")
+
+-- | ToJSON ComponentVersion
+instance A.ToJSON ComponentVersion where
+  toJSON ComponentVersion {..} =
+   _omitNulls
+      [ "name" .= componentVersionName
+      , "version" .= componentVersionVersion
+      ]
+
+
+-- | Construct a value of type 'ComponentVersion' (by applying it's required fields, if any)
+mkComponentVersion
+  :: NameEnum -- ^ 'componentVersionName'
+  -> Text -- ^ 'componentVersionVersion'
+  -> ComponentVersion
+mkComponentVersion componentVersionName componentVersionVersion =
+  ComponentVersion
+  { componentVersionName
+  , componentVersionVersion
+  }
+
+-- ** ConfigInfo
+-- | ConfigInfo
+data ConfigInfo = ConfigInfo
+    { configInfoMaxFormContentSize :: !(Int) -- ^ /Required/ "maxFormContentSize"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ConfigInfo
+instance A.FromJSON ConfigInfo where
+  parseJSON = A.withObject "ConfigInfo" $ \o ->
+    ConfigInfo
+      <$> (o .:  "maxFormContentSize")
+
+-- | ToJSON ConfigInfo
+instance A.ToJSON ConfigInfo where
+  toJSON ConfigInfo {..} =
+   _omitNulls
+      [ "maxFormContentSize" .= configInfoMaxFormContentSize
+      ]
+
+
+-- | Construct a value of type 'ConfigInfo' (by applying it's required fields, if any)
+mkConfigInfo
+  :: Int -- ^ 'configInfoMaxFormContentSize'
+  -> ConfigInfo
+mkConfigInfo configInfoMaxFormContentSize =
+  ConfigInfo
+  { configInfoMaxFormContentSize
+  }
+
+-- ** CreateSessionParamsDTO
+-- | CreateSessionParamsDTO
+-- Stripe Checkout Session details
+data CreateSessionParamsDTO = CreateSessionParamsDTO
+    { createSessionParamsDTOSuccessUrl :: !(Text) -- ^ /Required/ "successUrl"
+    -- ^ /Required/ "failureUrl"
+    , createSessionParamsDTOFailureUrl :: !(Text) -- ^ /Required/ "failureUrl"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON CreateSessionParamsDTO
+instance A.FromJSON CreateSessionParamsDTO where
+  parseJSON = A.withObject "CreateSessionParamsDTO" $ \o ->
+    CreateSessionParamsDTO
+      <$> (o .:  "successUrl")
+      <*> (o .:  "failureUrl")
+
+-- | ToJSON CreateSessionParamsDTO
+instance A.ToJSON CreateSessionParamsDTO where
+  toJSON CreateSessionParamsDTO {..} =
+   _omitNulls
+      [ "successUrl" .= createSessionParamsDTOSuccessUrl
+      , "failureUrl" .= createSessionParamsDTOFailureUrl
+      ]
+
+
+-- | Construct a value of type 'CreateSessionParamsDTO' (by applying it's required fields, if any)
+mkCreateSessionParamsDTO
+  :: Text -- ^ 'createSessionParamsDTOSuccessUrl'
+  -> Text -- ^ 'createSessionParamsDTOFailureUrl'
+  -> CreateSessionParamsDTO
+mkCreateSessionParamsDTO createSessionParamsDTOSuccessUrl createSessionParamsDTOFailureUrl =
+  CreateSessionParamsDTO
+  { createSessionParamsDTOSuccessUrl
+  , createSessionParamsDTOFailureUrl
+  }
+
+-- ** CustomerDTO
+-- | CustomerDTO
+data CustomerDTO = CustomerDTO
+    { customerDTONumberOfUsers    :: !(Maybe Integer) -- ^ "numberOfUsers"
+    -- ^ /Required/ "userPriceInCents"
+    , customerDTOUserPriceInCents :: !(Integer) -- ^ /Required/ "userPriceInCents"
+    -- ^ /Required/ "pricingPlan"
+    , customerDTOPricingPlan      :: !(PricingPlanDTO) -- ^ /Required/ "pricingPlan"
+    -- ^ "discount"
+    , customerDTODiscount         :: !(Maybe DiscountDTO) -- ^ "discount"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON CustomerDTO
+instance A.FromJSON CustomerDTO where
+  parseJSON = A.withObject "CustomerDTO" $ \o ->
+    CustomerDTO
+      <$> (o .:? "numberOfUsers")
+      <*> (o .:  "userPriceInCents")
+      <*> (o .:  "pricingPlan")
+      <*> (o .:? "discount")
+
+-- | ToJSON CustomerDTO
+instance A.ToJSON CustomerDTO where
+  toJSON CustomerDTO {..} =
+   _omitNulls
+      [ "numberOfUsers" .= customerDTONumberOfUsers
+      , "userPriceInCents" .= customerDTOUserPriceInCents
+      , "pricingPlan" .= customerDTOPricingPlan
+      , "discount" .= customerDTODiscount
+      ]
+
+
+-- | Construct a value of type 'CustomerDTO' (by applying it's required fields, if any)
+mkCustomerDTO
+  :: Integer -- ^ 'customerDTOUserPriceInCents'
+  -> PricingPlanDTO -- ^ 'customerDTOPricingPlan'
+  -> CustomerDTO
+mkCustomerDTO customerDTOUserPriceInCents customerDTOPricingPlan =
+  CustomerDTO
+  { customerDTONumberOfUsers = Nothing
+  , customerDTOUserPriceInCents
+  , customerDTOPricingPlan
+  , customerDTODiscount = Nothing
+  }
+
+-- ** DiscountCodeDTO
+-- | DiscountCodeDTO
+data DiscountCodeDTO = DiscountCodeDTO
+    { discountCodeDTOCode :: !(Text) -- ^ /Required/ "code"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON DiscountCodeDTO
+instance A.FromJSON DiscountCodeDTO where
+  parseJSON = A.withObject "DiscountCodeDTO" $ \o ->
+    DiscountCodeDTO
+      <$> (o .:  "code")
+
+-- | ToJSON DiscountCodeDTO
+instance A.ToJSON DiscountCodeDTO where
+  toJSON DiscountCodeDTO {..} =
+   _omitNulls
+      [ "code" .= discountCodeDTOCode
+      ]
+
+
+-- | Construct a value of type 'DiscountCodeDTO' (by applying it's required fields, if any)
+mkDiscountCodeDTO
+  :: Text -- ^ 'discountCodeDTOCode'
+  -> DiscountCodeDTO
+mkDiscountCodeDTO discountCodeDTOCode =
+  DiscountCodeDTO
+  { discountCodeDTOCode
+  }
+
+-- ** DiscountDTO
+-- | DiscountDTO
+data DiscountDTO = DiscountDTO
+    { discountDTOAmountOffPercentage :: !(Maybe Integer) -- ^ "amountOffPercentage"
+    -- ^ "amountOffInCents"
+    , discountDTOAmountOffInCents    :: !(Maybe Integer) -- ^ "amountOffInCents"
+    -- ^ "end"
+    , discountDTOEnd                 :: !(Maybe DateTime) -- ^ "end"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON DiscountDTO
+instance A.FromJSON DiscountDTO where
+  parseJSON = A.withObject "DiscountDTO" $ \o ->
+    DiscountDTO
+      <$> (o .:? "amountOffPercentage")
+      <*> (o .:? "amountOffInCents")
+      <*> (o .:? "end")
+
+-- | ToJSON DiscountDTO
+instance A.ToJSON DiscountDTO where
+  toJSON DiscountDTO {..} =
+   _omitNulls
+      [ "amountOffPercentage" .= discountDTOAmountOffPercentage
+      , "amountOffInCents" .= discountDTOAmountOffInCents
+      , "end" .= discountDTOEnd
+      ]
+
+
+-- | Construct a value of type 'DiscountDTO' (by applying it's required fields, if any)
+mkDiscountDTO
+  :: DiscountDTO
+mkDiscountDTO =
+  DiscountDTO
+  { discountDTOAmountOffPercentage = Nothing
+  , discountDTOAmountOffInCents = Nothing
+  , discountDTOEnd = Nothing
+  }
+
+-- ** DownloadPrepareRequestDTO
+-- | DownloadPrepareRequestDTO
+data DownloadPrepareRequestDTO = DownloadPrepareRequestDTO
+    { downloadPrepareRequestDTOId          :: !(Text) -- ^ /Required/ "id"
+    -- ^ "downloadUrl"
+    , downloadPrepareRequestDTODownloadUrl :: !(Maybe Text) -- ^ "downloadUrl"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON DownloadPrepareRequestDTO
+instance A.FromJSON DownloadPrepareRequestDTO where
+  parseJSON = A.withObject "DownloadPrepareRequestDTO" $ \o ->
+    DownloadPrepareRequestDTO
+      <$> (o .:  "id")
+      <*> (o .:? "downloadUrl")
+
+-- | ToJSON DownloadPrepareRequestDTO
+instance A.ToJSON DownloadPrepareRequestDTO where
+  toJSON DownloadPrepareRequestDTO {..} =
+   _omitNulls
+      [ "id" .= downloadPrepareRequestDTOId
+      , "downloadUrl" .= downloadPrepareRequestDTODownloadUrl
+      ]
+
+
+-- | Construct a value of type 'DownloadPrepareRequestDTO' (by applying it's required fields, if any)
+mkDownloadPrepareRequestDTO
+  :: Text -- ^ 'downloadPrepareRequestDTOId'
+  -> DownloadPrepareRequestDTO
+mkDownloadPrepareRequestDTO downloadPrepareRequestDTOId =
+  DownloadPrepareRequestDTO
+  { downloadPrepareRequestDTOId
+  , downloadPrepareRequestDTODownloadUrl = Nothing
+  }
+
+-- ** EditExperimentParams
+-- | EditExperimentParams
+data EditExperimentParams = EditExperimentParams
+    { editExperimentParamsName        :: !(Maybe Text) -- ^ "name"
+    -- ^ "description"
+    , editExperimentParamsDescription :: !(Maybe Text) -- ^ "description"
+    -- ^ "tags"
+    , editExperimentParamsTags        :: !(Maybe [Text]) -- ^ "tags"
+    -- ^ "properties"
+    , editExperimentParamsProperties  :: !(Maybe [KeyValueProperty]) -- ^ "properties"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON EditExperimentParams
+instance A.FromJSON EditExperimentParams where
+  parseJSON = A.withObject "EditExperimentParams" $ \o ->
+    EditExperimentParams
+      <$> (o .:? "name")
+      <*> (o .:? "description")
+      <*> (o .:? "tags")
+      <*> (o .:? "properties")
+
+-- | ToJSON EditExperimentParams
+instance A.ToJSON EditExperimentParams where
+  toJSON EditExperimentParams {..} =
+   _omitNulls
+      [ "name" .= editExperimentParamsName
+      , "description" .= editExperimentParamsDescription
+      , "tags" .= editExperimentParamsTags
+      , "properties" .= editExperimentParamsProperties
+      ]
+
+
+-- | Construct a value of type 'EditExperimentParams' (by applying it's required fields, if any)
+mkEditExperimentParams
+  :: EditExperimentParams
+mkEditExperimentParams =
+  EditExperimentParams
+  { editExperimentParamsName = Nothing
+  , editExperimentParamsDescription = Nothing
+  , editExperimentParamsTags = Nothing
+  , editExperimentParamsProperties = Nothing
+  }
+
+-- ** Error
+-- | Error
+data Error = Error
+    { errorCode    :: !(Int) -- ^ /Required/ "code"
+    -- ^ /Required/ "message"
+    , errorMessage :: !(Text) -- ^ /Required/ "message"
+    -- ^ "type"
+    , errorType    :: !(Maybe ApiErrorTypeDTO) -- ^ "type"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Error
+instance A.FromJSON Error where
+  parseJSON = A.withObject "Error" $ \o ->
+    Error
+      <$> (o .:  "code")
+      <*> (o .:  "message")
+      <*> (o .:? "type")
+
+-- | ToJSON Error
+instance A.ToJSON Error where
+  toJSON Error {..} =
+   _omitNulls
+      [ "code" .= errorCode
+      , "message" .= errorMessage
+      , "type" .= errorType
+      ]
+
+
+-- | Construct a value of type 'Error' (by applying it's required fields, if any)
+mkError
+  :: Int -- ^ 'errorCode'
+  -> Text -- ^ 'errorMessage'
+  -> Error
+mkError errorCode errorMessage =
+  Error
+  { errorCode
+  , errorMessage
+  , errorType = Nothing
+  }
+
+-- ** Experiment
+-- | Experiment
+data Experiment = Experiment
+    { experimentChannels           :: !(Maybe [Channel]) -- ^ "channels"
+    -- ^ "state"
+    , experimentState              :: !(Maybe ExperimentState) -- ^ "state"
+    -- ^ "timeOfCompletion"
+    , experimentTimeOfCompletion   :: !(Maybe DateTime) -- ^ "timeOfCompletion"
+    -- ^ "checkpointId"
+    , experimentCheckpointId       :: !(Maybe Text) -- ^ "checkpointId"
+    -- ^ "paths"
+    , experimentPaths              :: !(Maybe ExperimentPaths) -- ^ "paths"
+    -- ^ "responding"
+    , experimentResponding         :: !(Maybe Bool) -- ^ "responding"
+    -- ^ "organizationId"
+    , experimentOrganizationId     :: !(Maybe Text) -- ^ "organizationId"
+    -- ^ "stateTransitions"
+    , experimentStateTransitions   :: !(Maybe StateTransitions) -- ^ "stateTransitions"
+    -- ^ "parameters"
+    , experimentParameters         :: !(Maybe [Parameter]) -- ^ "parameters"
+    -- ^ "channelsLastValues"
+    , experimentChannelsLastValues :: !(Maybe [ChannelWithValue]) -- ^ "channelsLastValues"
+    -- ^ "storageSize"
+    , experimentStorageSize        :: !(Maybe Integer) -- ^ "storageSize"
+    -- ^ "name"
+    , experimentName               :: !(Maybe Text) -- ^ "name"
+    -- ^ "notebookId"
+    , experimentNotebookId         :: !(Maybe Text) -- ^ "notebookId"
+    -- ^ "projectName"
+    , experimentProjectName        :: !(Maybe Text) -- ^ "projectName"
+    -- ^ "hostname"
+    , experimentHostname           :: !(Maybe Text) -- ^ "hostname"
+    -- ^ "trashed"
+    , experimentTrashed            :: !(Maybe Bool) -- ^ "trashed"
+    -- ^ "description"
+    , experimentDescription        :: !(Maybe Text) -- ^ "description"
+    -- ^ "tags"
+    , experimentTags               :: !(Maybe [Text]) -- ^ "tags"
+    -- ^ "channelsSize"
+    , experimentChannelsSize       :: !(Maybe Integer) -- ^ "channelsSize"
+    -- ^ "timeOfCreation"
+    , experimentTimeOfCreation     :: !(Maybe DateTime) -- ^ "timeOfCreation"
+    -- ^ "projectId"
+    , experimentProjectId          :: !(Maybe Text) -- ^ "projectId"
+    -- ^ "organizationName"
+    , experimentOrganizationName   :: !(Maybe Text) -- ^ "organizationName"
+    -- ^ "isCodeAccessible"
+    , experimentIsCodeAccessible   :: !(Maybe Bool) -- ^ "isCodeAccessible"
+    -- ^ "traceback"
+    , experimentTraceback          :: !(Maybe Text) -- ^ "traceback"
+    -- ^ "entrypoint"
+    , experimentEntrypoint         :: !(Maybe Text) -- ^ "entrypoint"
+    -- ^ "runningTime"
+    , experimentRunningTime        :: !(Maybe Integer) -- ^ "runningTime"
+    -- ^ /Required/ "id"
+    , experimentId                 :: !(Text) -- ^ /Required/ "id"
+    -- ^ "inputs"
+    , experimentInputs             :: !(Maybe [InputMetadata]) -- ^ "inputs"
+    -- ^ "properties"
+    , experimentProperties         :: !(Maybe [KeyValueProperty]) -- ^ "properties"
+    -- ^ /Required/ "shortId"
+    , experimentShortId            :: !(Text) -- ^ /Required/ "shortId"
+    -- ^ "componentsVersions"
+    , experimentComponentsVersions :: !(Maybe [ComponentVersion]) -- ^ "componentsVersions"
+    -- ^ "owner"
+    , experimentOwner              :: !(Maybe Text) -- ^ "owner"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Experiment
+instance A.FromJSON Experiment where
+  parseJSON = A.withObject "Experiment" $ \o ->
+    Experiment
+      <$> (o .:? "channels")
+      <*> (o .:? "state")
+      <*> (o .:? "timeOfCompletion")
+      <*> (o .:? "checkpointId")
+      <*> (o .:? "paths")
+      <*> (o .:? "responding")
+      <*> (o .:? "organizationId")
+      <*> (o .:? "stateTransitions")
+      <*> (o .:? "parameters")
+      <*> (o .:? "channelsLastValues")
+      <*> (o .:? "storageSize")
+      <*> (o .:? "name")
+      <*> (o .:? "notebookId")
+      <*> (o .:? "projectName")
+      <*> (o .:? "hostname")
+      <*> (o .:? "trashed")
+      <*> (o .:? "description")
+      <*> (o .:? "tags")
+      <*> (o .:? "channelsSize")
+      <*> (o .:? "timeOfCreation")
+      <*> (o .:? "projectId")
+      <*> (o .:? "organizationName")
+      <*> (o .:? "isCodeAccessible")
+      <*> (o .:? "traceback")
+      <*> (o .:? "entrypoint")
+      <*> (o .:? "runningTime")
+      <*> (o .:  "id")
+      <*> (o .:? "inputs")
+      <*> (o .:? "properties")
+      <*> (o .:  "shortId")
+      <*> (o .:? "componentsVersions")
+      <*> (o .:? "owner")
+
+-- | ToJSON Experiment
+instance A.ToJSON Experiment where
+  toJSON Experiment {..} =
+   _omitNulls
+      [ "channels" .= experimentChannels
+      , "state" .= experimentState
+      , "timeOfCompletion" .= experimentTimeOfCompletion
+      , "checkpointId" .= experimentCheckpointId
+      , "paths" .= experimentPaths
+      , "responding" .= experimentResponding
+      , "organizationId" .= experimentOrganizationId
+      , "stateTransitions" .= experimentStateTransitions
+      , "parameters" .= experimentParameters
+      , "channelsLastValues" .= experimentChannelsLastValues
+      , "storageSize" .= experimentStorageSize
+      , "name" .= experimentName
+      , "notebookId" .= experimentNotebookId
+      , "projectName" .= experimentProjectName
+      , "hostname" .= experimentHostname
+      , "trashed" .= experimentTrashed
+      , "description" .= experimentDescription
+      , "tags" .= experimentTags
+      , "channelsSize" .= experimentChannelsSize
+      , "timeOfCreation" .= experimentTimeOfCreation
+      , "projectId" .= experimentProjectId
+      , "organizationName" .= experimentOrganizationName
+      , "isCodeAccessible" .= experimentIsCodeAccessible
+      , "traceback" .= experimentTraceback
+      , "entrypoint" .= experimentEntrypoint
+      , "runningTime" .= experimentRunningTime
+      , "id" .= experimentId
+      , "inputs" .= experimentInputs
+      , "properties" .= experimentProperties
+      , "shortId" .= experimentShortId
+      , "componentsVersions" .= experimentComponentsVersions
+      , "owner" .= experimentOwner
+      ]
+
+
+-- | Construct a value of type 'Experiment' (by applying it's required fields, if any)
+mkExperiment
+  :: Text -- ^ 'experimentId'
+  -> Text -- ^ 'experimentShortId'
+  -> Experiment
+mkExperiment experimentId experimentShortId =
+  Experiment
+  { experimentChannels = Nothing
+  , experimentState = Nothing
+  , experimentTimeOfCompletion = Nothing
+  , experimentCheckpointId = Nothing
+  , experimentPaths = Nothing
+  , experimentResponding = Nothing
+  , experimentOrganizationId = Nothing
+  , experimentStateTransitions = Nothing
+  , experimentParameters = Nothing
+  , experimentChannelsLastValues = Nothing
+  , experimentStorageSize = Nothing
+  , experimentName = Nothing
+  , experimentNotebookId = Nothing
+  , experimentProjectName = Nothing
+  , experimentHostname = Nothing
+  , experimentTrashed = Nothing
+  , experimentDescription = Nothing
+  , experimentTags = Nothing
+  , experimentChannelsSize = Nothing
+  , experimentTimeOfCreation = Nothing
+  , experimentProjectId = Nothing
+  , experimentOrganizationName = Nothing
+  , experimentIsCodeAccessible = Nothing
+  , experimentTraceback = Nothing
+  , experimentEntrypoint = Nothing
+  , experimentRunningTime = Nothing
+  , experimentId
+  , experimentInputs = Nothing
+  , experimentProperties = Nothing
+  , experimentShortId
+  , experimentComponentsVersions = Nothing
+  , experimentOwner = Nothing
+  }
+
+-- ** ExperimentCreationParams
+-- | ExperimentCreationParams
+data ExperimentCreationParams = ExperimentCreationParams
+    { experimentCreationParamsMonitored        :: !(Maybe Bool) -- ^ "monitored"
+    -- ^ "hostname"
+    , experimentCreationParamsHostname         :: !(Maybe Text) -- ^ "hostname"
+    -- ^ "checkpointId"
+    , experimentCreationParamsCheckpointId     :: !(Maybe Text) -- ^ "checkpointId"
+    -- ^ /Required/ "projectId"
+    , experimentCreationParamsProjectId        :: !(Text) -- ^ /Required/ "projectId"
+    -- ^ "gitInfo"
+    , experimentCreationParamsGitInfo          :: !(Maybe GitInfoDTO) -- ^ "gitInfo"
+    -- ^ /Required/ "properties"
+    , experimentCreationParamsProperties       :: !([KeyValueProperty]) -- ^ /Required/ "properties"
+    -- ^ "configPath"
+    , experimentCreationParamsConfigPath       :: !(Maybe Text) -- ^ "configPath"
+    -- ^ /Required/ "execArgsTemplate"
+    , experimentCreationParamsExecArgsTemplate :: !(Text) -- ^ /Required/ "execArgsTemplate"
+    -- ^ /Required/ "parameters"
+    , experimentCreationParamsParameters       :: !([Parameter]) -- ^ /Required/ "parameters"
+    -- ^ /Required/ "enqueueCommand"
+    , experimentCreationParamsEnqueueCommand   :: !(Text) -- ^ /Required/ "enqueueCommand"
+    -- ^ /Required/ "name"
+    , experimentCreationParamsName             :: !(Text) -- ^ /Required/ "name"
+    -- ^ "notebookId"
+    , experimentCreationParamsNotebookId       :: !(Maybe Text) -- ^ "notebookId"
+    -- ^ "description"
+    , experimentCreationParamsDescription      :: !(Maybe Text) -- ^ "description"
+    -- ^ /Required/ "tags"
+    , experimentCreationParamsTags             :: !([Text]) -- ^ /Required/ "tags"
+    -- ^ "abortable"
+    , experimentCreationParamsAbortable        :: !(Maybe Bool) -- ^ "abortable"
+    -- ^ "entrypoint"
+    , experimentCreationParamsEntrypoint       :: !(Maybe Text) -- ^ "entrypoint"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ExperimentCreationParams
+instance A.FromJSON ExperimentCreationParams where
+  parseJSON = A.withObject "ExperimentCreationParams" $ \o ->
+    ExperimentCreationParams
+      <$> (o .:? "monitored")
+      <*> (o .:? "hostname")
+      <*> (o .:? "checkpointId")
+      <*> (o .:  "projectId")
+      <*> (o .:? "gitInfo")
+      <*> (o .:  "properties")
+      <*> (o .:? "configPath")
+      <*> (o .:  "execArgsTemplate")
+      <*> (o .:  "parameters")
+      <*> (o .:  "enqueueCommand")
+      <*> (o .:  "name")
+      <*> (o .:? "notebookId")
+      <*> (o .:? "description")
+      <*> (o .:  "tags")
+      <*> (o .:? "abortable")
+      <*> (o .:? "entrypoint")
+
+-- | ToJSON ExperimentCreationParams
+instance A.ToJSON ExperimentCreationParams where
+  toJSON ExperimentCreationParams {..} =
+   _omitNulls
+      [ "monitored" .= experimentCreationParamsMonitored
+      , "hostname" .= experimentCreationParamsHostname
+      , "checkpointId" .= experimentCreationParamsCheckpointId
+      , "projectId" .= experimentCreationParamsProjectId
+      , "gitInfo" .= experimentCreationParamsGitInfo
+      , "properties" .= experimentCreationParamsProperties
+      , "configPath" .= experimentCreationParamsConfigPath
+      , "execArgsTemplate" .= experimentCreationParamsExecArgsTemplate
+      , "parameters" .= experimentCreationParamsParameters
+      , "enqueueCommand" .= experimentCreationParamsEnqueueCommand
+      , "name" .= experimentCreationParamsName
+      , "notebookId" .= experimentCreationParamsNotebookId
+      , "description" .= experimentCreationParamsDescription
+      , "tags" .= experimentCreationParamsTags
+      , "abortable" .= experimentCreationParamsAbortable
+      , "entrypoint" .= experimentCreationParamsEntrypoint
+      ]
+
+
+-- | Construct a value of type 'ExperimentCreationParams' (by applying it's required fields, if any)
+mkExperimentCreationParams
+  :: Text -- ^ 'experimentCreationParamsProjectId'
+  -> [KeyValueProperty] -- ^ 'experimentCreationParamsProperties'
+  -> Text -- ^ 'experimentCreationParamsExecArgsTemplate'
+  -> [Parameter] -- ^ 'experimentCreationParamsParameters'
+  -> Text -- ^ 'experimentCreationParamsEnqueueCommand'
+  -> Text -- ^ 'experimentCreationParamsName'
+  -> [Text] -- ^ 'experimentCreationParamsTags'
+  -> ExperimentCreationParams
+mkExperimentCreationParams experimentCreationParamsProjectId experimentCreationParamsProperties experimentCreationParamsExecArgsTemplate experimentCreationParamsParameters experimentCreationParamsEnqueueCommand experimentCreationParamsName experimentCreationParamsTags =
+  ExperimentCreationParams
+  { experimentCreationParamsMonitored = Nothing
+  , experimentCreationParamsHostname = Nothing
+  , experimentCreationParamsCheckpointId = Nothing
+  , experimentCreationParamsProjectId
+  , experimentCreationParamsGitInfo = Nothing
+  , experimentCreationParamsProperties
+  , experimentCreationParamsConfigPath = Nothing
+  , experimentCreationParamsExecArgsTemplate
+  , experimentCreationParamsParameters
+  , experimentCreationParamsEnqueueCommand
+  , experimentCreationParamsName
+  , experimentCreationParamsNotebookId = Nothing
+  , experimentCreationParamsDescription = Nothing
+  , experimentCreationParamsTags
+  , experimentCreationParamsAbortable = Nothing
+  , experimentCreationParamsEntrypoint = Nothing
+  }
+
+-- ** ExperimentPaths
+-- | ExperimentPaths
+data ExperimentPaths = ExperimentPaths
+    { experimentPathsOutput :: !(Text) -- ^ /Required/ "output"
+    -- ^ /Required/ "source"
+    , experimentPathsSource :: !(Text) -- ^ /Required/ "source"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ExperimentPaths
+instance A.FromJSON ExperimentPaths where
+  parseJSON = A.withObject "ExperimentPaths" $ \o ->
+    ExperimentPaths
+      <$> (o .:  "output")
+      <*> (o .:  "source")
+
+-- | ToJSON ExperimentPaths
+instance A.ToJSON ExperimentPaths where
+  toJSON ExperimentPaths {..} =
+   _omitNulls
+      [ "output" .= experimentPathsOutput
+      , "source" .= experimentPathsSource
+      ]
+
+
+-- | Construct a value of type 'ExperimentPaths' (by applying it's required fields, if any)
+mkExperimentPaths
+  :: Text -- ^ 'experimentPathsOutput'
+  -> Text -- ^ 'experimentPathsSource'
+  -> ExperimentPaths
+mkExperimentPaths experimentPathsOutput experimentPathsSource =
+  ExperimentPaths
+  { experimentPathsOutput
+  , experimentPathsSource
+  }
+
+-- ** ExperimentsAttributesNamesDTO
+-- | ExperimentsAttributesNamesDTO
+data ExperimentsAttributesNamesDTO = ExperimentsAttributesNamesDTO
+    { experimentsAttributesNamesDTOTextParametersNames    :: !([Text]) -- ^ /Required/ "textParametersNames"
+    -- ^ /Required/ "propertiesNames"
+    , experimentsAttributesNamesDTOPropertiesNames        :: !([Text]) -- ^ /Required/ "propertiesNames"
+    -- ^ /Required/ "numericChannelsNames"
+    , experimentsAttributesNamesDTONumericChannelsNames   :: !([Text]) -- ^ /Required/ "numericChannelsNames"
+    -- ^ /Required/ "numericParametersNames"
+    , experimentsAttributesNamesDTONumericParametersNames :: !([Text]) -- ^ /Required/ "numericParametersNames"
+    -- ^ /Required/ "textChannelsNames"
+    , experimentsAttributesNamesDTOTextChannelsNames      :: !([Text]) -- ^ /Required/ "textChannelsNames"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ExperimentsAttributesNamesDTO
+instance A.FromJSON ExperimentsAttributesNamesDTO where
+  parseJSON = A.withObject "ExperimentsAttributesNamesDTO" $ \o ->
+    ExperimentsAttributesNamesDTO
+      <$> (o .:  "textParametersNames")
+      <*> (o .:  "propertiesNames")
+      <*> (o .:  "numericChannelsNames")
+      <*> (o .:  "numericParametersNames")
+      <*> (o .:  "textChannelsNames")
+
+-- | ToJSON ExperimentsAttributesNamesDTO
+instance A.ToJSON ExperimentsAttributesNamesDTO where
+  toJSON ExperimentsAttributesNamesDTO {..} =
+   _omitNulls
+      [ "textParametersNames" .= experimentsAttributesNamesDTOTextParametersNames
+      , "propertiesNames" .= experimentsAttributesNamesDTOPropertiesNames
+      , "numericChannelsNames" .= experimentsAttributesNamesDTONumericChannelsNames
+      , "numericParametersNames" .= experimentsAttributesNamesDTONumericParametersNames
+      , "textChannelsNames" .= experimentsAttributesNamesDTOTextChannelsNames
+      ]
+
+
+-- | Construct a value of type 'ExperimentsAttributesNamesDTO' (by applying it's required fields, if any)
+mkExperimentsAttributesNamesDTO
+  :: [Text] -- ^ 'experimentsAttributesNamesDTOTextParametersNames'
+  -> [Text] -- ^ 'experimentsAttributesNamesDTOPropertiesNames'
+  -> [Text] -- ^ 'experimentsAttributesNamesDTONumericChannelsNames'
+  -> [Text] -- ^ 'experimentsAttributesNamesDTONumericParametersNames'
+  -> [Text] -- ^ 'experimentsAttributesNamesDTOTextChannelsNames'
+  -> ExperimentsAttributesNamesDTO
+mkExperimentsAttributesNamesDTO experimentsAttributesNamesDTOTextParametersNames experimentsAttributesNamesDTOPropertiesNames experimentsAttributesNamesDTONumericChannelsNames experimentsAttributesNamesDTONumericParametersNames experimentsAttributesNamesDTOTextChannelsNames =
+  ExperimentsAttributesNamesDTO
+  { experimentsAttributesNamesDTOTextParametersNames
+  , experimentsAttributesNamesDTOPropertiesNames
+  , experimentsAttributesNamesDTONumericChannelsNames
+  , experimentsAttributesNamesDTONumericParametersNames
+  , experimentsAttributesNamesDTOTextChannelsNames
+  }
+
+-- ** File
+-- | File
+data File = File
+    { filePath :: !(Text) -- ^ /Required/ "path"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON File
+instance A.FromJSON File where
+  parseJSON = A.withObject "File" $ \o ->
+    File
+      <$> (o .:  "path")
+
+-- | ToJSON File
+instance A.ToJSON File where
+  toJSON File {..} =
+   _omitNulls
+      [ "path" .= filePath
+      ]
+
+
+-- | Construct a value of type 'File' (by applying it's required fields, if any)
+mkFile
+  :: Text -- ^ 'filePath'
+  -> File
+mkFile filePath =
+  File
+  { filePath
+  }
+
+-- ** GitCommitDTO
+-- | GitCommitDTO
+data GitCommitDTO = GitCommitDTO
+    { gitCommitDTOAuthorEmail :: !(Text) -- ^ /Required/ "authorEmail"
+    -- ^ /Required/ "commitId"
+    , gitCommitDTOCommitId    :: !(Text) -- ^ /Required/ "commitId"
+    -- ^ /Required/ "message"
+    , gitCommitDTOMessage     :: !(Text) -- ^ /Required/ "message"
+    -- ^ /Required/ "commitDate"
+    , gitCommitDTOCommitDate  :: !(DateTime) -- ^ /Required/ "commitDate"
+    -- ^ /Required/ "authorName"
+    , gitCommitDTOAuthorName  :: !(Text) -- ^ /Required/ "authorName"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON GitCommitDTO
+instance A.FromJSON GitCommitDTO where
+  parseJSON = A.withObject "GitCommitDTO" $ \o ->
+    GitCommitDTO
+      <$> (o .:  "authorEmail")
+      <*> (o .:  "commitId")
+      <*> (o .:  "message")
+      <*> (o .:  "commitDate")
+      <*> (o .:  "authorName")
+
+-- | ToJSON GitCommitDTO
+instance A.ToJSON GitCommitDTO where
+  toJSON GitCommitDTO {..} =
+   _omitNulls
+      [ "authorEmail" .= gitCommitDTOAuthorEmail
+      , "commitId" .= gitCommitDTOCommitId
+      , "message" .= gitCommitDTOMessage
+      , "commitDate" .= gitCommitDTOCommitDate
+      , "authorName" .= gitCommitDTOAuthorName
+      ]
+
+
+-- | Construct a value of type 'GitCommitDTO' (by applying it's required fields, if any)
+mkGitCommitDTO
+  :: Text -- ^ 'gitCommitDTOAuthorEmail'
+  -> Text -- ^ 'gitCommitDTOCommitId'
+  -> Text -- ^ 'gitCommitDTOMessage'
+  -> DateTime -- ^ 'gitCommitDTOCommitDate'
+  -> Text -- ^ 'gitCommitDTOAuthorName'
+  -> GitCommitDTO
+mkGitCommitDTO gitCommitDTOAuthorEmail gitCommitDTOCommitId gitCommitDTOMessage gitCommitDTOCommitDate gitCommitDTOAuthorName =
+  GitCommitDTO
+  { gitCommitDTOAuthorEmail
+  , gitCommitDTOCommitId
+  , gitCommitDTOMessage
+  , gitCommitDTOCommitDate
+  , gitCommitDTOAuthorName
+  }
+
+-- ** GitInfoDTO
+-- | GitInfoDTO
+data GitInfoDTO = GitInfoDTO
+    { gitInfoDTOCurrentBranch   :: !(Maybe Text) -- ^ "currentBranch"
+    -- ^ "remotes"
+    , gitInfoDTORemotes         :: !(Maybe [Text]) -- ^ "remotes"
+    -- ^ /Required/ "commit"
+    , gitInfoDTOCommit          :: !(GitCommitDTO) -- ^ /Required/ "commit"
+    -- ^ /Required/ "repositoryDirty"
+    , gitInfoDTORepositoryDirty :: !(Bool) -- ^ /Required/ "repositoryDirty"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON GitInfoDTO
+instance A.FromJSON GitInfoDTO where
+  parseJSON = A.withObject "GitInfoDTO" $ \o ->
+    GitInfoDTO
+      <$> (o .:? "currentBranch")
+      <*> (o .:? "remotes")
+      <*> (o .:  "commit")
+      <*> (o .:  "repositoryDirty")
+
+-- | ToJSON GitInfoDTO
+instance A.ToJSON GitInfoDTO where
+  toJSON GitInfoDTO {..} =
+   _omitNulls
+      [ "currentBranch" .= gitInfoDTOCurrentBranch
+      , "remotes" .= gitInfoDTORemotes
+      , "commit" .= gitInfoDTOCommit
+      , "repositoryDirty" .= gitInfoDTORepositoryDirty
+      ]
+
+
+-- | Construct a value of type 'GitInfoDTO' (by applying it's required fields, if any)
+mkGitInfoDTO
+  :: GitCommitDTO -- ^ 'gitInfoDTOCommit'
+  -> Bool -- ^ 'gitInfoDTORepositoryDirty'
+  -> GitInfoDTO
+mkGitInfoDTO gitInfoDTOCommit gitInfoDTORepositoryDirty =
+  GitInfoDTO
+  { gitInfoDTOCurrentBranch = Nothing
+  , gitInfoDTORemotes = Nothing
+  , gitInfoDTOCommit
+  , gitInfoDTORepositoryDirty
+  }
+
+-- ** GlobalConfiguration
+-- | GlobalConfiguration
+data GlobalConfiguration = GlobalConfiguration
+    { globalConfigurationLicenseExpiration :: !(DateTime) -- ^ /Required/ "licenseExpiration"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON GlobalConfiguration
+instance A.FromJSON GlobalConfiguration where
+  parseJSON = A.withObject "GlobalConfiguration" $ \o ->
+    GlobalConfiguration
+      <$> (o .:  "licenseExpiration")
+
+-- | ToJSON GlobalConfiguration
+instance A.ToJSON GlobalConfiguration where
+  toJSON GlobalConfiguration {..} =
+   _omitNulls
+      [ "licenseExpiration" .= globalConfigurationLicenseExpiration
+      ]
+
+
+-- | Construct a value of type 'GlobalConfiguration' (by applying it's required fields, if any)
+mkGlobalConfiguration
+  :: DateTime -- ^ 'globalConfigurationLicenseExpiration'
+  -> GlobalConfiguration
+mkGlobalConfiguration globalConfigurationLicenseExpiration =
+  GlobalConfiguration
+  { globalConfigurationLicenseExpiration
+  }
+
+-- ** InputChannelValues
+-- | InputChannelValues
+data InputChannelValues = InputChannelValues
+    { inputChannelValuesChannelId :: !(Text) -- ^ /Required/ "channelId"
+    -- ^ /Required/ "values"
+    , inputChannelValuesValues    :: !([Point]) -- ^ /Required/ "values"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON InputChannelValues
+instance A.FromJSON InputChannelValues where
+  parseJSON = A.withObject "InputChannelValues" $ \o ->
+    InputChannelValues
+      <$> (o .:  "channelId")
+      <*> (o .:  "values")
+
+-- | ToJSON InputChannelValues
+instance A.ToJSON InputChannelValues where
+  toJSON InputChannelValues {..} =
+   _omitNulls
+      [ "channelId" .= inputChannelValuesChannelId
+      , "values" .= inputChannelValuesValues
+      ]
+
+
+-- | Construct a value of type 'InputChannelValues' (by applying it's required fields, if any)
+mkInputChannelValues
+  :: Text -- ^ 'inputChannelValuesChannelId'
+  -> [Point] -- ^ 'inputChannelValuesValues'
+  -> InputChannelValues
+mkInputChannelValues inputChannelValuesChannelId inputChannelValuesValues =
+  InputChannelValues
+  { inputChannelValuesChannelId
+  , inputChannelValuesValues
+  }
+
+-- ** InputImageDTO
+-- | InputImageDTO
+data InputImageDTO = InputImageDTO
+    { inputImageDTOName        :: !(Maybe Text) -- ^ "name"
+    -- ^ "description"
+    , inputImageDTODescription :: !(Maybe Text) -- ^ "description"
+    -- ^ "data"
+    , inputImageDTOData        :: !(Maybe Text) -- ^ "data"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON InputImageDTO
+instance A.FromJSON InputImageDTO where
+  parseJSON = A.withObject "InputImageDTO" $ \o ->
+    InputImageDTO
+      <$> (o .:? "name")
+      <*> (o .:? "description")
+      <*> (o .:? "data")
+
+-- | ToJSON InputImageDTO
+instance A.ToJSON InputImageDTO where
+  toJSON InputImageDTO {..} =
+   _omitNulls
+      [ "name" .= inputImageDTOName
+      , "description" .= inputImageDTODescription
+      , "data" .= inputImageDTOData
+      ]
+
+
+-- | Construct a value of type 'InputImageDTO' (by applying it's required fields, if any)
+mkInputImageDTO
+  :: InputImageDTO
+mkInputImageDTO =
+  InputImageDTO
+  { inputImageDTOName = Nothing
+  , inputImageDTODescription = Nothing
+  , inputImageDTOData = Nothing
+  }
+
+-- ** InputMetadata
+-- | InputMetadata
+data InputMetadata = InputMetadata
+    { inputMetadataSource      :: !(Text) -- ^ /Required/ "source"
+    -- ^ /Required/ "destination"
+    , inputMetadataDestination :: !(Text) -- ^ /Required/ "destination"
+    -- ^ /Required/ "size"
+    , inputMetadataSize        :: !(Integer) -- ^ /Required/ "size"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON InputMetadata
+instance A.FromJSON InputMetadata where
+  parseJSON = A.withObject "InputMetadata" $ \o ->
+    InputMetadata
+      <$> (o .:  "source")
+      <*> (o .:  "destination")
+      <*> (o .:  "size")
+
+-- | ToJSON InputMetadata
+instance A.ToJSON InputMetadata where
+  toJSON InputMetadata {..} =
+   _omitNulls
+      [ "source" .= inputMetadataSource
+      , "destination" .= inputMetadataDestination
+      , "size" .= inputMetadataSize
+      ]
+
+
+-- | Construct a value of type 'InputMetadata' (by applying it's required fields, if any)
+mkInputMetadata
+  :: Text -- ^ 'inputMetadataSource'
+  -> Text -- ^ 'inputMetadataDestination'
+  -> Integer -- ^ 'inputMetadataSize'
+  -> InputMetadata
+mkInputMetadata inputMetadataSource inputMetadataDestination inputMetadataSize =
+  InputMetadata
+  { inputMetadataSource
+  , inputMetadataDestination
+  , inputMetadataSize
+  }
+
+-- ** KeyValueProperty
+-- | KeyValueProperty
+data KeyValueProperty = KeyValueProperty
+    { keyValuePropertyKey   :: !(Text) -- ^ /Required/ "key"
+    -- ^ /Required/ "value"
+    , keyValuePropertyValue :: !(Text) -- ^ /Required/ "value"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON KeyValueProperty
+instance A.FromJSON KeyValueProperty where
+  parseJSON = A.withObject "KeyValueProperty" $ \o ->
+    KeyValueProperty
+      <$> (o .:  "key")
+      <*> (o .:  "value")
+
+-- | ToJSON KeyValueProperty
+instance A.ToJSON KeyValueProperty where
+  toJSON KeyValueProperty {..} =
+   _omitNulls
+      [ "key" .= keyValuePropertyKey
+      , "value" .= keyValuePropertyValue
+      ]
+
+
+-- | Construct a value of type 'KeyValueProperty' (by applying it's required fields, if any)
+mkKeyValueProperty
+  :: Text -- ^ 'keyValuePropertyKey'
+  -> Text -- ^ 'keyValuePropertyValue'
+  -> KeyValueProperty
+mkKeyValueProperty keyValuePropertyKey keyValuePropertyValue =
+  KeyValueProperty
+  { keyValuePropertyKey
+  , keyValuePropertyValue
+  }
+
+-- ** LimitedChannelValuesDTO
+-- | LimitedChannelValuesDTO
+data LimitedChannelValuesDTO = LimitedChannelValuesDTO
+    { limitedChannelValuesDTOChannelId      :: !(Text) -- ^ /Required/ "channelId"
+    -- ^ /Required/ "values"
+    , limitedChannelValuesDTOValues         :: !([PointValueDTO]) -- ^ /Required/ "values"
+    -- ^ /Required/ "totalItemCount"
+    , limitedChannelValuesDTOTotalItemCount :: !(Int) -- ^ /Required/ "totalItemCount"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON LimitedChannelValuesDTO
+instance A.FromJSON LimitedChannelValuesDTO where
+  parseJSON = A.withObject "LimitedChannelValuesDTO" $ \o ->
+    LimitedChannelValuesDTO
+      <$> (o .:  "channelId")
+      <*> (o .:  "values")
+      <*> (o .:  "totalItemCount")
+
+-- | ToJSON LimitedChannelValuesDTO
+instance A.ToJSON LimitedChannelValuesDTO where
+  toJSON LimitedChannelValuesDTO {..} =
+   _omitNulls
+      [ "channelId" .= limitedChannelValuesDTOChannelId
+      , "values" .= limitedChannelValuesDTOValues
+      , "totalItemCount" .= limitedChannelValuesDTOTotalItemCount
+      ]
+
+
+-- | Construct a value of type 'LimitedChannelValuesDTO' (by applying it's required fields, if any)
+mkLimitedChannelValuesDTO
+  :: Text -- ^ 'limitedChannelValuesDTOChannelId'
+  -> [PointValueDTO] -- ^ 'limitedChannelValuesDTOValues'
+  -> Int -- ^ 'limitedChannelValuesDTOTotalItemCount'
+  -> LimitedChannelValuesDTO
+mkLimitedChannelValuesDTO limitedChannelValuesDTOChannelId limitedChannelValuesDTOValues limitedChannelValuesDTOTotalItemCount =
+  LimitedChannelValuesDTO
+  { limitedChannelValuesDTOChannelId
+  , limitedChannelValuesDTOValues
+  , limitedChannelValuesDTOTotalItemCount
+  }
+
+-- ** Link
+-- | Link
+data Link = Link
+    { linkUrl :: !(Text) -- ^ /Required/ "url"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Link
+instance A.FromJSON Link where
+  parseJSON = A.withObject "Link" $ \o ->
+    Link
+      <$> (o .:  "url")
+
+-- | ToJSON Link
+instance A.ToJSON Link where
+  toJSON Link {..} =
+   _omitNulls
+      [ "url" .= linkUrl
+      ]
+
+
+-- | Construct a value of type 'Link' (by applying it's required fields, if any)
+mkLink
+  :: Text -- ^ 'linkUrl'
+  -> Link
+mkLink linkUrl =
+  Link
+  { linkUrl
+  }
+
+-- ** LinkDTO
+-- | LinkDTO
+data LinkDTO = LinkDTO
+    { linkDTOUrl :: !(Text) -- ^ /Required/ "url"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON LinkDTO
+instance A.FromJSON LinkDTO where
+  parseJSON = A.withObject "LinkDTO" $ \o ->
+    LinkDTO
+      <$> (o .:  "url")
+
+-- | ToJSON LinkDTO
+instance A.ToJSON LinkDTO where
+  toJSON LinkDTO {..} =
+   _omitNulls
+      [ "url" .= linkDTOUrl
+      ]
+
+
+-- | Construct a value of type 'LinkDTO' (by applying it's required fields, if any)
+mkLinkDTO
+  :: Text -- ^ 'linkDTOUrl'
+  -> LinkDTO
+mkLinkDTO linkDTOUrl =
+  LinkDTO
+  { linkDTOUrl
+  }
+
+-- ** LoginActionsListDTO
+-- | LoginActionsListDTO
+data LoginActionsListDTO = LoginActionsListDTO
+    { loginActionsListDTORequiredActions :: !([LoginActionDTO]) -- ^ /Required/ "requiredActions"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON LoginActionsListDTO
+instance A.FromJSON LoginActionsListDTO where
+  parseJSON = A.withObject "LoginActionsListDTO" $ \o ->
+    LoginActionsListDTO
+      <$> (o .:  "requiredActions")
+
+-- | ToJSON LoginActionsListDTO
+instance A.ToJSON LoginActionsListDTO where
+  toJSON LoginActionsListDTO {..} =
+   _omitNulls
+      [ "requiredActions" .= loginActionsListDTORequiredActions
+      ]
+
+
+-- | Construct a value of type 'LoginActionsListDTO' (by applying it's required fields, if any)
+mkLoginActionsListDTO
+  :: [LoginActionDTO] -- ^ 'loginActionsListDTORequiredActions'
+  -> LoginActionsListDTO
+mkLoginActionsListDTO loginActionsListDTORequiredActions =
+  LoginActionsListDTO
+  { loginActionsListDTORequiredActions
+  }
+
+-- ** NeptuneApiToken
+-- | NeptuneApiToken
+data NeptuneApiToken = NeptuneApiToken
+    { neptuneApiTokenToken :: !(Text) -- ^ /Required/ "token"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NeptuneApiToken
+instance A.FromJSON NeptuneApiToken where
+  parseJSON = A.withObject "NeptuneApiToken" $ \o ->
+    NeptuneApiToken
+      <$> (o .:  "token")
+
+-- | ToJSON NeptuneApiToken
+instance A.ToJSON NeptuneApiToken where
+  toJSON NeptuneApiToken {..} =
+   _omitNulls
+      [ "token" .= neptuneApiTokenToken
+      ]
+
+
+-- | Construct a value of type 'NeptuneApiToken' (by applying it's required fields, if any)
+mkNeptuneApiToken
+  :: Text -- ^ 'neptuneApiTokenToken'
+  -> NeptuneApiToken
+mkNeptuneApiToken neptuneApiTokenToken =
+  NeptuneApiToken
+  { neptuneApiTokenToken
+  }
+
+-- ** NeptuneOauthToken
+-- | NeptuneOauthToken
+data NeptuneOauthToken = NeptuneOauthToken
+    { neptuneOauthTokenAccessToken  :: !(Text) -- ^ /Required/ "accessToken"
+    -- ^ /Required/ "refreshToken"
+    , neptuneOauthTokenRefreshToken :: !(Text) -- ^ /Required/ "refreshToken"
+    -- ^ /Required/ "username"
+    , neptuneOauthTokenUsername     :: !(Text) -- ^ /Required/ "username"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NeptuneOauthToken
+instance A.FromJSON NeptuneOauthToken where
+  parseJSON = A.withObject "NeptuneOauthToken" $ \o ->
+    NeptuneOauthToken
+      <$> (o .:  "accessToken")
+      <*> (o .:  "refreshToken")
+      <*> (o .:  "username")
+
+-- | ToJSON NeptuneOauthToken
+instance A.ToJSON NeptuneOauthToken where
+  toJSON NeptuneOauthToken {..} =
+   _omitNulls
+      [ "accessToken" .= neptuneOauthTokenAccessToken
+      , "refreshToken" .= neptuneOauthTokenRefreshToken
+      , "username" .= neptuneOauthTokenUsername
+      ]
+
+
+-- | Construct a value of type 'NeptuneOauthToken' (by applying it's required fields, if any)
+mkNeptuneOauthToken
+  :: Text -- ^ 'neptuneOauthTokenAccessToken'
+  -> Text -- ^ 'neptuneOauthTokenRefreshToken'
+  -> Text -- ^ 'neptuneOauthTokenUsername'
+  -> NeptuneOauthToken
+mkNeptuneOauthToken neptuneOauthTokenAccessToken neptuneOauthTokenRefreshToken neptuneOauthTokenUsername =
+  NeptuneOauthToken
+  { neptuneOauthTokenAccessToken
+  , neptuneOauthTokenRefreshToken
+  , neptuneOauthTokenUsername
+  }
+
+-- ** NewOrganizationInvitationDTO
+-- | NewOrganizationInvitationDTO
+data NewOrganizationInvitationDTO = NewOrganizationInvitationDTO
+    { newOrganizationInvitationDTORoleGrant :: !(OrganizationRoleDTO) -- ^ /Required/ "roleGrant"
+    -- ^ /Required/ "addToAllProjects"
+    , newOrganizationInvitationDTOAddToAllProjects :: !(Bool) -- ^ /Required/ "addToAllProjects"
+    -- ^ /Required/ "organizationIdentifier"
+    , newOrganizationInvitationDTOOrganizationIdentifier :: !(Text) -- ^ /Required/ "organizationIdentifier"
+    -- ^ /Required/ "invitee"
+    , newOrganizationInvitationDTOInvitee :: !(Text) -- ^ /Required/ "invitee"
+    -- ^ /Required/ "invitationType"
+    , newOrganizationInvitationDTOInvitationType :: !(InvitationTypeEnumDTO) -- ^ /Required/ "invitationType"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NewOrganizationInvitationDTO
+instance A.FromJSON NewOrganizationInvitationDTO where
+  parseJSON = A.withObject "NewOrganizationInvitationDTO" $ \o ->
+    NewOrganizationInvitationDTO
+      <$> (o .:  "roleGrant")
+      <*> (o .:  "addToAllProjects")
+      <*> (o .:  "organizationIdentifier")
+      <*> (o .:  "invitee")
+      <*> (o .:  "invitationType")
+
+-- | ToJSON NewOrganizationInvitationDTO
+instance A.ToJSON NewOrganizationInvitationDTO where
+  toJSON NewOrganizationInvitationDTO {..} =
+   _omitNulls
+      [ "roleGrant" .= newOrganizationInvitationDTORoleGrant
+      , "addToAllProjects" .= newOrganizationInvitationDTOAddToAllProjects
+      , "organizationIdentifier" .= newOrganizationInvitationDTOOrganizationIdentifier
+      , "invitee" .= newOrganizationInvitationDTOInvitee
+      , "invitationType" .= newOrganizationInvitationDTOInvitationType
+      ]
+
+
+-- | Construct a value of type 'NewOrganizationInvitationDTO' (by applying it's required fields, if any)
+mkNewOrganizationInvitationDTO
+  :: OrganizationRoleDTO -- ^ 'newOrganizationInvitationDTORoleGrant'
+  -> Bool -- ^ 'newOrganizationInvitationDTOAddToAllProjects'
+  -> Text -- ^ 'newOrganizationInvitationDTOOrganizationIdentifier'
+  -> Text -- ^ 'newOrganizationInvitationDTOInvitee'
+  -> InvitationTypeEnumDTO -- ^ 'newOrganizationInvitationDTOInvitationType'
+  -> NewOrganizationInvitationDTO
+mkNewOrganizationInvitationDTO newOrganizationInvitationDTORoleGrant newOrganizationInvitationDTOAddToAllProjects newOrganizationInvitationDTOOrganizationIdentifier newOrganizationInvitationDTOInvitee newOrganizationInvitationDTOInvitationType =
+  NewOrganizationInvitationDTO
+  { newOrganizationInvitationDTORoleGrant
+  , newOrganizationInvitationDTOAddToAllProjects
+  , newOrganizationInvitationDTOOrganizationIdentifier
+  , newOrganizationInvitationDTOInvitee
+  , newOrganizationInvitationDTOInvitationType
+  }
+
+-- ** NewOrganizationMemberDTO
+-- | NewOrganizationMemberDTO
+data NewOrganizationMemberDTO = NewOrganizationMemberDTO
+    { newOrganizationMemberDTOUserId :: !(Text) -- ^ /Required/ "userId"
+    -- ^ /Required/ "role"
+    , newOrganizationMemberDTORole   :: !(OrganizationRoleDTO) -- ^ /Required/ "role"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NewOrganizationMemberDTO
+instance A.FromJSON NewOrganizationMemberDTO where
+  parseJSON = A.withObject "NewOrganizationMemberDTO" $ \o ->
+    NewOrganizationMemberDTO
+      <$> (o .:  "userId")
+      <*> (o .:  "role")
+
+-- | ToJSON NewOrganizationMemberDTO
+instance A.ToJSON NewOrganizationMemberDTO where
+  toJSON NewOrganizationMemberDTO {..} =
+   _omitNulls
+      [ "userId" .= newOrganizationMemberDTOUserId
+      , "role" .= newOrganizationMemberDTORole
+      ]
+
+
+-- | Construct a value of type 'NewOrganizationMemberDTO' (by applying it's required fields, if any)
+mkNewOrganizationMemberDTO
+  :: Text -- ^ 'newOrganizationMemberDTOUserId'
+  -> OrganizationRoleDTO -- ^ 'newOrganizationMemberDTORole'
+  -> NewOrganizationMemberDTO
+mkNewOrganizationMemberDTO newOrganizationMemberDTOUserId newOrganizationMemberDTORole =
+  NewOrganizationMemberDTO
+  { newOrganizationMemberDTOUserId
+  , newOrganizationMemberDTORole
+  }
+
+-- ** NewProjectDTO
+-- | NewProjectDTO
+data NewProjectDTO = NewProjectDTO
+    { newProjectDTOName           :: !(Text) -- ^ /Required/ "name"
+    -- ^ "description"
+    , newProjectDTODescription    :: !(Maybe Text) -- ^ "description"
+    -- ^ /Required/ "projectKey"
+    , newProjectDTOProjectKey     :: !(Text) -- ^ /Required/ "projectKey"
+    -- ^ /Required/ "organizationId"
+    , newProjectDTOOrganizationId :: !(Text) -- ^ /Required/ "organizationId"
+    -- ^ "visibility"
+    , newProjectDTOVisibility     :: !(Maybe ProjectVisibilityDTO) -- ^ "visibility"
+    -- ^ "displayClass"
+    , newProjectDTODisplayClass   :: !(Maybe Text) -- ^ "displayClass"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NewProjectDTO
+instance A.FromJSON NewProjectDTO where
+  parseJSON = A.withObject "NewProjectDTO" $ \o ->
+    NewProjectDTO
+      <$> (o .:  "name")
+      <*> (o .:? "description")
+      <*> (o .:  "projectKey")
+      <*> (o .:  "organizationId")
+      <*> (o .:? "visibility")
+      <*> (o .:? "displayClass")
+
+-- | ToJSON NewProjectDTO
+instance A.ToJSON NewProjectDTO where
+  toJSON NewProjectDTO {..} =
+   _omitNulls
+      [ "name" .= newProjectDTOName
+      , "description" .= newProjectDTODescription
+      , "projectKey" .= newProjectDTOProjectKey
+      , "organizationId" .= newProjectDTOOrganizationId
+      , "visibility" .= newProjectDTOVisibility
+      , "displayClass" .= newProjectDTODisplayClass
+      ]
+
+
+-- | Construct a value of type 'NewProjectDTO' (by applying it's required fields, if any)
+mkNewProjectDTO
+  :: Text -- ^ 'newProjectDTOName'
+  -> Text -- ^ 'newProjectDTOProjectKey'
+  -> Text -- ^ 'newProjectDTOOrganizationId'
+  -> NewProjectDTO
+mkNewProjectDTO newProjectDTOName newProjectDTOProjectKey newProjectDTOOrganizationId =
+  NewProjectDTO
+  { newProjectDTOName
+  , newProjectDTODescription = Nothing
+  , newProjectDTOProjectKey
+  , newProjectDTOOrganizationId
+  , newProjectDTOVisibility = Nothing
+  , newProjectDTODisplayClass = Nothing
+  }
+
+-- ** NewProjectInvitationDTO
+-- | NewProjectInvitationDTO
+data NewProjectInvitationDTO = NewProjectInvitationDTO
+    { newProjectInvitationDTOProjectIdentifier :: !(Text) -- ^ /Required/ "projectIdentifier"
+    -- ^ /Required/ "invitee"
+    , newProjectInvitationDTOInvitee           :: !(Text) -- ^ /Required/ "invitee"
+    -- ^ /Required/ "invitationType"
+    , newProjectInvitationDTOInvitationType    :: !(InvitationTypeEnumDTO) -- ^ /Required/ "invitationType"
+    -- ^ /Required/ "roleGrant"
+    , newProjectInvitationDTORoleGrant         :: !(ProjectRoleDTO) -- ^ /Required/ "roleGrant"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NewProjectInvitationDTO
+instance A.FromJSON NewProjectInvitationDTO where
+  parseJSON = A.withObject "NewProjectInvitationDTO" $ \o ->
+    NewProjectInvitationDTO
+      <$> (o .:  "projectIdentifier")
+      <*> (o .:  "invitee")
+      <*> (o .:  "invitationType")
+      <*> (o .:  "roleGrant")
+
+-- | ToJSON NewProjectInvitationDTO
+instance A.ToJSON NewProjectInvitationDTO where
+  toJSON NewProjectInvitationDTO {..} =
+   _omitNulls
+      [ "projectIdentifier" .= newProjectInvitationDTOProjectIdentifier
+      , "invitee" .= newProjectInvitationDTOInvitee
+      , "invitationType" .= newProjectInvitationDTOInvitationType
+      , "roleGrant" .= newProjectInvitationDTORoleGrant
+      ]
+
+
+-- | Construct a value of type 'NewProjectInvitationDTO' (by applying it's required fields, if any)
+mkNewProjectInvitationDTO
+  :: Text -- ^ 'newProjectInvitationDTOProjectIdentifier'
+  -> Text -- ^ 'newProjectInvitationDTOInvitee'
+  -> InvitationTypeEnumDTO -- ^ 'newProjectInvitationDTOInvitationType'
+  -> ProjectRoleDTO -- ^ 'newProjectInvitationDTORoleGrant'
+  -> NewProjectInvitationDTO
+mkNewProjectInvitationDTO newProjectInvitationDTOProjectIdentifier newProjectInvitationDTOInvitee newProjectInvitationDTOInvitationType newProjectInvitationDTORoleGrant =
+  NewProjectInvitationDTO
+  { newProjectInvitationDTOProjectIdentifier
+  , newProjectInvitationDTOInvitee
+  , newProjectInvitationDTOInvitationType
+  , newProjectInvitationDTORoleGrant
+  }
+
+-- ** NewProjectMemberDTO
+-- | NewProjectMemberDTO
+data NewProjectMemberDTO = NewProjectMemberDTO
+    { newProjectMemberDTOUserId :: !(Text) -- ^ /Required/ "userId"
+    -- ^ /Required/ "role"
+    , newProjectMemberDTORole   :: !(ProjectRoleDTO) -- ^ /Required/ "role"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NewProjectMemberDTO
+instance A.FromJSON NewProjectMemberDTO where
+  parseJSON = A.withObject "NewProjectMemberDTO" $ \o ->
+    NewProjectMemberDTO
+      <$> (o .:  "userId")
+      <*> (o .:  "role")
+
+-- | ToJSON NewProjectMemberDTO
+instance A.ToJSON NewProjectMemberDTO where
+  toJSON NewProjectMemberDTO {..} =
+   _omitNulls
+      [ "userId" .= newProjectMemberDTOUserId
+      , "role" .= newProjectMemberDTORole
+      ]
+
+
+-- | Construct a value of type 'NewProjectMemberDTO' (by applying it's required fields, if any)
+mkNewProjectMemberDTO
+  :: Text -- ^ 'newProjectMemberDTOUserId'
+  -> ProjectRoleDTO -- ^ 'newProjectMemberDTORole'
+  -> NewProjectMemberDTO
+mkNewProjectMemberDTO newProjectMemberDTOUserId newProjectMemberDTORole =
+  NewProjectMemberDTO
+  { newProjectMemberDTOUserId
+  , newProjectMemberDTORole
+  }
+
+-- ** NewReservationDTO
+-- | NewReservationDTO
+data NewReservationDTO = NewReservationDTO
+    { newReservationDTOName :: !(Text) -- ^ /Required/ "name"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON NewReservationDTO
+instance A.FromJSON NewReservationDTO where
+  parseJSON = A.withObject "NewReservationDTO" $ \o ->
+    NewReservationDTO
+      <$> (o .:  "name")
+
+-- | ToJSON NewReservationDTO
+instance A.ToJSON NewReservationDTO where
+  toJSON NewReservationDTO {..} =
+   _omitNulls
+      [ "name" .= newReservationDTOName
+      ]
+
+
+-- | Construct a value of type 'NewReservationDTO' (by applying it's required fields, if any)
+mkNewReservationDTO
+  :: Text -- ^ 'newReservationDTOName'
+  -> NewReservationDTO
+mkNewReservationDTO newReservationDTOName =
+  NewReservationDTO
+  { newReservationDTOName
+  }
+
+-- ** OrganizationCreationParamsDTO
+-- | OrganizationCreationParamsDTO
+data OrganizationCreationParamsDTO = OrganizationCreationParamsDTO
+    { organizationCreationParamsDTOName             :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "organizationType"
+    , organizationCreationParamsDTOOrganizationType :: !(OrganizationTypeDTO) -- ^ /Required/ "organizationType"
+    -- ^ "discountCode"
+    , organizationCreationParamsDTODiscountCode     :: !(Maybe DiscountCodeDTO) -- ^ "discountCode"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationCreationParamsDTO
+instance A.FromJSON OrganizationCreationParamsDTO where
+  parseJSON = A.withObject "OrganizationCreationParamsDTO" $ \o ->
+    OrganizationCreationParamsDTO
+      <$> (o .:  "name")
+      <*> (o .:  "organizationType")
+      <*> (o .:? "discountCode")
+
+-- | ToJSON OrganizationCreationParamsDTO
+instance A.ToJSON OrganizationCreationParamsDTO where
+  toJSON OrganizationCreationParamsDTO {..} =
+   _omitNulls
+      [ "name" .= organizationCreationParamsDTOName
+      , "organizationType" .= organizationCreationParamsDTOOrganizationType
+      , "discountCode" .= organizationCreationParamsDTODiscountCode
+      ]
+
+
+-- | Construct a value of type 'OrganizationCreationParamsDTO' (by applying it's required fields, if any)
+mkOrganizationCreationParamsDTO
+  :: Text -- ^ 'organizationCreationParamsDTOName'
+  -> OrganizationTypeDTO -- ^ 'organizationCreationParamsDTOOrganizationType'
+  -> OrganizationCreationParamsDTO
+mkOrganizationCreationParamsDTO organizationCreationParamsDTOName organizationCreationParamsDTOOrganizationType =
+  OrganizationCreationParamsDTO
+  { organizationCreationParamsDTOName
+  , organizationCreationParamsDTOOrganizationType
+  , organizationCreationParamsDTODiscountCode = Nothing
+  }
+
+-- ** OrganizationDTO
+-- | OrganizationDTO
+data OrganizationDTO = OrganizationDTO
+    { organizationDTOName             :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "paymentStatus"
+    , organizationDTOPaymentStatus    :: !(Text) -- ^ /Required/ "paymentStatus"
+    -- ^ /Required/ "avatarUrl"
+    , organizationDTOAvatarUrl        :: !(Text) -- ^ /Required/ "avatarUrl"
+    -- ^ /Required/ "organizationType"
+    , organizationDTOOrganizationType :: !(OrganizationTypeDTO) -- ^ /Required/ "organizationType"
+    -- ^ /Required/ "avatarSource"
+    , organizationDTOAvatarSource     :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ "info"
+    , organizationDTOInfo             :: !(Maybe Text) -- ^ "info"
+    -- ^ /Required/ "id"
+    , organizationDTOId               :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "created"
+    , organizationDTOCreated          :: !(DateTime) -- ^ /Required/ "created"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationDTO
+instance A.FromJSON OrganizationDTO where
+  parseJSON = A.withObject "OrganizationDTO" $ \o ->
+    OrganizationDTO
+      <$> (o .:  "name")
+      <*> (o .:  "paymentStatus")
+      <*> (o .:  "avatarUrl")
+      <*> (o .:  "organizationType")
+      <*> (o .:  "avatarSource")
+      <*> (o .:? "info")
+      <*> (o .:  "id")
+      <*> (o .:  "created")
+
+-- | ToJSON OrganizationDTO
+instance A.ToJSON OrganizationDTO where
+  toJSON OrganizationDTO {..} =
+   _omitNulls
+      [ "name" .= organizationDTOName
+      , "paymentStatus" .= organizationDTOPaymentStatus
+      , "avatarUrl" .= organizationDTOAvatarUrl
+      , "organizationType" .= organizationDTOOrganizationType
+      , "avatarSource" .= organizationDTOAvatarSource
+      , "info" .= organizationDTOInfo
+      , "id" .= organizationDTOId
+      , "created" .= organizationDTOCreated
+      ]
+
+
+-- | Construct a value of type 'OrganizationDTO' (by applying it's required fields, if any)
+mkOrganizationDTO
+  :: Text -- ^ 'organizationDTOName'
+  -> Text -- ^ 'organizationDTOPaymentStatus'
+  -> Text -- ^ 'organizationDTOAvatarUrl'
+  -> OrganizationTypeDTO -- ^ 'organizationDTOOrganizationType'
+  -> AvatarSourceEnum -- ^ 'organizationDTOAvatarSource'
+  -> Text -- ^ 'organizationDTOId'
+  -> DateTime -- ^ 'organizationDTOCreated'
+  -> OrganizationDTO
+mkOrganizationDTO organizationDTOName organizationDTOPaymentStatus organizationDTOAvatarUrl organizationDTOOrganizationType organizationDTOAvatarSource organizationDTOId organizationDTOCreated =
+  OrganizationDTO
+  { organizationDTOName
+  , organizationDTOPaymentStatus
+  , organizationDTOAvatarUrl
+  , organizationDTOOrganizationType
+  , organizationDTOAvatarSource
+  , organizationDTOInfo = Nothing
+  , organizationDTOId
+  , organizationDTOCreated
+  }
+
+-- ** OrganizationInvitationDTO
+-- | OrganizationInvitationDTO
+data OrganizationInvitationDTO = OrganizationInvitationDTO
+    { organizationInvitationDTORoleGrant        :: !(OrganizationRoleDTO) -- ^ /Required/ "roleGrant"
+    -- ^ /Required/ "invitedBy"
+    , organizationInvitationDTOInvitedBy        :: !(Text) -- ^ /Required/ "invitedBy"
+    -- ^ /Required/ "organizationName"
+    , organizationInvitationDTOOrganizationName :: !(Text) -- ^ /Required/ "organizationName"
+    -- ^ /Required/ "id"
+    , organizationInvitationDTOId               :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "invitee"
+    , organizationInvitationDTOInvitee          :: !(Text) -- ^ /Required/ "invitee"
+    -- ^ /Required/ "status"
+    , organizationInvitationDTOStatus           :: !(InvitationStatusEnumDTO) -- ^ /Required/ "status"
+    -- ^ /Required/ "invitationType"
+    , organizationInvitationDTOInvitationType   :: !(InvitationTypeEnumDTO) -- ^ /Required/ "invitationType"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationInvitationDTO
+instance A.FromJSON OrganizationInvitationDTO where
+  parseJSON = A.withObject "OrganizationInvitationDTO" $ \o ->
+    OrganizationInvitationDTO
+      <$> (o .:  "roleGrant")
+      <*> (o .:  "invitedBy")
+      <*> (o .:  "organizationName")
+      <*> (o .:  "id")
+      <*> (o .:  "invitee")
+      <*> (o .:  "status")
+      <*> (o .:  "invitationType")
+
+-- | ToJSON OrganizationInvitationDTO
+instance A.ToJSON OrganizationInvitationDTO where
+  toJSON OrganizationInvitationDTO {..} =
+   _omitNulls
+      [ "roleGrant" .= organizationInvitationDTORoleGrant
+      , "invitedBy" .= organizationInvitationDTOInvitedBy
+      , "organizationName" .= organizationInvitationDTOOrganizationName
+      , "id" .= organizationInvitationDTOId
+      , "invitee" .= organizationInvitationDTOInvitee
+      , "status" .= organizationInvitationDTOStatus
+      , "invitationType" .= organizationInvitationDTOInvitationType
+      ]
+
+
+-- | Construct a value of type 'OrganizationInvitationDTO' (by applying it's required fields, if any)
+mkOrganizationInvitationDTO
+  :: OrganizationRoleDTO -- ^ 'organizationInvitationDTORoleGrant'
+  -> Text -- ^ 'organizationInvitationDTOInvitedBy'
+  -> Text -- ^ 'organizationInvitationDTOOrganizationName'
+  -> Text -- ^ 'organizationInvitationDTOId'
+  -> Text -- ^ 'organizationInvitationDTOInvitee'
+  -> InvitationStatusEnumDTO -- ^ 'organizationInvitationDTOStatus'
+  -> InvitationTypeEnumDTO -- ^ 'organizationInvitationDTOInvitationType'
+  -> OrganizationInvitationDTO
+mkOrganizationInvitationDTO organizationInvitationDTORoleGrant organizationInvitationDTOInvitedBy organizationInvitationDTOOrganizationName organizationInvitationDTOId organizationInvitationDTOInvitee organizationInvitationDTOStatus organizationInvitationDTOInvitationType =
+  OrganizationInvitationDTO
+  { organizationInvitationDTORoleGrant
+  , organizationInvitationDTOInvitedBy
+  , organizationInvitationDTOOrganizationName
+  , organizationInvitationDTOId
+  , organizationInvitationDTOInvitee
+  , organizationInvitationDTOStatus
+  , organizationInvitationDTOInvitationType
+  }
+
+-- ** OrganizationInvitationUpdateDTO
+-- | OrganizationInvitationUpdateDTO
+data OrganizationInvitationUpdateDTO = OrganizationInvitationUpdateDTO
+    { organizationInvitationUpdateDTORoleGrant :: !(OrganizationRoleDTO) -- ^ /Required/ "roleGrant"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationInvitationUpdateDTO
+instance A.FromJSON OrganizationInvitationUpdateDTO where
+  parseJSON = A.withObject "OrganizationInvitationUpdateDTO" $ \o ->
+    OrganizationInvitationUpdateDTO
+      <$> (o .:  "roleGrant")
+
+-- | ToJSON OrganizationInvitationUpdateDTO
+instance A.ToJSON OrganizationInvitationUpdateDTO where
+  toJSON OrganizationInvitationUpdateDTO {..} =
+   _omitNulls
+      [ "roleGrant" .= organizationInvitationUpdateDTORoleGrant
+      ]
+
+
+-- | Construct a value of type 'OrganizationInvitationUpdateDTO' (by applying it's required fields, if any)
+mkOrganizationInvitationUpdateDTO
+  :: OrganizationRoleDTO -- ^ 'organizationInvitationUpdateDTORoleGrant'
+  -> OrganizationInvitationUpdateDTO
+mkOrganizationInvitationUpdateDTO organizationInvitationUpdateDTORoleGrant =
+  OrganizationInvitationUpdateDTO
+  { organizationInvitationUpdateDTORoleGrant
+  }
+
+-- ** OrganizationLimitsDTO
+-- | OrganizationLimitsDTO
+data OrganizationLimitsDTO = OrganizationLimitsDTO
+    { organizationLimitsDTOStorageSize           :: !(Maybe Integer) -- ^ "storageSize"
+    -- ^ "privateProjectMembers"
+    , organizationLimitsDTOPrivateProjectMembers :: !(Maybe Integer) -- ^ "privateProjectMembers"
+    -- ^ "projectsLimit"
+    , organizationLimitsDTOProjectsLimit         :: !(Maybe Integer) -- ^ "projectsLimit"
+    -- ^ "membersLimit"
+    , organizationLimitsDTOMembersLimit          :: !(Maybe Integer) -- ^ "membersLimit"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationLimitsDTO
+instance A.FromJSON OrganizationLimitsDTO where
+  parseJSON = A.withObject "OrganizationLimitsDTO" $ \o ->
+    OrganizationLimitsDTO
+      <$> (o .:? "storageSize")
+      <*> (o .:? "privateProjectMembers")
+      <*> (o .:? "projectsLimit")
+      <*> (o .:? "membersLimit")
+
+-- | ToJSON OrganizationLimitsDTO
+instance A.ToJSON OrganizationLimitsDTO where
+  toJSON OrganizationLimitsDTO {..} =
+   _omitNulls
+      [ "storageSize" .= organizationLimitsDTOStorageSize
+      , "privateProjectMembers" .= organizationLimitsDTOPrivateProjectMembers
+      , "projectsLimit" .= organizationLimitsDTOProjectsLimit
+      , "membersLimit" .= organizationLimitsDTOMembersLimit
+      ]
+
+
+-- | Construct a value of type 'OrganizationLimitsDTO' (by applying it's required fields, if any)
+mkOrganizationLimitsDTO
+  :: OrganizationLimitsDTO
+mkOrganizationLimitsDTO =
+  OrganizationLimitsDTO
+  { organizationLimitsDTOStorageSize = Nothing
+  , organizationLimitsDTOPrivateProjectMembers = Nothing
+  , organizationLimitsDTOProjectsLimit = Nothing
+  , organizationLimitsDTOMembersLimit = Nothing
+  }
+
+-- ** OrganizationMemberDTO
+-- | OrganizationMemberDTO
+data OrganizationMemberDTO = OrganizationMemberDTO
+    { organizationMemberDTORole :: !(OrganizationRoleDTO) -- ^ /Required/ "role"
+    -- ^ /Required/ "editableRole"
+    , organizationMemberDTOEditableRole :: !(Bool) -- ^ /Required/ "editableRole"
+    -- ^ "registeredMemberInfo"
+    , organizationMemberDTORegisteredMemberInfo :: !(Maybe RegisteredMemberInfoDTO) -- ^ "registeredMemberInfo"
+    -- ^ "invitationInfo"
+    , organizationMemberDTOInvitationInfo :: !(Maybe OrganizationInvitationDTO) -- ^ "invitationInfo"
+    -- ^ "totalNumberOfProjects"
+    , organizationMemberDTOTotalNumberOfProjects :: !(Maybe Int) -- ^ "totalNumberOfProjects"
+    -- ^ "numberOfProjects"
+    , organizationMemberDTONumberOfProjects :: !(Maybe Int) -- ^ "numberOfProjects"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationMemberDTO
+instance A.FromJSON OrganizationMemberDTO where
+  parseJSON = A.withObject "OrganizationMemberDTO" $ \o ->
+    OrganizationMemberDTO
+      <$> (o .:  "role")
+      <*> (o .:  "editableRole")
+      <*> (o .:? "registeredMemberInfo")
+      <*> (o .:? "invitationInfo")
+      <*> (o .:? "totalNumberOfProjects")
+      <*> (o .:? "numberOfProjects")
+
+-- | ToJSON OrganizationMemberDTO
+instance A.ToJSON OrganizationMemberDTO where
+  toJSON OrganizationMemberDTO {..} =
+   _omitNulls
+      [ "role" .= organizationMemberDTORole
+      , "editableRole" .= organizationMemberDTOEditableRole
+      , "registeredMemberInfo" .= organizationMemberDTORegisteredMemberInfo
+      , "invitationInfo" .= organizationMemberDTOInvitationInfo
+      , "totalNumberOfProjects" .= organizationMemberDTOTotalNumberOfProjects
+      , "numberOfProjects" .= organizationMemberDTONumberOfProjects
+      ]
+
+
+-- | Construct a value of type 'OrganizationMemberDTO' (by applying it's required fields, if any)
+mkOrganizationMemberDTO
+  :: OrganizationRoleDTO -- ^ 'organizationMemberDTORole'
+  -> Bool -- ^ 'organizationMemberDTOEditableRole'
+  -> OrganizationMemberDTO
+mkOrganizationMemberDTO organizationMemberDTORole organizationMemberDTOEditableRole =
+  OrganizationMemberDTO
+  { organizationMemberDTORole
+  , organizationMemberDTOEditableRole
+  , organizationMemberDTORegisteredMemberInfo = Nothing
+  , organizationMemberDTOInvitationInfo = Nothing
+  , organizationMemberDTOTotalNumberOfProjects = Nothing
+  , organizationMemberDTONumberOfProjects = Nothing
+  }
+
+-- ** OrganizationMemberUpdateDTO
+-- | OrganizationMemberUpdateDTO
+data OrganizationMemberUpdateDTO = OrganizationMemberUpdateDTO
+    { organizationMemberUpdateDTORole :: !(OrganizationRoleDTO) -- ^ /Required/ "role"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationMemberUpdateDTO
+instance A.FromJSON OrganizationMemberUpdateDTO where
+  parseJSON = A.withObject "OrganizationMemberUpdateDTO" $ \o ->
+    OrganizationMemberUpdateDTO
+      <$> (o .:  "role")
+
+-- | ToJSON OrganizationMemberUpdateDTO
+instance A.ToJSON OrganizationMemberUpdateDTO where
+  toJSON OrganizationMemberUpdateDTO {..} =
+   _omitNulls
+      [ "role" .= organizationMemberUpdateDTORole
+      ]
+
+
+-- | Construct a value of type 'OrganizationMemberUpdateDTO' (by applying it's required fields, if any)
+mkOrganizationMemberUpdateDTO
+  :: OrganizationRoleDTO -- ^ 'organizationMemberUpdateDTORole'
+  -> OrganizationMemberUpdateDTO
+mkOrganizationMemberUpdateDTO organizationMemberUpdateDTORole =
+  OrganizationMemberUpdateDTO
+  { organizationMemberUpdateDTORole
+  }
+
+-- ** OrganizationNameAvailableDTO
+-- | OrganizationNameAvailableDTO
+data OrganizationNameAvailableDTO = OrganizationNameAvailableDTO
+    { organizationNameAvailableDTOAvailable :: !(Bool) -- ^ /Required/ "available"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationNameAvailableDTO
+instance A.FromJSON OrganizationNameAvailableDTO where
+  parseJSON = A.withObject "OrganizationNameAvailableDTO" $ \o ->
+    OrganizationNameAvailableDTO
+      <$> (o .:  "available")
+
+-- | ToJSON OrganizationNameAvailableDTO
+instance A.ToJSON OrganizationNameAvailableDTO where
+  toJSON OrganizationNameAvailableDTO {..} =
+   _omitNulls
+      [ "available" .= organizationNameAvailableDTOAvailable
+      ]
+
+
+-- | Construct a value of type 'OrganizationNameAvailableDTO' (by applying it's required fields, if any)
+mkOrganizationNameAvailableDTO
+  :: Bool -- ^ 'organizationNameAvailableDTOAvailable'
+  -> OrganizationNameAvailableDTO
+mkOrganizationNameAvailableDTO organizationNameAvailableDTOAvailable =
+  OrganizationNameAvailableDTO
+  { organizationNameAvailableDTOAvailable
+  }
+
+-- ** OrganizationPricingPlanDTO
+-- | OrganizationPricingPlanDTO
+data OrganizationPricingPlanDTO = OrganizationPricingPlanDTO
+    { organizationPricingPlanDTOPricingPlan :: !(PricingPlanDTO) -- ^ /Required/ "pricingPlan"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationPricingPlanDTO
+instance A.FromJSON OrganizationPricingPlanDTO where
+  parseJSON = A.withObject "OrganizationPricingPlanDTO" $ \o ->
+    OrganizationPricingPlanDTO
+      <$> (o .:  "pricingPlan")
+
+-- | ToJSON OrganizationPricingPlanDTO
+instance A.ToJSON OrganizationPricingPlanDTO where
+  toJSON OrganizationPricingPlanDTO {..} =
+   _omitNulls
+      [ "pricingPlan" .= organizationPricingPlanDTOPricingPlan
+      ]
+
+
+-- | Construct a value of type 'OrganizationPricingPlanDTO' (by applying it's required fields, if any)
+mkOrganizationPricingPlanDTO
+  :: PricingPlanDTO -- ^ 'organizationPricingPlanDTOPricingPlan'
+  -> OrganizationPricingPlanDTO
+mkOrganizationPricingPlanDTO organizationPricingPlanDTOPricingPlan =
+  OrganizationPricingPlanDTO
+  { organizationPricingPlanDTOPricingPlan
+  }
+
+-- ** OrganizationUpdateDTO
+-- | OrganizationUpdateDTO
+data OrganizationUpdateDTO = OrganizationUpdateDTO
+    { organizationUpdateDTOName :: !(Maybe Text) -- ^ "name"
+    -- ^ "info"
+    , organizationUpdateDTOInfo :: !(Maybe Text) -- ^ "info"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationUpdateDTO
+instance A.FromJSON OrganizationUpdateDTO where
+  parseJSON = A.withObject "OrganizationUpdateDTO" $ \o ->
+    OrganizationUpdateDTO
+      <$> (o .:? "name")
+      <*> (o .:? "info")
+
+-- | ToJSON OrganizationUpdateDTO
+instance A.ToJSON OrganizationUpdateDTO where
+  toJSON OrganizationUpdateDTO {..} =
+   _omitNulls
+      [ "name" .= organizationUpdateDTOName
+      , "info" .= organizationUpdateDTOInfo
+      ]
+
+
+-- | Construct a value of type 'OrganizationUpdateDTO' (by applying it's required fields, if any)
+mkOrganizationUpdateDTO
+  :: OrganizationUpdateDTO
+mkOrganizationUpdateDTO =
+  OrganizationUpdateDTO
+  { organizationUpdateDTOName = Nothing
+  , organizationUpdateDTOInfo = Nothing
+  }
+
+-- ** OrganizationWithRoleDTO
+-- | OrganizationWithRoleDTO
+data OrganizationWithRoleDTO = OrganizationWithRoleDTO
+    { organizationWithRoleDTOName             :: !(Text) -- ^ /Required/ "name"
+    -- ^ "userRole"
+    , organizationWithRoleDTOUserRole         :: !(Maybe OrganizationRoleDTO) -- ^ "userRole"
+    -- ^ /Required/ "paymentStatus"
+    , organizationWithRoleDTOPaymentStatus    :: !(Text) -- ^ /Required/ "paymentStatus"
+    -- ^ /Required/ "avatarUrl"
+    , organizationWithRoleDTOAvatarUrl        :: !(Text) -- ^ /Required/ "avatarUrl"
+    -- ^ /Required/ "organizationType"
+    , organizationWithRoleDTOOrganizationType :: !(OrganizationTypeDTO) -- ^ /Required/ "organizationType"
+    -- ^ /Required/ "avatarSource"
+    , organizationWithRoleDTOAvatarSource     :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ "info"
+    , organizationWithRoleDTOInfo             :: !(Maybe Text) -- ^ "info"
+    -- ^ /Required/ "id"
+    , organizationWithRoleDTOId               :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "created"
+    , organizationWithRoleDTOCreated          :: !(DateTime) -- ^ /Required/ "created"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OrganizationWithRoleDTO
+instance A.FromJSON OrganizationWithRoleDTO where
+  parseJSON = A.withObject "OrganizationWithRoleDTO" $ \o ->
+    OrganizationWithRoleDTO
+      <$> (o .:  "name")
+      <*> (o .:? "userRole")
+      <*> (o .:  "paymentStatus")
+      <*> (o .:  "avatarUrl")
+      <*> (o .:  "organizationType")
+      <*> (o .:  "avatarSource")
+      <*> (o .:? "info")
+      <*> (o .:  "id")
+      <*> (o .:  "created")
+
+-- | ToJSON OrganizationWithRoleDTO
+instance A.ToJSON OrganizationWithRoleDTO where
+  toJSON OrganizationWithRoleDTO {..} =
+   _omitNulls
+      [ "name" .= organizationWithRoleDTOName
+      , "userRole" .= organizationWithRoleDTOUserRole
+      , "paymentStatus" .= organizationWithRoleDTOPaymentStatus
+      , "avatarUrl" .= organizationWithRoleDTOAvatarUrl
+      , "organizationType" .= organizationWithRoleDTOOrganizationType
+      , "avatarSource" .= organizationWithRoleDTOAvatarSource
+      , "info" .= organizationWithRoleDTOInfo
+      , "id" .= organizationWithRoleDTOId
+      , "created" .= organizationWithRoleDTOCreated
+      ]
+
+
+-- | Construct a value of type 'OrganizationWithRoleDTO' (by applying it's required fields, if any)
+mkOrganizationWithRoleDTO
+  :: Text -- ^ 'organizationWithRoleDTOName'
+  -> Text -- ^ 'organizationWithRoleDTOPaymentStatus'
+  -> Text -- ^ 'organizationWithRoleDTOAvatarUrl'
+  -> OrganizationTypeDTO -- ^ 'organizationWithRoleDTOOrganizationType'
+  -> AvatarSourceEnum -- ^ 'organizationWithRoleDTOAvatarSource'
+  -> Text -- ^ 'organizationWithRoleDTOId'
+  -> DateTime -- ^ 'organizationWithRoleDTOCreated'
+  -> OrganizationWithRoleDTO
+mkOrganizationWithRoleDTO organizationWithRoleDTOName organizationWithRoleDTOPaymentStatus organizationWithRoleDTOAvatarUrl organizationWithRoleDTOOrganizationType organizationWithRoleDTOAvatarSource organizationWithRoleDTOId organizationWithRoleDTOCreated =
+  OrganizationWithRoleDTO
+  { organizationWithRoleDTOName
+  , organizationWithRoleDTOUserRole = Nothing
+  , organizationWithRoleDTOPaymentStatus
+  , organizationWithRoleDTOAvatarUrl
+  , organizationWithRoleDTOOrganizationType
+  , organizationWithRoleDTOAvatarSource
+  , organizationWithRoleDTOInfo = Nothing
+  , organizationWithRoleDTOId
+  , organizationWithRoleDTOCreated
+  }
+
+-- ** OutputImageDTO
+-- | OutputImageDTO
+data OutputImageDTO = OutputImageDTO
+    { outputImageDTOName         :: !(Maybe Text) -- ^ "name"
+    -- ^ "description"
+    , outputImageDTODescription  :: !(Maybe Text) -- ^ "description"
+    -- ^ "imageUrl"
+    , outputImageDTOImageUrl     :: !(Maybe Text) -- ^ "imageUrl"
+    -- ^ "thumbnailUrl"
+    , outputImageDTOThumbnailUrl :: !(Maybe Text) -- ^ "thumbnailUrl"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON OutputImageDTO
+instance A.FromJSON OutputImageDTO where
+  parseJSON = A.withObject "OutputImageDTO" $ \o ->
+    OutputImageDTO
+      <$> (o .:? "name")
+      <*> (o .:? "description")
+      <*> (o .:? "imageUrl")
+      <*> (o .:? "thumbnailUrl")
+
+-- | ToJSON OutputImageDTO
+instance A.ToJSON OutputImageDTO where
+  toJSON OutputImageDTO {..} =
+   _omitNulls
+      [ "name" .= outputImageDTOName
+      , "description" .= outputImageDTODescription
+      , "imageUrl" .= outputImageDTOImageUrl
+      , "thumbnailUrl" .= outputImageDTOThumbnailUrl
+      ]
+
+
+-- | Construct a value of type 'OutputImageDTO' (by applying it's required fields, if any)
+mkOutputImageDTO
+  :: OutputImageDTO
+mkOutputImageDTO =
+  OutputImageDTO
+  { outputImageDTOName = Nothing
+  , outputImageDTODescription = Nothing
+  , outputImageDTOImageUrl = Nothing
+  , outputImageDTOThumbnailUrl = Nothing
+  }
+
+-- ** Parameter
+-- | Parameter
+data Parameter = Parameter
+    { parameterName          :: !(Text) -- ^ /Required/ "name"
+    -- ^ "description"
+    , parameterDescription   :: !(Maybe Text) -- ^ "description"
+    -- ^ /Required/ "parameterType"
+    , parameterParameterType :: !(ParameterTypeEnum) -- ^ /Required/ "parameterType"
+    -- ^ /Required/ "id"
+    , parameterId            :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "value"
+    , parameterValue         :: !(Text) -- ^ /Required/ "value"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Parameter
+instance A.FromJSON Parameter where
+  parseJSON = A.withObject "Parameter" $ \o ->
+    Parameter
+      <$> (o .:  "name")
+      <*> (o .:? "description")
+      <*> (o .:  "parameterType")
+      <*> (o .:  "id")
+      <*> (o .:  "value")
+
+-- | ToJSON Parameter
+instance A.ToJSON Parameter where
+  toJSON Parameter {..} =
+   _omitNulls
+      [ "name" .= parameterName
+      , "description" .= parameterDescription
+      , "parameterType" .= parameterParameterType
+      , "id" .= parameterId
+      , "value" .= parameterValue
+      ]
+
+
+-- | Construct a value of type 'Parameter' (by applying it's required fields, if any)
+mkParameter
+  :: Text -- ^ 'parameterName'
+  -> ParameterTypeEnum -- ^ 'parameterParameterType'
+  -> Text -- ^ 'parameterId'
+  -> Text -- ^ 'parameterValue'
+  -> Parameter
+mkParameter parameterName parameterParameterType parameterId parameterValue =
+  Parameter
+  { parameterName
+  , parameterDescription = Nothing
+  , parameterParameterType
+  , parameterId
+  , parameterValue
+  }
+
+-- ** PasswordChangeDTO
+-- | PasswordChangeDTO
+data PasswordChangeDTO = PasswordChangeDTO
+    { passwordChangeDTOCurrentPassword :: !(Text) -- ^ /Required/ "currentPassword"
+    -- ^ /Required/ "newPassword"
+    , passwordChangeDTONewPassword     :: !(Text) -- ^ /Required/ "newPassword"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON PasswordChangeDTO
+instance A.FromJSON PasswordChangeDTO where
+  parseJSON = A.withObject "PasswordChangeDTO" $ \o ->
+    PasswordChangeDTO
+      <$> (o .:  "currentPassword")
+      <*> (o .:  "newPassword")
+
+-- | ToJSON PasswordChangeDTO
+instance A.ToJSON PasswordChangeDTO where
+  toJSON PasswordChangeDTO {..} =
+   _omitNulls
+      [ "currentPassword" .= passwordChangeDTOCurrentPassword
+      , "newPassword" .= passwordChangeDTONewPassword
+      ]
+
+
+-- | Construct a value of type 'PasswordChangeDTO' (by applying it's required fields, if any)
+mkPasswordChangeDTO
+  :: Text -- ^ 'passwordChangeDTOCurrentPassword'
+  -> Text -- ^ 'passwordChangeDTONewPassword'
+  -> PasswordChangeDTO
+mkPasswordChangeDTO passwordChangeDTOCurrentPassword passwordChangeDTONewPassword =
+  PasswordChangeDTO
+  { passwordChangeDTOCurrentPassword
+  , passwordChangeDTONewPassword
+  }
+
+-- ** Point
+-- | Point
+data Point = Point
+    { pointTimestampMillis :: !(Integer) -- ^ /Required/ "timestampMillis"
+    -- ^ "x"
+    , pointX               :: !(Maybe Double) -- ^ "x"
+    -- ^ /Required/ "y"
+    , pointY               :: !(Y) -- ^ /Required/ "y"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Point
+instance A.FromJSON Point where
+  parseJSON = A.withObject "Point" $ \o ->
+    Point
+      <$> (o .:  "timestampMillis")
+      <*> (o .:? "x")
+      <*> (o .:  "y")
+
+-- | ToJSON Point
+instance A.ToJSON Point where
+  toJSON Point {..} =
+   _omitNulls
+      [ "timestampMillis" .= pointTimestampMillis
+      , "x" .= pointX
+      , "y" .= pointY
+      ]
+
+
+-- | Construct a value of type 'Point' (by applying it's required fields, if any)
+mkPoint
+  :: Integer -- ^ 'pointTimestampMillis'
+  -> Y -- ^ 'pointY'
+  -> Point
+mkPoint pointTimestampMillis pointY =
+  Point
+  { pointTimestampMillis
+  , pointX = Nothing
+  , pointY
+  }
+
+-- ** PointValueDTO
+-- | PointValueDTO
+data PointValueDTO = PointValueDTO
+    { pointValueDTOTimestampMillis :: !(Integer) -- ^ /Required/ "timestampMillis"
+    -- ^ /Required/ "x"
+    , pointValueDTOX               :: !(Double) -- ^ /Required/ "x"
+    -- ^ /Required/ "y"
+    , pointValueDTOY               :: !(Y) -- ^ /Required/ "y"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON PointValueDTO
+instance A.FromJSON PointValueDTO where
+  parseJSON = A.withObject "PointValueDTO" $ \o ->
+    PointValueDTO
+      <$> (o .:  "timestampMillis")
+      <*> (o .:  "x")
+      <*> (o .:  "y")
+
+-- | ToJSON PointValueDTO
+instance A.ToJSON PointValueDTO where
+  toJSON PointValueDTO {..} =
+   _omitNulls
+      [ "timestampMillis" .= pointValueDTOTimestampMillis
+      , "x" .= pointValueDTOX
+      , "y" .= pointValueDTOY
+      ]
+
+
+-- | Construct a value of type 'PointValueDTO' (by applying it's required fields, if any)
+mkPointValueDTO
+  :: Integer -- ^ 'pointValueDTOTimestampMillis'
+  -> Double -- ^ 'pointValueDTOX'
+  -> Y -- ^ 'pointValueDTOY'
+  -> PointValueDTO
+mkPointValueDTO pointValueDTOTimestampMillis pointValueDTOX pointValueDTOY =
+  PointValueDTO
+  { pointValueDTOTimestampMillis
+  , pointValueDTOX
+  , pointValueDTOY
+  }
+
+-- ** ProjectInvitationDTO
+-- | ProjectInvitationDTO
+data ProjectInvitationDTO = ProjectInvitationDTO
+    { projectInvitationDTORoleGrant        :: !(ProjectRoleDTO) -- ^ /Required/ "roleGrant"
+    -- ^ /Required/ "projectName"
+    , projectInvitationDTOProjectName      :: !(Text) -- ^ /Required/ "projectName"
+    -- ^ /Required/ "invitedBy"
+    , projectInvitationDTOInvitedBy        :: !(Text) -- ^ /Required/ "invitedBy"
+    -- ^ /Required/ "organizationName"
+    , projectInvitationDTOOrganizationName :: !(Text) -- ^ /Required/ "organizationName"
+    -- ^ /Required/ "id"
+    , projectInvitationDTOId               :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "invitee"
+    , projectInvitationDTOInvitee          :: !(Text) -- ^ /Required/ "invitee"
+    -- ^ /Required/ "status"
+    , projectInvitationDTOStatus           :: !(InvitationStatusEnumDTO) -- ^ /Required/ "status"
+    -- ^ /Required/ "invitationType"
+    , projectInvitationDTOInvitationType   :: !(InvitationTypeEnumDTO) -- ^ /Required/ "invitationType"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectInvitationDTO
+instance A.FromJSON ProjectInvitationDTO where
+  parseJSON = A.withObject "ProjectInvitationDTO" $ \o ->
+    ProjectInvitationDTO
+      <$> (o .:  "roleGrant")
+      <*> (o .:  "projectName")
+      <*> (o .:  "invitedBy")
+      <*> (o .:  "organizationName")
+      <*> (o .:  "id")
+      <*> (o .:  "invitee")
+      <*> (o .:  "status")
+      <*> (o .:  "invitationType")
+
+-- | ToJSON ProjectInvitationDTO
+instance A.ToJSON ProjectInvitationDTO where
+  toJSON ProjectInvitationDTO {..} =
+   _omitNulls
+      [ "roleGrant" .= projectInvitationDTORoleGrant
+      , "projectName" .= projectInvitationDTOProjectName
+      , "invitedBy" .= projectInvitationDTOInvitedBy
+      , "organizationName" .= projectInvitationDTOOrganizationName
+      , "id" .= projectInvitationDTOId
+      , "invitee" .= projectInvitationDTOInvitee
+      , "status" .= projectInvitationDTOStatus
+      , "invitationType" .= projectInvitationDTOInvitationType
+      ]
+
+
+-- | Construct a value of type 'ProjectInvitationDTO' (by applying it's required fields, if any)
+mkProjectInvitationDTO
+  :: ProjectRoleDTO -- ^ 'projectInvitationDTORoleGrant'
+  -> Text -- ^ 'projectInvitationDTOProjectName'
+  -> Text -- ^ 'projectInvitationDTOInvitedBy'
+  -> Text -- ^ 'projectInvitationDTOOrganizationName'
+  -> Text -- ^ 'projectInvitationDTOId'
+  -> Text -- ^ 'projectInvitationDTOInvitee'
+  -> InvitationStatusEnumDTO -- ^ 'projectInvitationDTOStatus'
+  -> InvitationTypeEnumDTO -- ^ 'projectInvitationDTOInvitationType'
+  -> ProjectInvitationDTO
+mkProjectInvitationDTO projectInvitationDTORoleGrant projectInvitationDTOProjectName projectInvitationDTOInvitedBy projectInvitationDTOOrganizationName projectInvitationDTOId projectInvitationDTOInvitee projectInvitationDTOStatus projectInvitationDTOInvitationType =
+  ProjectInvitationDTO
+  { projectInvitationDTORoleGrant
+  , projectInvitationDTOProjectName
+  , projectInvitationDTOInvitedBy
+  , projectInvitationDTOOrganizationName
+  , projectInvitationDTOId
+  , projectInvitationDTOInvitee
+  , projectInvitationDTOStatus
+  , projectInvitationDTOInvitationType
+  }
+
+-- ** ProjectInvitationUpdateDTO
+-- | ProjectInvitationUpdateDTO
+data ProjectInvitationUpdateDTO = ProjectInvitationUpdateDTO
+    { projectInvitationUpdateDTORoleGrant :: !(ProjectRoleDTO) -- ^ /Required/ "roleGrant"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectInvitationUpdateDTO
+instance A.FromJSON ProjectInvitationUpdateDTO where
+  parseJSON = A.withObject "ProjectInvitationUpdateDTO" $ \o ->
+    ProjectInvitationUpdateDTO
+      <$> (o .:  "roleGrant")
+
+-- | ToJSON ProjectInvitationUpdateDTO
+instance A.ToJSON ProjectInvitationUpdateDTO where
+  toJSON ProjectInvitationUpdateDTO {..} =
+   _omitNulls
+      [ "roleGrant" .= projectInvitationUpdateDTORoleGrant
+      ]
+
+
+-- | Construct a value of type 'ProjectInvitationUpdateDTO' (by applying it's required fields, if any)
+mkProjectInvitationUpdateDTO
+  :: ProjectRoleDTO -- ^ 'projectInvitationUpdateDTORoleGrant'
+  -> ProjectInvitationUpdateDTO
+mkProjectInvitationUpdateDTO projectInvitationUpdateDTORoleGrant =
+  ProjectInvitationUpdateDTO
+  { projectInvitationUpdateDTORoleGrant
+  }
+
+-- ** ProjectKeyDTO
+-- | ProjectKeyDTO
+data ProjectKeyDTO = ProjectKeyDTO
+    { projectKeyDTOProposal :: !(Text) -- ^ /Required/ "proposal"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectKeyDTO
+instance A.FromJSON ProjectKeyDTO where
+  parseJSON = A.withObject "ProjectKeyDTO" $ \o ->
+    ProjectKeyDTO
+      <$> (o .:  "proposal")
+
+-- | ToJSON ProjectKeyDTO
+instance A.ToJSON ProjectKeyDTO where
+  toJSON ProjectKeyDTO {..} =
+   _omitNulls
+      [ "proposal" .= projectKeyDTOProposal
+      ]
+
+
+-- | Construct a value of type 'ProjectKeyDTO' (by applying it's required fields, if any)
+mkProjectKeyDTO
+  :: Text -- ^ 'projectKeyDTOProposal'
+  -> ProjectKeyDTO
+mkProjectKeyDTO projectKeyDTOProposal =
+  ProjectKeyDTO
+  { projectKeyDTOProposal
+  }
+
+-- ** ProjectListDTO
+-- | ProjectListDTO
+data ProjectListDTO = ProjectListDTO
+    { projectListDTOEntries           :: !([ProjectWithRoleDTO]) -- ^ /Required/ "entries"
+    -- ^ /Required/ "matchingItemCount"
+    , projectListDTOMatchingItemCount :: !(Int) -- ^ /Required/ "matchingItemCount"
+    -- ^ /Required/ "totalItemCount"
+    , projectListDTOTotalItemCount    :: !(Int) -- ^ /Required/ "totalItemCount"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectListDTO
+instance A.FromJSON ProjectListDTO where
+  parseJSON = A.withObject "ProjectListDTO" $ \o ->
+    ProjectListDTO
+      <$> (o .:  "entries")
+      <*> (o .:  "matchingItemCount")
+      <*> (o .:  "totalItemCount")
+
+-- | ToJSON ProjectListDTO
+instance A.ToJSON ProjectListDTO where
+  toJSON ProjectListDTO {..} =
+   _omitNulls
+      [ "entries" .= projectListDTOEntries
+      , "matchingItemCount" .= projectListDTOMatchingItemCount
+      , "totalItemCount" .= projectListDTOTotalItemCount
+      ]
+
+
+-- | Construct a value of type 'ProjectListDTO' (by applying it's required fields, if any)
+mkProjectListDTO
+  :: [ProjectWithRoleDTO] -- ^ 'projectListDTOEntries'
+  -> Int -- ^ 'projectListDTOMatchingItemCount'
+  -> Int -- ^ 'projectListDTOTotalItemCount'
+  -> ProjectListDTO
+mkProjectListDTO projectListDTOEntries projectListDTOMatchingItemCount projectListDTOTotalItemCount =
+  ProjectListDTO
+  { projectListDTOEntries
+  , projectListDTOMatchingItemCount
+  , projectListDTOTotalItemCount
+  }
+
+-- ** ProjectMemberDTO
+-- | ProjectMemberDTO
+data ProjectMemberDTO = ProjectMemberDTO
+    { projectMemberDTORole                 :: !(ProjectRoleDTO) -- ^ /Required/ "role"
+    -- ^ "registeredMemberInfo"
+    , projectMemberDTORegisteredMemberInfo :: !(Maybe RegisteredMemberInfoDTO) -- ^ "registeredMemberInfo"
+    -- ^ "invitationInfo"
+    , projectMemberDTOInvitationInfo       :: !(Maybe ProjectInvitationDTO) -- ^ "invitationInfo"
+    -- ^ /Required/ "editableRole"
+    , projectMemberDTOEditableRole         :: !(Bool) -- ^ /Required/ "editableRole"
+    -- ^ /Required/ "canLeaveProject"
+    , projectMemberDTOCanLeaveProject      :: !(Bool) -- ^ /Required/ "canLeaveProject"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectMemberDTO
+instance A.FromJSON ProjectMemberDTO where
+  parseJSON = A.withObject "ProjectMemberDTO" $ \o ->
+    ProjectMemberDTO
+      <$> (o .:  "role")
+      <*> (o .:? "registeredMemberInfo")
+      <*> (o .:? "invitationInfo")
+      <*> (o .:  "editableRole")
+      <*> (o .:  "canLeaveProject")
+
+-- | ToJSON ProjectMemberDTO
+instance A.ToJSON ProjectMemberDTO where
+  toJSON ProjectMemberDTO {..} =
+   _omitNulls
+      [ "role" .= projectMemberDTORole
+      , "registeredMemberInfo" .= projectMemberDTORegisteredMemberInfo
+      , "invitationInfo" .= projectMemberDTOInvitationInfo
+      , "editableRole" .= projectMemberDTOEditableRole
+      , "canLeaveProject" .= projectMemberDTOCanLeaveProject
+      ]
+
+
+-- | Construct a value of type 'ProjectMemberDTO' (by applying it's required fields, if any)
+mkProjectMemberDTO
+  :: ProjectRoleDTO -- ^ 'projectMemberDTORole'
+  -> Bool -- ^ 'projectMemberDTOEditableRole'
+  -> Bool -- ^ 'projectMemberDTOCanLeaveProject'
+  -> ProjectMemberDTO
+mkProjectMemberDTO projectMemberDTORole projectMemberDTOEditableRole projectMemberDTOCanLeaveProject =
+  ProjectMemberDTO
+  { projectMemberDTORole
+  , projectMemberDTORegisteredMemberInfo = Nothing
+  , projectMemberDTOInvitationInfo = Nothing
+  , projectMemberDTOEditableRole
+  , projectMemberDTOCanLeaveProject
+  }
+
+-- ** ProjectMemberUpdateDTO
+-- | ProjectMemberUpdateDTO
+data ProjectMemberUpdateDTO = ProjectMemberUpdateDTO
+    { projectMemberUpdateDTORole :: !(ProjectRoleDTO) -- ^ /Required/ "role"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectMemberUpdateDTO
+instance A.FromJSON ProjectMemberUpdateDTO where
+  parseJSON = A.withObject "ProjectMemberUpdateDTO" $ \o ->
+    ProjectMemberUpdateDTO
+      <$> (o .:  "role")
+
+-- | ToJSON ProjectMemberUpdateDTO
+instance A.ToJSON ProjectMemberUpdateDTO where
+  toJSON ProjectMemberUpdateDTO {..} =
+   _omitNulls
+      [ "role" .= projectMemberUpdateDTORole
+      ]
+
+
+-- | Construct a value of type 'ProjectMemberUpdateDTO' (by applying it's required fields, if any)
+mkProjectMemberUpdateDTO
+  :: ProjectRoleDTO -- ^ 'projectMemberUpdateDTORole'
+  -> ProjectMemberUpdateDTO
+mkProjectMemberUpdateDTO projectMemberUpdateDTORole =
+  ProjectMemberUpdateDTO
+  { projectMemberUpdateDTORole
+  }
+
+-- ** ProjectMembersDTO
+-- | ProjectMembersDTO
+data ProjectMembersDTO = ProjectMembersDTO
+    { projectMembersDTOProjectName      :: !(Text) -- ^ /Required/ "projectName"
+    -- ^ /Required/ "projectId"
+    , projectMembersDTOProjectId        :: !(Text) -- ^ /Required/ "projectId"
+    -- ^ /Required/ "organizationName"
+    , projectMembersDTOOrganizationName :: !(Text) -- ^ /Required/ "organizationName"
+    -- ^ /Required/ "members"
+    , projectMembersDTOMembers          :: !([ProjectMemberDTO]) -- ^ /Required/ "members"
+    -- ^ /Required/ "organizationId"
+    , projectMembersDTOOrganizationId   :: !(Text) -- ^ /Required/ "organizationId"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectMembersDTO
+instance A.FromJSON ProjectMembersDTO where
+  parseJSON = A.withObject "ProjectMembersDTO" $ \o ->
+    ProjectMembersDTO
+      <$> (o .:  "projectName")
+      <*> (o .:  "projectId")
+      <*> (o .:  "organizationName")
+      <*> (o .:  "members")
+      <*> (o .:  "organizationId")
+
+-- | ToJSON ProjectMembersDTO
+instance A.ToJSON ProjectMembersDTO where
+  toJSON ProjectMembersDTO {..} =
+   _omitNulls
+      [ "projectName" .= projectMembersDTOProjectName
+      , "projectId" .= projectMembersDTOProjectId
+      , "organizationName" .= projectMembersDTOOrganizationName
+      , "members" .= projectMembersDTOMembers
+      , "organizationId" .= projectMembersDTOOrganizationId
+      ]
+
+
+-- | Construct a value of type 'ProjectMembersDTO' (by applying it's required fields, if any)
+mkProjectMembersDTO
+  :: Text -- ^ 'projectMembersDTOProjectName'
+  -> Text -- ^ 'projectMembersDTOProjectId'
+  -> Text -- ^ 'projectMembersDTOOrganizationName'
+  -> [ProjectMemberDTO] -- ^ 'projectMembersDTOMembers'
+  -> Text -- ^ 'projectMembersDTOOrganizationId'
+  -> ProjectMembersDTO
+mkProjectMembersDTO projectMembersDTOProjectName projectMembersDTOProjectId projectMembersDTOOrganizationName projectMembersDTOMembers projectMembersDTOOrganizationId =
+  ProjectMembersDTO
+  { projectMembersDTOProjectName
+  , projectMembersDTOProjectId
+  , projectMembersDTOOrganizationName
+  , projectMembersDTOMembers
+  , projectMembersDTOOrganizationId
+  }
+
+-- ** ProjectMetadataDTO
+-- | ProjectMetadataDTO
+data ProjectMetadataDTO = ProjectMetadataDTO
+    { projectMetadataDTOName             :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "organizationType"
+    , projectMetadataDTOOrganizationType :: !(OrganizationTypeDTO) -- ^ /Required/ "organizationType"
+    -- ^ /Required/ "timeOfCreation"
+    , projectMetadataDTOTimeOfCreation   :: !(DateTime) -- ^ /Required/ "timeOfCreation"
+    -- ^ /Required/ "organizationName"
+    , projectMetadataDTOOrganizationName :: !(Text) -- ^ /Required/ "organizationName"
+    -- ^ /Required/ "version"
+    , projectMetadataDTOVersion          :: !(Int) -- ^ /Required/ "version"
+    -- ^ /Required/ "id"
+    , projectMetadataDTOId               :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "projectKey"
+    , projectMetadataDTOProjectKey       :: !(Text) -- ^ /Required/ "projectKey"
+    -- ^ /Required/ "organizationId"
+    , projectMetadataDTOOrganizationId   :: !(Text) -- ^ /Required/ "organizationId"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectMetadataDTO
+instance A.FromJSON ProjectMetadataDTO where
+  parseJSON = A.withObject "ProjectMetadataDTO" $ \o ->
+    ProjectMetadataDTO
+      <$> (o .:  "name")
+      <*> (o .:  "organizationType")
+      <*> (o .:  "timeOfCreation")
+      <*> (o .:  "organizationName")
+      <*> (o .:  "version")
+      <*> (o .:  "id")
+      <*> (o .:  "projectKey")
+      <*> (o .:  "organizationId")
+
+-- | ToJSON ProjectMetadataDTO
+instance A.ToJSON ProjectMetadataDTO where
+  toJSON ProjectMetadataDTO {..} =
+   _omitNulls
+      [ "name" .= projectMetadataDTOName
+      , "organizationType" .= projectMetadataDTOOrganizationType
+      , "timeOfCreation" .= projectMetadataDTOTimeOfCreation
+      , "organizationName" .= projectMetadataDTOOrganizationName
+      , "version" .= projectMetadataDTOVersion
+      , "id" .= projectMetadataDTOId
+      , "projectKey" .= projectMetadataDTOProjectKey
+      , "organizationId" .= projectMetadataDTOOrganizationId
+      ]
+
+
+-- | Construct a value of type 'ProjectMetadataDTO' (by applying it's required fields, if any)
+mkProjectMetadataDTO
+  :: Text -- ^ 'projectMetadataDTOName'
+  -> OrganizationTypeDTO -- ^ 'projectMetadataDTOOrganizationType'
+  -> DateTime -- ^ 'projectMetadataDTOTimeOfCreation'
+  -> Text -- ^ 'projectMetadataDTOOrganizationName'
+  -> Int -- ^ 'projectMetadataDTOVersion'
+  -> Text -- ^ 'projectMetadataDTOId'
+  -> Text -- ^ 'projectMetadataDTOProjectKey'
+  -> Text -- ^ 'projectMetadataDTOOrganizationId'
+  -> ProjectMetadataDTO
+mkProjectMetadataDTO projectMetadataDTOName projectMetadataDTOOrganizationType projectMetadataDTOTimeOfCreation projectMetadataDTOOrganizationName projectMetadataDTOVersion projectMetadataDTOId projectMetadataDTOProjectKey projectMetadataDTOOrganizationId =
+  ProjectMetadataDTO
+  { projectMetadataDTOName
+  , projectMetadataDTOOrganizationType
+  , projectMetadataDTOTimeOfCreation
+  , projectMetadataDTOOrganizationName
+  , projectMetadataDTOVersion
+  , projectMetadataDTOId
+  , projectMetadataDTOProjectKey
+  , projectMetadataDTOOrganizationId
+  }
+
+-- ** ProjectUpdateDTO
+-- | ProjectUpdateDTO
+data ProjectUpdateDTO = ProjectUpdateDTO
+    { projectUpdateDTOCodeAccess   :: !(Maybe ProjectCodeAccessDTO) -- ^ "codeAccess"
+    -- ^ "name"
+    , projectUpdateDTOName         :: !(Maybe Text) -- ^ "name"
+    -- ^ "description"
+    , projectUpdateDTODescription  :: !(Maybe Text) -- ^ "description"
+    -- ^ "visibility"
+    , projectUpdateDTOVisibility   :: !(Maybe ProjectVisibilityDTO) -- ^ "visibility"
+    -- ^ "displayClass"
+    , projectUpdateDTODisplayClass :: !(Maybe Text) -- ^ "displayClass"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectUpdateDTO
+instance A.FromJSON ProjectUpdateDTO where
+  parseJSON = A.withObject "ProjectUpdateDTO" $ \o ->
+    ProjectUpdateDTO
+      <$> (o .:? "codeAccess")
+      <*> (o .:? "name")
+      <*> (o .:? "description")
+      <*> (o .:? "visibility")
+      <*> (o .:? "displayClass")
+
+-- | ToJSON ProjectUpdateDTO
+instance A.ToJSON ProjectUpdateDTO where
+  toJSON ProjectUpdateDTO {..} =
+   _omitNulls
+      [ "codeAccess" .= projectUpdateDTOCodeAccess
+      , "name" .= projectUpdateDTOName
+      , "description" .= projectUpdateDTODescription
+      , "visibility" .= projectUpdateDTOVisibility
+      , "displayClass" .= projectUpdateDTODisplayClass
+      ]
+
+
+-- | Construct a value of type 'ProjectUpdateDTO' (by applying it's required fields, if any)
+mkProjectUpdateDTO
+  :: ProjectUpdateDTO
+mkProjectUpdateDTO =
+  ProjectUpdateDTO
+  { projectUpdateDTOCodeAccess = Nothing
+  , projectUpdateDTOName = Nothing
+  , projectUpdateDTODescription = Nothing
+  , projectUpdateDTOVisibility = Nothing
+  , projectUpdateDTODisplayClass = Nothing
+  }
+
+-- ** ProjectWithRoleDTO
+-- | ProjectWithRoleDTO
+data ProjectWithRoleDTO = ProjectWithRoleDTO
+    { projectWithRoleDTOCodeAccess             :: !(ProjectCodeAccessDTO) -- ^ /Required/ "codeAccess"
+    -- ^ /Required/ "avatarUrl"
+    , projectWithRoleDTOAvatarUrl              :: !(Text) -- ^ /Required/ "avatarUrl"
+    -- ^ "description"
+    , projectWithRoleDTODescription            :: !(Maybe Text) -- ^ "description"
+    -- ^ /Required/ "organizationType"
+    , projectWithRoleDTOOrganizationType       :: !(OrganizationTypeDTO) -- ^ /Required/ "organizationType"
+    -- ^ /Required/ "featured"
+    , projectWithRoleDTOFeatured               :: !(Bool) -- ^ /Required/ "featured"
+    -- ^ /Required/ "organizationName"
+    , projectWithRoleDTOOrganizationName       :: !(Text) -- ^ /Required/ "organizationName"
+    -- ^ /Required/ "version"
+    , projectWithRoleDTOVersion                :: !(Int) -- ^ /Required/ "version"
+    -- ^ /Required/ "id"
+    , projectWithRoleDTOId                     :: !(Text) -- ^ /Required/ "id"
+    -- ^ /Required/ "projectKey"
+    , projectWithRoleDTOProjectKey             :: !(Text) -- ^ /Required/ "projectKey"
+    -- ^ /Required/ "organizationId"
+    , projectWithRoleDTOOrganizationId         :: !(Text) -- ^ /Required/ "organizationId"
+    -- ^ /Required/ "userCount"
+    , projectWithRoleDTOUserCount              :: !(Int) -- ^ /Required/ "userCount"
+    -- ^ /Required/ "visibility"
+    , projectWithRoleDTOVisibility             :: !(ProjectVisibilityDTO) -- ^ /Required/ "visibility"
+    -- ^ "displayClass"
+    , projectWithRoleDTODisplayClass           :: !(Maybe Text) -- ^ "displayClass"
+    -- ^ /Required/ "name"
+    , projectWithRoleDTOName                   :: !(Text) -- ^ /Required/ "name"
+    -- ^ /Required/ "lastActivity"
+    , projectWithRoleDTOLastActivity           :: !(DateTime) -- ^ /Required/ "lastActivity"
+    -- ^ /Required/ "timeOfCreation"
+    , projectWithRoleDTOTimeOfCreation         :: !(DateTime) -- ^ /Required/ "timeOfCreation"
+    -- ^ "userRoleInOrganization"
+    , projectWithRoleDTOUserRoleInOrganization :: !(Maybe OrganizationRoleDTO) -- ^ "userRoleInOrganization"
+    -- ^ /Required/ "avatarSource"
+    , projectWithRoleDTOAvatarSource           :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ /Required/ "leaderboardEntryCount"
+    , projectWithRoleDTOLeaderboardEntryCount  :: !(Int) -- ^ /Required/ "leaderboardEntryCount"
+    -- ^ /Required/ "userRoleInProject"
+    , projectWithRoleDTOUserRoleInProject      :: !(ProjectRoleDTO) -- ^ /Required/ "userRoleInProject"
+    -- ^ "backgroundUrl"
+    , projectWithRoleDTOBackgroundUrl          :: !(Maybe Text) -- ^ "backgroundUrl"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON ProjectWithRoleDTO
+instance A.FromJSON ProjectWithRoleDTO where
+  parseJSON = A.withObject "ProjectWithRoleDTO" $ \o ->
+    ProjectWithRoleDTO
+      <$> (o .:  "codeAccess")
+      <*> (o .:  "avatarUrl")
+      <*> (o .:? "description")
+      <*> (o .:  "organizationType")
+      <*> (o .:  "featured")
+      <*> (o .:  "organizationName")
+      <*> (o .:  "version")
+      <*> (o .:  "id")
+      <*> (o .:  "projectKey")
+      <*> (o .:  "organizationId")
+      <*> (o .:  "userCount")
+      <*> (o .:  "visibility")
+      <*> (o .:? "displayClass")
+      <*> (o .:  "name")
+      <*> (o .:  "lastActivity")
+      <*> (o .:  "timeOfCreation")
+      <*> (o .:? "userRoleInOrganization")
+      <*> (o .:  "avatarSource")
+      <*> (o .:  "leaderboardEntryCount")
+      <*> (o .:  "userRoleInProject")
+      <*> (o .:? "backgroundUrl")
+
+-- | ToJSON ProjectWithRoleDTO
+instance A.ToJSON ProjectWithRoleDTO where
+  toJSON ProjectWithRoleDTO {..} =
+   _omitNulls
+      [ "codeAccess" .= projectWithRoleDTOCodeAccess
+      , "avatarUrl" .= projectWithRoleDTOAvatarUrl
+      , "description" .= projectWithRoleDTODescription
+      , "organizationType" .= projectWithRoleDTOOrganizationType
+      , "featured" .= projectWithRoleDTOFeatured
+      , "organizationName" .= projectWithRoleDTOOrganizationName
+      , "version" .= projectWithRoleDTOVersion
+      , "id" .= projectWithRoleDTOId
+      , "projectKey" .= projectWithRoleDTOProjectKey
+      , "organizationId" .= projectWithRoleDTOOrganizationId
+      , "userCount" .= projectWithRoleDTOUserCount
+      , "visibility" .= projectWithRoleDTOVisibility
+      , "displayClass" .= projectWithRoleDTODisplayClass
+      , "name" .= projectWithRoleDTOName
+      , "lastActivity" .= projectWithRoleDTOLastActivity
+      , "timeOfCreation" .= projectWithRoleDTOTimeOfCreation
+      , "userRoleInOrganization" .= projectWithRoleDTOUserRoleInOrganization
+      , "avatarSource" .= projectWithRoleDTOAvatarSource
+      , "leaderboardEntryCount" .= projectWithRoleDTOLeaderboardEntryCount
+      , "userRoleInProject" .= projectWithRoleDTOUserRoleInProject
+      , "backgroundUrl" .= projectWithRoleDTOBackgroundUrl
+      ]
+
+
+-- | Construct a value of type 'ProjectWithRoleDTO' (by applying it's required fields, if any)
+mkProjectWithRoleDTO
+  :: ProjectCodeAccessDTO -- ^ 'projectWithRoleDTOCodeAccess'
+  -> Text -- ^ 'projectWithRoleDTOAvatarUrl'
+  -> OrganizationTypeDTO -- ^ 'projectWithRoleDTOOrganizationType'
+  -> Bool -- ^ 'projectWithRoleDTOFeatured'
+  -> Text -- ^ 'projectWithRoleDTOOrganizationName'
+  -> Int -- ^ 'projectWithRoleDTOVersion'
+  -> Text -- ^ 'projectWithRoleDTOId'
+  -> Text -- ^ 'projectWithRoleDTOProjectKey'
+  -> Text -- ^ 'projectWithRoleDTOOrganizationId'
+  -> Int -- ^ 'projectWithRoleDTOUserCount'
+  -> ProjectVisibilityDTO -- ^ 'projectWithRoleDTOVisibility'
+  -> Text -- ^ 'projectWithRoleDTOName'
+  -> DateTime -- ^ 'projectWithRoleDTOLastActivity'
+  -> DateTime -- ^ 'projectWithRoleDTOTimeOfCreation'
+  -> AvatarSourceEnum -- ^ 'projectWithRoleDTOAvatarSource'
+  -> Int -- ^ 'projectWithRoleDTOLeaderboardEntryCount'
+  -> ProjectRoleDTO -- ^ 'projectWithRoleDTOUserRoleInProject'
+  -> ProjectWithRoleDTO
+mkProjectWithRoleDTO projectWithRoleDTOCodeAccess projectWithRoleDTOAvatarUrl projectWithRoleDTOOrganizationType projectWithRoleDTOFeatured projectWithRoleDTOOrganizationName projectWithRoleDTOVersion projectWithRoleDTOId projectWithRoleDTOProjectKey projectWithRoleDTOOrganizationId projectWithRoleDTOUserCount projectWithRoleDTOVisibility projectWithRoleDTOName projectWithRoleDTOLastActivity projectWithRoleDTOTimeOfCreation projectWithRoleDTOAvatarSource projectWithRoleDTOLeaderboardEntryCount projectWithRoleDTOUserRoleInProject =
+  ProjectWithRoleDTO
+  { projectWithRoleDTOCodeAccess
+  , projectWithRoleDTOAvatarUrl
+  , projectWithRoleDTODescription = Nothing
+  , projectWithRoleDTOOrganizationType
+  , projectWithRoleDTOFeatured
+  , projectWithRoleDTOOrganizationName
+  , projectWithRoleDTOVersion
+  , projectWithRoleDTOId
+  , projectWithRoleDTOProjectKey
+  , projectWithRoleDTOOrganizationId
+  , projectWithRoleDTOUserCount
+  , projectWithRoleDTOVisibility
+  , projectWithRoleDTODisplayClass = Nothing
+  , projectWithRoleDTOName
+  , projectWithRoleDTOLastActivity
+  , projectWithRoleDTOTimeOfCreation
+  , projectWithRoleDTOUserRoleInOrganization = Nothing
+  , projectWithRoleDTOAvatarSource
+  , projectWithRoleDTOLeaderboardEntryCount
+  , projectWithRoleDTOUserRoleInProject
+  , projectWithRoleDTOBackgroundUrl = Nothing
+  }
+
+-- ** PublicUserProfileDTO
+-- | PublicUserProfileDTO
+data PublicUserProfileDTO = PublicUserProfileDTO
+    { publicUserProfileDTOBiography    :: !(Text) -- ^ /Required/ "biography"
+    -- ^ "email"
+    , publicUserProfileDTOEmail        :: !(Maybe Text) -- ^ "email"
+    -- ^ /Required/ "avatarSource"
+    , publicUserProfileDTOAvatarSource :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ "firstName"
+    , publicUserProfileDTOFirstName    :: !(Maybe Text) -- ^ "firstName"
+    -- ^ /Required/ "shortInfo"
+    , publicUserProfileDTOShortInfo    :: !(Text) -- ^ /Required/ "shortInfo"
+    -- ^ /Required/ "username"
+    , publicUserProfileDTOUsername     :: !(Text) -- ^ /Required/ "username"
+    -- ^ /Required/ "avatarUrl"
+    , publicUserProfileDTOAvatarUrl    :: !(Text) -- ^ /Required/ "avatarUrl"
+    -- ^ "lastName"
+    , publicUserProfileDTOLastName     :: !(Maybe Text) -- ^ "lastName"
+    -- ^ /Required/ "links"
+    , publicUserProfileDTOLinks        :: !(UserProfileLinksDTO) -- ^ /Required/ "links"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON PublicUserProfileDTO
+instance A.FromJSON PublicUserProfileDTO where
+  parseJSON = A.withObject "PublicUserProfileDTO" $ \o ->
+    PublicUserProfileDTO
+      <$> (o .:  "biography")
+      <*> (o .:? "email")
+      <*> (o .:  "avatarSource")
+      <*> (o .:? "firstName")
+      <*> (o .:  "shortInfo")
+      <*> (o .:  "username")
+      <*> (o .:  "avatarUrl")
+      <*> (o .:? "lastName")
+      <*> (o .:  "links")
+
+-- | ToJSON PublicUserProfileDTO
+instance A.ToJSON PublicUserProfileDTO where
+  toJSON PublicUserProfileDTO {..} =
+   _omitNulls
+      [ "biography" .= publicUserProfileDTOBiography
+      , "email" .= publicUserProfileDTOEmail
+      , "avatarSource" .= publicUserProfileDTOAvatarSource
+      , "firstName" .= publicUserProfileDTOFirstName
+      , "shortInfo" .= publicUserProfileDTOShortInfo
+      , "username" .= publicUserProfileDTOUsername
+      , "avatarUrl" .= publicUserProfileDTOAvatarUrl
+      , "lastName" .= publicUserProfileDTOLastName
+      , "links" .= publicUserProfileDTOLinks
+      ]
+
+
+-- | Construct a value of type 'PublicUserProfileDTO' (by applying it's required fields, if any)
+mkPublicUserProfileDTO
+  :: Text -- ^ 'publicUserProfileDTOBiography'
+  -> AvatarSourceEnum -- ^ 'publicUserProfileDTOAvatarSource'
+  -> Text -- ^ 'publicUserProfileDTOShortInfo'
+  -> Text -- ^ 'publicUserProfileDTOUsername'
+  -> Text -- ^ 'publicUserProfileDTOAvatarUrl'
+  -> UserProfileLinksDTO -- ^ 'publicUserProfileDTOLinks'
+  -> PublicUserProfileDTO
+mkPublicUserProfileDTO publicUserProfileDTOBiography publicUserProfileDTOAvatarSource publicUserProfileDTOShortInfo publicUserProfileDTOUsername publicUserProfileDTOAvatarUrl publicUserProfileDTOLinks =
+  PublicUserProfileDTO
+  { publicUserProfileDTOBiography
+  , publicUserProfileDTOEmail = Nothing
+  , publicUserProfileDTOAvatarSource
+  , publicUserProfileDTOFirstName = Nothing
+  , publicUserProfileDTOShortInfo
+  , publicUserProfileDTOUsername
+  , publicUserProfileDTOAvatarUrl
+  , publicUserProfileDTOLastName = Nothing
+  , publicUserProfileDTOLinks
+  }
+
+-- ** QuestionnaireDTO
+-- | QuestionnaireDTO
+data QuestionnaireDTO = QuestionnaireDTO
+    { questionnaireDTOAnswers :: !(Text) -- ^ /Required/ "answers"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON QuestionnaireDTO
+instance A.FromJSON QuestionnaireDTO where
+  parseJSON = A.withObject "QuestionnaireDTO" $ \o ->
+    QuestionnaireDTO
+      <$> (o .:  "answers")
+
+-- | ToJSON QuestionnaireDTO
+instance A.ToJSON QuestionnaireDTO where
+  toJSON QuestionnaireDTO {..} =
+   _omitNulls
+      [ "answers" .= questionnaireDTOAnswers
+      ]
+
+
+-- | Construct a value of type 'QuestionnaireDTO' (by applying it's required fields, if any)
+mkQuestionnaireDTO
+  :: Text -- ^ 'questionnaireDTOAnswers'
+  -> QuestionnaireDTO
+mkQuestionnaireDTO questionnaireDTOAnswers =
+  QuestionnaireDTO
+  { questionnaireDTOAnswers
+  }
+
+-- ** RegisteredMemberInfoDTO
+-- | RegisteredMemberInfoDTO
+data RegisteredMemberInfoDTO = RegisteredMemberInfoDTO
+    { registeredMemberInfoDTOAvatarSource :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ /Required/ "lastName"
+    , registeredMemberInfoDTOLastName     :: !(Text) -- ^ /Required/ "lastName"
+    -- ^ /Required/ "firstName"
+    , registeredMemberInfoDTOFirstName    :: !(Text) -- ^ /Required/ "firstName"
+    -- ^ /Required/ "username"
+    , registeredMemberInfoDTOUsername     :: !(Text) -- ^ /Required/ "username"
+    -- ^ /Required/ "avatarUrl"
+    , registeredMemberInfoDTOAvatarUrl    :: !(Text) -- ^ /Required/ "avatarUrl"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON RegisteredMemberInfoDTO
+instance A.FromJSON RegisteredMemberInfoDTO where
+  parseJSON = A.withObject "RegisteredMemberInfoDTO" $ \o ->
+    RegisteredMemberInfoDTO
+      <$> (o .:  "avatarSource")
+      <*> (o .:  "lastName")
+      <*> (o .:  "firstName")
+      <*> (o .:  "username")
+      <*> (o .:  "avatarUrl")
+
+-- | ToJSON RegisteredMemberInfoDTO
+instance A.ToJSON RegisteredMemberInfoDTO where
+  toJSON RegisteredMemberInfoDTO {..} =
+   _omitNulls
+      [ "avatarSource" .= registeredMemberInfoDTOAvatarSource
+      , "lastName" .= registeredMemberInfoDTOLastName
+      , "firstName" .= registeredMemberInfoDTOFirstName
+      , "username" .= registeredMemberInfoDTOUsername
+      , "avatarUrl" .= registeredMemberInfoDTOAvatarUrl
+      ]
+
+
+-- | Construct a value of type 'RegisteredMemberInfoDTO' (by applying it's required fields, if any)
+mkRegisteredMemberInfoDTO
+  :: AvatarSourceEnum -- ^ 'registeredMemberInfoDTOAvatarSource'
+  -> Text -- ^ 'registeredMemberInfoDTOLastName'
+  -> Text -- ^ 'registeredMemberInfoDTOFirstName'
+  -> Text -- ^ 'registeredMemberInfoDTOUsername'
+  -> Text -- ^ 'registeredMemberInfoDTOAvatarUrl'
+  -> RegisteredMemberInfoDTO
+mkRegisteredMemberInfoDTO registeredMemberInfoDTOAvatarSource registeredMemberInfoDTOLastName registeredMemberInfoDTOFirstName registeredMemberInfoDTOUsername registeredMemberInfoDTOAvatarUrl =
+  RegisteredMemberInfoDTO
+  { registeredMemberInfoDTOAvatarSource
+  , registeredMemberInfoDTOLastName
+  , registeredMemberInfoDTOFirstName
+  , registeredMemberInfoDTOUsername
+  , registeredMemberInfoDTOAvatarUrl
+  }
+
+-- ** RegistrationSurveyDTO
+-- | RegistrationSurveyDTO
+data RegistrationSurveyDTO = RegistrationSurveyDTO
+    { registrationSurveyDTOSurvey :: !(Text) -- ^ /Required/ "survey"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON RegistrationSurveyDTO
+instance A.FromJSON RegistrationSurveyDTO where
+  parseJSON = A.withObject "RegistrationSurveyDTO" $ \o ->
+    RegistrationSurveyDTO
+      <$> (o .:  "survey")
+
+-- | ToJSON RegistrationSurveyDTO
+instance A.ToJSON RegistrationSurveyDTO where
+  toJSON RegistrationSurveyDTO {..} =
+   _omitNulls
+      [ "survey" .= registrationSurveyDTOSurvey
+      ]
+
+
+-- | Construct a value of type 'RegistrationSurveyDTO' (by applying it's required fields, if any)
+mkRegistrationSurveyDTO
+  :: Text -- ^ 'registrationSurveyDTOSurvey'
+  -> RegistrationSurveyDTO
+mkRegistrationSurveyDTO registrationSurveyDTOSurvey =
+  RegistrationSurveyDTO
+  { registrationSurveyDTOSurvey
+  }
+
+-- ** Series
+-- | Series
+data Series = Series
+    { seriesSeriesType  :: !(SeriesType) -- ^ /Required/ "seriesType"
+    -- ^ "channelName"
+    , seriesChannelName :: !(Maybe Text) -- ^ "channelName"
+    -- ^ "channelId"
+    , seriesChannelId   :: !(Maybe Text) -- ^ "channelId"
+    -- ^ "aliasId"
+    , seriesAliasId     :: !(Maybe Text) -- ^ "aliasId"
+    -- ^ /Required/ "label"
+    , seriesLabel       :: !(Text) -- ^ /Required/ "label"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Series
+instance A.FromJSON Series where
+  parseJSON = A.withObject "Series" $ \o ->
+    Series
+      <$> (o .:  "seriesType")
+      <*> (o .:? "channelName")
+      <*> (o .:? "channelId")
+      <*> (o .:? "aliasId")
+      <*> (o .:  "label")
+
+-- | ToJSON Series
+instance A.ToJSON Series where
+  toJSON Series {..} =
+   _omitNulls
+      [ "seriesType" .= seriesSeriesType
+      , "channelName" .= seriesChannelName
+      , "channelId" .= seriesChannelId
+      , "aliasId" .= seriesAliasId
+      , "label" .= seriesLabel
+      ]
+
+
+-- | Construct a value of type 'Series' (by applying it's required fields, if any)
+mkSeries
+  :: SeriesType -- ^ 'seriesSeriesType'
+  -> Text -- ^ 'seriesLabel'
+  -> Series
+mkSeries seriesSeriesType seriesLabel =
+  Series
+  { seriesSeriesType
+  , seriesChannelName = Nothing
+  , seriesChannelId = Nothing
+  , seriesAliasId = Nothing
+  , seriesLabel
+  }
+
+-- ** SeriesDefinition
+-- | SeriesDefinition
+data SeriesDefinition = SeriesDefinition
+    { seriesDefinitionLabel       :: !(Text) -- ^ /Required/ "label"
+    -- ^ "channelName"
+    , seriesDefinitionChannelName :: !(Maybe Text) -- ^ "channelName"
+    -- ^ "aliasId"
+    , seriesDefinitionAliasId     :: !(Maybe Text) -- ^ "aliasId"
+    -- ^ /Required/ "seriesType"
+    , seriesDefinitionSeriesType  :: !(SeriesType) -- ^ /Required/ "seriesType"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SeriesDefinition
+instance A.FromJSON SeriesDefinition where
+  parseJSON = A.withObject "SeriesDefinition" $ \o ->
+    SeriesDefinition
+      <$> (o .:  "label")
+      <*> (o .:? "channelName")
+      <*> (o .:? "aliasId")
+      <*> (o .:  "seriesType")
+
+-- | ToJSON SeriesDefinition
+instance A.ToJSON SeriesDefinition where
+  toJSON SeriesDefinition {..} =
+   _omitNulls
+      [ "label" .= seriesDefinitionLabel
+      , "channelName" .= seriesDefinitionChannelName
+      , "aliasId" .= seriesDefinitionAliasId
+      , "seriesType" .= seriesDefinitionSeriesType
+      ]
+
+
+-- | Construct a value of type 'SeriesDefinition' (by applying it's required fields, if any)
+mkSeriesDefinition
+  :: Text -- ^ 'seriesDefinitionLabel'
+  -> SeriesType -- ^ 'seriesDefinitionSeriesType'
+  -> SeriesDefinition
+mkSeriesDefinition seriesDefinitionLabel seriesDefinitionSeriesType =
+  SeriesDefinition
+  { seriesDefinitionLabel
+  , seriesDefinitionChannelName = Nothing
+  , seriesDefinitionAliasId = Nothing
+  , seriesDefinitionSeriesType
+  }
+
+-- ** SessionDTO
+-- | SessionDTO
+data SessionDTO = SessionDTO
+    { sessionDTOSessionId :: !(Text) -- ^ /Required/ "sessionId"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SessionDTO
+instance A.FromJSON SessionDTO where
+  parseJSON = A.withObject "SessionDTO" $ \o ->
+    SessionDTO
+      <$> (o .:  "sessionId")
+
+-- | ToJSON SessionDTO
+instance A.ToJSON SessionDTO where
+  toJSON SessionDTO {..} =
+   _omitNulls
+      [ "sessionId" .= sessionDTOSessionId
+      ]
+
+
+-- | Construct a value of type 'SessionDTO' (by applying it's required fields, if any)
+mkSessionDTO
+  :: Text -- ^ 'sessionDTOSessionId'
+  -> SessionDTO
+mkSessionDTO sessionDTOSessionId =
+  SessionDTO
+  { sessionDTOSessionId
+  }
+
+-- ** StateTransitions
+-- | StateTransitions
+data StateTransitions = StateTransitions
+    { stateTransitionsRunning   :: !(Maybe DateTime) -- ^ "running"
+    -- ^ "succeeded"
+    , stateTransitionsSucceeded :: !(Maybe DateTime) -- ^ "succeeded"
+    -- ^ "failed"
+    , stateTransitionsFailed    :: !(Maybe DateTime) -- ^ "failed"
+    -- ^ "aborted"
+    , stateTransitionsAborted   :: !(Maybe DateTime) -- ^ "aborted"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON StateTransitions
+instance A.FromJSON StateTransitions where
+  parseJSON = A.withObject "StateTransitions" $ \o ->
+    StateTransitions
+      <$> (o .:? "running")
+      <*> (o .:? "succeeded")
+      <*> (o .:? "failed")
+      <*> (o .:? "aborted")
+
+-- | ToJSON StateTransitions
+instance A.ToJSON StateTransitions where
+  toJSON StateTransitions {..} =
+   _omitNulls
+      [ "running" .= stateTransitionsRunning
+      , "succeeded" .= stateTransitionsSucceeded
+      , "failed" .= stateTransitionsFailed
+      , "aborted" .= stateTransitionsAborted
+      ]
+
+
+-- | Construct a value of type 'StateTransitions' (by applying it's required fields, if any)
+mkStateTransitions
+  :: StateTransitions
+mkStateTransitions =
+  StateTransitions
+  { stateTransitionsRunning = Nothing
+  , stateTransitionsSucceeded = Nothing
+  , stateTransitionsFailed = Nothing
+  , stateTransitionsAborted = Nothing
+  }
+
+-- ** StorageUsage
+-- | StorageUsage
+data StorageUsage = StorageUsage
+    { storageUsageUsage :: !(Integer) -- ^ /Required/ "usage"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON StorageUsage
+instance A.FromJSON StorageUsage where
+  parseJSON = A.withObject "StorageUsage" $ \o ->
+    StorageUsage
+      <$> (o .:  "usage")
+
+-- | ToJSON StorageUsage
+instance A.ToJSON StorageUsage where
+  toJSON StorageUsage {..} =
+   _omitNulls
+      [ "usage" .= storageUsageUsage
+      ]
+
+
+-- | Construct a value of type 'StorageUsage' (by applying it's required fields, if any)
+mkStorageUsage
+  :: Integer -- ^ 'storageUsageUsage'
+  -> StorageUsage
+mkStorageUsage storageUsageUsage =
+  StorageUsage
+  { storageUsageUsage
+  }
+
+-- ** SubscriptionCancelInfoDTO
+-- | SubscriptionCancelInfoDTO
+data SubscriptionCancelInfoDTO = SubscriptionCancelInfoDTO
+    { subscriptionCancelInfoDTOReasons     :: !([Text]) -- ^ /Required/ "reasons"
+    -- ^ "description"
+    , subscriptionCancelInfoDTODescription :: !(Maybe Text) -- ^ "description"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SubscriptionCancelInfoDTO
+instance A.FromJSON SubscriptionCancelInfoDTO where
+  parseJSON = A.withObject "SubscriptionCancelInfoDTO" $ \o ->
+    SubscriptionCancelInfoDTO
+      <$> (o .:  "reasons")
+      <*> (o .:? "description")
+
+-- | ToJSON SubscriptionCancelInfoDTO
+instance A.ToJSON SubscriptionCancelInfoDTO where
+  toJSON SubscriptionCancelInfoDTO {..} =
+   _omitNulls
+      [ "reasons" .= subscriptionCancelInfoDTOReasons
+      , "description" .= subscriptionCancelInfoDTODescription
+      ]
+
+
+-- | Construct a value of type 'SubscriptionCancelInfoDTO' (by applying it's required fields, if any)
+mkSubscriptionCancelInfoDTO
+  :: [Text] -- ^ 'subscriptionCancelInfoDTOReasons'
+  -> SubscriptionCancelInfoDTO
+mkSubscriptionCancelInfoDTO subscriptionCancelInfoDTOReasons =
+  SubscriptionCancelInfoDTO
+  { subscriptionCancelInfoDTOReasons
+  , subscriptionCancelInfoDTODescription = Nothing
+  }
+
+-- ** SystemMetric
+-- | SystemMetric
+data SystemMetric = SystemMetric
+    { systemMetricSeries       :: !([Text]) -- ^ /Required/ "series"
+    -- ^ /Required/ "name"
+    , systemMetricName         :: !(Text) -- ^ /Required/ "name"
+    -- ^ "min"
+    , systemMetricMin          :: !(Maybe Double) -- ^ "min"
+    -- ^ "max"
+    , systemMetricMax          :: !(Maybe Double) -- ^ "max"
+    -- ^ "unit"
+    , systemMetricUnit         :: !(Maybe Text) -- ^ "unit"
+    -- ^ /Required/ "description"
+    , systemMetricDescription  :: !(Text) -- ^ /Required/ "description"
+    -- ^ /Required/ "resourceType"
+    , systemMetricResourceType :: !(SystemMetricResourceType) -- ^ /Required/ "resourceType"
+    -- ^ /Required/ "experimentId"
+    , systemMetricExperimentId :: !(Text) -- ^ /Required/ "experimentId"
+    -- ^ /Required/ "id"
+    , systemMetricId           :: !(Text) -- ^ /Required/ "id"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SystemMetric
+instance A.FromJSON SystemMetric where
+  parseJSON = A.withObject "SystemMetric" $ \o ->
+    SystemMetric
+      <$> (o .:  "series")
+      <*> (o .:  "name")
+      <*> (o .:? "min")
+      <*> (o .:? "max")
+      <*> (o .:? "unit")
+      <*> (o .:  "description")
+      <*> (o .:  "resourceType")
+      <*> (o .:  "experimentId")
+      <*> (o .:  "id")
+
+-- | ToJSON SystemMetric
+instance A.ToJSON SystemMetric where
+  toJSON SystemMetric {..} =
+   _omitNulls
+      [ "series" .= systemMetricSeries
+      , "name" .= systemMetricName
+      , "min" .= systemMetricMin
+      , "max" .= systemMetricMax
+      , "unit" .= systemMetricUnit
+      , "description" .= systemMetricDescription
+      , "resourceType" .= systemMetricResourceType
+      , "experimentId" .= systemMetricExperimentId
+      , "id" .= systemMetricId
+      ]
+
+
+-- | Construct a value of type 'SystemMetric' (by applying it's required fields, if any)
+mkSystemMetric
+  :: [Text] -- ^ 'systemMetricSeries'
+  -> Text -- ^ 'systemMetricName'
+  -> Text -- ^ 'systemMetricDescription'
+  -> SystemMetricResourceType -- ^ 'systemMetricResourceType'
+  -> Text -- ^ 'systemMetricExperimentId'
+  -> Text -- ^ 'systemMetricId'
+  -> SystemMetric
+mkSystemMetric systemMetricSeries systemMetricName systemMetricDescription systemMetricResourceType systemMetricExperimentId systemMetricId =
+  SystemMetric
+  { systemMetricSeries
+  , systemMetricName
+  , systemMetricMin = Nothing
+  , systemMetricMax = Nothing
+  , systemMetricUnit = Nothing
+  , systemMetricDescription
+  , systemMetricResourceType
+  , systemMetricExperimentId
+  , systemMetricId
+  }
+
+-- ** SystemMetricParams
+-- | SystemMetricParams
+data SystemMetricParams = SystemMetricParams
+    { systemMetricParamsSeries       :: !([Text]) -- ^ /Required/ "series"
+    -- ^ /Required/ "name"
+    , systemMetricParamsName         :: !(Text) -- ^ /Required/ "name"
+    -- ^ "min"
+    , systemMetricParamsMin          :: !(Maybe Double) -- ^ "min"
+    -- ^ "max"
+    , systemMetricParamsMax          :: !(Maybe Double) -- ^ "max"
+    -- ^ "unit"
+    , systemMetricParamsUnit         :: !(Maybe Text) -- ^ "unit"
+    -- ^ /Required/ "description"
+    , systemMetricParamsDescription  :: !(Text) -- ^ /Required/ "description"
+    -- ^ /Required/ "resourceType"
+    , systemMetricParamsResourceType :: !(SystemMetricResourceType) -- ^ /Required/ "resourceType"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SystemMetricParams
+instance A.FromJSON SystemMetricParams where
+  parseJSON = A.withObject "SystemMetricParams" $ \o ->
+    SystemMetricParams
+      <$> (o .:  "series")
+      <*> (o .:  "name")
+      <*> (o .:? "min")
+      <*> (o .:? "max")
+      <*> (o .:? "unit")
+      <*> (o .:  "description")
+      <*> (o .:  "resourceType")
+
+-- | ToJSON SystemMetricParams
+instance A.ToJSON SystemMetricParams where
+  toJSON SystemMetricParams {..} =
+   _omitNulls
+      [ "series" .= systemMetricParamsSeries
+      , "name" .= systemMetricParamsName
+      , "min" .= systemMetricParamsMin
+      , "max" .= systemMetricParamsMax
+      , "unit" .= systemMetricParamsUnit
+      , "description" .= systemMetricParamsDescription
+      , "resourceType" .= systemMetricParamsResourceType
+      ]
+
+
+-- | Construct a value of type 'SystemMetricParams' (by applying it's required fields, if any)
+mkSystemMetricParams
+  :: [Text] -- ^ 'systemMetricParamsSeries'
+  -> Text -- ^ 'systemMetricParamsName'
+  -> Text -- ^ 'systemMetricParamsDescription'
+  -> SystemMetricResourceType -- ^ 'systemMetricParamsResourceType'
+  -> SystemMetricParams
+mkSystemMetricParams systemMetricParamsSeries systemMetricParamsName systemMetricParamsDescription systemMetricParamsResourceType =
+  SystemMetricParams
+  { systemMetricParamsSeries
+  , systemMetricParamsName
+  , systemMetricParamsMin = Nothing
+  , systemMetricParamsMax = Nothing
+  , systemMetricParamsUnit = Nothing
+  , systemMetricParamsDescription
+  , systemMetricParamsResourceType
+  }
+
+-- ** SystemMetricPoint
+-- | SystemMetricPoint
+data SystemMetricPoint = SystemMetricPoint
+    { systemMetricPointTimestampMillis :: !(Integer) -- ^ /Required/ "timestampMillis"
+    -- ^ /Required/ "x"
+    , systemMetricPointX               :: !(Integer) -- ^ /Required/ "x"
+    -- ^ /Required/ "y"
+    , systemMetricPointY               :: !(Double) -- ^ /Required/ "y"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SystemMetricPoint
+instance A.FromJSON SystemMetricPoint where
+  parseJSON = A.withObject "SystemMetricPoint" $ \o ->
+    SystemMetricPoint
+      <$> (o .:  "timestampMillis")
+      <*> (o .:  "x")
+      <*> (o .:  "y")
+
+-- | ToJSON SystemMetricPoint
+instance A.ToJSON SystemMetricPoint where
+  toJSON SystemMetricPoint {..} =
+   _omitNulls
+      [ "timestampMillis" .= systemMetricPointTimestampMillis
+      , "x" .= systemMetricPointX
+      , "y" .= systemMetricPointY
+      ]
+
+
+-- | Construct a value of type 'SystemMetricPoint' (by applying it's required fields, if any)
+mkSystemMetricPoint
+  :: Integer -- ^ 'systemMetricPointTimestampMillis'
+  -> Integer -- ^ 'systemMetricPointX'
+  -> Double -- ^ 'systemMetricPointY'
+  -> SystemMetricPoint
+mkSystemMetricPoint systemMetricPointTimestampMillis systemMetricPointX systemMetricPointY =
+  SystemMetricPoint
+  { systemMetricPointTimestampMillis
+  , systemMetricPointX
+  , systemMetricPointY
+  }
+
+-- ** SystemMetricValues
+-- | SystemMetricValues
+data SystemMetricValues = SystemMetricValues
+    { systemMetricValuesMetricId   :: !(Text) -- ^ /Required/ "metricId"
+    -- ^ /Required/ "seriesName"
+    , systemMetricValuesSeriesName :: !(Text) -- ^ /Required/ "seriesName"
+    -- ^ "level"
+    , systemMetricValuesLevel      :: !(Maybe Int) -- ^ "level"
+    -- ^ /Required/ "values"
+    , systemMetricValuesValues     :: !([SystemMetricPoint]) -- ^ /Required/ "values"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON SystemMetricValues
+instance A.FromJSON SystemMetricValues where
+  parseJSON = A.withObject "SystemMetricValues" $ \o ->
+    SystemMetricValues
+      <$> (o .:  "metricId")
+      <*> (o .:  "seriesName")
+      <*> (o .:? "level")
+      <*> (o .:  "values")
+
+-- | ToJSON SystemMetricValues
+instance A.ToJSON SystemMetricValues where
+  toJSON SystemMetricValues {..} =
+   _omitNulls
+      [ "metricId" .= systemMetricValuesMetricId
+      , "seriesName" .= systemMetricValuesSeriesName
+      , "level" .= systemMetricValuesLevel
+      , "values" .= systemMetricValuesValues
+      ]
+
+
+-- | Construct a value of type 'SystemMetricValues' (by applying it's required fields, if any)
+mkSystemMetricValues
+  :: Text -- ^ 'systemMetricValuesMetricId'
+  -> Text -- ^ 'systemMetricValuesSeriesName'
+  -> [SystemMetricPoint] -- ^ 'systemMetricValuesValues'
+  -> SystemMetricValues
+mkSystemMetricValues systemMetricValuesMetricId systemMetricValuesSeriesName systemMetricValuesValues =
+  SystemMetricValues
+  { systemMetricValuesMetricId
+  , systemMetricValuesSeriesName
+  , systemMetricValuesLevel = Nothing
+  , systemMetricValuesValues
+  }
+
+-- ** UUID
+-- | UUID
+data UUID = UUID
+    { uUIDMostSigBits  :: !(Integer) -- ^ /Required/ "mostSigBits"
+    -- ^ /Required/ "leastSigBits"
+    , uUIDLeastSigBits :: !(Integer) -- ^ /Required/ "leastSigBits"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UUID
+instance A.FromJSON UUID where
+  parseJSON = A.withObject "UUID" $ \o ->
+    UUID
+      <$> (o .:  "mostSigBits")
+      <*> (o .:  "leastSigBits")
+
+-- | ToJSON UUID
+instance A.ToJSON UUID where
+  toJSON UUID {..} =
+   _omitNulls
+      [ "mostSigBits" .= uUIDMostSigBits
+      , "leastSigBits" .= uUIDLeastSigBits
+      ]
+
+
+-- | Construct a value of type 'UUID' (by applying it's required fields, if any)
+mkUUID
+  :: Integer -- ^ 'uUIDMostSigBits'
+  -> Integer -- ^ 'uUIDLeastSigBits'
+  -> UUID
+mkUUID uUIDMostSigBits uUIDLeastSigBits =
+  UUID
+  { uUIDMostSigBits
+  , uUIDLeastSigBits
+  }
+
+-- ** UpdateTagsParams
+-- | UpdateTagsParams
+data UpdateTagsParams = UpdateTagsParams
+    { updateTagsParamsExperimentIds :: !([Text]) -- ^ /Required/ "experimentIds"
+    -- ^ /Required/ "tagsToAdd"
+    , updateTagsParamsTagsToAdd     :: !([Text]) -- ^ /Required/ "tagsToAdd"
+    -- ^ /Required/ "tagsToDelete"
+    , updateTagsParamsTagsToDelete  :: !([Text]) -- ^ /Required/ "tagsToDelete"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UpdateTagsParams
+instance A.FromJSON UpdateTagsParams where
+  parseJSON = A.withObject "UpdateTagsParams" $ \o ->
+    UpdateTagsParams
+      <$> (o .:  "experimentIds")
+      <*> (o .:  "tagsToAdd")
+      <*> (o .:  "tagsToDelete")
+
+-- | ToJSON UpdateTagsParams
+instance A.ToJSON UpdateTagsParams where
+  toJSON UpdateTagsParams {..} =
+   _omitNulls
+      [ "experimentIds" .= updateTagsParamsExperimentIds
+      , "tagsToAdd" .= updateTagsParamsTagsToAdd
+      , "tagsToDelete" .= updateTagsParamsTagsToDelete
+      ]
+
+
+-- | Construct a value of type 'UpdateTagsParams' (by applying it's required fields, if any)
+mkUpdateTagsParams
+  :: [Text] -- ^ 'updateTagsParamsExperimentIds'
+  -> [Text] -- ^ 'updateTagsParamsTagsToAdd'
+  -> [Text] -- ^ 'updateTagsParamsTagsToDelete'
+  -> UpdateTagsParams
+mkUpdateTagsParams updateTagsParamsExperimentIds updateTagsParamsTagsToAdd updateTagsParamsTagsToDelete =
+  UpdateTagsParams
+  { updateTagsParamsExperimentIds
+  , updateTagsParamsTagsToAdd
+  , updateTagsParamsTagsToDelete
+  }
+
+-- ** UserListDTO
+-- | UserListDTO
+data UserListDTO = UserListDTO
+    { userListDTOEntries           :: !([UserListItemDTO]) -- ^ /Required/ "entries"
+    -- ^ /Required/ "matchingItemCount"
+    , userListDTOMatchingItemCount :: !(Int) -- ^ /Required/ "matchingItemCount"
+    -- ^ /Required/ "totalItemCount"
+    , userListDTOTotalItemCount    :: !(Int) -- ^ /Required/ "totalItemCount"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserListDTO
+instance A.FromJSON UserListDTO where
+  parseJSON = A.withObject "UserListDTO" $ \o ->
+    UserListDTO
+      <$> (o .:  "entries")
+      <*> (o .:  "matchingItemCount")
+      <*> (o .:  "totalItemCount")
+
+-- | ToJSON UserListDTO
+instance A.ToJSON UserListDTO where
+  toJSON UserListDTO {..} =
+   _omitNulls
+      [ "entries" .= userListDTOEntries
+      , "matchingItemCount" .= userListDTOMatchingItemCount
+      , "totalItemCount" .= userListDTOTotalItemCount
+      ]
+
+
+-- | Construct a value of type 'UserListDTO' (by applying it's required fields, if any)
+mkUserListDTO
+  :: [UserListItemDTO] -- ^ 'userListDTOEntries'
+  -> Int -- ^ 'userListDTOMatchingItemCount'
+  -> Int -- ^ 'userListDTOTotalItemCount'
+  -> UserListDTO
+mkUserListDTO userListDTOEntries userListDTOMatchingItemCount userListDTOTotalItemCount =
+  UserListDTO
+  { userListDTOEntries
+  , userListDTOMatchingItemCount
+  , userListDTOTotalItemCount
+  }
+
+-- ** UserListItemDTO
+-- | UserListItemDTO
+data UserListItemDTO = UserListItemDTO
+    { userListItemDTOAvatarSource :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ /Required/ "lastName"
+    , userListItemDTOLastName     :: !(Text) -- ^ /Required/ "lastName"
+    -- ^ /Required/ "firstName"
+    , userListItemDTOFirstName    :: !(Text) -- ^ /Required/ "firstName"
+    -- ^ /Required/ "username"
+    , userListItemDTOUsername     :: !(Text) -- ^ /Required/ "username"
+    -- ^ /Required/ "avatarUrl"
+    , userListItemDTOAvatarUrl    :: !(Text) -- ^ /Required/ "avatarUrl"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserListItemDTO
+instance A.FromJSON UserListItemDTO where
+  parseJSON = A.withObject "UserListItemDTO" $ \o ->
+    UserListItemDTO
+      <$> (o .:  "avatarSource")
+      <*> (o .:  "lastName")
+      <*> (o .:  "firstName")
+      <*> (o .:  "username")
+      <*> (o .:  "avatarUrl")
+
+-- | ToJSON UserListItemDTO
+instance A.ToJSON UserListItemDTO where
+  toJSON UserListItemDTO {..} =
+   _omitNulls
+      [ "avatarSource" .= userListItemDTOAvatarSource
+      , "lastName" .= userListItemDTOLastName
+      , "firstName" .= userListItemDTOFirstName
+      , "username" .= userListItemDTOUsername
+      , "avatarUrl" .= userListItemDTOAvatarUrl
+      ]
+
+
+-- | Construct a value of type 'UserListItemDTO' (by applying it's required fields, if any)
+mkUserListItemDTO
+  :: AvatarSourceEnum -- ^ 'userListItemDTOAvatarSource'
+  -> Text -- ^ 'userListItemDTOLastName'
+  -> Text -- ^ 'userListItemDTOFirstName'
+  -> Text -- ^ 'userListItemDTOUsername'
+  -> Text -- ^ 'userListItemDTOAvatarUrl'
+  -> UserListItemDTO
+mkUserListItemDTO userListItemDTOAvatarSource userListItemDTOLastName userListItemDTOFirstName userListItemDTOUsername userListItemDTOAvatarUrl =
+  UserListItemDTO
+  { userListItemDTOAvatarSource
+  , userListItemDTOLastName
+  , userListItemDTOFirstName
+  , userListItemDTOUsername
+  , userListItemDTOAvatarUrl
+  }
+
+-- ** UserPricingStatusDTO
+-- | UserPricingStatusDTO
+data UserPricingStatusDTO = UserPricingStatusDTO
+    { userPricingStatusDTOCanCreateTeamFree :: !(Bool) -- ^ /Required/ "canCreateTeamFree"
+    -- ^ "anyTeamFree"
+    , userPricingStatusDTOAnyTeamFree       :: !(Maybe OrganizationWithRoleDTO) -- ^ "anyTeamFree"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserPricingStatusDTO
+instance A.FromJSON UserPricingStatusDTO where
+  parseJSON = A.withObject "UserPricingStatusDTO" $ \o ->
+    UserPricingStatusDTO
+      <$> (o .:  "canCreateTeamFree")
+      <*> (o .:? "anyTeamFree")
+
+-- | ToJSON UserPricingStatusDTO
+instance A.ToJSON UserPricingStatusDTO where
+  toJSON UserPricingStatusDTO {..} =
+   _omitNulls
+      [ "canCreateTeamFree" .= userPricingStatusDTOCanCreateTeamFree
+      , "anyTeamFree" .= userPricingStatusDTOAnyTeamFree
+      ]
+
+
+-- | Construct a value of type 'UserPricingStatusDTO' (by applying it's required fields, if any)
+mkUserPricingStatusDTO
+  :: Bool -- ^ 'userPricingStatusDTOCanCreateTeamFree'
+  -> UserPricingStatusDTO
+mkUserPricingStatusDTO userPricingStatusDTOCanCreateTeamFree =
+  UserPricingStatusDTO
+  { userPricingStatusDTOCanCreateTeamFree
+  , userPricingStatusDTOAnyTeamFree = Nothing
+  }
+
+-- ** UserProfileDTO
+-- | UserProfileDTO
+data UserProfileDTO = UserProfileDTO
+    { userProfileDTOUsernameHash          :: !(Text) -- ^ /Required/ "usernameHash"
+    -- ^ /Required/ "email"
+    , userProfileDTOEmail                 :: !(Text) -- ^ /Required/ "email"
+    -- ^ /Required/ "hasLoggedToCli"
+    , userProfileDTOHasLoggedToCli        :: !(Bool) -- ^ /Required/ "hasLoggedToCli"
+    -- ^ /Required/ "avatarSource"
+    , userProfileDTOAvatarSource          :: !(AvatarSourceEnum) -- ^ /Required/ "avatarSource"
+    -- ^ /Required/ "firstName"
+    , userProfileDTOFirstName             :: !(Text) -- ^ /Required/ "firstName"
+    -- ^ /Required/ "shortInfo"
+    , userProfileDTOShortInfo             :: !(Text) -- ^ /Required/ "shortInfo"
+    -- ^ /Required/ "created"
+    , userProfileDTOCreated               :: !(DateTime) -- ^ /Required/ "created"
+    -- ^ /Required/ "biography"
+    , userProfileDTOBiography             :: !(Text) -- ^ /Required/ "biography"
+    -- ^ /Required/ "hasCreatedExperiments"
+    , userProfileDTOHasCreatedExperiments :: !(Bool) -- ^ /Required/ "hasCreatedExperiments"
+    -- ^ /Required/ "username"
+    , userProfileDTOUsername              :: !(Text) -- ^ /Required/ "username"
+    -- ^ /Required/ "avatarUrl"
+    , userProfileDTOAvatarUrl             :: !(Text) -- ^ /Required/ "avatarUrl"
+    -- ^ /Required/ "lastName"
+    , userProfileDTOLastName              :: !(Text) -- ^ /Required/ "lastName"
+    -- ^ /Required/ "links"
+    , userProfileDTOLinks                 :: !(UserProfileLinksDTO) -- ^ /Required/ "links"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserProfileDTO
+instance A.FromJSON UserProfileDTO where
+  parseJSON = A.withObject "UserProfileDTO" $ \o ->
+    UserProfileDTO
+      <$> (o .:  "usernameHash")
+      <*> (o .:  "email")
+      <*> (o .:  "hasLoggedToCli")
+      <*> (o .:  "avatarSource")
+      <*> (o .:  "firstName")
+      <*> (o .:  "shortInfo")
+      <*> (o .:  "created")
+      <*> (o .:  "biography")
+      <*> (o .:  "hasCreatedExperiments")
+      <*> (o .:  "username")
+      <*> (o .:  "avatarUrl")
+      <*> (o .:  "lastName")
+      <*> (o .:  "links")
+
+-- | ToJSON UserProfileDTO
+instance A.ToJSON UserProfileDTO where
+  toJSON UserProfileDTO {..} =
+   _omitNulls
+      [ "usernameHash" .= userProfileDTOUsernameHash
+      , "email" .= userProfileDTOEmail
+      , "hasLoggedToCli" .= userProfileDTOHasLoggedToCli
+      , "avatarSource" .= userProfileDTOAvatarSource
+      , "firstName" .= userProfileDTOFirstName
+      , "shortInfo" .= userProfileDTOShortInfo
+      , "created" .= userProfileDTOCreated
+      , "biography" .= userProfileDTOBiography
+      , "hasCreatedExperiments" .= userProfileDTOHasCreatedExperiments
+      , "username" .= userProfileDTOUsername
+      , "avatarUrl" .= userProfileDTOAvatarUrl
+      , "lastName" .= userProfileDTOLastName
+      , "links" .= userProfileDTOLinks
+      ]
+
+
+-- | Construct a value of type 'UserProfileDTO' (by applying it's required fields, if any)
+mkUserProfileDTO
+  :: Text -- ^ 'userProfileDTOUsernameHash'
+  -> Text -- ^ 'userProfileDTOEmail'
+  -> Bool -- ^ 'userProfileDTOHasLoggedToCli'
+  -> AvatarSourceEnum -- ^ 'userProfileDTOAvatarSource'
+  -> Text -- ^ 'userProfileDTOFirstName'
+  -> Text -- ^ 'userProfileDTOShortInfo'
+  -> DateTime -- ^ 'userProfileDTOCreated'
+  -> Text -- ^ 'userProfileDTOBiography'
+  -> Bool -- ^ 'userProfileDTOHasCreatedExperiments'
+  -> Text -- ^ 'userProfileDTOUsername'
+  -> Text -- ^ 'userProfileDTOAvatarUrl'
+  -> Text -- ^ 'userProfileDTOLastName'
+  -> UserProfileLinksDTO -- ^ 'userProfileDTOLinks'
+  -> UserProfileDTO
+mkUserProfileDTO userProfileDTOUsernameHash userProfileDTOEmail userProfileDTOHasLoggedToCli userProfileDTOAvatarSource userProfileDTOFirstName userProfileDTOShortInfo userProfileDTOCreated userProfileDTOBiography userProfileDTOHasCreatedExperiments userProfileDTOUsername userProfileDTOAvatarUrl userProfileDTOLastName userProfileDTOLinks =
+  UserProfileDTO
+  { userProfileDTOUsernameHash
+  , userProfileDTOEmail
+  , userProfileDTOHasLoggedToCli
+  , userProfileDTOAvatarSource
+  , userProfileDTOFirstName
+  , userProfileDTOShortInfo
+  , userProfileDTOCreated
+  , userProfileDTOBiography
+  , userProfileDTOHasCreatedExperiments
+  , userProfileDTOUsername
+  , userProfileDTOAvatarUrl
+  , userProfileDTOLastName
+  , userProfileDTOLinks
+  }
+
+-- ** UserProfileLinkDTO
+-- | UserProfileLinkDTO
+data UserProfileLinkDTO = UserProfileLinkDTO
+    { userProfileLinkDTOLinkType :: !(LinkTypeDTO) -- ^ /Required/ "linkType"
+    -- ^ /Required/ "url"
+    , userProfileLinkDTOUrl      :: !(Text) -- ^ /Required/ "url"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserProfileLinkDTO
+instance A.FromJSON UserProfileLinkDTO where
+  parseJSON = A.withObject "UserProfileLinkDTO" $ \o ->
+    UserProfileLinkDTO
+      <$> (o .:  "linkType")
+      <*> (o .:  "url")
+
+-- | ToJSON UserProfileLinkDTO
+instance A.ToJSON UserProfileLinkDTO where
+  toJSON UserProfileLinkDTO {..} =
+   _omitNulls
+      [ "linkType" .= userProfileLinkDTOLinkType
+      , "url" .= userProfileLinkDTOUrl
+      ]
+
+
+-- | Construct a value of type 'UserProfileLinkDTO' (by applying it's required fields, if any)
+mkUserProfileLinkDTO
+  :: LinkTypeDTO -- ^ 'userProfileLinkDTOLinkType'
+  -> Text -- ^ 'userProfileLinkDTOUrl'
+  -> UserProfileLinkDTO
+mkUserProfileLinkDTO userProfileLinkDTOLinkType userProfileLinkDTOUrl =
+  UserProfileLinkDTO
+  { userProfileLinkDTOLinkType
+  , userProfileLinkDTOUrl
+  }
+
+-- ** UserProfileLinksDTO
+-- | UserProfileLinksDTO
+data UserProfileLinksDTO = UserProfileLinksDTO
+    { userProfileLinksDTOGithub   :: !(Maybe Text) -- ^ "github"
+    -- ^ "linkedin"
+    , userProfileLinksDTOLinkedin :: !(Maybe Text) -- ^ "linkedin"
+    -- ^ /Required/ "others"
+    , userProfileLinksDTOOthers   :: !([Text]) -- ^ /Required/ "others"
+    -- ^ "kaggle"
+    , userProfileLinksDTOKaggle   :: !(Maybe Text) -- ^ "kaggle"
+    -- ^ "twitter"
+    , userProfileLinksDTOTwitter  :: !(Maybe Text) -- ^ "twitter"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserProfileLinksDTO
+instance A.FromJSON UserProfileLinksDTO where
+  parseJSON = A.withObject "UserProfileLinksDTO" $ \o ->
+    UserProfileLinksDTO
+      <$> (o .:? "github")
+      <*> (o .:? "linkedin")
+      <*> (o .:  "others")
+      <*> (o .:? "kaggle")
+      <*> (o .:? "twitter")
+
+-- | ToJSON UserProfileLinksDTO
+instance A.ToJSON UserProfileLinksDTO where
+  toJSON UserProfileLinksDTO {..} =
+   _omitNulls
+      [ "github" .= userProfileLinksDTOGithub
+      , "linkedin" .= userProfileLinksDTOLinkedin
+      , "others" .= userProfileLinksDTOOthers
+      , "kaggle" .= userProfileLinksDTOKaggle
+      , "twitter" .= userProfileLinksDTOTwitter
+      ]
+
+
+-- | Construct a value of type 'UserProfileLinksDTO' (by applying it's required fields, if any)
+mkUserProfileLinksDTO
+  :: [Text] -- ^ 'userProfileLinksDTOOthers'
+  -> UserProfileLinksDTO
+mkUserProfileLinksDTO userProfileLinksDTOOthers =
+  UserProfileLinksDTO
+  { userProfileLinksDTOGithub = Nothing
+  , userProfileLinksDTOLinkedin = Nothing
+  , userProfileLinksDTOOthers
+  , userProfileLinksDTOKaggle = Nothing
+  , userProfileLinksDTOTwitter = Nothing
+  }
+
+-- ** UserProfileUpdateDTO
+-- | UserProfileUpdateDTO
+data UserProfileUpdateDTO = UserProfileUpdateDTO
+    { userProfileUpdateDTOBiography      :: !(Maybe Text) -- ^ "biography"
+    -- ^ "hasLoggedToCli"
+    , userProfileUpdateDTOHasLoggedToCli :: !(Maybe Bool) -- ^ "hasLoggedToCli"
+    -- ^ "lastName"
+    , userProfileUpdateDTOLastName       :: !(Maybe Text) -- ^ "lastName"
+    -- ^ "firstName"
+    , userProfileUpdateDTOFirstName      :: !(Maybe Text) -- ^ "firstName"
+    -- ^ "shortInfo"
+    , userProfileUpdateDTOShortInfo      :: !(Maybe Text) -- ^ "shortInfo"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UserProfileUpdateDTO
+instance A.FromJSON UserProfileUpdateDTO where
+  parseJSON = A.withObject "UserProfileUpdateDTO" $ \o ->
+    UserProfileUpdateDTO
+      <$> (o .:? "biography")
+      <*> (o .:? "hasLoggedToCli")
+      <*> (o .:? "lastName")
+      <*> (o .:? "firstName")
+      <*> (o .:? "shortInfo")
+
+-- | ToJSON UserProfileUpdateDTO
+instance A.ToJSON UserProfileUpdateDTO where
+  toJSON UserProfileUpdateDTO {..} =
+   _omitNulls
+      [ "biography" .= userProfileUpdateDTOBiography
+      , "hasLoggedToCli" .= userProfileUpdateDTOHasLoggedToCli
+      , "lastName" .= userProfileUpdateDTOLastName
+      , "firstName" .= userProfileUpdateDTOFirstName
+      , "shortInfo" .= userProfileUpdateDTOShortInfo
+      ]
+
+
+-- | Construct a value of type 'UserProfileUpdateDTO' (by applying it's required fields, if any)
+mkUserProfileUpdateDTO
+  :: UserProfileUpdateDTO
+mkUserProfileUpdateDTO =
+  UserProfileUpdateDTO
+  { userProfileUpdateDTOBiography = Nothing
+  , userProfileUpdateDTOHasLoggedToCli = Nothing
+  , userProfileUpdateDTOLastName = Nothing
+  , userProfileUpdateDTOFirstName = Nothing
+  , userProfileUpdateDTOShortInfo = Nothing
+  }
+
+-- ** UsernameValidationStatusDTO
+-- | UsernameValidationStatusDTO
+data UsernameValidationStatusDTO = UsernameValidationStatusDTO
+    { usernameValidationStatusDTOStatus :: !(UsernameValidationStatusEnumDTO) -- ^ /Required/ "status"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON UsernameValidationStatusDTO
+instance A.FromJSON UsernameValidationStatusDTO where
+  parseJSON = A.withObject "UsernameValidationStatusDTO" $ \o ->
+    UsernameValidationStatusDTO
+      <$> (o .:  "status")
+
+-- | ToJSON UsernameValidationStatusDTO
+instance A.ToJSON UsernameValidationStatusDTO where
+  toJSON UsernameValidationStatusDTO {..} =
+   _omitNulls
+      [ "status" .= usernameValidationStatusDTOStatus
+      ]
+
+
+-- | Construct a value of type 'UsernameValidationStatusDTO' (by applying it's required fields, if any)
+mkUsernameValidationStatusDTO
+  :: UsernameValidationStatusEnumDTO -- ^ 'usernameValidationStatusDTOStatus'
+  -> UsernameValidationStatusDTO
+mkUsernameValidationStatusDTO usernameValidationStatusDTOStatus =
+  UsernameValidationStatusDTO
+  { usernameValidationStatusDTOStatus
+  }
+
+-- ** Version
+-- | Version
+data Version = Version
+    { versionVersion :: !(Text) -- ^ /Required/ "version"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Version
+instance A.FromJSON Version where
+  parseJSON = A.withObject "Version" $ \o ->
+    Version
+      <$> (o .:  "version")
+
+-- | ToJSON Version
+instance A.ToJSON Version where
+  toJSON Version {..} =
+   _omitNulls
+      [ "version" .= versionVersion
+      ]
+
+
+-- | Construct a value of type 'Version' (by applying it's required fields, if any)
+mkVersion
+  :: Text -- ^ 'versionVersion'
+  -> Version
+mkVersion versionVersion =
+  Version
+  { versionVersion
+  }
+
+-- ** WorkspaceConfig
+-- | WorkspaceConfig
+data WorkspaceConfig = WorkspaceConfig
+    { workspaceConfigRealm   :: !(Text) -- ^ /Required/ "realm"
+    -- ^ /Required/ "idpHint"
+    , workspaceConfigIdpHint :: !(Text) -- ^ /Required/ "idpHint"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON WorkspaceConfig
+instance A.FromJSON WorkspaceConfig where
+  parseJSON = A.withObject "WorkspaceConfig" $ \o ->
+    WorkspaceConfig
+      <$> (o .:  "realm")
+      <*> (o .:  "idpHint")
+
+-- | ToJSON WorkspaceConfig
+instance A.ToJSON WorkspaceConfig where
+  toJSON WorkspaceConfig {..} =
+   _omitNulls
+      [ "realm" .= workspaceConfigRealm
+      , "idpHint" .= workspaceConfigIdpHint
+      ]
+
+
+-- | Construct a value of type 'WorkspaceConfig' (by applying it's required fields, if any)
+mkWorkspaceConfig
+  :: Text -- ^ 'workspaceConfigRealm'
+  -> Text -- ^ 'workspaceConfigIdpHint'
+  -> WorkspaceConfig
+mkWorkspaceConfig workspaceConfigRealm workspaceConfigIdpHint =
+  WorkspaceConfig
+  { workspaceConfigRealm
+  , workspaceConfigIdpHint
+  }
+
+-- ** Y
+-- | Y
+data Y = Y
+    { yNumericValue    :: !(Maybe Double) -- ^ "numericValue"
+    -- ^ "textValue"
+    , yTextValue       :: !(Maybe Text) -- ^ "textValue"
+    -- ^ "imageValue"
+    , yImageValue      :: !(Maybe OutputImageDTO) -- ^ "imageValue"
+    -- ^ "inputImageValue"
+    , yInputImageValue :: !(Maybe InputImageDTO) -- ^ "inputImageValue"
+    }
+    deriving (P.Show, P.Eq, P.Typeable)
+
+-- | FromJSON Y
+instance A.FromJSON Y where
+  parseJSON = A.withObject "Y" $ \o ->
+    Y
+      <$> (o .:? "numericValue")
+      <*> (o .:? "textValue")
+      <*> (o .:? "imageValue")
+      <*> (o .:? "inputImageValue")
+
+-- | ToJSON Y
+instance A.ToJSON Y where
+  toJSON Y {..} =
+   _omitNulls
+      [ "numericValue" .= yNumericValue
+      , "textValue" .= yTextValue
+      , "imageValue" .= yImageValue
+      , "inputImageValue" .= yInputImageValue
+      ]
+
+
+-- | Construct a value of type 'Y' (by applying it's required fields, if any)
+mkY
+  :: Y
+mkY =
+  Y
+  { yNumericValue = Nothing
+  , yTextValue = Nothing
+  , yImageValue = Nothing
+  , yInputImageValue = Nothing
+  }
+
+
+-- * Enums
+
+
+-- ** AchievementTypeDTO
+
+-- | Enum of 'Text'
+data AchievementTypeDTO = AchievementTypeDTO'ArtifactSent
+    | AchievementTypeDTO'ExperimentCreated
+    | AchievementTypeDTO'ImageSent
+    | AchievementTypeDTO'ParameterSet
+    | AchievementTypeDTO'SourceUploaded
+    | AchievementTypeDTO'TagSet
+    | AchievementTypeDTO'TextSent
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON AchievementTypeDTO where toJSON = A.toJSON . fromAchievementTypeDTO
+instance A.FromJSON AchievementTypeDTO where parseJSON o = P.either P.fail (pure . P.id) . toAchievementTypeDTO =<< A.parseJSON o
+instance WH.ToHttpApiData AchievementTypeDTO where toQueryParam = WH.toQueryParam . fromAchievementTypeDTO
+instance WH.FromHttpApiData AchievementTypeDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toAchievementTypeDTO
+instance MimeRender MimeMultipartFormData AchievementTypeDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'AchievementTypeDTO' enum
+fromAchievementTypeDTO :: AchievementTypeDTO -> Text
+fromAchievementTypeDTO = \case
+  AchievementTypeDTO'ArtifactSent      -> "artifactSent"
+  AchievementTypeDTO'ExperimentCreated -> "experimentCreated"
+  AchievementTypeDTO'ImageSent         -> "imageSent"
+  AchievementTypeDTO'ParameterSet      -> "parameterSet"
+  AchievementTypeDTO'SourceUploaded    -> "sourceUploaded"
+  AchievementTypeDTO'TagSet            -> "tagSet"
+  AchievementTypeDTO'TextSent          -> "textSent"
+
+-- | parse 'AchievementTypeDTO' enum
+toAchievementTypeDTO :: Text -> P.Either String AchievementTypeDTO
+toAchievementTypeDTO = \case
+  "artifactSent" -> P.Right AchievementTypeDTO'ArtifactSent
+  "experimentCreated" -> P.Right AchievementTypeDTO'ExperimentCreated
+  "imageSent" -> P.Right AchievementTypeDTO'ImageSent
+  "parameterSet" -> P.Right AchievementTypeDTO'ParameterSet
+  "sourceUploaded" -> P.Right AchievementTypeDTO'SourceUploaded
+  "tagSet" -> P.Right AchievementTypeDTO'TagSet
+  "textSent" -> P.Right AchievementTypeDTO'TextSent
+  s -> P.Left $ "toAchievementTypeDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** ApiErrorTypeDTO
+
+-- | Enum of 'Text'
+data ApiErrorTypeDTO = ApiErrorTypeDTO'PROJECTS_REACHED
+    | ApiErrorTypeDTO'STORAGE_IN_PROJECT_REACHED
+    | ApiErrorTypeDTO'MEMBERS_IN_ORGANIZATION_REACHED
+    | ApiErrorTypeDTO'VALUES_IN_CHANNEL_REACHED
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ApiErrorTypeDTO where toJSON = A.toJSON . fromApiErrorTypeDTO
+instance A.FromJSON ApiErrorTypeDTO where parseJSON o = P.either P.fail (pure . P.id) . toApiErrorTypeDTO =<< A.parseJSON o
+instance WH.ToHttpApiData ApiErrorTypeDTO where toQueryParam = WH.toQueryParam . fromApiErrorTypeDTO
+instance WH.FromHttpApiData ApiErrorTypeDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toApiErrorTypeDTO
+instance MimeRender MimeMultipartFormData ApiErrorTypeDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ApiErrorTypeDTO' enum
+fromApiErrorTypeDTO :: ApiErrorTypeDTO -> Text
+fromApiErrorTypeDTO = \case
+  ApiErrorTypeDTO'PROJECTS_REACHED -> "LIMIT_OF_PROJECTS_REACHED"
+  ApiErrorTypeDTO'STORAGE_IN_PROJECT_REACHED -> "LIMIT_OF_STORAGE_IN_PROJECT_REACHED"
+  ApiErrorTypeDTO'MEMBERS_IN_ORGANIZATION_REACHED -> "LIMIT_OF_MEMBERS_IN_ORGANIZATION_REACHED"
+  ApiErrorTypeDTO'VALUES_IN_CHANNEL_REACHED -> "LIMIT_OF_VALUES_IN_CHANNEL_REACHED"
+
+-- | parse 'ApiErrorTypeDTO' enum
+toApiErrorTypeDTO :: Text -> P.Either String ApiErrorTypeDTO
+toApiErrorTypeDTO = \case
+  "LIMIT_OF_PROJECTS_REACHED" -> P.Right ApiErrorTypeDTO'PROJECTS_REACHED
+  "LIMIT_OF_STORAGE_IN_PROJECT_REACHED" -> P.Right ApiErrorTypeDTO'STORAGE_IN_PROJECT_REACHED
+  "LIMIT_OF_MEMBERS_IN_ORGANIZATION_REACHED" -> P.Right ApiErrorTypeDTO'MEMBERS_IN_ORGANIZATION_REACHED
+  "LIMIT_OF_VALUES_IN_CHANNEL_REACHED" -> P.Right ApiErrorTypeDTO'VALUES_IN_CHANNEL_REACHED
+  s -> P.Left $ "toApiErrorTypeDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** AvatarSourceEnum
+
+-- | Enum of 'Text'
+data AvatarSourceEnum = AvatarSourceEnum'Default
+    | AvatarSourceEnum'ThirdParty
+    | AvatarSourceEnum'User
+    | AvatarSourceEnum'Inherited
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON AvatarSourceEnum where toJSON = A.toJSON . fromAvatarSourceEnum
+instance A.FromJSON AvatarSourceEnum where parseJSON o = P.either P.fail (pure . P.id) . toAvatarSourceEnum =<< A.parseJSON o
+instance WH.ToHttpApiData AvatarSourceEnum where toQueryParam = WH.toQueryParam . fromAvatarSourceEnum
+instance WH.FromHttpApiData AvatarSourceEnum where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toAvatarSourceEnum
+instance MimeRender MimeMultipartFormData AvatarSourceEnum where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'AvatarSourceEnum' enum
+fromAvatarSourceEnum :: AvatarSourceEnum -> Text
+fromAvatarSourceEnum = \case
+  AvatarSourceEnum'Default    -> "default"
+  AvatarSourceEnum'ThirdParty -> "thirdParty"
+  AvatarSourceEnum'User       -> "user"
+  AvatarSourceEnum'Inherited  -> "inherited"
+
+-- | parse 'AvatarSourceEnum' enum
+toAvatarSourceEnum :: Text -> P.Either String AvatarSourceEnum
+toAvatarSourceEnum = \case
+  "default" -> P.Right AvatarSourceEnum'Default
+  "thirdParty" -> P.Right AvatarSourceEnum'ThirdParty
+  "user" -> P.Right AvatarSourceEnum'User
+  "inherited" -> P.Right AvatarSourceEnum'Inherited
+  s -> P.Left $ "toAvatarSourceEnum: enum parse failure: " P.++ P.show s
+
+
+-- ** ChannelType
+
+-- | Enum of 'Text'
+data ChannelType = ChannelType'Numeric
+    | ChannelType'Text
+    | ChannelType'Image
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ChannelType where toJSON = A.toJSON . fromChannelType
+instance A.FromJSON ChannelType where parseJSON o = P.either P.fail (pure . P.id) . toChannelType =<< A.parseJSON o
+instance WH.ToHttpApiData ChannelType where toQueryParam = WH.toQueryParam . fromChannelType
+instance WH.FromHttpApiData ChannelType where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toChannelType
+instance MimeRender MimeMultipartFormData ChannelType where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ChannelType' enum
+fromChannelType :: ChannelType -> Text
+fromChannelType = \case
+  ChannelType'Numeric -> "numeric"
+  ChannelType'Text    -> "text"
+  ChannelType'Image   -> "image"
+
+-- | parse 'ChannelType' enum
+toChannelType :: Text -> P.Either String ChannelType
+toChannelType = \case
+  "numeric" -> P.Right ChannelType'Numeric
+  "text"    -> P.Right ChannelType'Text
+  "image"   -> P.Right ChannelType'Image
+  s         -> P.Left $ "toChannelType: enum parse failure: " P.++ P.show s
+
+
+-- ** ChannelTypeEnum
+
+-- | Enum of 'Text'
+data ChannelTypeEnum = ChannelTypeEnum'Numeric
+    | ChannelTypeEnum'Text
+    | ChannelTypeEnum'Image
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ChannelTypeEnum where toJSON = A.toJSON . fromChannelTypeEnum
+instance A.FromJSON ChannelTypeEnum where parseJSON o = P.either P.fail (pure . P.id) . toChannelTypeEnum =<< A.parseJSON o
+instance WH.ToHttpApiData ChannelTypeEnum where toQueryParam = WH.toQueryParam . fromChannelTypeEnum
+instance WH.FromHttpApiData ChannelTypeEnum where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toChannelTypeEnum
+instance MimeRender MimeMultipartFormData ChannelTypeEnum where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ChannelTypeEnum' enum
+fromChannelTypeEnum :: ChannelTypeEnum -> Text
+fromChannelTypeEnum = \case
+  ChannelTypeEnum'Numeric -> "numeric"
+  ChannelTypeEnum'Text    -> "text"
+  ChannelTypeEnum'Image   -> "image"
+
+-- | parse 'ChannelTypeEnum' enum
+toChannelTypeEnum :: Text -> P.Either String ChannelTypeEnum
+toChannelTypeEnum = \case
+  "numeric" -> P.Right ChannelTypeEnum'Numeric
+  "text"    -> P.Right ChannelTypeEnum'Text
+  "image"   -> P.Right ChannelTypeEnum'Image
+  s         -> P.Left $ "toChannelTypeEnum: enum parse failure: " P.++ P.show s
+
+
+-- ** ExperimentState
+
+-- | Enum of 'Text'
+data ExperimentState = ExperimentState'Running
+    | ExperimentState'Succeeded
+    | ExperimentState'Failed
+    | ExperimentState'Aborted
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ExperimentState where toJSON = A.toJSON . fromExperimentState
+instance A.FromJSON ExperimentState where parseJSON o = P.either P.fail (pure . P.id) . toExperimentState =<< A.parseJSON o
+instance WH.ToHttpApiData ExperimentState where toQueryParam = WH.toQueryParam . fromExperimentState
+instance WH.FromHttpApiData ExperimentState where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toExperimentState
+instance MimeRender MimeMultipartFormData ExperimentState where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ExperimentState' enum
+fromExperimentState :: ExperimentState -> Text
+fromExperimentState = \case
+  ExperimentState'Running   -> "running"
+  ExperimentState'Succeeded -> "succeeded"
+  ExperimentState'Failed    -> "failed"
+  ExperimentState'Aborted   -> "aborted"
+
+-- | parse 'ExperimentState' enum
+toExperimentState :: Text -> P.Either String ExperimentState
+toExperimentState = \case
+  "running" -> P.Right ExperimentState'Running
+  "succeeded" -> P.Right ExperimentState'Succeeded
+  "failed" -> P.Right ExperimentState'Failed
+  "aborted" -> P.Right ExperimentState'Aborted
+  s -> P.Left $ "toExperimentState: enum parse failure: " P.++ P.show s
+
+
+-- ** InvitationStatusEnumDTO
+
+-- | Enum of 'Text'
+data InvitationStatusEnumDTO = InvitationStatusEnumDTO'Pending
+    | InvitationStatusEnumDTO'Accepted
+    | InvitationStatusEnumDTO'Rejected
+    | InvitationStatusEnumDTO'Revoked
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON InvitationStatusEnumDTO where toJSON = A.toJSON . fromInvitationStatusEnumDTO
+instance A.FromJSON InvitationStatusEnumDTO where parseJSON o = P.either P.fail (pure . P.id) . toInvitationStatusEnumDTO =<< A.parseJSON o
+instance WH.ToHttpApiData InvitationStatusEnumDTO where toQueryParam = WH.toQueryParam . fromInvitationStatusEnumDTO
+instance WH.FromHttpApiData InvitationStatusEnumDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toInvitationStatusEnumDTO
+instance MimeRender MimeMultipartFormData InvitationStatusEnumDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'InvitationStatusEnumDTO' enum
+fromInvitationStatusEnumDTO :: InvitationStatusEnumDTO -> Text
+fromInvitationStatusEnumDTO = \case
+  InvitationStatusEnumDTO'Pending  -> "pending"
+  InvitationStatusEnumDTO'Accepted -> "accepted"
+  InvitationStatusEnumDTO'Rejected -> "rejected"
+  InvitationStatusEnumDTO'Revoked  -> "revoked"
+
+-- | parse 'InvitationStatusEnumDTO' enum
+toInvitationStatusEnumDTO :: Text -> P.Either String InvitationStatusEnumDTO
+toInvitationStatusEnumDTO = \case
+  "pending" -> P.Right InvitationStatusEnumDTO'Pending
+  "accepted" -> P.Right InvitationStatusEnumDTO'Accepted
+  "rejected" -> P.Right InvitationStatusEnumDTO'Rejected
+  "revoked" -> P.Right InvitationStatusEnumDTO'Revoked
+  s -> P.Left $ "toInvitationStatusEnumDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** InvitationTypeEnumDTO
+
+-- | Enum of 'Text'
+data InvitationTypeEnumDTO = InvitationTypeEnumDTO'User
+    | InvitationTypeEnumDTO'EmailRecipient
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON InvitationTypeEnumDTO where toJSON = A.toJSON . fromInvitationTypeEnumDTO
+instance A.FromJSON InvitationTypeEnumDTO where parseJSON o = P.either P.fail (pure . P.id) . toInvitationTypeEnumDTO =<< A.parseJSON o
+instance WH.ToHttpApiData InvitationTypeEnumDTO where toQueryParam = WH.toQueryParam . fromInvitationTypeEnumDTO
+instance WH.FromHttpApiData InvitationTypeEnumDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toInvitationTypeEnumDTO
+instance MimeRender MimeMultipartFormData InvitationTypeEnumDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'InvitationTypeEnumDTO' enum
+fromInvitationTypeEnumDTO :: InvitationTypeEnumDTO -> Text
+fromInvitationTypeEnumDTO = \case
+  InvitationTypeEnumDTO'User           -> "user"
+  InvitationTypeEnumDTO'EmailRecipient -> "emailRecipient"
+
+-- | parse 'InvitationTypeEnumDTO' enum
+toInvitationTypeEnumDTO :: Text -> P.Either String InvitationTypeEnumDTO
+toInvitationTypeEnumDTO = \case
+  "user" -> P.Right InvitationTypeEnumDTO'User
+  "emailRecipient" -> P.Right InvitationTypeEnumDTO'EmailRecipient
+  s -> P.Left $ "toInvitationTypeEnumDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** LinkTypeDTO
+
+-- | Enum of 'Text'
+data LinkTypeDTO = LinkTypeDTO'Github
+    | LinkTypeDTO'Twitter
+    | LinkTypeDTO'Kaggle
+    | LinkTypeDTO'Linkedin
+    | LinkTypeDTO'Other
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON LinkTypeDTO where toJSON = A.toJSON . fromLinkTypeDTO
+instance A.FromJSON LinkTypeDTO where parseJSON o = P.either P.fail (pure . P.id) . toLinkTypeDTO =<< A.parseJSON o
+instance WH.ToHttpApiData LinkTypeDTO where toQueryParam = WH.toQueryParam . fromLinkTypeDTO
+instance WH.FromHttpApiData LinkTypeDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toLinkTypeDTO
+instance MimeRender MimeMultipartFormData LinkTypeDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'LinkTypeDTO' enum
+fromLinkTypeDTO :: LinkTypeDTO -> Text
+fromLinkTypeDTO = \case
+  LinkTypeDTO'Github   -> "github"
+  LinkTypeDTO'Twitter  -> "twitter"
+  LinkTypeDTO'Kaggle   -> "kaggle"
+  LinkTypeDTO'Linkedin -> "linkedin"
+  LinkTypeDTO'Other    -> "other"
+
+-- | parse 'LinkTypeDTO' enum
+toLinkTypeDTO :: Text -> P.Either String LinkTypeDTO
+toLinkTypeDTO = \case
+  "github"   -> P.Right LinkTypeDTO'Github
+  "twitter"  -> P.Right LinkTypeDTO'Twitter
+  "kaggle"   -> P.Right LinkTypeDTO'Kaggle
+  "linkedin" -> P.Right LinkTypeDTO'Linkedin
+  "other"    -> P.Right LinkTypeDTO'Other
+  s          -> P.Left $ "toLinkTypeDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** LoginActionDTO
+
+-- | Enum of 'Text'
+data LoginActionDTO = LoginActionDTO'SET_USERNAME
+    | LoginActionDTO'SURVEY
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON LoginActionDTO where toJSON = A.toJSON . fromLoginActionDTO
+instance A.FromJSON LoginActionDTO where parseJSON o = P.either P.fail (pure . P.id) . toLoginActionDTO =<< A.parseJSON o
+instance WH.ToHttpApiData LoginActionDTO where toQueryParam = WH.toQueryParam . fromLoginActionDTO
+instance WH.FromHttpApiData LoginActionDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toLoginActionDTO
+instance MimeRender MimeMultipartFormData LoginActionDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'LoginActionDTO' enum
+fromLoginActionDTO :: LoginActionDTO -> Text
+fromLoginActionDTO = \case
+  LoginActionDTO'SET_USERNAME -> "SET_USERNAME"
+  LoginActionDTO'SURVEY       -> "SURVEY"
+
+-- | parse 'LoginActionDTO' enum
+toLoginActionDTO :: Text -> P.Either String LoginActionDTO
+toLoginActionDTO = \case
+  "SET_USERNAME" -> P.Right LoginActionDTO'SET_USERNAME
+  "SURVEY" -> P.Right LoginActionDTO'SURVEY
+  s -> P.Left $ "toLoginActionDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** NameEnum
+
+-- | Enum of 'Text'
+data NameEnum = NameEnum'Client
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON NameEnum where toJSON = A.toJSON . fromNameEnum
+instance A.FromJSON NameEnum where parseJSON o = P.either P.fail (pure . P.id) . toNameEnum =<< A.parseJSON o
+instance WH.ToHttpApiData NameEnum where toQueryParam = WH.toQueryParam . fromNameEnum
+instance WH.FromHttpApiData NameEnum where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toNameEnum
+instance MimeRender MimeMultipartFormData NameEnum where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'NameEnum' enum
+fromNameEnum :: NameEnum -> Text
+fromNameEnum = \case
+  NameEnum'Client -> "Client"
+
+-- | parse 'NameEnum' enum
+toNameEnum :: Text -> P.Either String NameEnum
+toNameEnum = \case
+  "Client" -> P.Right NameEnum'Client
+  s        -> P.Left $ "toNameEnum: enum parse failure: " P.++ P.show s
+
+
+-- ** OrganizationRoleDTO
+
+-- | Enum of 'Text'
+data OrganizationRoleDTO = OrganizationRoleDTO'Member
+    | OrganizationRoleDTO'Owner
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON OrganizationRoleDTO where toJSON = A.toJSON . fromOrganizationRoleDTO
+instance A.FromJSON OrganizationRoleDTO where parseJSON o = P.either P.fail (pure . P.id) . toOrganizationRoleDTO =<< A.parseJSON o
+instance WH.ToHttpApiData OrganizationRoleDTO where toQueryParam = WH.toQueryParam . fromOrganizationRoleDTO
+instance WH.FromHttpApiData OrganizationRoleDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toOrganizationRoleDTO
+instance MimeRender MimeMultipartFormData OrganizationRoleDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'OrganizationRoleDTO' enum
+fromOrganizationRoleDTO :: OrganizationRoleDTO -> Text
+fromOrganizationRoleDTO = \case
+  OrganizationRoleDTO'Member -> "member"
+  OrganizationRoleDTO'Owner  -> "owner"
+
+-- | parse 'OrganizationRoleDTO' enum
+toOrganizationRoleDTO :: Text -> P.Either String OrganizationRoleDTO
+toOrganizationRoleDTO = \case
+  "member" -> P.Right OrganizationRoleDTO'Member
+  "owner" -> P.Right OrganizationRoleDTO'Owner
+  s -> P.Left $ "toOrganizationRoleDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** OrganizationTypeDTO
+
+-- | Enum of 'Text'
+data OrganizationTypeDTO = OrganizationTypeDTO'Individual
+    | OrganizationTypeDTO'Team
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON OrganizationTypeDTO where toJSON = A.toJSON . fromOrganizationTypeDTO
+instance A.FromJSON OrganizationTypeDTO where parseJSON o = P.either P.fail (pure . P.id) . toOrganizationTypeDTO =<< A.parseJSON o
+instance WH.ToHttpApiData OrganizationTypeDTO where toQueryParam = WH.toQueryParam . fromOrganizationTypeDTO
+instance WH.FromHttpApiData OrganizationTypeDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toOrganizationTypeDTO
+instance MimeRender MimeMultipartFormData OrganizationTypeDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'OrganizationTypeDTO' enum
+fromOrganizationTypeDTO :: OrganizationTypeDTO -> Text
+fromOrganizationTypeDTO = \case
+  OrganizationTypeDTO'Individual -> "individual"
+  OrganizationTypeDTO'Team       -> "team"
+
+-- | parse 'OrganizationTypeDTO' enum
+toOrganizationTypeDTO :: Text -> P.Either String OrganizationTypeDTO
+toOrganizationTypeDTO = \case
+  "individual" -> P.Right OrganizationTypeDTO'Individual
+  "team" -> P.Right OrganizationTypeDTO'Team
+  s -> P.Left $ "toOrganizationTypeDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** ParameterTypeEnum
+
+-- | Enum of 'Text'
+data ParameterTypeEnum = ParameterTypeEnum'Double
+    | ParameterTypeEnum'String
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ParameterTypeEnum where toJSON = A.toJSON . fromParameterTypeEnum
+instance A.FromJSON ParameterTypeEnum where parseJSON o = P.either P.fail (pure . P.id) . toParameterTypeEnum =<< A.parseJSON o
+instance WH.ToHttpApiData ParameterTypeEnum where toQueryParam = WH.toQueryParam . fromParameterTypeEnum
+instance WH.FromHttpApiData ParameterTypeEnum where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toParameterTypeEnum
+instance MimeRender MimeMultipartFormData ParameterTypeEnum where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ParameterTypeEnum' enum
+fromParameterTypeEnum :: ParameterTypeEnum -> Text
+fromParameterTypeEnum = \case
+  ParameterTypeEnum'Double -> "double"
+  ParameterTypeEnum'String -> "string"
+
+-- | parse 'ParameterTypeEnum' enum
+toParameterTypeEnum :: Text -> P.Either String ParameterTypeEnum
+toParameterTypeEnum = \case
+  "double" -> P.Right ParameterTypeEnum'Double
+  "string" -> P.Right ParameterTypeEnum'String
+  s        -> P.Left $ "toParameterTypeEnum: enum parse failure: " P.++ P.show s
+
+
+-- ** PricingPlanDTO
+
+-- | Enum of 'Text'
+data PricingPlanDTO = PricingPlanDTO'Free
+    | PricingPlanDTO'Academia
+    | PricingPlanDTO'Paid
+    | PricingPlanDTO'Enterprise
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON PricingPlanDTO where toJSON = A.toJSON . fromPricingPlanDTO
+instance A.FromJSON PricingPlanDTO where parseJSON o = P.either P.fail (pure . P.id) . toPricingPlanDTO =<< A.parseJSON o
+instance WH.ToHttpApiData PricingPlanDTO where toQueryParam = WH.toQueryParam . fromPricingPlanDTO
+instance WH.FromHttpApiData PricingPlanDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toPricingPlanDTO
+instance MimeRender MimeMultipartFormData PricingPlanDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'PricingPlanDTO' enum
+fromPricingPlanDTO :: PricingPlanDTO -> Text
+fromPricingPlanDTO = \case
+  PricingPlanDTO'Free       -> "free"
+  PricingPlanDTO'Academia   -> "academia"
+  PricingPlanDTO'Paid       -> "paid"
+  PricingPlanDTO'Enterprise -> "enterprise"
+
+-- | parse 'PricingPlanDTO' enum
+toPricingPlanDTO :: Text -> P.Either String PricingPlanDTO
+toPricingPlanDTO = \case
+  "free" -> P.Right PricingPlanDTO'Free
+  "academia" -> P.Right PricingPlanDTO'Academia
+  "paid" -> P.Right PricingPlanDTO'Paid
+  "enterprise" -> P.Right PricingPlanDTO'Enterprise
+  s -> P.Left $ "toPricingPlanDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** ProjectCodeAccessDTO
+
+-- | Enum of 'Text'
+data ProjectCodeAccessDTO = ProjectCodeAccessDTO'Default
+    | ProjectCodeAccessDTO'Restricted
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ProjectCodeAccessDTO where toJSON = A.toJSON . fromProjectCodeAccessDTO
+instance A.FromJSON ProjectCodeAccessDTO where parseJSON o = P.either P.fail (pure . P.id) . toProjectCodeAccessDTO =<< A.parseJSON o
+instance WH.ToHttpApiData ProjectCodeAccessDTO where toQueryParam = WH.toQueryParam . fromProjectCodeAccessDTO
+instance WH.FromHttpApiData ProjectCodeAccessDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toProjectCodeAccessDTO
+instance MimeRender MimeMultipartFormData ProjectCodeAccessDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ProjectCodeAccessDTO' enum
+fromProjectCodeAccessDTO :: ProjectCodeAccessDTO -> Text
+fromProjectCodeAccessDTO = \case
+  ProjectCodeAccessDTO'Default    -> "default"
+  ProjectCodeAccessDTO'Restricted -> "restricted"
+
+-- | parse 'ProjectCodeAccessDTO' enum
+toProjectCodeAccessDTO :: Text -> P.Either String ProjectCodeAccessDTO
+toProjectCodeAccessDTO = \case
+  "default" -> P.Right ProjectCodeAccessDTO'Default
+  "restricted" -> P.Right ProjectCodeAccessDTO'Restricted
+  s -> P.Left $ "toProjectCodeAccessDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** ProjectRoleDTO
+
+-- | Enum of 'Text'
+data ProjectRoleDTO = ProjectRoleDTO'Viewer
+    | ProjectRoleDTO'Member
+    | ProjectRoleDTO'Manager
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ProjectRoleDTO where toJSON = A.toJSON . fromProjectRoleDTO
+instance A.FromJSON ProjectRoleDTO where parseJSON o = P.either P.fail (pure . P.id) . toProjectRoleDTO =<< A.parseJSON o
+instance WH.ToHttpApiData ProjectRoleDTO where toQueryParam = WH.toQueryParam . fromProjectRoleDTO
+instance WH.FromHttpApiData ProjectRoleDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toProjectRoleDTO
+instance MimeRender MimeMultipartFormData ProjectRoleDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ProjectRoleDTO' enum
+fromProjectRoleDTO :: ProjectRoleDTO -> Text
+fromProjectRoleDTO = \case
+  ProjectRoleDTO'Viewer  -> "viewer"
+  ProjectRoleDTO'Member  -> "member"
+  ProjectRoleDTO'Manager -> "manager"
+
+-- | parse 'ProjectRoleDTO' enum
+toProjectRoleDTO :: Text -> P.Either String ProjectRoleDTO
+toProjectRoleDTO = \case
+  "viewer"  -> P.Right ProjectRoleDTO'Viewer
+  "member"  -> P.Right ProjectRoleDTO'Member
+  "manager" -> P.Right ProjectRoleDTO'Manager
+  s         -> P.Left $ "toProjectRoleDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** ProjectVisibilityDTO
+
+-- | Enum of 'Text'
+data ProjectVisibilityDTO = ProjectVisibilityDTO'Priv
+    | ProjectVisibilityDTO'Pub
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON ProjectVisibilityDTO where toJSON = A.toJSON . fromProjectVisibilityDTO
+instance A.FromJSON ProjectVisibilityDTO where parseJSON o = P.either P.fail (pure . P.id) . toProjectVisibilityDTO =<< A.parseJSON o
+instance WH.ToHttpApiData ProjectVisibilityDTO where toQueryParam = WH.toQueryParam . fromProjectVisibilityDTO
+instance WH.FromHttpApiData ProjectVisibilityDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toProjectVisibilityDTO
+instance MimeRender MimeMultipartFormData ProjectVisibilityDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'ProjectVisibilityDTO' enum
+fromProjectVisibilityDTO :: ProjectVisibilityDTO -> Text
+fromProjectVisibilityDTO = \case
+  ProjectVisibilityDTO'Priv -> "priv"
+  ProjectVisibilityDTO'Pub  -> "pub"
+
+-- | parse 'ProjectVisibilityDTO' enum
+toProjectVisibilityDTO :: Text -> P.Either String ProjectVisibilityDTO
+toProjectVisibilityDTO = \case
+  "priv" -> P.Right ProjectVisibilityDTO'Priv
+  "pub" -> P.Right ProjectVisibilityDTO'Pub
+  s -> P.Left $ "toProjectVisibilityDTO: enum parse failure: " P.++ P.show s
+
+
+-- ** SeriesType
+
+-- | Enum of 'Text'
+data SeriesType = SeriesType'Line
+    | SeriesType'Dot
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON SeriesType where toJSON = A.toJSON . fromSeriesType
+instance A.FromJSON SeriesType where parseJSON o = P.either P.fail (pure . P.id) . toSeriesType =<< A.parseJSON o
+instance WH.ToHttpApiData SeriesType where toQueryParam = WH.toQueryParam . fromSeriesType
+instance WH.FromHttpApiData SeriesType where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toSeriesType
+instance MimeRender MimeMultipartFormData SeriesType where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'SeriesType' enum
+fromSeriesType :: SeriesType -> Text
+fromSeriesType = \case
+  SeriesType'Line -> "line"
+  SeriesType'Dot  -> "dot"
+
+-- | parse 'SeriesType' enum
+toSeriesType :: Text -> P.Either String SeriesType
+toSeriesType = \case
+  "line" -> P.Right SeriesType'Line
+  "dot"  -> P.Right SeriesType'Dot
+  s      -> P.Left $ "toSeriesType: enum parse failure: " P.++ P.show s
+
+
+-- ** SystemMetricResourceType
+
+-- | Enum of 'Text'
+data SystemMetricResourceType = SystemMetricResourceType'CPU
+    | SystemMetricResourceType'RAM
+    | SystemMetricResourceType'GPU
+    | SystemMetricResourceType'GPU_RAM
+    | SystemMetricResourceType'OTHER
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON SystemMetricResourceType where toJSON = A.toJSON . fromSystemMetricResourceType
+instance A.FromJSON SystemMetricResourceType where parseJSON o = P.either P.fail (pure . P.id) . toSystemMetricResourceType =<< A.parseJSON o
+instance WH.ToHttpApiData SystemMetricResourceType where toQueryParam = WH.toQueryParam . fromSystemMetricResourceType
+instance WH.FromHttpApiData SystemMetricResourceType where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toSystemMetricResourceType
+instance MimeRender MimeMultipartFormData SystemMetricResourceType where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'SystemMetricResourceType' enum
+fromSystemMetricResourceType :: SystemMetricResourceType -> Text
+fromSystemMetricResourceType = \case
+  SystemMetricResourceType'CPU     -> "CPU"
+  SystemMetricResourceType'RAM     -> "RAM"
+  SystemMetricResourceType'GPU     -> "GPU"
+  SystemMetricResourceType'GPU_RAM -> "GPU_RAM"
+  SystemMetricResourceType'OTHER   -> "OTHER"
+
+-- | parse 'SystemMetricResourceType' enum
+toSystemMetricResourceType :: Text -> P.Either String SystemMetricResourceType
+toSystemMetricResourceType = \case
+  "CPU" -> P.Right SystemMetricResourceType'CPU
+  "RAM" -> P.Right SystemMetricResourceType'RAM
+  "GPU" -> P.Right SystemMetricResourceType'GPU
+  "GPU_RAM" -> P.Right SystemMetricResourceType'GPU_RAM
+  "OTHER" -> P.Right SystemMetricResourceType'OTHER
+  s -> P.Left $ "toSystemMetricResourceType: enum parse failure: " P.++ P.show s
+
+
+-- ** UsernameValidationStatusEnumDTO
+
+-- | Enum of 'Text'
+data UsernameValidationStatusEnumDTO = UsernameValidationStatusEnumDTO'Available
+    | UsernameValidationStatusEnumDTO'Invalid
+    | UsernameValidationStatusEnumDTO'Unavailable
+    deriving (P.Show, P.Eq, P.Typeable, P.Ord, P.Bounded, P.Enum)
+
+instance A.ToJSON UsernameValidationStatusEnumDTO where toJSON = A.toJSON . fromUsernameValidationStatusEnumDTO
+instance A.FromJSON UsernameValidationStatusEnumDTO where parseJSON o = P.either P.fail (pure . P.id) . toUsernameValidationStatusEnumDTO =<< A.parseJSON o
+instance WH.ToHttpApiData UsernameValidationStatusEnumDTO where toQueryParam = WH.toQueryParam . fromUsernameValidationStatusEnumDTO
+instance WH.FromHttpApiData UsernameValidationStatusEnumDTO where parseQueryParam o = WH.parseQueryParam o >>= P.left T.pack . toUsernameValidationStatusEnumDTO
+instance MimeRender MimeMultipartFormData UsernameValidationStatusEnumDTO where mimeRender _ = mimeRenderDefaultMultipartFormData
+
+-- | unwrap 'UsernameValidationStatusEnumDTO' enum
+fromUsernameValidationStatusEnumDTO :: UsernameValidationStatusEnumDTO -> Text
+fromUsernameValidationStatusEnumDTO = \case
+  UsernameValidationStatusEnumDTO'Available   -> "available"
+  UsernameValidationStatusEnumDTO'Invalid     -> "invalid"
+  UsernameValidationStatusEnumDTO'Unavailable -> "unavailable"
+
+-- | parse 'UsernameValidationStatusEnumDTO' enum
+toUsernameValidationStatusEnumDTO :: Text -> P.Either String UsernameValidationStatusEnumDTO
+toUsernameValidationStatusEnumDTO = \case
+  "available" -> P.Right UsernameValidationStatusEnumDTO'Available
+  "invalid" -> P.Right UsernameValidationStatusEnumDTO'Invalid
+  "unavailable" -> P.Right UsernameValidationStatusEnumDTO'Unavailable
+  s -> P.Left $ "toUsernameValidationStatusEnumDTO: enum parse failure: " P.++ P.show s
+
+
+-- * Auth Methods
+
+-- ** AuthOAuthOauth2
+data AuthOAuthOauth2 = AuthOAuthOauth2 Text
+    deriving (P.Eq, P.Show, P.Typeable)
+
+instance AuthMethod AuthOAuthOauth2 where
+  applyAuthMethod _ a@(AuthOAuthOauth2 secret) req =
+    P.pure $
+    if (P.typeOf a `P.elem` rAuthTypes req)
+      then req `setHeader` toHeader ("Authorization", "Bearer " <> secret)
+           & L.over rAuthTypesL (P.filter (/= P.typeOf a))
+      else req
+
+
diff --git a/lib/Neptune/Backend/ModelLens.hs b/lib/Neptune/Backend/ModelLens.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Backend/ModelLens.hs
@@ -0,0 +1,2561 @@
+{-
+   Neptune Backend API
+
+   No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
+
+   OpenAPI Version: 3.0.1
+   Neptune Backend API API version: 2.8
+   Generated by OpenAPI Generator (https://openapi-generator.tech)
+-}
+
+{-|
+Module : Neptune.Backend.Lens
+-}
+
+{-# LANGUAGE KindSignatures  #-}
+{-# LANGUAGE NamedFieldPuns  #-}
+{-# LANGUAGE RankNTypes      #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# OPTIONS_GHC -fno-warn-name-shadowing -fno-warn-unused-matches -fno-warn-unused-binds -fno-warn-unused-imports #-}
+
+module Neptune.Backend.ModelLens where
+
+import qualified Data.Aeson            as A
+import qualified Data.ByteString.Lazy  as BL
+import qualified Data.Data             as P (Data, Typeable)
+import qualified Data.Map              as Map
+import qualified Data.Set              as Set
+import qualified Data.Time             as TI
+
+import           Data.Text             (Text)
+
+import           Prelude               (Applicative, Bool (..), Char, Double,
+                                        FilePath, Float, Functor, Int, Integer,
+                                        Maybe (..), Monad, String, fmap, maybe,
+                                        mempty, pure, undefined, ($), (.),
+                                        (<$>), (<*>), (=<<))
+import qualified Prelude               as P
+
+import           Neptune.Backend.Core
+import           Neptune.Backend.Model
+
+
+-- * AchievementTypeDTO
+
+
+
+-- * AchievementsDTO
+
+-- | 'achievementsDTOEarned' Lens
+achievementsDTOEarnedL :: Lens_' AchievementsDTO ([AchievementTypeDTO])
+achievementsDTOEarnedL f AchievementsDTO{..} = (\achievementsDTOEarned -> AchievementsDTO { achievementsDTOEarned, ..} ) <$> f achievementsDTOEarned
+{-# INLINE achievementsDTOEarnedL #-}
+
+
+
+-- * ApiErrorTypeDTO
+
+
+
+-- * AuthorizedUserDTO
+
+-- | 'authorizedUserDTOUsername' Lens
+authorizedUserDTOUsernameL :: Lens_' AuthorizedUserDTO (Text)
+authorizedUserDTOUsernameL f AuthorizedUserDTO{..} = (\authorizedUserDTOUsername -> AuthorizedUserDTO { authorizedUserDTOUsername, ..} ) <$> f authorizedUserDTOUsername
+{-# INLINE authorizedUserDTOUsernameL #-}
+
+
+
+-- * AvatarSourceEnum
+
+
+
+-- * BatchChannelValueErrorDTO
+
+-- | 'batchChannelValueErrorDTOChannelId' Lens
+batchChannelValueErrorDTOChannelIdL :: Lens_' BatchChannelValueErrorDTO (Text)
+batchChannelValueErrorDTOChannelIdL f BatchChannelValueErrorDTO{..} = (\batchChannelValueErrorDTOChannelId -> BatchChannelValueErrorDTO { batchChannelValueErrorDTOChannelId, ..} ) <$> f batchChannelValueErrorDTOChannelId
+{-# INLINE batchChannelValueErrorDTOChannelIdL #-}
+
+-- | 'batchChannelValueErrorDTOX' Lens
+batchChannelValueErrorDTOXL :: Lens_' BatchChannelValueErrorDTO (Double)
+batchChannelValueErrorDTOXL f BatchChannelValueErrorDTO{..} = (\batchChannelValueErrorDTOX -> BatchChannelValueErrorDTO { batchChannelValueErrorDTOX, ..} ) <$> f batchChannelValueErrorDTOX
+{-# INLINE batchChannelValueErrorDTOXL #-}
+
+-- | 'batchChannelValueErrorDTOError' Lens
+batchChannelValueErrorDTOErrorL :: Lens_' BatchChannelValueErrorDTO (Error)
+batchChannelValueErrorDTOErrorL f BatchChannelValueErrorDTO{..} = (\batchChannelValueErrorDTOError -> BatchChannelValueErrorDTO { batchChannelValueErrorDTOError, ..} ) <$> f batchChannelValueErrorDTOError
+{-# INLINE batchChannelValueErrorDTOErrorL #-}
+
+
+
+-- * BatchExperimentUpdateResult
+
+-- | 'batchExperimentUpdateResultExperimentId' Lens
+batchExperimentUpdateResultExperimentIdL :: Lens_' BatchExperimentUpdateResult (Text)
+batchExperimentUpdateResultExperimentIdL f BatchExperimentUpdateResult{..} = (\batchExperimentUpdateResultExperimentId -> BatchExperimentUpdateResult { batchExperimentUpdateResultExperimentId, ..} ) <$> f batchExperimentUpdateResultExperimentId
+{-# INLINE batchExperimentUpdateResultExperimentIdL #-}
+
+-- | 'batchExperimentUpdateResultError' Lens
+batchExperimentUpdateResultErrorL :: Lens_' BatchExperimentUpdateResult (Maybe Error)
+batchExperimentUpdateResultErrorL f BatchExperimentUpdateResult{..} = (\batchExperimentUpdateResultError -> BatchExperimentUpdateResult { batchExperimentUpdateResultError, ..} ) <$> f batchExperimentUpdateResultError
+{-# INLINE batchExperimentUpdateResultErrorL #-}
+
+
+
+-- * Channel
+
+-- | 'channelId' Lens
+channelIdL :: Lens_' Channel (Text)
+channelIdL f Channel{..} = (\channelId -> Channel { channelId, ..} ) <$> f channelId
+{-# INLINE channelIdL #-}
+
+-- | 'channelName' Lens
+channelNameL :: Lens_' Channel (Text)
+channelNameL f Channel{..} = (\channelName -> Channel { channelName, ..} ) <$> f channelName
+{-# INLINE channelNameL #-}
+
+-- | 'channelChannelType' Lens
+channelChannelTypeL :: Lens_' Channel (ChannelType)
+channelChannelTypeL f Channel{..} = (\channelChannelType -> Channel { channelChannelType, ..} ) <$> f channelChannelType
+{-# INLINE channelChannelTypeL #-}
+
+-- | 'channelLastX' Lens
+channelLastXL :: Lens_' Channel (Maybe Double)
+channelLastXL f Channel{..} = (\channelLastX -> Channel { channelLastX, ..} ) <$> f channelLastX
+{-# INLINE channelLastXL #-}
+
+
+
+-- * ChannelDTO
+
+-- | 'channelDTOId' Lens
+channelDTOIdL :: Lens_' ChannelDTO (Text)
+channelDTOIdL f ChannelDTO{..} = (\channelDTOId -> ChannelDTO { channelDTOId, ..} ) <$> f channelDTOId
+{-# INLINE channelDTOIdL #-}
+
+-- | 'channelDTOName' Lens
+channelDTONameL :: Lens_' ChannelDTO (Text)
+channelDTONameL f ChannelDTO{..} = (\channelDTOName -> ChannelDTO { channelDTOName, ..} ) <$> f channelDTOName
+{-# INLINE channelDTONameL #-}
+
+-- | 'channelDTOChannelType' Lens
+channelDTOChannelTypeL :: Lens_' ChannelDTO (ChannelTypeEnum)
+channelDTOChannelTypeL f ChannelDTO{..} = (\channelDTOChannelType -> ChannelDTO { channelDTOChannelType, ..} ) <$> f channelDTOChannelType
+{-# INLINE channelDTOChannelTypeL #-}
+
+-- | 'channelDTOLastX' Lens
+channelDTOLastXL :: Lens_' ChannelDTO (Maybe Double)
+channelDTOLastXL f ChannelDTO{..} = (\channelDTOLastX -> ChannelDTO { channelDTOLastX, ..} ) <$> f channelDTOLastX
+{-# INLINE channelDTOLastXL #-}
+
+
+
+-- * ChannelParams
+
+-- | 'channelParamsName' Lens
+channelParamsNameL :: Lens_' ChannelParams (Text)
+channelParamsNameL f ChannelParams{..} = (\channelParamsName -> ChannelParams { channelParamsName, ..} ) <$> f channelParamsName
+{-# INLINE channelParamsNameL #-}
+
+-- | 'channelParamsChannelType' Lens
+channelParamsChannelTypeL :: Lens_' ChannelParams (ChannelTypeEnum)
+channelParamsChannelTypeL f ChannelParams{..} = (\channelParamsChannelType -> ChannelParams { channelParamsChannelType, ..} ) <$> f channelParamsChannelType
+{-# INLINE channelParamsChannelTypeL #-}
+
+
+
+-- * ChannelType
+
+
+
+-- * ChannelTypeEnum
+
+
+
+-- * ChannelWithValue
+
+-- | 'channelWithValueX' Lens
+channelWithValueXL :: Lens_' ChannelWithValue (Double)
+channelWithValueXL f ChannelWithValue{..} = (\channelWithValueX -> ChannelWithValue { channelWithValueX, ..} ) <$> f channelWithValueX
+{-# INLINE channelWithValueXL #-}
+
+-- | 'channelWithValueY' Lens
+channelWithValueYL :: Lens_' ChannelWithValue (Text)
+channelWithValueYL f ChannelWithValue{..} = (\channelWithValueY -> ChannelWithValue { channelWithValueY, ..} ) <$> f channelWithValueY
+{-# INLINE channelWithValueYL #-}
+
+-- | 'channelWithValueChannelType' Lens
+channelWithValueChannelTypeL :: Lens_' ChannelWithValue (ChannelType)
+channelWithValueChannelTypeL f ChannelWithValue{..} = (\channelWithValueChannelType -> ChannelWithValue { channelWithValueChannelType, ..} ) <$> f channelWithValueChannelType
+{-# INLINE channelWithValueChannelTypeL #-}
+
+-- | 'channelWithValueChannelName' Lens
+channelWithValueChannelNameL :: Lens_' ChannelWithValue (Text)
+channelWithValueChannelNameL f ChannelWithValue{..} = (\channelWithValueChannelName -> ChannelWithValue { channelWithValueChannelName, ..} ) <$> f channelWithValueChannelName
+{-# INLINE channelWithValueChannelNameL #-}
+
+-- | 'channelWithValueChannelId' Lens
+channelWithValueChannelIdL :: Lens_' ChannelWithValue (Text)
+channelWithValueChannelIdL f ChannelWithValue{..} = (\channelWithValueChannelId -> ChannelWithValue { channelWithValueChannelId, ..} ) <$> f channelWithValueChannelId
+{-# INLINE channelWithValueChannelIdL #-}
+
+
+
+-- * ChannelWithValueDTO
+
+-- | 'channelWithValueDTOX' Lens
+channelWithValueDTOXL :: Lens_' ChannelWithValueDTO (Double)
+channelWithValueDTOXL f ChannelWithValueDTO{..} = (\channelWithValueDTOX -> ChannelWithValueDTO { channelWithValueDTOX, ..} ) <$> f channelWithValueDTOX
+{-# INLINE channelWithValueDTOXL #-}
+
+-- | 'channelWithValueDTOY' Lens
+channelWithValueDTOYL :: Lens_' ChannelWithValueDTO (Text)
+channelWithValueDTOYL f ChannelWithValueDTO{..} = (\channelWithValueDTOY -> ChannelWithValueDTO { channelWithValueDTOY, ..} ) <$> f channelWithValueDTOY
+{-# INLINE channelWithValueDTOYL #-}
+
+-- | 'channelWithValueDTOChannelType' Lens
+channelWithValueDTOChannelTypeL :: Lens_' ChannelWithValueDTO (ChannelTypeEnum)
+channelWithValueDTOChannelTypeL f ChannelWithValueDTO{..} = (\channelWithValueDTOChannelType -> ChannelWithValueDTO { channelWithValueDTOChannelType, ..} ) <$> f channelWithValueDTOChannelType
+{-# INLINE channelWithValueDTOChannelTypeL #-}
+
+-- | 'channelWithValueDTOChannelName' Lens
+channelWithValueDTOChannelNameL :: Lens_' ChannelWithValueDTO (Text)
+channelWithValueDTOChannelNameL f ChannelWithValueDTO{..} = (\channelWithValueDTOChannelName -> ChannelWithValueDTO { channelWithValueDTOChannelName, ..} ) <$> f channelWithValueDTOChannelName
+{-# INLINE channelWithValueDTOChannelNameL #-}
+
+-- | 'channelWithValueDTOChannelId' Lens
+channelWithValueDTOChannelIdL :: Lens_' ChannelWithValueDTO (Text)
+channelWithValueDTOChannelIdL f ChannelWithValueDTO{..} = (\channelWithValueDTOChannelId -> ChannelWithValueDTO { channelWithValueDTOChannelId, ..} ) <$> f channelWithValueDTOChannelId
+{-# INLINE channelWithValueDTOChannelIdL #-}
+
+
+
+-- * Chart
+
+-- | 'chartId' Lens
+chartIdL :: Lens_' Chart (Text)
+chartIdL f Chart{..} = (\chartId -> Chart { chartId, ..} ) <$> f chartId
+{-# INLINE chartIdL #-}
+
+-- | 'chartName' Lens
+chartNameL :: Lens_' Chart (Text)
+chartNameL f Chart{..} = (\chartName -> Chart { chartName, ..} ) <$> f chartName
+{-# INLINE chartNameL #-}
+
+-- | 'chartSeries' Lens
+chartSeriesL :: Lens_' Chart ([Series])
+chartSeriesL f Chart{..} = (\chartSeries -> Chart { chartSeries, ..} ) <$> f chartSeries
+{-# INLINE chartSeriesL #-}
+
+
+
+-- * ChartDefinition
+
+-- | 'chartDefinitionName' Lens
+chartDefinitionNameL :: Lens_' ChartDefinition (Text)
+chartDefinitionNameL f ChartDefinition{..} = (\chartDefinitionName -> ChartDefinition { chartDefinitionName, ..} ) <$> f chartDefinitionName
+{-# INLINE chartDefinitionNameL #-}
+
+-- | 'chartDefinitionSeries' Lens
+chartDefinitionSeriesL :: Lens_' ChartDefinition ([SeriesDefinition])
+chartDefinitionSeriesL f ChartDefinition{..} = (\chartDefinitionSeries -> ChartDefinition { chartDefinitionSeries, ..} ) <$> f chartDefinitionSeries
+{-# INLINE chartDefinitionSeriesL #-}
+
+
+
+-- * ChartSet
+
+-- | 'chartSetIsEditable' Lens
+chartSetIsEditableL :: Lens_' ChartSet (Maybe Bool)
+chartSetIsEditableL f ChartSet{..} = (\chartSetIsEditable -> ChartSet { chartSetIsEditable, ..} ) <$> f chartSetIsEditable
+{-# INLINE chartSetIsEditableL #-}
+
+-- | 'chartSetDefaultChartsEnabled' Lens
+chartSetDefaultChartsEnabledL :: Lens_' ChartSet (Maybe Bool)
+chartSetDefaultChartsEnabledL f ChartSet{..} = (\chartSetDefaultChartsEnabled -> ChartSet { chartSetDefaultChartsEnabled, ..} ) <$> f chartSetDefaultChartsEnabled
+{-# INLINE chartSetDefaultChartsEnabledL #-}
+
+-- | 'chartSetProjectId' Lens
+chartSetProjectIdL :: Lens_' ChartSet (Text)
+chartSetProjectIdL f ChartSet{..} = (\chartSetProjectId -> ChartSet { chartSetProjectId, ..} ) <$> f chartSetProjectId
+{-# INLINE chartSetProjectIdL #-}
+
+-- | 'chartSetId' Lens
+chartSetIdL :: Lens_' ChartSet (Text)
+chartSetIdL f ChartSet{..} = (\chartSetId -> ChartSet { chartSetId, ..} ) <$> f chartSetId
+{-# INLINE chartSetIdL #-}
+
+-- | 'chartSetName' Lens
+chartSetNameL :: Lens_' ChartSet (Text)
+chartSetNameL f ChartSet{..} = (\chartSetName -> ChartSet { chartSetName, ..} ) <$> f chartSetName
+{-# INLINE chartSetNameL #-}
+
+-- | 'chartSetCharts' Lens
+chartSetChartsL :: Lens_' ChartSet (Maybe [Chart])
+chartSetChartsL f ChartSet{..} = (\chartSetCharts -> ChartSet { chartSetCharts, ..} ) <$> f chartSetCharts
+{-# INLINE chartSetChartsL #-}
+
+
+
+-- * ChartSetParams
+
+-- | 'chartSetParamsName' Lens
+chartSetParamsNameL :: Lens_' ChartSetParams (Text)
+chartSetParamsNameL f ChartSetParams{..} = (\chartSetParamsName -> ChartSetParams { chartSetParamsName, ..} ) <$> f chartSetParamsName
+{-# INLINE chartSetParamsNameL #-}
+
+-- | 'chartSetParamsCharts' Lens
+chartSetParamsChartsL :: Lens_' ChartSetParams (Maybe [ChartDefinition])
+chartSetParamsChartsL f ChartSetParams{..} = (\chartSetParamsCharts -> ChartSetParams { chartSetParamsCharts, ..} ) <$> f chartSetParamsCharts
+{-# INLINE chartSetParamsChartsL #-}
+
+-- | 'chartSetParamsDefaultChartsEnabled' Lens
+chartSetParamsDefaultChartsEnabledL :: Lens_' ChartSetParams (Maybe Bool)
+chartSetParamsDefaultChartsEnabledL f ChartSetParams{..} = (\chartSetParamsDefaultChartsEnabled -> ChartSetParams { chartSetParamsDefaultChartsEnabled, ..} ) <$> f chartSetParamsDefaultChartsEnabled
+{-# INLINE chartSetParamsDefaultChartsEnabledL #-}
+
+-- | 'chartSetParamsIsEditable' Lens
+chartSetParamsIsEditableL :: Lens_' ChartSetParams (Maybe Bool)
+chartSetParamsIsEditableL f ChartSetParams{..} = (\chartSetParamsIsEditable -> ChartSetParams { chartSetParamsIsEditable, ..} ) <$> f chartSetParamsIsEditable
+{-# INLINE chartSetParamsIsEditableL #-}
+
+
+
+-- * Charts
+
+-- | 'chartsManualCharts' Lens
+chartsManualChartsL :: Lens_' Charts ([Chart])
+chartsManualChartsL f Charts{..} = (\chartsManualCharts -> Charts { chartsManualCharts, ..} ) <$> f chartsManualCharts
+{-# INLINE chartsManualChartsL #-}
+
+-- | 'chartsDefaultCharts' Lens
+chartsDefaultChartsL :: Lens_' Charts ([Chart])
+chartsDefaultChartsL f Charts{..} = (\chartsDefaultCharts -> Charts { chartsDefaultCharts, ..} ) <$> f chartsDefaultCharts
+{-# INLINE chartsDefaultChartsL #-}
+
+
+
+-- * ClientConfig
+
+-- | 'clientConfigApiUrl' Lens
+clientConfigApiUrlL :: Lens_' ClientConfig (Text)
+clientConfigApiUrlL f ClientConfig{..} = (\clientConfigApiUrl -> ClientConfig { clientConfigApiUrl, ..} ) <$> f clientConfigApiUrl
+{-# INLINE clientConfigApiUrlL #-}
+
+-- | 'clientConfigApplicationUrl' Lens
+clientConfigApplicationUrlL :: Lens_' ClientConfig (Text)
+clientConfigApplicationUrlL f ClientConfig{..} = (\clientConfigApplicationUrl -> ClientConfig { clientConfigApplicationUrl, ..} ) <$> f clientConfigApplicationUrl
+{-# INLINE clientConfigApplicationUrlL #-}
+
+-- | 'clientConfigPyLibVersions' Lens
+clientConfigPyLibVersionsL :: Lens_' ClientConfig (ClientVersionsConfigDTO)
+clientConfigPyLibVersionsL f ClientConfig{..} = (\clientConfigPyLibVersions -> ClientConfig { clientConfigPyLibVersions, ..} ) <$> f clientConfigPyLibVersions
+{-# INLINE clientConfigPyLibVersionsL #-}
+
+
+
+-- * ClientVersionsConfigDTO
+
+-- | 'clientVersionsConfigDTOMinRecommendedVersion' Lens
+clientVersionsConfigDTOMinRecommendedVersionL :: Lens_' ClientVersionsConfigDTO (Maybe Text)
+clientVersionsConfigDTOMinRecommendedVersionL f ClientVersionsConfigDTO{..} = (\clientVersionsConfigDTOMinRecommendedVersion -> ClientVersionsConfigDTO { clientVersionsConfigDTOMinRecommendedVersion, ..} ) <$> f clientVersionsConfigDTOMinRecommendedVersion
+{-# INLINE clientVersionsConfigDTOMinRecommendedVersionL #-}
+
+-- | 'clientVersionsConfigDTOMinCompatibleVersion' Lens
+clientVersionsConfigDTOMinCompatibleVersionL :: Lens_' ClientVersionsConfigDTO (Maybe Text)
+clientVersionsConfigDTOMinCompatibleVersionL f ClientVersionsConfigDTO{..} = (\clientVersionsConfigDTOMinCompatibleVersion -> ClientVersionsConfigDTO { clientVersionsConfigDTOMinCompatibleVersion, ..} ) <$> f clientVersionsConfigDTOMinCompatibleVersion
+{-# INLINE clientVersionsConfigDTOMinCompatibleVersionL #-}
+
+-- | 'clientVersionsConfigDTOMaxCompatibleVersion' Lens
+clientVersionsConfigDTOMaxCompatibleVersionL :: Lens_' ClientVersionsConfigDTO (Maybe Text)
+clientVersionsConfigDTOMaxCompatibleVersionL f ClientVersionsConfigDTO{..} = (\clientVersionsConfigDTOMaxCompatibleVersion -> ClientVersionsConfigDTO { clientVersionsConfigDTOMaxCompatibleVersion, ..} ) <$> f clientVersionsConfigDTOMaxCompatibleVersion
+{-# INLINE clientVersionsConfigDTOMaxCompatibleVersionL #-}
+
+
+
+-- * CompletedExperimentParams
+
+-- | 'completedExperimentParamsState' Lens
+completedExperimentParamsStateL :: Lens_' CompletedExperimentParams (ExperimentState)
+completedExperimentParamsStateL f CompletedExperimentParams{..} = (\completedExperimentParamsState -> CompletedExperimentParams { completedExperimentParamsState, ..} ) <$> f completedExperimentParamsState
+{-# INLINE completedExperimentParamsStateL #-}
+
+-- | 'completedExperimentParamsTraceback' Lens
+completedExperimentParamsTracebackL :: Lens_' CompletedExperimentParams (Text)
+completedExperimentParamsTracebackL f CompletedExperimentParams{..} = (\completedExperimentParamsTraceback -> CompletedExperimentParams { completedExperimentParamsTraceback, ..} ) <$> f completedExperimentParamsTraceback
+{-# INLINE completedExperimentParamsTracebackL #-}
+
+
+
+-- * ComponentStatus
+
+-- | 'componentStatusName' Lens
+componentStatusNameL :: Lens_' ComponentStatus (Text)
+componentStatusNameL f ComponentStatus{..} = (\componentStatusName -> ComponentStatus { componentStatusName, ..} ) <$> f componentStatusName
+{-# INLINE componentStatusNameL #-}
+
+-- | 'componentStatusStatus' Lens
+componentStatusStatusL :: Lens_' ComponentStatus (Text)
+componentStatusStatusL f ComponentStatus{..} = (\componentStatusStatus -> ComponentStatus { componentStatusStatus, ..} ) <$> f componentStatusStatus
+{-# INLINE componentStatusStatusL #-}
+
+
+
+-- * ComponentVersion
+
+-- | 'componentVersionName' Lens
+componentVersionNameL :: Lens_' ComponentVersion (NameEnum)
+componentVersionNameL f ComponentVersion{..} = (\componentVersionName -> ComponentVersion { componentVersionName, ..} ) <$> f componentVersionName
+{-# INLINE componentVersionNameL #-}
+
+-- | 'componentVersionVersion' Lens
+componentVersionVersionL :: Lens_' ComponentVersion (Text)
+componentVersionVersionL f ComponentVersion{..} = (\componentVersionVersion -> ComponentVersion { componentVersionVersion, ..} ) <$> f componentVersionVersion
+{-# INLINE componentVersionVersionL #-}
+
+
+
+-- * ConfigInfo
+
+-- | 'configInfoMaxFormContentSize' Lens
+configInfoMaxFormContentSizeL :: Lens_' ConfigInfo (Int)
+configInfoMaxFormContentSizeL f ConfigInfo{..} = (\configInfoMaxFormContentSize -> ConfigInfo { configInfoMaxFormContentSize, ..} ) <$> f configInfoMaxFormContentSize
+{-# INLINE configInfoMaxFormContentSizeL #-}
+
+
+
+-- * CreateSessionParamsDTO
+
+-- | 'createSessionParamsDTOSuccessUrl' Lens
+createSessionParamsDTOSuccessUrlL :: Lens_' CreateSessionParamsDTO (Text)
+createSessionParamsDTOSuccessUrlL f CreateSessionParamsDTO{..} = (\createSessionParamsDTOSuccessUrl -> CreateSessionParamsDTO { createSessionParamsDTOSuccessUrl, ..} ) <$> f createSessionParamsDTOSuccessUrl
+{-# INLINE createSessionParamsDTOSuccessUrlL #-}
+
+-- | 'createSessionParamsDTOFailureUrl' Lens
+createSessionParamsDTOFailureUrlL :: Lens_' CreateSessionParamsDTO (Text)
+createSessionParamsDTOFailureUrlL f CreateSessionParamsDTO{..} = (\createSessionParamsDTOFailureUrl -> CreateSessionParamsDTO { createSessionParamsDTOFailureUrl, ..} ) <$> f createSessionParamsDTOFailureUrl
+{-# INLINE createSessionParamsDTOFailureUrlL #-}
+
+
+
+-- * CustomerDTO
+
+-- | 'customerDTONumberOfUsers' Lens
+customerDTONumberOfUsersL :: Lens_' CustomerDTO (Maybe Integer)
+customerDTONumberOfUsersL f CustomerDTO{..} = (\customerDTONumberOfUsers -> CustomerDTO { customerDTONumberOfUsers, ..} ) <$> f customerDTONumberOfUsers
+{-# INLINE customerDTONumberOfUsersL #-}
+
+-- | 'customerDTOUserPriceInCents' Lens
+customerDTOUserPriceInCentsL :: Lens_' CustomerDTO (Integer)
+customerDTOUserPriceInCentsL f CustomerDTO{..} = (\customerDTOUserPriceInCents -> CustomerDTO { customerDTOUserPriceInCents, ..} ) <$> f customerDTOUserPriceInCents
+{-# INLINE customerDTOUserPriceInCentsL #-}
+
+-- | 'customerDTOPricingPlan' Lens
+customerDTOPricingPlanL :: Lens_' CustomerDTO (PricingPlanDTO)
+customerDTOPricingPlanL f CustomerDTO{..} = (\customerDTOPricingPlan -> CustomerDTO { customerDTOPricingPlan, ..} ) <$> f customerDTOPricingPlan
+{-# INLINE customerDTOPricingPlanL #-}
+
+-- | 'customerDTODiscount' Lens
+customerDTODiscountL :: Lens_' CustomerDTO (Maybe DiscountDTO)
+customerDTODiscountL f CustomerDTO{..} = (\customerDTODiscount -> CustomerDTO { customerDTODiscount, ..} ) <$> f customerDTODiscount
+{-# INLINE customerDTODiscountL #-}
+
+
+
+-- * DiscountCodeDTO
+
+-- | 'discountCodeDTOCode' Lens
+discountCodeDTOCodeL :: Lens_' DiscountCodeDTO (Text)
+discountCodeDTOCodeL f DiscountCodeDTO{..} = (\discountCodeDTOCode -> DiscountCodeDTO { discountCodeDTOCode, ..} ) <$> f discountCodeDTOCode
+{-# INLINE discountCodeDTOCodeL #-}
+
+
+
+-- * DiscountDTO
+
+-- | 'discountDTOAmountOffPercentage' Lens
+discountDTOAmountOffPercentageL :: Lens_' DiscountDTO (Maybe Integer)
+discountDTOAmountOffPercentageL f DiscountDTO{..} = (\discountDTOAmountOffPercentage -> DiscountDTO { discountDTOAmountOffPercentage, ..} ) <$> f discountDTOAmountOffPercentage
+{-# INLINE discountDTOAmountOffPercentageL #-}
+
+-- | 'discountDTOAmountOffInCents' Lens
+discountDTOAmountOffInCentsL :: Lens_' DiscountDTO (Maybe Integer)
+discountDTOAmountOffInCentsL f DiscountDTO{..} = (\discountDTOAmountOffInCents -> DiscountDTO { discountDTOAmountOffInCents, ..} ) <$> f discountDTOAmountOffInCents
+{-# INLINE discountDTOAmountOffInCentsL #-}
+
+-- | 'discountDTOEnd' Lens
+discountDTOEndL :: Lens_' DiscountDTO (Maybe DateTime)
+discountDTOEndL f DiscountDTO{..} = (\discountDTOEnd -> DiscountDTO { discountDTOEnd, ..} ) <$> f discountDTOEnd
+{-# INLINE discountDTOEndL #-}
+
+
+
+-- * DownloadPrepareRequestDTO
+
+-- | 'downloadPrepareRequestDTOId' Lens
+downloadPrepareRequestDTOIdL :: Lens_' DownloadPrepareRequestDTO (Text)
+downloadPrepareRequestDTOIdL f DownloadPrepareRequestDTO{..} = (\downloadPrepareRequestDTOId -> DownloadPrepareRequestDTO { downloadPrepareRequestDTOId, ..} ) <$> f downloadPrepareRequestDTOId
+{-# INLINE downloadPrepareRequestDTOIdL #-}
+
+-- | 'downloadPrepareRequestDTODownloadUrl' Lens
+downloadPrepareRequestDTODownloadUrlL :: Lens_' DownloadPrepareRequestDTO (Maybe Text)
+downloadPrepareRequestDTODownloadUrlL f DownloadPrepareRequestDTO{..} = (\downloadPrepareRequestDTODownloadUrl -> DownloadPrepareRequestDTO { downloadPrepareRequestDTODownloadUrl, ..} ) <$> f downloadPrepareRequestDTODownloadUrl
+{-# INLINE downloadPrepareRequestDTODownloadUrlL #-}
+
+
+
+-- * EditExperimentParams
+
+-- | 'editExperimentParamsName' Lens
+editExperimentParamsNameL :: Lens_' EditExperimentParams (Maybe Text)
+editExperimentParamsNameL f EditExperimentParams{..} = (\editExperimentParamsName -> EditExperimentParams { editExperimentParamsName, ..} ) <$> f editExperimentParamsName
+{-# INLINE editExperimentParamsNameL #-}
+
+-- | 'editExperimentParamsDescription' Lens
+editExperimentParamsDescriptionL :: Lens_' EditExperimentParams (Maybe Text)
+editExperimentParamsDescriptionL f EditExperimentParams{..} = (\editExperimentParamsDescription -> EditExperimentParams { editExperimentParamsDescription, ..} ) <$> f editExperimentParamsDescription
+{-# INLINE editExperimentParamsDescriptionL #-}
+
+-- | 'editExperimentParamsTags' Lens
+editExperimentParamsTagsL :: Lens_' EditExperimentParams (Maybe [Text])
+editExperimentParamsTagsL f EditExperimentParams{..} = (\editExperimentParamsTags -> EditExperimentParams { editExperimentParamsTags, ..} ) <$> f editExperimentParamsTags
+{-# INLINE editExperimentParamsTagsL #-}
+
+-- | 'editExperimentParamsProperties' Lens
+editExperimentParamsPropertiesL :: Lens_' EditExperimentParams (Maybe [KeyValueProperty])
+editExperimentParamsPropertiesL f EditExperimentParams{..} = (\editExperimentParamsProperties -> EditExperimentParams { editExperimentParamsProperties, ..} ) <$> f editExperimentParamsProperties
+{-# INLINE editExperimentParamsPropertiesL #-}
+
+
+
+-- * Error
+
+-- | 'errorCode' Lens
+errorCodeL :: Lens_' Error (Int)
+errorCodeL f Error{..} = (\errorCode -> Error { errorCode, ..} ) <$> f errorCode
+{-# INLINE errorCodeL #-}
+
+-- | 'errorMessage' Lens
+errorMessageL :: Lens_' Error (Text)
+errorMessageL f Error{..} = (\errorMessage -> Error { errorMessage, ..} ) <$> f errorMessage
+{-# INLINE errorMessageL #-}
+
+-- | 'errorType' Lens
+errorTypeL :: Lens_' Error (Maybe ApiErrorTypeDTO)
+errorTypeL f Error{..} = (\errorType -> Error { errorType, ..} ) <$> f errorType
+{-# INLINE errorTypeL #-}
+
+
+
+-- * Experiment
+
+-- | 'experimentChannels' Lens
+experimentChannelsL :: Lens_' Experiment (Maybe [Channel])
+experimentChannelsL f Experiment{..} = (\experimentChannels -> Experiment { experimentChannels, ..} ) <$> f experimentChannels
+{-# INLINE experimentChannelsL #-}
+
+-- | 'experimentState' Lens
+experimentStateL :: Lens_' Experiment (Maybe ExperimentState)
+experimentStateL f Experiment{..} = (\experimentState -> Experiment { experimentState, ..} ) <$> f experimentState
+{-# INLINE experimentStateL #-}
+
+-- | 'experimentTimeOfCompletion' Lens
+experimentTimeOfCompletionL :: Lens_' Experiment (Maybe DateTime)
+experimentTimeOfCompletionL f Experiment{..} = (\experimentTimeOfCompletion -> Experiment { experimentTimeOfCompletion, ..} ) <$> f experimentTimeOfCompletion
+{-# INLINE experimentTimeOfCompletionL #-}
+
+-- | 'experimentCheckpointId' Lens
+experimentCheckpointIdL :: Lens_' Experiment (Maybe Text)
+experimentCheckpointIdL f Experiment{..} = (\experimentCheckpointId -> Experiment { experimentCheckpointId, ..} ) <$> f experimentCheckpointId
+{-# INLINE experimentCheckpointIdL #-}
+
+-- | 'experimentPaths' Lens
+experimentPathsL :: Lens_' Experiment (Maybe ExperimentPaths)
+experimentPathsL f Experiment{..} = (\experimentPaths -> Experiment { experimentPaths, ..} ) <$> f experimentPaths
+{-# INLINE experimentPathsL #-}
+
+-- | 'experimentResponding' Lens
+experimentRespondingL :: Lens_' Experiment (Maybe Bool)
+experimentRespondingL f Experiment{..} = (\experimentResponding -> Experiment { experimentResponding, ..} ) <$> f experimentResponding
+{-# INLINE experimentRespondingL #-}
+
+-- | 'experimentOrganizationId' Lens
+experimentOrganizationIdL :: Lens_' Experiment (Maybe Text)
+experimentOrganizationIdL f Experiment{..} = (\experimentOrganizationId -> Experiment { experimentOrganizationId, ..} ) <$> f experimentOrganizationId
+{-# INLINE experimentOrganizationIdL #-}
+
+-- | 'experimentStateTransitions' Lens
+experimentStateTransitionsL :: Lens_' Experiment (Maybe StateTransitions)
+experimentStateTransitionsL f Experiment{..} = (\experimentStateTransitions -> Experiment { experimentStateTransitions, ..} ) <$> f experimentStateTransitions
+{-# INLINE experimentStateTransitionsL #-}
+
+-- | 'experimentParameters' Lens
+experimentParametersL :: Lens_' Experiment (Maybe [Parameter])
+experimentParametersL f Experiment{..} = (\experimentParameters -> Experiment { experimentParameters, ..} ) <$> f experimentParameters
+{-# INLINE experimentParametersL #-}
+
+-- | 'experimentChannelsLastValues' Lens
+experimentChannelsLastValuesL :: Lens_' Experiment (Maybe [ChannelWithValue])
+experimentChannelsLastValuesL f Experiment{..} = (\experimentChannelsLastValues -> Experiment { experimentChannelsLastValues, ..} ) <$> f experimentChannelsLastValues
+{-# INLINE experimentChannelsLastValuesL #-}
+
+-- | 'experimentStorageSize' Lens
+experimentStorageSizeL :: Lens_' Experiment (Maybe Integer)
+experimentStorageSizeL f Experiment{..} = (\experimentStorageSize -> Experiment { experimentStorageSize, ..} ) <$> f experimentStorageSize
+{-# INLINE experimentStorageSizeL #-}
+
+-- | 'experimentName' Lens
+experimentNameL :: Lens_' Experiment (Maybe Text)
+experimentNameL f Experiment{..} = (\experimentName -> Experiment { experimentName, ..} ) <$> f experimentName
+{-# INLINE experimentNameL #-}
+
+-- | 'experimentNotebookId' Lens
+experimentNotebookIdL :: Lens_' Experiment (Maybe Text)
+experimentNotebookIdL f Experiment{..} = (\experimentNotebookId -> Experiment { experimentNotebookId, ..} ) <$> f experimentNotebookId
+{-# INLINE experimentNotebookIdL #-}
+
+-- | 'experimentProjectName' Lens
+experimentProjectNameL :: Lens_' Experiment (Maybe Text)
+experimentProjectNameL f Experiment{..} = (\experimentProjectName -> Experiment { experimentProjectName, ..} ) <$> f experimentProjectName
+{-# INLINE experimentProjectNameL #-}
+
+-- | 'experimentHostname' Lens
+experimentHostnameL :: Lens_' Experiment (Maybe Text)
+experimentHostnameL f Experiment{..} = (\experimentHostname -> Experiment { experimentHostname, ..} ) <$> f experimentHostname
+{-# INLINE experimentHostnameL #-}
+
+-- | 'experimentTrashed' Lens
+experimentTrashedL :: Lens_' Experiment (Maybe Bool)
+experimentTrashedL f Experiment{..} = (\experimentTrashed -> Experiment { experimentTrashed, ..} ) <$> f experimentTrashed
+{-# INLINE experimentTrashedL #-}
+
+-- | 'experimentDescription' Lens
+experimentDescriptionL :: Lens_' Experiment (Maybe Text)
+experimentDescriptionL f Experiment{..} = (\experimentDescription -> Experiment { experimentDescription, ..} ) <$> f experimentDescription
+{-# INLINE experimentDescriptionL #-}
+
+-- | 'experimentTags' Lens
+experimentTagsL :: Lens_' Experiment (Maybe [Text])
+experimentTagsL f Experiment{..} = (\experimentTags -> Experiment { experimentTags, ..} ) <$> f experimentTags
+{-# INLINE experimentTagsL #-}
+
+-- | 'experimentChannelsSize' Lens
+experimentChannelsSizeL :: Lens_' Experiment (Maybe Integer)
+experimentChannelsSizeL f Experiment{..} = (\experimentChannelsSize -> Experiment { experimentChannelsSize, ..} ) <$> f experimentChannelsSize
+{-# INLINE experimentChannelsSizeL #-}
+
+-- | 'experimentTimeOfCreation' Lens
+experimentTimeOfCreationL :: Lens_' Experiment (Maybe DateTime)
+experimentTimeOfCreationL f Experiment{..} = (\experimentTimeOfCreation -> Experiment { experimentTimeOfCreation, ..} ) <$> f experimentTimeOfCreation
+{-# INLINE experimentTimeOfCreationL #-}
+
+-- | 'experimentProjectId' Lens
+experimentProjectIdL :: Lens_' Experiment (Maybe Text)
+experimentProjectIdL f Experiment{..} = (\experimentProjectId -> Experiment { experimentProjectId, ..} ) <$> f experimentProjectId
+{-# INLINE experimentProjectIdL #-}
+
+-- | 'experimentOrganizationName' Lens
+experimentOrganizationNameL :: Lens_' Experiment (Maybe Text)
+experimentOrganizationNameL f Experiment{..} = (\experimentOrganizationName -> Experiment { experimentOrganizationName, ..} ) <$> f experimentOrganizationName
+{-# INLINE experimentOrganizationNameL #-}
+
+-- | 'experimentIsCodeAccessible' Lens
+experimentIsCodeAccessibleL :: Lens_' Experiment (Maybe Bool)
+experimentIsCodeAccessibleL f Experiment{..} = (\experimentIsCodeAccessible -> Experiment { experimentIsCodeAccessible, ..} ) <$> f experimentIsCodeAccessible
+{-# INLINE experimentIsCodeAccessibleL #-}
+
+-- | 'experimentTraceback' Lens
+experimentTracebackL :: Lens_' Experiment (Maybe Text)
+experimentTracebackL f Experiment{..} = (\experimentTraceback -> Experiment { experimentTraceback, ..} ) <$> f experimentTraceback
+{-# INLINE experimentTracebackL #-}
+
+-- | 'experimentEntrypoint' Lens
+experimentEntrypointL :: Lens_' Experiment (Maybe Text)
+experimentEntrypointL f Experiment{..} = (\experimentEntrypoint -> Experiment { experimentEntrypoint, ..} ) <$> f experimentEntrypoint
+{-# INLINE experimentEntrypointL #-}
+
+-- | 'experimentRunningTime' Lens
+experimentRunningTimeL :: Lens_' Experiment (Maybe Integer)
+experimentRunningTimeL f Experiment{..} = (\experimentRunningTime -> Experiment { experimentRunningTime, ..} ) <$> f experimentRunningTime
+{-# INLINE experimentRunningTimeL #-}
+
+-- | 'experimentId' Lens
+experimentIdL :: Lens_' Experiment (Text)
+experimentIdL f Experiment{..} = (\experimentId -> Experiment { experimentId, ..} ) <$> f experimentId
+{-# INLINE experimentIdL #-}
+
+-- | 'experimentInputs' Lens
+experimentInputsL :: Lens_' Experiment (Maybe [InputMetadata])
+experimentInputsL f Experiment{..} = (\experimentInputs -> Experiment { experimentInputs, ..} ) <$> f experimentInputs
+{-# INLINE experimentInputsL #-}
+
+-- | 'experimentProperties' Lens
+experimentPropertiesL :: Lens_' Experiment (Maybe [KeyValueProperty])
+experimentPropertiesL f Experiment{..} = (\experimentProperties -> Experiment { experimentProperties, ..} ) <$> f experimentProperties
+{-# INLINE experimentPropertiesL #-}
+
+-- | 'experimentShortId' Lens
+experimentShortIdL :: Lens_' Experiment (Text)
+experimentShortIdL f Experiment{..} = (\experimentShortId -> Experiment { experimentShortId, ..} ) <$> f experimentShortId
+{-# INLINE experimentShortIdL #-}
+
+-- | 'experimentComponentsVersions' Lens
+experimentComponentsVersionsL :: Lens_' Experiment (Maybe [ComponentVersion])
+experimentComponentsVersionsL f Experiment{..} = (\experimentComponentsVersions -> Experiment { experimentComponentsVersions, ..} ) <$> f experimentComponentsVersions
+{-# INLINE experimentComponentsVersionsL #-}
+
+-- | 'experimentOwner' Lens
+experimentOwnerL :: Lens_' Experiment (Maybe Text)
+experimentOwnerL f Experiment{..} = (\experimentOwner -> Experiment { experimentOwner, ..} ) <$> f experimentOwner
+{-# INLINE experimentOwnerL #-}
+
+
+
+-- * ExperimentCreationParams
+
+-- | 'experimentCreationParamsMonitored' Lens
+experimentCreationParamsMonitoredL :: Lens_' ExperimentCreationParams (Maybe Bool)
+experimentCreationParamsMonitoredL f ExperimentCreationParams{..} = (\experimentCreationParamsMonitored -> ExperimentCreationParams { experimentCreationParamsMonitored, ..} ) <$> f experimentCreationParamsMonitored
+{-# INLINE experimentCreationParamsMonitoredL #-}
+
+-- | 'experimentCreationParamsHostname' Lens
+experimentCreationParamsHostnameL :: Lens_' ExperimentCreationParams (Maybe Text)
+experimentCreationParamsHostnameL f ExperimentCreationParams{..} = (\experimentCreationParamsHostname -> ExperimentCreationParams { experimentCreationParamsHostname, ..} ) <$> f experimentCreationParamsHostname
+{-# INLINE experimentCreationParamsHostnameL #-}
+
+-- | 'experimentCreationParamsCheckpointId' Lens
+experimentCreationParamsCheckpointIdL :: Lens_' ExperimentCreationParams (Maybe Text)
+experimentCreationParamsCheckpointIdL f ExperimentCreationParams{..} = (\experimentCreationParamsCheckpointId -> ExperimentCreationParams { experimentCreationParamsCheckpointId, ..} ) <$> f experimentCreationParamsCheckpointId
+{-# INLINE experimentCreationParamsCheckpointIdL #-}
+
+-- | 'experimentCreationParamsProjectId' Lens
+experimentCreationParamsProjectIdL :: Lens_' ExperimentCreationParams (Text)
+experimentCreationParamsProjectIdL f ExperimentCreationParams{..} = (\experimentCreationParamsProjectId -> ExperimentCreationParams { experimentCreationParamsProjectId, ..} ) <$> f experimentCreationParamsProjectId
+{-# INLINE experimentCreationParamsProjectIdL #-}
+
+-- | 'experimentCreationParamsGitInfo' Lens
+experimentCreationParamsGitInfoL :: Lens_' ExperimentCreationParams (Maybe GitInfoDTO)
+experimentCreationParamsGitInfoL f ExperimentCreationParams{..} = (\experimentCreationParamsGitInfo -> ExperimentCreationParams { experimentCreationParamsGitInfo, ..} ) <$> f experimentCreationParamsGitInfo
+{-# INLINE experimentCreationParamsGitInfoL #-}
+
+-- | 'experimentCreationParamsProperties' Lens
+experimentCreationParamsPropertiesL :: Lens_' ExperimentCreationParams ([KeyValueProperty])
+experimentCreationParamsPropertiesL f ExperimentCreationParams{..} = (\experimentCreationParamsProperties -> ExperimentCreationParams { experimentCreationParamsProperties, ..} ) <$> f experimentCreationParamsProperties
+{-# INLINE experimentCreationParamsPropertiesL #-}
+
+-- | 'experimentCreationParamsConfigPath' Lens
+experimentCreationParamsConfigPathL :: Lens_' ExperimentCreationParams (Maybe Text)
+experimentCreationParamsConfigPathL f ExperimentCreationParams{..} = (\experimentCreationParamsConfigPath -> ExperimentCreationParams { experimentCreationParamsConfigPath, ..} ) <$> f experimentCreationParamsConfigPath
+{-# INLINE experimentCreationParamsConfigPathL #-}
+
+-- | 'experimentCreationParamsExecArgsTemplate' Lens
+experimentCreationParamsExecArgsTemplateL :: Lens_' ExperimentCreationParams (Text)
+experimentCreationParamsExecArgsTemplateL f ExperimentCreationParams{..} = (\experimentCreationParamsExecArgsTemplate -> ExperimentCreationParams { experimentCreationParamsExecArgsTemplate, ..} ) <$> f experimentCreationParamsExecArgsTemplate
+{-# INLINE experimentCreationParamsExecArgsTemplateL #-}
+
+-- | 'experimentCreationParamsParameters' Lens
+experimentCreationParamsParametersL :: Lens_' ExperimentCreationParams ([Parameter])
+experimentCreationParamsParametersL f ExperimentCreationParams{..} = (\experimentCreationParamsParameters -> ExperimentCreationParams { experimentCreationParamsParameters, ..} ) <$> f experimentCreationParamsParameters
+{-# INLINE experimentCreationParamsParametersL #-}
+
+-- | 'experimentCreationParamsEnqueueCommand' Lens
+experimentCreationParamsEnqueueCommandL :: Lens_' ExperimentCreationParams (Text)
+experimentCreationParamsEnqueueCommandL f ExperimentCreationParams{..} = (\experimentCreationParamsEnqueueCommand -> ExperimentCreationParams { experimentCreationParamsEnqueueCommand, ..} ) <$> f experimentCreationParamsEnqueueCommand
+{-# INLINE experimentCreationParamsEnqueueCommandL #-}
+
+-- | 'experimentCreationParamsName' Lens
+experimentCreationParamsNameL :: Lens_' ExperimentCreationParams (Text)
+experimentCreationParamsNameL f ExperimentCreationParams{..} = (\experimentCreationParamsName -> ExperimentCreationParams { experimentCreationParamsName, ..} ) <$> f experimentCreationParamsName
+{-# INLINE experimentCreationParamsNameL #-}
+
+-- | 'experimentCreationParamsNotebookId' Lens
+experimentCreationParamsNotebookIdL :: Lens_' ExperimentCreationParams (Maybe Text)
+experimentCreationParamsNotebookIdL f ExperimentCreationParams{..} = (\experimentCreationParamsNotebookId -> ExperimentCreationParams { experimentCreationParamsNotebookId, ..} ) <$> f experimentCreationParamsNotebookId
+{-# INLINE experimentCreationParamsNotebookIdL #-}
+
+-- | 'experimentCreationParamsDescription' Lens
+experimentCreationParamsDescriptionL :: Lens_' ExperimentCreationParams (Maybe Text)
+experimentCreationParamsDescriptionL f ExperimentCreationParams{..} = (\experimentCreationParamsDescription -> ExperimentCreationParams { experimentCreationParamsDescription, ..} ) <$> f experimentCreationParamsDescription
+{-# INLINE experimentCreationParamsDescriptionL #-}
+
+-- | 'experimentCreationParamsTags' Lens
+experimentCreationParamsTagsL :: Lens_' ExperimentCreationParams ([Text])
+experimentCreationParamsTagsL f ExperimentCreationParams{..} = (\experimentCreationParamsTags -> ExperimentCreationParams { experimentCreationParamsTags, ..} ) <$> f experimentCreationParamsTags
+{-# INLINE experimentCreationParamsTagsL #-}
+
+-- | 'experimentCreationParamsAbortable' Lens
+experimentCreationParamsAbortableL :: Lens_' ExperimentCreationParams (Maybe Bool)
+experimentCreationParamsAbortableL f ExperimentCreationParams{..} = (\experimentCreationParamsAbortable -> ExperimentCreationParams { experimentCreationParamsAbortable, ..} ) <$> f experimentCreationParamsAbortable
+{-# INLINE experimentCreationParamsAbortableL #-}
+
+-- | 'experimentCreationParamsEntrypoint' Lens
+experimentCreationParamsEntrypointL :: Lens_' ExperimentCreationParams (Maybe Text)
+experimentCreationParamsEntrypointL f ExperimentCreationParams{..} = (\experimentCreationParamsEntrypoint -> ExperimentCreationParams { experimentCreationParamsEntrypoint, ..} ) <$> f experimentCreationParamsEntrypoint
+{-# INLINE experimentCreationParamsEntrypointL #-}
+
+
+
+-- * ExperimentPaths
+
+-- | 'experimentPathsOutput' Lens
+experimentPathsOutputL :: Lens_' ExperimentPaths (Text)
+experimentPathsOutputL f ExperimentPaths{..} = (\experimentPathsOutput -> ExperimentPaths { experimentPathsOutput, ..} ) <$> f experimentPathsOutput
+{-# INLINE experimentPathsOutputL #-}
+
+-- | 'experimentPathsSource' Lens
+experimentPathsSourceL :: Lens_' ExperimentPaths (Text)
+experimentPathsSourceL f ExperimentPaths{..} = (\experimentPathsSource -> ExperimentPaths { experimentPathsSource, ..} ) <$> f experimentPathsSource
+{-# INLINE experimentPathsSourceL #-}
+
+
+
+-- * ExperimentState
+
+
+
+-- * ExperimentsAttributesNamesDTO
+
+-- | 'experimentsAttributesNamesDTOTextParametersNames' Lens
+experimentsAttributesNamesDTOTextParametersNamesL :: Lens_' ExperimentsAttributesNamesDTO ([Text])
+experimentsAttributesNamesDTOTextParametersNamesL f ExperimentsAttributesNamesDTO{..} = (\experimentsAttributesNamesDTOTextParametersNames -> ExperimentsAttributesNamesDTO { experimentsAttributesNamesDTOTextParametersNames, ..} ) <$> f experimentsAttributesNamesDTOTextParametersNames
+{-# INLINE experimentsAttributesNamesDTOTextParametersNamesL #-}
+
+-- | 'experimentsAttributesNamesDTOPropertiesNames' Lens
+experimentsAttributesNamesDTOPropertiesNamesL :: Lens_' ExperimentsAttributesNamesDTO ([Text])
+experimentsAttributesNamesDTOPropertiesNamesL f ExperimentsAttributesNamesDTO{..} = (\experimentsAttributesNamesDTOPropertiesNames -> ExperimentsAttributesNamesDTO { experimentsAttributesNamesDTOPropertiesNames, ..} ) <$> f experimentsAttributesNamesDTOPropertiesNames
+{-# INLINE experimentsAttributesNamesDTOPropertiesNamesL #-}
+
+-- | 'experimentsAttributesNamesDTONumericChannelsNames' Lens
+experimentsAttributesNamesDTONumericChannelsNamesL :: Lens_' ExperimentsAttributesNamesDTO ([Text])
+experimentsAttributesNamesDTONumericChannelsNamesL f ExperimentsAttributesNamesDTO{..} = (\experimentsAttributesNamesDTONumericChannelsNames -> ExperimentsAttributesNamesDTO { experimentsAttributesNamesDTONumericChannelsNames, ..} ) <$> f experimentsAttributesNamesDTONumericChannelsNames
+{-# INLINE experimentsAttributesNamesDTONumericChannelsNamesL #-}
+
+-- | 'experimentsAttributesNamesDTONumericParametersNames' Lens
+experimentsAttributesNamesDTONumericParametersNamesL :: Lens_' ExperimentsAttributesNamesDTO ([Text])
+experimentsAttributesNamesDTONumericParametersNamesL f ExperimentsAttributesNamesDTO{..} = (\experimentsAttributesNamesDTONumericParametersNames -> ExperimentsAttributesNamesDTO { experimentsAttributesNamesDTONumericParametersNames, ..} ) <$> f experimentsAttributesNamesDTONumericParametersNames
+{-# INLINE experimentsAttributesNamesDTONumericParametersNamesL #-}
+
+-- | 'experimentsAttributesNamesDTOTextChannelsNames' Lens
+experimentsAttributesNamesDTOTextChannelsNamesL :: Lens_' ExperimentsAttributesNamesDTO ([Text])
+experimentsAttributesNamesDTOTextChannelsNamesL f ExperimentsAttributesNamesDTO{..} = (\experimentsAttributesNamesDTOTextChannelsNames -> ExperimentsAttributesNamesDTO { experimentsAttributesNamesDTOTextChannelsNames, ..} ) <$> f experimentsAttributesNamesDTOTextChannelsNames
+{-# INLINE experimentsAttributesNamesDTOTextChannelsNamesL #-}
+
+
+
+-- * File
+
+-- | 'filePath' Lens
+filePathL :: Lens_' File (Text)
+filePathL f File{..} = (\filePath -> File { filePath, ..} ) <$> f filePath
+{-# INLINE filePathL #-}
+
+
+
+-- * GitCommitDTO
+
+-- | 'gitCommitDTOAuthorEmail' Lens
+gitCommitDTOAuthorEmailL :: Lens_' GitCommitDTO (Text)
+gitCommitDTOAuthorEmailL f GitCommitDTO{..} = (\gitCommitDTOAuthorEmail -> GitCommitDTO { gitCommitDTOAuthorEmail, ..} ) <$> f gitCommitDTOAuthorEmail
+{-# INLINE gitCommitDTOAuthorEmailL #-}
+
+-- | 'gitCommitDTOCommitId' Lens
+gitCommitDTOCommitIdL :: Lens_' GitCommitDTO (Text)
+gitCommitDTOCommitIdL f GitCommitDTO{..} = (\gitCommitDTOCommitId -> GitCommitDTO { gitCommitDTOCommitId, ..} ) <$> f gitCommitDTOCommitId
+{-# INLINE gitCommitDTOCommitIdL #-}
+
+-- | 'gitCommitDTOMessage' Lens
+gitCommitDTOMessageL :: Lens_' GitCommitDTO (Text)
+gitCommitDTOMessageL f GitCommitDTO{..} = (\gitCommitDTOMessage -> GitCommitDTO { gitCommitDTOMessage, ..} ) <$> f gitCommitDTOMessage
+{-# INLINE gitCommitDTOMessageL #-}
+
+-- | 'gitCommitDTOCommitDate' Lens
+gitCommitDTOCommitDateL :: Lens_' GitCommitDTO (DateTime)
+gitCommitDTOCommitDateL f GitCommitDTO{..} = (\gitCommitDTOCommitDate -> GitCommitDTO { gitCommitDTOCommitDate, ..} ) <$> f gitCommitDTOCommitDate
+{-# INLINE gitCommitDTOCommitDateL #-}
+
+-- | 'gitCommitDTOAuthorName' Lens
+gitCommitDTOAuthorNameL :: Lens_' GitCommitDTO (Text)
+gitCommitDTOAuthorNameL f GitCommitDTO{..} = (\gitCommitDTOAuthorName -> GitCommitDTO { gitCommitDTOAuthorName, ..} ) <$> f gitCommitDTOAuthorName
+{-# INLINE gitCommitDTOAuthorNameL #-}
+
+
+
+-- * GitInfoDTO
+
+-- | 'gitInfoDTOCurrentBranch' Lens
+gitInfoDTOCurrentBranchL :: Lens_' GitInfoDTO (Maybe Text)
+gitInfoDTOCurrentBranchL f GitInfoDTO{..} = (\gitInfoDTOCurrentBranch -> GitInfoDTO { gitInfoDTOCurrentBranch, ..} ) <$> f gitInfoDTOCurrentBranch
+{-# INLINE gitInfoDTOCurrentBranchL #-}
+
+-- | 'gitInfoDTORemotes' Lens
+gitInfoDTORemotesL :: Lens_' GitInfoDTO (Maybe [Text])
+gitInfoDTORemotesL f GitInfoDTO{..} = (\gitInfoDTORemotes -> GitInfoDTO { gitInfoDTORemotes, ..} ) <$> f gitInfoDTORemotes
+{-# INLINE gitInfoDTORemotesL #-}
+
+-- | 'gitInfoDTOCommit' Lens
+gitInfoDTOCommitL :: Lens_' GitInfoDTO (GitCommitDTO)
+gitInfoDTOCommitL f GitInfoDTO{..} = (\gitInfoDTOCommit -> GitInfoDTO { gitInfoDTOCommit, ..} ) <$> f gitInfoDTOCommit
+{-# INLINE gitInfoDTOCommitL #-}
+
+-- | 'gitInfoDTORepositoryDirty' Lens
+gitInfoDTORepositoryDirtyL :: Lens_' GitInfoDTO (Bool)
+gitInfoDTORepositoryDirtyL f GitInfoDTO{..} = (\gitInfoDTORepositoryDirty -> GitInfoDTO { gitInfoDTORepositoryDirty, ..} ) <$> f gitInfoDTORepositoryDirty
+{-# INLINE gitInfoDTORepositoryDirtyL #-}
+
+
+
+-- * GlobalConfiguration
+
+-- | 'globalConfigurationLicenseExpiration' Lens
+globalConfigurationLicenseExpirationL :: Lens_' GlobalConfiguration (DateTime)
+globalConfigurationLicenseExpirationL f GlobalConfiguration{..} = (\globalConfigurationLicenseExpiration -> GlobalConfiguration { globalConfigurationLicenseExpiration, ..} ) <$> f globalConfigurationLicenseExpiration
+{-# INLINE globalConfigurationLicenseExpirationL #-}
+
+
+
+-- * InputChannelValues
+
+-- | 'inputChannelValuesChannelId' Lens
+inputChannelValuesChannelIdL :: Lens_' InputChannelValues (Text)
+inputChannelValuesChannelIdL f InputChannelValues{..} = (\inputChannelValuesChannelId -> InputChannelValues { inputChannelValuesChannelId, ..} ) <$> f inputChannelValuesChannelId
+{-# INLINE inputChannelValuesChannelIdL #-}
+
+-- | 'inputChannelValuesValues' Lens
+inputChannelValuesValuesL :: Lens_' InputChannelValues ([Point])
+inputChannelValuesValuesL f InputChannelValues{..} = (\inputChannelValuesValues -> InputChannelValues { inputChannelValuesValues, ..} ) <$> f inputChannelValuesValues
+{-# INLINE inputChannelValuesValuesL #-}
+
+
+
+-- * InputImageDTO
+
+-- | 'inputImageDTOName' Lens
+inputImageDTONameL :: Lens_' InputImageDTO (Maybe Text)
+inputImageDTONameL f InputImageDTO{..} = (\inputImageDTOName -> InputImageDTO { inputImageDTOName, ..} ) <$> f inputImageDTOName
+{-# INLINE inputImageDTONameL #-}
+
+-- | 'inputImageDTODescription' Lens
+inputImageDTODescriptionL :: Lens_' InputImageDTO (Maybe Text)
+inputImageDTODescriptionL f InputImageDTO{..} = (\inputImageDTODescription -> InputImageDTO { inputImageDTODescription, ..} ) <$> f inputImageDTODescription
+{-# INLINE inputImageDTODescriptionL #-}
+
+-- | 'inputImageDTOData' Lens
+inputImageDTODataL :: Lens_' InputImageDTO (Maybe Text)
+inputImageDTODataL f InputImageDTO{..} = (\inputImageDTOData -> InputImageDTO { inputImageDTOData, ..} ) <$> f inputImageDTOData
+{-# INLINE inputImageDTODataL #-}
+
+
+
+-- * InputMetadata
+
+-- | 'inputMetadataSource' Lens
+inputMetadataSourceL :: Lens_' InputMetadata (Text)
+inputMetadataSourceL f InputMetadata{..} = (\inputMetadataSource -> InputMetadata { inputMetadataSource, ..} ) <$> f inputMetadataSource
+{-# INLINE inputMetadataSourceL #-}
+
+-- | 'inputMetadataDestination' Lens
+inputMetadataDestinationL :: Lens_' InputMetadata (Text)
+inputMetadataDestinationL f InputMetadata{..} = (\inputMetadataDestination -> InputMetadata { inputMetadataDestination, ..} ) <$> f inputMetadataDestination
+{-# INLINE inputMetadataDestinationL #-}
+
+-- | 'inputMetadataSize' Lens
+inputMetadataSizeL :: Lens_' InputMetadata (Integer)
+inputMetadataSizeL f InputMetadata{..} = (\inputMetadataSize -> InputMetadata { inputMetadataSize, ..} ) <$> f inputMetadataSize
+{-# INLINE inputMetadataSizeL #-}
+
+
+
+-- * InvitationStatusEnumDTO
+
+
+
+-- * InvitationTypeEnumDTO
+
+
+
+-- * KeyValueProperty
+
+-- | 'keyValuePropertyKey' Lens
+keyValuePropertyKeyL :: Lens_' KeyValueProperty (Text)
+keyValuePropertyKeyL f KeyValueProperty{..} = (\keyValuePropertyKey -> KeyValueProperty { keyValuePropertyKey, ..} ) <$> f keyValuePropertyKey
+{-# INLINE keyValuePropertyKeyL #-}
+
+-- | 'keyValuePropertyValue' Lens
+keyValuePropertyValueL :: Lens_' KeyValueProperty (Text)
+keyValuePropertyValueL f KeyValueProperty{..} = (\keyValuePropertyValue -> KeyValueProperty { keyValuePropertyValue, ..} ) <$> f keyValuePropertyValue
+{-# INLINE keyValuePropertyValueL #-}
+
+
+
+-- * LimitedChannelValuesDTO
+
+-- | 'limitedChannelValuesDTOChannelId' Lens
+limitedChannelValuesDTOChannelIdL :: Lens_' LimitedChannelValuesDTO (Text)
+limitedChannelValuesDTOChannelIdL f LimitedChannelValuesDTO{..} = (\limitedChannelValuesDTOChannelId -> LimitedChannelValuesDTO { limitedChannelValuesDTOChannelId, ..} ) <$> f limitedChannelValuesDTOChannelId
+{-# INLINE limitedChannelValuesDTOChannelIdL #-}
+
+-- | 'limitedChannelValuesDTOValues' Lens
+limitedChannelValuesDTOValuesL :: Lens_' LimitedChannelValuesDTO ([PointValueDTO])
+limitedChannelValuesDTOValuesL f LimitedChannelValuesDTO{..} = (\limitedChannelValuesDTOValues -> LimitedChannelValuesDTO { limitedChannelValuesDTOValues, ..} ) <$> f limitedChannelValuesDTOValues
+{-# INLINE limitedChannelValuesDTOValuesL #-}
+
+-- | 'limitedChannelValuesDTOTotalItemCount' Lens
+limitedChannelValuesDTOTotalItemCountL :: Lens_' LimitedChannelValuesDTO (Int)
+limitedChannelValuesDTOTotalItemCountL f LimitedChannelValuesDTO{..} = (\limitedChannelValuesDTOTotalItemCount -> LimitedChannelValuesDTO { limitedChannelValuesDTOTotalItemCount, ..} ) <$> f limitedChannelValuesDTOTotalItemCount
+{-# INLINE limitedChannelValuesDTOTotalItemCountL #-}
+
+
+
+-- * Link
+
+-- | 'linkUrl' Lens
+linkUrlL :: Lens_' Link (Text)
+linkUrlL f Link{..} = (\linkUrl -> Link { linkUrl, ..} ) <$> f linkUrl
+{-# INLINE linkUrlL #-}
+
+
+
+-- * LinkDTO
+
+-- | 'linkDTOUrl' Lens
+linkDTOUrlL :: Lens_' LinkDTO (Text)
+linkDTOUrlL f LinkDTO{..} = (\linkDTOUrl -> LinkDTO { linkDTOUrl, ..} ) <$> f linkDTOUrl
+{-# INLINE linkDTOUrlL #-}
+
+
+
+-- * LinkTypeDTO
+
+
+
+-- * LoginActionDTO
+
+
+
+-- * LoginActionsListDTO
+
+-- | 'loginActionsListDTORequiredActions' Lens
+loginActionsListDTORequiredActionsL :: Lens_' LoginActionsListDTO ([LoginActionDTO])
+loginActionsListDTORequiredActionsL f LoginActionsListDTO{..} = (\loginActionsListDTORequiredActions -> LoginActionsListDTO { loginActionsListDTORequiredActions, ..} ) <$> f loginActionsListDTORequiredActions
+{-# INLINE loginActionsListDTORequiredActionsL #-}
+
+
+
+-- * NameEnum
+
+
+
+-- * NeptuneApiToken
+
+-- | 'neptuneApiTokenToken' Lens
+neptuneApiTokenTokenL :: Lens_' NeptuneApiToken (Text)
+neptuneApiTokenTokenL f NeptuneApiToken{..} = (\neptuneApiTokenToken -> NeptuneApiToken { neptuneApiTokenToken, ..} ) <$> f neptuneApiTokenToken
+{-# INLINE neptuneApiTokenTokenL #-}
+
+
+
+-- * NeptuneOauthToken
+
+-- | 'neptuneOauthTokenAccessToken' Lens
+neptuneOauthTokenAccessTokenL :: Lens_' NeptuneOauthToken (Text)
+neptuneOauthTokenAccessTokenL f NeptuneOauthToken{..} = (\neptuneOauthTokenAccessToken -> NeptuneOauthToken { neptuneOauthTokenAccessToken, ..} ) <$> f neptuneOauthTokenAccessToken
+{-# INLINE neptuneOauthTokenAccessTokenL #-}
+
+-- | 'neptuneOauthTokenRefreshToken' Lens
+neptuneOauthTokenRefreshTokenL :: Lens_' NeptuneOauthToken (Text)
+neptuneOauthTokenRefreshTokenL f NeptuneOauthToken{..} = (\neptuneOauthTokenRefreshToken -> NeptuneOauthToken { neptuneOauthTokenRefreshToken, ..} ) <$> f neptuneOauthTokenRefreshToken
+{-# INLINE neptuneOauthTokenRefreshTokenL #-}
+
+-- | 'neptuneOauthTokenUsername' Lens
+neptuneOauthTokenUsernameL :: Lens_' NeptuneOauthToken (Text)
+neptuneOauthTokenUsernameL f NeptuneOauthToken{..} = (\neptuneOauthTokenUsername -> NeptuneOauthToken { neptuneOauthTokenUsername, ..} ) <$> f neptuneOauthTokenUsername
+{-# INLINE neptuneOauthTokenUsernameL #-}
+
+
+
+-- * NewOrganizationInvitationDTO
+
+-- | 'newOrganizationInvitationDTORoleGrant' Lens
+newOrganizationInvitationDTORoleGrantL :: Lens_' NewOrganizationInvitationDTO (OrganizationRoleDTO)
+newOrganizationInvitationDTORoleGrantL f NewOrganizationInvitationDTO{..} = (\newOrganizationInvitationDTORoleGrant -> NewOrganizationInvitationDTO { newOrganizationInvitationDTORoleGrant, ..} ) <$> f newOrganizationInvitationDTORoleGrant
+{-# INLINE newOrganizationInvitationDTORoleGrantL #-}
+
+-- | 'newOrganizationInvitationDTOAddToAllProjects' Lens
+newOrganizationInvitationDTOAddToAllProjectsL :: Lens_' NewOrganizationInvitationDTO (Bool)
+newOrganizationInvitationDTOAddToAllProjectsL f NewOrganizationInvitationDTO{..} = (\newOrganizationInvitationDTOAddToAllProjects -> NewOrganizationInvitationDTO { newOrganizationInvitationDTOAddToAllProjects, ..} ) <$> f newOrganizationInvitationDTOAddToAllProjects
+{-# INLINE newOrganizationInvitationDTOAddToAllProjectsL #-}
+
+-- | 'newOrganizationInvitationDTOOrganizationIdentifier' Lens
+newOrganizationInvitationDTOOrganizationIdentifierL :: Lens_' NewOrganizationInvitationDTO (Text)
+newOrganizationInvitationDTOOrganizationIdentifierL f NewOrganizationInvitationDTO{..} = (\newOrganizationInvitationDTOOrganizationIdentifier -> NewOrganizationInvitationDTO { newOrganizationInvitationDTOOrganizationIdentifier, ..} ) <$> f newOrganizationInvitationDTOOrganizationIdentifier
+{-# INLINE newOrganizationInvitationDTOOrganizationIdentifierL #-}
+
+-- | 'newOrganizationInvitationDTOInvitee' Lens
+newOrganizationInvitationDTOInviteeL :: Lens_' NewOrganizationInvitationDTO (Text)
+newOrganizationInvitationDTOInviteeL f NewOrganizationInvitationDTO{..} = (\newOrganizationInvitationDTOInvitee -> NewOrganizationInvitationDTO { newOrganizationInvitationDTOInvitee, ..} ) <$> f newOrganizationInvitationDTOInvitee
+{-# INLINE newOrganizationInvitationDTOInviteeL #-}
+
+-- | 'newOrganizationInvitationDTOInvitationType' Lens
+newOrganizationInvitationDTOInvitationTypeL :: Lens_' NewOrganizationInvitationDTO (InvitationTypeEnumDTO)
+newOrganizationInvitationDTOInvitationTypeL f NewOrganizationInvitationDTO{..} = (\newOrganizationInvitationDTOInvitationType -> NewOrganizationInvitationDTO { newOrganizationInvitationDTOInvitationType, ..} ) <$> f newOrganizationInvitationDTOInvitationType
+{-# INLINE newOrganizationInvitationDTOInvitationTypeL #-}
+
+
+
+-- * NewOrganizationMemberDTO
+
+-- | 'newOrganizationMemberDTOUserId' Lens
+newOrganizationMemberDTOUserIdL :: Lens_' NewOrganizationMemberDTO (Text)
+newOrganizationMemberDTOUserIdL f NewOrganizationMemberDTO{..} = (\newOrganizationMemberDTOUserId -> NewOrganizationMemberDTO { newOrganizationMemberDTOUserId, ..} ) <$> f newOrganizationMemberDTOUserId
+{-# INLINE newOrganizationMemberDTOUserIdL #-}
+
+-- | 'newOrganizationMemberDTORole' Lens
+newOrganizationMemberDTORoleL :: Lens_' NewOrganizationMemberDTO (OrganizationRoleDTO)
+newOrganizationMemberDTORoleL f NewOrganizationMemberDTO{..} = (\newOrganizationMemberDTORole -> NewOrganizationMemberDTO { newOrganizationMemberDTORole, ..} ) <$> f newOrganizationMemberDTORole
+{-# INLINE newOrganizationMemberDTORoleL #-}
+
+
+
+-- * NewProjectDTO
+
+-- | 'newProjectDTOName' Lens
+newProjectDTONameL :: Lens_' NewProjectDTO (Text)
+newProjectDTONameL f NewProjectDTO{..} = (\newProjectDTOName -> NewProjectDTO { newProjectDTOName, ..} ) <$> f newProjectDTOName
+{-# INLINE newProjectDTONameL #-}
+
+-- | 'newProjectDTODescription' Lens
+newProjectDTODescriptionL :: Lens_' NewProjectDTO (Maybe Text)
+newProjectDTODescriptionL f NewProjectDTO{..} = (\newProjectDTODescription -> NewProjectDTO { newProjectDTODescription, ..} ) <$> f newProjectDTODescription
+{-# INLINE newProjectDTODescriptionL #-}
+
+-- | 'newProjectDTOProjectKey' Lens
+newProjectDTOProjectKeyL :: Lens_' NewProjectDTO (Text)
+newProjectDTOProjectKeyL f NewProjectDTO{..} = (\newProjectDTOProjectKey -> NewProjectDTO { newProjectDTOProjectKey, ..} ) <$> f newProjectDTOProjectKey
+{-# INLINE newProjectDTOProjectKeyL #-}
+
+-- | 'newProjectDTOOrganizationId' Lens
+newProjectDTOOrganizationIdL :: Lens_' NewProjectDTO (Text)
+newProjectDTOOrganizationIdL f NewProjectDTO{..} = (\newProjectDTOOrganizationId -> NewProjectDTO { newProjectDTOOrganizationId, ..} ) <$> f newProjectDTOOrganizationId
+{-# INLINE newProjectDTOOrganizationIdL #-}
+
+-- | 'newProjectDTOVisibility' Lens
+newProjectDTOVisibilityL :: Lens_' NewProjectDTO (Maybe ProjectVisibilityDTO)
+newProjectDTOVisibilityL f NewProjectDTO{..} = (\newProjectDTOVisibility -> NewProjectDTO { newProjectDTOVisibility, ..} ) <$> f newProjectDTOVisibility
+{-# INLINE newProjectDTOVisibilityL #-}
+
+-- | 'newProjectDTODisplayClass' Lens
+newProjectDTODisplayClassL :: Lens_' NewProjectDTO (Maybe Text)
+newProjectDTODisplayClassL f NewProjectDTO{..} = (\newProjectDTODisplayClass -> NewProjectDTO { newProjectDTODisplayClass, ..} ) <$> f newProjectDTODisplayClass
+{-# INLINE newProjectDTODisplayClassL #-}
+
+
+
+-- * NewProjectInvitationDTO
+
+-- | 'newProjectInvitationDTOProjectIdentifier' Lens
+newProjectInvitationDTOProjectIdentifierL :: Lens_' NewProjectInvitationDTO (Text)
+newProjectInvitationDTOProjectIdentifierL f NewProjectInvitationDTO{..} = (\newProjectInvitationDTOProjectIdentifier -> NewProjectInvitationDTO { newProjectInvitationDTOProjectIdentifier, ..} ) <$> f newProjectInvitationDTOProjectIdentifier
+{-# INLINE newProjectInvitationDTOProjectIdentifierL #-}
+
+-- | 'newProjectInvitationDTOInvitee' Lens
+newProjectInvitationDTOInviteeL :: Lens_' NewProjectInvitationDTO (Text)
+newProjectInvitationDTOInviteeL f NewProjectInvitationDTO{..} = (\newProjectInvitationDTOInvitee -> NewProjectInvitationDTO { newProjectInvitationDTOInvitee, ..} ) <$> f newProjectInvitationDTOInvitee
+{-# INLINE newProjectInvitationDTOInviteeL #-}
+
+-- | 'newProjectInvitationDTOInvitationType' Lens
+newProjectInvitationDTOInvitationTypeL :: Lens_' NewProjectInvitationDTO (InvitationTypeEnumDTO)
+newProjectInvitationDTOInvitationTypeL f NewProjectInvitationDTO{..} = (\newProjectInvitationDTOInvitationType -> NewProjectInvitationDTO { newProjectInvitationDTOInvitationType, ..} ) <$> f newProjectInvitationDTOInvitationType
+{-# INLINE newProjectInvitationDTOInvitationTypeL #-}
+
+-- | 'newProjectInvitationDTORoleGrant' Lens
+newProjectInvitationDTORoleGrantL :: Lens_' NewProjectInvitationDTO (ProjectRoleDTO)
+newProjectInvitationDTORoleGrantL f NewProjectInvitationDTO{..} = (\newProjectInvitationDTORoleGrant -> NewProjectInvitationDTO { newProjectInvitationDTORoleGrant, ..} ) <$> f newProjectInvitationDTORoleGrant
+{-# INLINE newProjectInvitationDTORoleGrantL #-}
+
+
+
+-- * NewProjectMemberDTO
+
+-- | 'newProjectMemberDTOUserId' Lens
+newProjectMemberDTOUserIdL :: Lens_' NewProjectMemberDTO (Text)
+newProjectMemberDTOUserIdL f NewProjectMemberDTO{..} = (\newProjectMemberDTOUserId -> NewProjectMemberDTO { newProjectMemberDTOUserId, ..} ) <$> f newProjectMemberDTOUserId
+{-# INLINE newProjectMemberDTOUserIdL #-}
+
+-- | 'newProjectMemberDTORole' Lens
+newProjectMemberDTORoleL :: Lens_' NewProjectMemberDTO (ProjectRoleDTO)
+newProjectMemberDTORoleL f NewProjectMemberDTO{..} = (\newProjectMemberDTORole -> NewProjectMemberDTO { newProjectMemberDTORole, ..} ) <$> f newProjectMemberDTORole
+{-# INLINE newProjectMemberDTORoleL #-}
+
+
+
+-- * NewReservationDTO
+
+-- | 'newReservationDTOName' Lens
+newReservationDTONameL :: Lens_' NewReservationDTO (Text)
+newReservationDTONameL f NewReservationDTO{..} = (\newReservationDTOName -> NewReservationDTO { newReservationDTOName, ..} ) <$> f newReservationDTOName
+{-# INLINE newReservationDTONameL #-}
+
+
+
+-- * OrganizationCreationParamsDTO
+
+-- | 'organizationCreationParamsDTOName' Lens
+organizationCreationParamsDTONameL :: Lens_' OrganizationCreationParamsDTO (Text)
+organizationCreationParamsDTONameL f OrganizationCreationParamsDTO{..} = (\organizationCreationParamsDTOName -> OrganizationCreationParamsDTO { organizationCreationParamsDTOName, ..} ) <$> f organizationCreationParamsDTOName
+{-# INLINE organizationCreationParamsDTONameL #-}
+
+-- | 'organizationCreationParamsDTOOrganizationType' Lens
+organizationCreationParamsDTOOrganizationTypeL :: Lens_' OrganizationCreationParamsDTO (OrganizationTypeDTO)
+organizationCreationParamsDTOOrganizationTypeL f OrganizationCreationParamsDTO{..} = (\organizationCreationParamsDTOOrganizationType -> OrganizationCreationParamsDTO { organizationCreationParamsDTOOrganizationType, ..} ) <$> f organizationCreationParamsDTOOrganizationType
+{-# INLINE organizationCreationParamsDTOOrganizationTypeL #-}
+
+-- | 'organizationCreationParamsDTODiscountCode' Lens
+organizationCreationParamsDTODiscountCodeL :: Lens_' OrganizationCreationParamsDTO (Maybe DiscountCodeDTO)
+organizationCreationParamsDTODiscountCodeL f OrganizationCreationParamsDTO{..} = (\organizationCreationParamsDTODiscountCode -> OrganizationCreationParamsDTO { organizationCreationParamsDTODiscountCode, ..} ) <$> f organizationCreationParamsDTODiscountCode
+{-# INLINE organizationCreationParamsDTODiscountCodeL #-}
+
+
+
+-- * OrganizationDTO
+
+-- | 'organizationDTOName' Lens
+organizationDTONameL :: Lens_' OrganizationDTO (Text)
+organizationDTONameL f OrganizationDTO{..} = (\organizationDTOName -> OrganizationDTO { organizationDTOName, ..} ) <$> f organizationDTOName
+{-# INLINE organizationDTONameL #-}
+
+-- | 'organizationDTOPaymentStatus' Lens
+organizationDTOPaymentStatusL :: Lens_' OrganizationDTO (Text)
+organizationDTOPaymentStatusL f OrganizationDTO{..} = (\organizationDTOPaymentStatus -> OrganizationDTO { organizationDTOPaymentStatus, ..} ) <$> f organizationDTOPaymentStatus
+{-# INLINE organizationDTOPaymentStatusL #-}
+
+-- | 'organizationDTOAvatarUrl' Lens
+organizationDTOAvatarUrlL :: Lens_' OrganizationDTO (Text)
+organizationDTOAvatarUrlL f OrganizationDTO{..} = (\organizationDTOAvatarUrl -> OrganizationDTO { organizationDTOAvatarUrl, ..} ) <$> f organizationDTOAvatarUrl
+{-# INLINE organizationDTOAvatarUrlL #-}
+
+-- | 'organizationDTOOrganizationType' Lens
+organizationDTOOrganizationTypeL :: Lens_' OrganizationDTO (OrganizationTypeDTO)
+organizationDTOOrganizationTypeL f OrganizationDTO{..} = (\organizationDTOOrganizationType -> OrganizationDTO { organizationDTOOrganizationType, ..} ) <$> f organizationDTOOrganizationType
+{-# INLINE organizationDTOOrganizationTypeL #-}
+
+-- | 'organizationDTOAvatarSource' Lens
+organizationDTOAvatarSourceL :: Lens_' OrganizationDTO (AvatarSourceEnum)
+organizationDTOAvatarSourceL f OrganizationDTO{..} = (\organizationDTOAvatarSource -> OrganizationDTO { organizationDTOAvatarSource, ..} ) <$> f organizationDTOAvatarSource
+{-# INLINE organizationDTOAvatarSourceL #-}
+
+-- | 'organizationDTOInfo' Lens
+organizationDTOInfoL :: Lens_' OrganizationDTO (Maybe Text)
+organizationDTOInfoL f OrganizationDTO{..} = (\organizationDTOInfo -> OrganizationDTO { organizationDTOInfo, ..} ) <$> f organizationDTOInfo
+{-# INLINE organizationDTOInfoL #-}
+
+-- | 'organizationDTOId' Lens
+organizationDTOIdL :: Lens_' OrganizationDTO (Text)
+organizationDTOIdL f OrganizationDTO{..} = (\organizationDTOId -> OrganizationDTO { organizationDTOId, ..} ) <$> f organizationDTOId
+{-# INLINE organizationDTOIdL #-}
+
+-- | 'organizationDTOCreated' Lens
+organizationDTOCreatedL :: Lens_' OrganizationDTO (DateTime)
+organizationDTOCreatedL f OrganizationDTO{..} = (\organizationDTOCreated -> OrganizationDTO { organizationDTOCreated, ..} ) <$> f organizationDTOCreated
+{-# INLINE organizationDTOCreatedL #-}
+
+
+
+-- * OrganizationInvitationDTO
+
+-- | 'organizationInvitationDTORoleGrant' Lens
+organizationInvitationDTORoleGrantL :: Lens_' OrganizationInvitationDTO (OrganizationRoleDTO)
+organizationInvitationDTORoleGrantL f OrganizationInvitationDTO{..} = (\organizationInvitationDTORoleGrant -> OrganizationInvitationDTO { organizationInvitationDTORoleGrant, ..} ) <$> f organizationInvitationDTORoleGrant
+{-# INLINE organizationInvitationDTORoleGrantL #-}
+
+-- | 'organizationInvitationDTOInvitedBy' Lens
+organizationInvitationDTOInvitedByL :: Lens_' OrganizationInvitationDTO (Text)
+organizationInvitationDTOInvitedByL f OrganizationInvitationDTO{..} = (\organizationInvitationDTOInvitedBy -> OrganizationInvitationDTO { organizationInvitationDTOInvitedBy, ..} ) <$> f organizationInvitationDTOInvitedBy
+{-# INLINE organizationInvitationDTOInvitedByL #-}
+
+-- | 'organizationInvitationDTOOrganizationName' Lens
+organizationInvitationDTOOrganizationNameL :: Lens_' OrganizationInvitationDTO (Text)
+organizationInvitationDTOOrganizationNameL f OrganizationInvitationDTO{..} = (\organizationInvitationDTOOrganizationName -> OrganizationInvitationDTO { organizationInvitationDTOOrganizationName, ..} ) <$> f organizationInvitationDTOOrganizationName
+{-# INLINE organizationInvitationDTOOrganizationNameL #-}
+
+-- | 'organizationInvitationDTOId' Lens
+organizationInvitationDTOIdL :: Lens_' OrganizationInvitationDTO (Text)
+organizationInvitationDTOIdL f OrganizationInvitationDTO{..} = (\organizationInvitationDTOId -> OrganizationInvitationDTO { organizationInvitationDTOId, ..} ) <$> f organizationInvitationDTOId
+{-# INLINE organizationInvitationDTOIdL #-}
+
+-- | 'organizationInvitationDTOInvitee' Lens
+organizationInvitationDTOInviteeL :: Lens_' OrganizationInvitationDTO (Text)
+organizationInvitationDTOInviteeL f OrganizationInvitationDTO{..} = (\organizationInvitationDTOInvitee -> OrganizationInvitationDTO { organizationInvitationDTOInvitee, ..} ) <$> f organizationInvitationDTOInvitee
+{-# INLINE organizationInvitationDTOInviteeL #-}
+
+-- | 'organizationInvitationDTOStatus' Lens
+organizationInvitationDTOStatusL :: Lens_' OrganizationInvitationDTO (InvitationStatusEnumDTO)
+organizationInvitationDTOStatusL f OrganizationInvitationDTO{..} = (\organizationInvitationDTOStatus -> OrganizationInvitationDTO { organizationInvitationDTOStatus, ..} ) <$> f organizationInvitationDTOStatus
+{-# INLINE organizationInvitationDTOStatusL #-}
+
+-- | 'organizationInvitationDTOInvitationType' Lens
+organizationInvitationDTOInvitationTypeL :: Lens_' OrganizationInvitationDTO (InvitationTypeEnumDTO)
+organizationInvitationDTOInvitationTypeL f OrganizationInvitationDTO{..} = (\organizationInvitationDTOInvitationType -> OrganizationInvitationDTO { organizationInvitationDTOInvitationType, ..} ) <$> f organizationInvitationDTOInvitationType
+{-# INLINE organizationInvitationDTOInvitationTypeL #-}
+
+
+
+-- * OrganizationInvitationUpdateDTO
+
+-- | 'organizationInvitationUpdateDTORoleGrant' Lens
+organizationInvitationUpdateDTORoleGrantL :: Lens_' OrganizationInvitationUpdateDTO (OrganizationRoleDTO)
+organizationInvitationUpdateDTORoleGrantL f OrganizationInvitationUpdateDTO{..} = (\organizationInvitationUpdateDTORoleGrant -> OrganizationInvitationUpdateDTO { organizationInvitationUpdateDTORoleGrant, ..} ) <$> f organizationInvitationUpdateDTORoleGrant
+{-# INLINE organizationInvitationUpdateDTORoleGrantL #-}
+
+
+
+-- * OrganizationLimitsDTO
+
+-- | 'organizationLimitsDTOStorageSize' Lens
+organizationLimitsDTOStorageSizeL :: Lens_' OrganizationLimitsDTO (Maybe Integer)
+organizationLimitsDTOStorageSizeL f OrganizationLimitsDTO{..} = (\organizationLimitsDTOStorageSize -> OrganizationLimitsDTO { organizationLimitsDTOStorageSize, ..} ) <$> f organizationLimitsDTOStorageSize
+{-# INLINE organizationLimitsDTOStorageSizeL #-}
+
+-- | 'organizationLimitsDTOPrivateProjectMembers' Lens
+organizationLimitsDTOPrivateProjectMembersL :: Lens_' OrganizationLimitsDTO (Maybe Integer)
+organizationLimitsDTOPrivateProjectMembersL f OrganizationLimitsDTO{..} = (\organizationLimitsDTOPrivateProjectMembers -> OrganizationLimitsDTO { organizationLimitsDTOPrivateProjectMembers, ..} ) <$> f organizationLimitsDTOPrivateProjectMembers
+{-# INLINE organizationLimitsDTOPrivateProjectMembersL #-}
+
+-- | 'organizationLimitsDTOProjectsLimit' Lens
+organizationLimitsDTOProjectsLimitL :: Lens_' OrganizationLimitsDTO (Maybe Integer)
+organizationLimitsDTOProjectsLimitL f OrganizationLimitsDTO{..} = (\organizationLimitsDTOProjectsLimit -> OrganizationLimitsDTO { organizationLimitsDTOProjectsLimit, ..} ) <$> f organizationLimitsDTOProjectsLimit
+{-# INLINE organizationLimitsDTOProjectsLimitL #-}
+
+-- | 'organizationLimitsDTOMembersLimit' Lens
+organizationLimitsDTOMembersLimitL :: Lens_' OrganizationLimitsDTO (Maybe Integer)
+organizationLimitsDTOMembersLimitL f OrganizationLimitsDTO{..} = (\organizationLimitsDTOMembersLimit -> OrganizationLimitsDTO { organizationLimitsDTOMembersLimit, ..} ) <$> f organizationLimitsDTOMembersLimit
+{-# INLINE organizationLimitsDTOMembersLimitL #-}
+
+
+
+-- * OrganizationMemberDTO
+
+-- | 'organizationMemberDTORole' Lens
+organizationMemberDTORoleL :: Lens_' OrganizationMemberDTO (OrganizationRoleDTO)
+organizationMemberDTORoleL f OrganizationMemberDTO{..} = (\organizationMemberDTORole -> OrganizationMemberDTO { organizationMemberDTORole, ..} ) <$> f organizationMemberDTORole
+{-# INLINE organizationMemberDTORoleL #-}
+
+-- | 'organizationMemberDTOEditableRole' Lens
+organizationMemberDTOEditableRoleL :: Lens_' OrganizationMemberDTO (Bool)
+organizationMemberDTOEditableRoleL f OrganizationMemberDTO{..} = (\organizationMemberDTOEditableRole -> OrganizationMemberDTO { organizationMemberDTOEditableRole, ..} ) <$> f organizationMemberDTOEditableRole
+{-# INLINE organizationMemberDTOEditableRoleL #-}
+
+-- | 'organizationMemberDTORegisteredMemberInfo' Lens
+organizationMemberDTORegisteredMemberInfoL :: Lens_' OrganizationMemberDTO (Maybe RegisteredMemberInfoDTO)
+organizationMemberDTORegisteredMemberInfoL f OrganizationMemberDTO{..} = (\organizationMemberDTORegisteredMemberInfo -> OrganizationMemberDTO { organizationMemberDTORegisteredMemberInfo, ..} ) <$> f organizationMemberDTORegisteredMemberInfo
+{-# INLINE organizationMemberDTORegisteredMemberInfoL #-}
+
+-- | 'organizationMemberDTOInvitationInfo' Lens
+organizationMemberDTOInvitationInfoL :: Lens_' OrganizationMemberDTO (Maybe OrganizationInvitationDTO)
+organizationMemberDTOInvitationInfoL f OrganizationMemberDTO{..} = (\organizationMemberDTOInvitationInfo -> OrganizationMemberDTO { organizationMemberDTOInvitationInfo, ..} ) <$> f organizationMemberDTOInvitationInfo
+{-# INLINE organizationMemberDTOInvitationInfoL #-}
+
+-- | 'organizationMemberDTOTotalNumberOfProjects' Lens
+organizationMemberDTOTotalNumberOfProjectsL :: Lens_' OrganizationMemberDTO (Maybe Int)
+organizationMemberDTOTotalNumberOfProjectsL f OrganizationMemberDTO{..} = (\organizationMemberDTOTotalNumberOfProjects -> OrganizationMemberDTO { organizationMemberDTOTotalNumberOfProjects, ..} ) <$> f organizationMemberDTOTotalNumberOfProjects
+{-# INLINE organizationMemberDTOTotalNumberOfProjectsL #-}
+
+-- | 'organizationMemberDTONumberOfProjects' Lens
+organizationMemberDTONumberOfProjectsL :: Lens_' OrganizationMemberDTO (Maybe Int)
+organizationMemberDTONumberOfProjectsL f OrganizationMemberDTO{..} = (\organizationMemberDTONumberOfProjects -> OrganizationMemberDTO { organizationMemberDTONumberOfProjects, ..} ) <$> f organizationMemberDTONumberOfProjects
+{-# INLINE organizationMemberDTONumberOfProjectsL #-}
+
+
+
+-- * OrganizationMemberUpdateDTO
+
+-- | 'organizationMemberUpdateDTORole' Lens
+organizationMemberUpdateDTORoleL :: Lens_' OrganizationMemberUpdateDTO (OrganizationRoleDTO)
+organizationMemberUpdateDTORoleL f OrganizationMemberUpdateDTO{..} = (\organizationMemberUpdateDTORole -> OrganizationMemberUpdateDTO { organizationMemberUpdateDTORole, ..} ) <$> f organizationMemberUpdateDTORole
+{-# INLINE organizationMemberUpdateDTORoleL #-}
+
+
+
+-- * OrganizationNameAvailableDTO
+
+-- | 'organizationNameAvailableDTOAvailable' Lens
+organizationNameAvailableDTOAvailableL :: Lens_' OrganizationNameAvailableDTO (Bool)
+organizationNameAvailableDTOAvailableL f OrganizationNameAvailableDTO{..} = (\organizationNameAvailableDTOAvailable -> OrganizationNameAvailableDTO { organizationNameAvailableDTOAvailable, ..} ) <$> f organizationNameAvailableDTOAvailable
+{-# INLINE organizationNameAvailableDTOAvailableL #-}
+
+
+
+-- * OrganizationPricingPlanDTO
+
+-- | 'organizationPricingPlanDTOPricingPlan' Lens
+organizationPricingPlanDTOPricingPlanL :: Lens_' OrganizationPricingPlanDTO (PricingPlanDTO)
+organizationPricingPlanDTOPricingPlanL f OrganizationPricingPlanDTO{..} = (\organizationPricingPlanDTOPricingPlan -> OrganizationPricingPlanDTO { organizationPricingPlanDTOPricingPlan, ..} ) <$> f organizationPricingPlanDTOPricingPlan
+{-# INLINE organizationPricingPlanDTOPricingPlanL #-}
+
+
+
+-- * OrganizationRoleDTO
+
+
+
+-- * OrganizationTypeDTO
+
+
+
+-- * OrganizationUpdateDTO
+
+-- | 'organizationUpdateDTOName' Lens
+organizationUpdateDTONameL :: Lens_' OrganizationUpdateDTO (Maybe Text)
+organizationUpdateDTONameL f OrganizationUpdateDTO{..} = (\organizationUpdateDTOName -> OrganizationUpdateDTO { organizationUpdateDTOName, ..} ) <$> f organizationUpdateDTOName
+{-# INLINE organizationUpdateDTONameL #-}
+
+-- | 'organizationUpdateDTOInfo' Lens
+organizationUpdateDTOInfoL :: Lens_' OrganizationUpdateDTO (Maybe Text)
+organizationUpdateDTOInfoL f OrganizationUpdateDTO{..} = (\organizationUpdateDTOInfo -> OrganizationUpdateDTO { organizationUpdateDTOInfo, ..} ) <$> f organizationUpdateDTOInfo
+{-# INLINE organizationUpdateDTOInfoL #-}
+
+
+
+-- * OrganizationWithRoleDTO
+
+-- | 'organizationWithRoleDTOName' Lens
+organizationWithRoleDTONameL :: Lens_' OrganizationWithRoleDTO (Text)
+organizationWithRoleDTONameL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOName -> OrganizationWithRoleDTO { organizationWithRoleDTOName, ..} ) <$> f organizationWithRoleDTOName
+{-# INLINE organizationWithRoleDTONameL #-}
+
+-- | 'organizationWithRoleDTOUserRole' Lens
+organizationWithRoleDTOUserRoleL :: Lens_' OrganizationWithRoleDTO (Maybe OrganizationRoleDTO)
+organizationWithRoleDTOUserRoleL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOUserRole -> OrganizationWithRoleDTO { organizationWithRoleDTOUserRole, ..} ) <$> f organizationWithRoleDTOUserRole
+{-# INLINE organizationWithRoleDTOUserRoleL #-}
+
+-- | 'organizationWithRoleDTOPaymentStatus' Lens
+organizationWithRoleDTOPaymentStatusL :: Lens_' OrganizationWithRoleDTO (Text)
+organizationWithRoleDTOPaymentStatusL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOPaymentStatus -> OrganizationWithRoleDTO { organizationWithRoleDTOPaymentStatus, ..} ) <$> f organizationWithRoleDTOPaymentStatus
+{-# INLINE organizationWithRoleDTOPaymentStatusL #-}
+
+-- | 'organizationWithRoleDTOAvatarUrl' Lens
+organizationWithRoleDTOAvatarUrlL :: Lens_' OrganizationWithRoleDTO (Text)
+organizationWithRoleDTOAvatarUrlL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOAvatarUrl -> OrganizationWithRoleDTO { organizationWithRoleDTOAvatarUrl, ..} ) <$> f organizationWithRoleDTOAvatarUrl
+{-# INLINE organizationWithRoleDTOAvatarUrlL #-}
+
+-- | 'organizationWithRoleDTOOrganizationType' Lens
+organizationWithRoleDTOOrganizationTypeL :: Lens_' OrganizationWithRoleDTO (OrganizationTypeDTO)
+organizationWithRoleDTOOrganizationTypeL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOOrganizationType -> OrganizationWithRoleDTO { organizationWithRoleDTOOrganizationType, ..} ) <$> f organizationWithRoleDTOOrganizationType
+{-# INLINE organizationWithRoleDTOOrganizationTypeL #-}
+
+-- | 'organizationWithRoleDTOAvatarSource' Lens
+organizationWithRoleDTOAvatarSourceL :: Lens_' OrganizationWithRoleDTO (AvatarSourceEnum)
+organizationWithRoleDTOAvatarSourceL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOAvatarSource -> OrganizationWithRoleDTO { organizationWithRoleDTOAvatarSource, ..} ) <$> f organizationWithRoleDTOAvatarSource
+{-# INLINE organizationWithRoleDTOAvatarSourceL #-}
+
+-- | 'organizationWithRoleDTOInfo' Lens
+organizationWithRoleDTOInfoL :: Lens_' OrganizationWithRoleDTO (Maybe Text)
+organizationWithRoleDTOInfoL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOInfo -> OrganizationWithRoleDTO { organizationWithRoleDTOInfo, ..} ) <$> f organizationWithRoleDTOInfo
+{-# INLINE organizationWithRoleDTOInfoL #-}
+
+-- | 'organizationWithRoleDTOId' Lens
+organizationWithRoleDTOIdL :: Lens_' OrganizationWithRoleDTO (Text)
+organizationWithRoleDTOIdL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOId -> OrganizationWithRoleDTO { organizationWithRoleDTOId, ..} ) <$> f organizationWithRoleDTOId
+{-# INLINE organizationWithRoleDTOIdL #-}
+
+-- | 'organizationWithRoleDTOCreated' Lens
+organizationWithRoleDTOCreatedL :: Lens_' OrganizationWithRoleDTO (DateTime)
+organizationWithRoleDTOCreatedL f OrganizationWithRoleDTO{..} = (\organizationWithRoleDTOCreated -> OrganizationWithRoleDTO { organizationWithRoleDTOCreated, ..} ) <$> f organizationWithRoleDTOCreated
+{-# INLINE organizationWithRoleDTOCreatedL #-}
+
+
+
+-- * OutputImageDTO
+
+-- | 'outputImageDTOName' Lens
+outputImageDTONameL :: Lens_' OutputImageDTO (Maybe Text)
+outputImageDTONameL f OutputImageDTO{..} = (\outputImageDTOName -> OutputImageDTO { outputImageDTOName, ..} ) <$> f outputImageDTOName
+{-# INLINE outputImageDTONameL #-}
+
+-- | 'outputImageDTODescription' Lens
+outputImageDTODescriptionL :: Lens_' OutputImageDTO (Maybe Text)
+outputImageDTODescriptionL f OutputImageDTO{..} = (\outputImageDTODescription -> OutputImageDTO { outputImageDTODescription, ..} ) <$> f outputImageDTODescription
+{-# INLINE outputImageDTODescriptionL #-}
+
+-- | 'outputImageDTOImageUrl' Lens
+outputImageDTOImageUrlL :: Lens_' OutputImageDTO (Maybe Text)
+outputImageDTOImageUrlL f OutputImageDTO{..} = (\outputImageDTOImageUrl -> OutputImageDTO { outputImageDTOImageUrl, ..} ) <$> f outputImageDTOImageUrl
+{-# INLINE outputImageDTOImageUrlL #-}
+
+-- | 'outputImageDTOThumbnailUrl' Lens
+outputImageDTOThumbnailUrlL :: Lens_' OutputImageDTO (Maybe Text)
+outputImageDTOThumbnailUrlL f OutputImageDTO{..} = (\outputImageDTOThumbnailUrl -> OutputImageDTO { outputImageDTOThumbnailUrl, ..} ) <$> f outputImageDTOThumbnailUrl
+{-# INLINE outputImageDTOThumbnailUrlL #-}
+
+
+
+-- * Parameter
+
+-- | 'parameterName' Lens
+parameterNameL :: Lens_' Parameter (Text)
+parameterNameL f Parameter{..} = (\parameterName -> Parameter { parameterName, ..} ) <$> f parameterName
+{-# INLINE parameterNameL #-}
+
+-- | 'parameterDescription' Lens
+parameterDescriptionL :: Lens_' Parameter (Maybe Text)
+parameterDescriptionL f Parameter{..} = (\parameterDescription -> Parameter { parameterDescription, ..} ) <$> f parameterDescription
+{-# INLINE parameterDescriptionL #-}
+
+-- | 'parameterParameterType' Lens
+parameterParameterTypeL :: Lens_' Parameter (ParameterTypeEnum)
+parameterParameterTypeL f Parameter{..} = (\parameterParameterType -> Parameter { parameterParameterType, ..} ) <$> f parameterParameterType
+{-# INLINE parameterParameterTypeL #-}
+
+-- | 'parameterId' Lens
+parameterIdL :: Lens_' Parameter (Text)
+parameterIdL f Parameter{..} = (\parameterId -> Parameter { parameterId, ..} ) <$> f parameterId
+{-# INLINE parameterIdL #-}
+
+-- | 'parameterValue' Lens
+parameterValueL :: Lens_' Parameter (Text)
+parameterValueL f Parameter{..} = (\parameterValue -> Parameter { parameterValue, ..} ) <$> f parameterValue
+{-# INLINE parameterValueL #-}
+
+
+
+-- * ParameterTypeEnum
+
+
+
+-- * PasswordChangeDTO
+
+-- | 'passwordChangeDTOCurrentPassword' Lens
+passwordChangeDTOCurrentPasswordL :: Lens_' PasswordChangeDTO (Text)
+passwordChangeDTOCurrentPasswordL f PasswordChangeDTO{..} = (\passwordChangeDTOCurrentPassword -> PasswordChangeDTO { passwordChangeDTOCurrentPassword, ..} ) <$> f passwordChangeDTOCurrentPassword
+{-# INLINE passwordChangeDTOCurrentPasswordL #-}
+
+-- | 'passwordChangeDTONewPassword' Lens
+passwordChangeDTONewPasswordL :: Lens_' PasswordChangeDTO (Text)
+passwordChangeDTONewPasswordL f PasswordChangeDTO{..} = (\passwordChangeDTONewPassword -> PasswordChangeDTO { passwordChangeDTONewPassword, ..} ) <$> f passwordChangeDTONewPassword
+{-# INLINE passwordChangeDTONewPasswordL #-}
+
+
+
+-- * Point
+
+-- | 'pointTimestampMillis' Lens
+pointTimestampMillisL :: Lens_' Point (Integer)
+pointTimestampMillisL f Point{..} = (\pointTimestampMillis -> Point { pointTimestampMillis, ..} ) <$> f pointTimestampMillis
+{-# INLINE pointTimestampMillisL #-}
+
+-- | 'pointX' Lens
+pointXL :: Lens_' Point (Maybe Double)
+pointXL f Point{..} = (\pointX -> Point { pointX, ..} ) <$> f pointX
+{-# INLINE pointXL #-}
+
+-- | 'pointY' Lens
+pointYL :: Lens_' Point (Y)
+pointYL f Point{..} = (\pointY -> Point { pointY, ..} ) <$> f pointY
+{-# INLINE pointYL #-}
+
+
+
+-- * PointValueDTO
+
+-- | 'pointValueDTOTimestampMillis' Lens
+pointValueDTOTimestampMillisL :: Lens_' PointValueDTO (Integer)
+pointValueDTOTimestampMillisL f PointValueDTO{..} = (\pointValueDTOTimestampMillis -> PointValueDTO { pointValueDTOTimestampMillis, ..} ) <$> f pointValueDTOTimestampMillis
+{-# INLINE pointValueDTOTimestampMillisL #-}
+
+-- | 'pointValueDTOX' Lens
+pointValueDTOXL :: Lens_' PointValueDTO (Double)
+pointValueDTOXL f PointValueDTO{..} = (\pointValueDTOX -> PointValueDTO { pointValueDTOX, ..} ) <$> f pointValueDTOX
+{-# INLINE pointValueDTOXL #-}
+
+-- | 'pointValueDTOY' Lens
+pointValueDTOYL :: Lens_' PointValueDTO (Y)
+pointValueDTOYL f PointValueDTO{..} = (\pointValueDTOY -> PointValueDTO { pointValueDTOY, ..} ) <$> f pointValueDTOY
+{-# INLINE pointValueDTOYL #-}
+
+
+
+-- * PricingPlanDTO
+
+
+
+-- * ProjectCodeAccessDTO
+
+
+
+-- * ProjectInvitationDTO
+
+-- | 'projectInvitationDTORoleGrant' Lens
+projectInvitationDTORoleGrantL :: Lens_' ProjectInvitationDTO (ProjectRoleDTO)
+projectInvitationDTORoleGrantL f ProjectInvitationDTO{..} = (\projectInvitationDTORoleGrant -> ProjectInvitationDTO { projectInvitationDTORoleGrant, ..} ) <$> f projectInvitationDTORoleGrant
+{-# INLINE projectInvitationDTORoleGrantL #-}
+
+-- | 'projectInvitationDTOProjectName' Lens
+projectInvitationDTOProjectNameL :: Lens_' ProjectInvitationDTO (Text)
+projectInvitationDTOProjectNameL f ProjectInvitationDTO{..} = (\projectInvitationDTOProjectName -> ProjectInvitationDTO { projectInvitationDTOProjectName, ..} ) <$> f projectInvitationDTOProjectName
+{-# INLINE projectInvitationDTOProjectNameL #-}
+
+-- | 'projectInvitationDTOInvitedBy' Lens
+projectInvitationDTOInvitedByL :: Lens_' ProjectInvitationDTO (Text)
+projectInvitationDTOInvitedByL f ProjectInvitationDTO{..} = (\projectInvitationDTOInvitedBy -> ProjectInvitationDTO { projectInvitationDTOInvitedBy, ..} ) <$> f projectInvitationDTOInvitedBy
+{-# INLINE projectInvitationDTOInvitedByL #-}
+
+-- | 'projectInvitationDTOOrganizationName' Lens
+projectInvitationDTOOrganizationNameL :: Lens_' ProjectInvitationDTO (Text)
+projectInvitationDTOOrganizationNameL f ProjectInvitationDTO{..} = (\projectInvitationDTOOrganizationName -> ProjectInvitationDTO { projectInvitationDTOOrganizationName, ..} ) <$> f projectInvitationDTOOrganizationName
+{-# INLINE projectInvitationDTOOrganizationNameL #-}
+
+-- | 'projectInvitationDTOId' Lens
+projectInvitationDTOIdL :: Lens_' ProjectInvitationDTO (Text)
+projectInvitationDTOIdL f ProjectInvitationDTO{..} = (\projectInvitationDTOId -> ProjectInvitationDTO { projectInvitationDTOId, ..} ) <$> f projectInvitationDTOId
+{-# INLINE projectInvitationDTOIdL #-}
+
+-- | 'projectInvitationDTOInvitee' Lens
+projectInvitationDTOInviteeL :: Lens_' ProjectInvitationDTO (Text)
+projectInvitationDTOInviteeL f ProjectInvitationDTO{..} = (\projectInvitationDTOInvitee -> ProjectInvitationDTO { projectInvitationDTOInvitee, ..} ) <$> f projectInvitationDTOInvitee
+{-# INLINE projectInvitationDTOInviteeL #-}
+
+-- | 'projectInvitationDTOStatus' Lens
+projectInvitationDTOStatusL :: Lens_' ProjectInvitationDTO (InvitationStatusEnumDTO)
+projectInvitationDTOStatusL f ProjectInvitationDTO{..} = (\projectInvitationDTOStatus -> ProjectInvitationDTO { projectInvitationDTOStatus, ..} ) <$> f projectInvitationDTOStatus
+{-# INLINE projectInvitationDTOStatusL #-}
+
+-- | 'projectInvitationDTOInvitationType' Lens
+projectInvitationDTOInvitationTypeL :: Lens_' ProjectInvitationDTO (InvitationTypeEnumDTO)
+projectInvitationDTOInvitationTypeL f ProjectInvitationDTO{..} = (\projectInvitationDTOInvitationType -> ProjectInvitationDTO { projectInvitationDTOInvitationType, ..} ) <$> f projectInvitationDTOInvitationType
+{-# INLINE projectInvitationDTOInvitationTypeL #-}
+
+
+
+-- * ProjectInvitationUpdateDTO
+
+-- | 'projectInvitationUpdateDTORoleGrant' Lens
+projectInvitationUpdateDTORoleGrantL :: Lens_' ProjectInvitationUpdateDTO (ProjectRoleDTO)
+projectInvitationUpdateDTORoleGrantL f ProjectInvitationUpdateDTO{..} = (\projectInvitationUpdateDTORoleGrant -> ProjectInvitationUpdateDTO { projectInvitationUpdateDTORoleGrant, ..} ) <$> f projectInvitationUpdateDTORoleGrant
+{-# INLINE projectInvitationUpdateDTORoleGrantL #-}
+
+
+
+-- * ProjectKeyDTO
+
+-- | 'projectKeyDTOProposal' Lens
+projectKeyDTOProposalL :: Lens_' ProjectKeyDTO (Text)
+projectKeyDTOProposalL f ProjectKeyDTO{..} = (\projectKeyDTOProposal -> ProjectKeyDTO { projectKeyDTOProposal, ..} ) <$> f projectKeyDTOProposal
+{-# INLINE projectKeyDTOProposalL #-}
+
+
+
+-- * ProjectListDTO
+
+-- | 'projectListDTOEntries' Lens
+projectListDTOEntriesL :: Lens_' ProjectListDTO ([ProjectWithRoleDTO])
+projectListDTOEntriesL f ProjectListDTO{..} = (\projectListDTOEntries -> ProjectListDTO { projectListDTOEntries, ..} ) <$> f projectListDTOEntries
+{-# INLINE projectListDTOEntriesL #-}
+
+-- | 'projectListDTOMatchingItemCount' Lens
+projectListDTOMatchingItemCountL :: Lens_' ProjectListDTO (Int)
+projectListDTOMatchingItemCountL f ProjectListDTO{..} = (\projectListDTOMatchingItemCount -> ProjectListDTO { projectListDTOMatchingItemCount, ..} ) <$> f projectListDTOMatchingItemCount
+{-# INLINE projectListDTOMatchingItemCountL #-}
+
+-- | 'projectListDTOTotalItemCount' Lens
+projectListDTOTotalItemCountL :: Lens_' ProjectListDTO (Int)
+projectListDTOTotalItemCountL f ProjectListDTO{..} = (\projectListDTOTotalItemCount -> ProjectListDTO { projectListDTOTotalItemCount, ..} ) <$> f projectListDTOTotalItemCount
+{-# INLINE projectListDTOTotalItemCountL #-}
+
+
+
+-- * ProjectMemberDTO
+
+-- | 'projectMemberDTORole' Lens
+projectMemberDTORoleL :: Lens_' ProjectMemberDTO (ProjectRoleDTO)
+projectMemberDTORoleL f ProjectMemberDTO{..} = (\projectMemberDTORole -> ProjectMemberDTO { projectMemberDTORole, ..} ) <$> f projectMemberDTORole
+{-# INLINE projectMemberDTORoleL #-}
+
+-- | 'projectMemberDTORegisteredMemberInfo' Lens
+projectMemberDTORegisteredMemberInfoL :: Lens_' ProjectMemberDTO (Maybe RegisteredMemberInfoDTO)
+projectMemberDTORegisteredMemberInfoL f ProjectMemberDTO{..} = (\projectMemberDTORegisteredMemberInfo -> ProjectMemberDTO { projectMemberDTORegisteredMemberInfo, ..} ) <$> f projectMemberDTORegisteredMemberInfo
+{-# INLINE projectMemberDTORegisteredMemberInfoL #-}
+
+-- | 'projectMemberDTOInvitationInfo' Lens
+projectMemberDTOInvitationInfoL :: Lens_' ProjectMemberDTO (Maybe ProjectInvitationDTO)
+projectMemberDTOInvitationInfoL f ProjectMemberDTO{..} = (\projectMemberDTOInvitationInfo -> ProjectMemberDTO { projectMemberDTOInvitationInfo, ..} ) <$> f projectMemberDTOInvitationInfo
+{-# INLINE projectMemberDTOInvitationInfoL #-}
+
+-- | 'projectMemberDTOEditableRole' Lens
+projectMemberDTOEditableRoleL :: Lens_' ProjectMemberDTO (Bool)
+projectMemberDTOEditableRoleL f ProjectMemberDTO{..} = (\projectMemberDTOEditableRole -> ProjectMemberDTO { projectMemberDTOEditableRole, ..} ) <$> f projectMemberDTOEditableRole
+{-# INLINE projectMemberDTOEditableRoleL #-}
+
+-- | 'projectMemberDTOCanLeaveProject' Lens
+projectMemberDTOCanLeaveProjectL :: Lens_' ProjectMemberDTO (Bool)
+projectMemberDTOCanLeaveProjectL f ProjectMemberDTO{..} = (\projectMemberDTOCanLeaveProject -> ProjectMemberDTO { projectMemberDTOCanLeaveProject, ..} ) <$> f projectMemberDTOCanLeaveProject
+{-# INLINE projectMemberDTOCanLeaveProjectL #-}
+
+
+
+-- * ProjectMemberUpdateDTO
+
+-- | 'projectMemberUpdateDTORole' Lens
+projectMemberUpdateDTORoleL :: Lens_' ProjectMemberUpdateDTO (ProjectRoleDTO)
+projectMemberUpdateDTORoleL f ProjectMemberUpdateDTO{..} = (\projectMemberUpdateDTORole -> ProjectMemberUpdateDTO { projectMemberUpdateDTORole, ..} ) <$> f projectMemberUpdateDTORole
+{-# INLINE projectMemberUpdateDTORoleL #-}
+
+
+
+-- * ProjectMembersDTO
+
+-- | 'projectMembersDTOProjectName' Lens
+projectMembersDTOProjectNameL :: Lens_' ProjectMembersDTO (Text)
+projectMembersDTOProjectNameL f ProjectMembersDTO{..} = (\projectMembersDTOProjectName -> ProjectMembersDTO { projectMembersDTOProjectName, ..} ) <$> f projectMembersDTOProjectName
+{-# INLINE projectMembersDTOProjectNameL #-}
+
+-- | 'projectMembersDTOProjectId' Lens
+projectMembersDTOProjectIdL :: Lens_' ProjectMembersDTO (Text)
+projectMembersDTOProjectIdL f ProjectMembersDTO{..} = (\projectMembersDTOProjectId -> ProjectMembersDTO { projectMembersDTOProjectId, ..} ) <$> f projectMembersDTOProjectId
+{-# INLINE projectMembersDTOProjectIdL #-}
+
+-- | 'projectMembersDTOOrganizationName' Lens
+projectMembersDTOOrganizationNameL :: Lens_' ProjectMembersDTO (Text)
+projectMembersDTOOrganizationNameL f ProjectMembersDTO{..} = (\projectMembersDTOOrganizationName -> ProjectMembersDTO { projectMembersDTOOrganizationName, ..} ) <$> f projectMembersDTOOrganizationName
+{-# INLINE projectMembersDTOOrganizationNameL #-}
+
+-- | 'projectMembersDTOMembers' Lens
+projectMembersDTOMembersL :: Lens_' ProjectMembersDTO ([ProjectMemberDTO])
+projectMembersDTOMembersL f ProjectMembersDTO{..} = (\projectMembersDTOMembers -> ProjectMembersDTO { projectMembersDTOMembers, ..} ) <$> f projectMembersDTOMembers
+{-# INLINE projectMembersDTOMembersL #-}
+
+-- | 'projectMembersDTOOrganizationId' Lens
+projectMembersDTOOrganizationIdL :: Lens_' ProjectMembersDTO (Text)
+projectMembersDTOOrganizationIdL f ProjectMembersDTO{..} = (\projectMembersDTOOrganizationId -> ProjectMembersDTO { projectMembersDTOOrganizationId, ..} ) <$> f projectMembersDTOOrganizationId
+{-# INLINE projectMembersDTOOrganizationIdL #-}
+
+
+
+-- * ProjectMetadataDTO
+
+-- | 'projectMetadataDTOName' Lens
+projectMetadataDTONameL :: Lens_' ProjectMetadataDTO (Text)
+projectMetadataDTONameL f ProjectMetadataDTO{..} = (\projectMetadataDTOName -> ProjectMetadataDTO { projectMetadataDTOName, ..} ) <$> f projectMetadataDTOName
+{-# INLINE projectMetadataDTONameL #-}
+
+-- | 'projectMetadataDTOOrganizationType' Lens
+projectMetadataDTOOrganizationTypeL :: Lens_' ProjectMetadataDTO (OrganizationTypeDTO)
+projectMetadataDTOOrganizationTypeL f ProjectMetadataDTO{..} = (\projectMetadataDTOOrganizationType -> ProjectMetadataDTO { projectMetadataDTOOrganizationType, ..} ) <$> f projectMetadataDTOOrganizationType
+{-# INLINE projectMetadataDTOOrganizationTypeL #-}
+
+-- | 'projectMetadataDTOTimeOfCreation' Lens
+projectMetadataDTOTimeOfCreationL :: Lens_' ProjectMetadataDTO (DateTime)
+projectMetadataDTOTimeOfCreationL f ProjectMetadataDTO{..} = (\projectMetadataDTOTimeOfCreation -> ProjectMetadataDTO { projectMetadataDTOTimeOfCreation, ..} ) <$> f projectMetadataDTOTimeOfCreation
+{-# INLINE projectMetadataDTOTimeOfCreationL #-}
+
+-- | 'projectMetadataDTOOrganizationName' Lens
+projectMetadataDTOOrganizationNameL :: Lens_' ProjectMetadataDTO (Text)
+projectMetadataDTOOrganizationNameL f ProjectMetadataDTO{..} = (\projectMetadataDTOOrganizationName -> ProjectMetadataDTO { projectMetadataDTOOrganizationName, ..} ) <$> f projectMetadataDTOOrganizationName
+{-# INLINE projectMetadataDTOOrganizationNameL #-}
+
+-- | 'projectMetadataDTOVersion' Lens
+projectMetadataDTOVersionL :: Lens_' ProjectMetadataDTO (Int)
+projectMetadataDTOVersionL f ProjectMetadataDTO{..} = (\projectMetadataDTOVersion -> ProjectMetadataDTO { projectMetadataDTOVersion, ..} ) <$> f projectMetadataDTOVersion
+{-# INLINE projectMetadataDTOVersionL #-}
+
+-- | 'projectMetadataDTOId' Lens
+projectMetadataDTOIdL :: Lens_' ProjectMetadataDTO (Text)
+projectMetadataDTOIdL f ProjectMetadataDTO{..} = (\projectMetadataDTOId -> ProjectMetadataDTO { projectMetadataDTOId, ..} ) <$> f projectMetadataDTOId
+{-# INLINE projectMetadataDTOIdL #-}
+
+-- | 'projectMetadataDTOProjectKey' Lens
+projectMetadataDTOProjectKeyL :: Lens_' ProjectMetadataDTO (Text)
+projectMetadataDTOProjectKeyL f ProjectMetadataDTO{..} = (\projectMetadataDTOProjectKey -> ProjectMetadataDTO { projectMetadataDTOProjectKey, ..} ) <$> f projectMetadataDTOProjectKey
+{-# INLINE projectMetadataDTOProjectKeyL #-}
+
+-- | 'projectMetadataDTOOrganizationId' Lens
+projectMetadataDTOOrganizationIdL :: Lens_' ProjectMetadataDTO (Text)
+projectMetadataDTOOrganizationIdL f ProjectMetadataDTO{..} = (\projectMetadataDTOOrganizationId -> ProjectMetadataDTO { projectMetadataDTOOrganizationId, ..} ) <$> f projectMetadataDTOOrganizationId
+{-# INLINE projectMetadataDTOOrganizationIdL #-}
+
+
+
+-- * ProjectRoleDTO
+
+
+
+-- * ProjectUpdateDTO
+
+-- | 'projectUpdateDTOCodeAccess' Lens
+projectUpdateDTOCodeAccessL :: Lens_' ProjectUpdateDTO (Maybe ProjectCodeAccessDTO)
+projectUpdateDTOCodeAccessL f ProjectUpdateDTO{..} = (\projectUpdateDTOCodeAccess -> ProjectUpdateDTO { projectUpdateDTOCodeAccess, ..} ) <$> f projectUpdateDTOCodeAccess
+{-# INLINE projectUpdateDTOCodeAccessL #-}
+
+-- | 'projectUpdateDTOName' Lens
+projectUpdateDTONameL :: Lens_' ProjectUpdateDTO (Maybe Text)
+projectUpdateDTONameL f ProjectUpdateDTO{..} = (\projectUpdateDTOName -> ProjectUpdateDTO { projectUpdateDTOName, ..} ) <$> f projectUpdateDTOName
+{-# INLINE projectUpdateDTONameL #-}
+
+-- | 'projectUpdateDTODescription' Lens
+projectUpdateDTODescriptionL :: Lens_' ProjectUpdateDTO (Maybe Text)
+projectUpdateDTODescriptionL f ProjectUpdateDTO{..} = (\projectUpdateDTODescription -> ProjectUpdateDTO { projectUpdateDTODescription, ..} ) <$> f projectUpdateDTODescription
+{-# INLINE projectUpdateDTODescriptionL #-}
+
+-- | 'projectUpdateDTOVisibility' Lens
+projectUpdateDTOVisibilityL :: Lens_' ProjectUpdateDTO (Maybe ProjectVisibilityDTO)
+projectUpdateDTOVisibilityL f ProjectUpdateDTO{..} = (\projectUpdateDTOVisibility -> ProjectUpdateDTO { projectUpdateDTOVisibility, ..} ) <$> f projectUpdateDTOVisibility
+{-# INLINE projectUpdateDTOVisibilityL #-}
+
+-- | 'projectUpdateDTODisplayClass' Lens
+projectUpdateDTODisplayClassL :: Lens_' ProjectUpdateDTO (Maybe Text)
+projectUpdateDTODisplayClassL f ProjectUpdateDTO{..} = (\projectUpdateDTODisplayClass -> ProjectUpdateDTO { projectUpdateDTODisplayClass, ..} ) <$> f projectUpdateDTODisplayClass
+{-# INLINE projectUpdateDTODisplayClassL #-}
+
+
+
+-- * ProjectVisibilityDTO
+
+
+
+-- * ProjectWithRoleDTO
+
+-- | 'projectWithRoleDTOCodeAccess' Lens
+projectWithRoleDTOCodeAccessL :: Lens_' ProjectWithRoleDTO (ProjectCodeAccessDTO)
+projectWithRoleDTOCodeAccessL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOCodeAccess -> ProjectWithRoleDTO { projectWithRoleDTOCodeAccess, ..} ) <$> f projectWithRoleDTOCodeAccess
+{-# INLINE projectWithRoleDTOCodeAccessL #-}
+
+-- | 'projectWithRoleDTOAvatarUrl' Lens
+projectWithRoleDTOAvatarUrlL :: Lens_' ProjectWithRoleDTO (Text)
+projectWithRoleDTOAvatarUrlL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOAvatarUrl -> ProjectWithRoleDTO { projectWithRoleDTOAvatarUrl, ..} ) <$> f projectWithRoleDTOAvatarUrl
+{-# INLINE projectWithRoleDTOAvatarUrlL #-}
+
+-- | 'projectWithRoleDTODescription' Lens
+projectWithRoleDTODescriptionL :: Lens_' ProjectWithRoleDTO (Maybe Text)
+projectWithRoleDTODescriptionL f ProjectWithRoleDTO{..} = (\projectWithRoleDTODescription -> ProjectWithRoleDTO { projectWithRoleDTODescription, ..} ) <$> f projectWithRoleDTODescription
+{-# INLINE projectWithRoleDTODescriptionL #-}
+
+-- | 'projectWithRoleDTOOrganizationType' Lens
+projectWithRoleDTOOrganizationTypeL :: Lens_' ProjectWithRoleDTO (OrganizationTypeDTO)
+projectWithRoleDTOOrganizationTypeL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOOrganizationType -> ProjectWithRoleDTO { projectWithRoleDTOOrganizationType, ..} ) <$> f projectWithRoleDTOOrganizationType
+{-# INLINE projectWithRoleDTOOrganizationTypeL #-}
+
+-- | 'projectWithRoleDTOFeatured' Lens
+projectWithRoleDTOFeaturedL :: Lens_' ProjectWithRoleDTO (Bool)
+projectWithRoleDTOFeaturedL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOFeatured -> ProjectWithRoleDTO { projectWithRoleDTOFeatured, ..} ) <$> f projectWithRoleDTOFeatured
+{-# INLINE projectWithRoleDTOFeaturedL #-}
+
+-- | 'projectWithRoleDTOOrganizationName' Lens
+projectWithRoleDTOOrganizationNameL :: Lens_' ProjectWithRoleDTO (Text)
+projectWithRoleDTOOrganizationNameL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOOrganizationName -> ProjectWithRoleDTO { projectWithRoleDTOOrganizationName, ..} ) <$> f projectWithRoleDTOOrganizationName
+{-# INLINE projectWithRoleDTOOrganizationNameL #-}
+
+-- | 'projectWithRoleDTOVersion' Lens
+projectWithRoleDTOVersionL :: Lens_' ProjectWithRoleDTO (Int)
+projectWithRoleDTOVersionL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOVersion -> ProjectWithRoleDTO { projectWithRoleDTOVersion, ..} ) <$> f projectWithRoleDTOVersion
+{-# INLINE projectWithRoleDTOVersionL #-}
+
+-- | 'projectWithRoleDTOId' Lens
+projectWithRoleDTOIdL :: Lens_' ProjectWithRoleDTO (Text)
+projectWithRoleDTOIdL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOId -> ProjectWithRoleDTO { projectWithRoleDTOId, ..} ) <$> f projectWithRoleDTOId
+{-# INLINE projectWithRoleDTOIdL #-}
+
+-- | 'projectWithRoleDTOProjectKey' Lens
+projectWithRoleDTOProjectKeyL :: Lens_' ProjectWithRoleDTO (Text)
+projectWithRoleDTOProjectKeyL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOProjectKey -> ProjectWithRoleDTO { projectWithRoleDTOProjectKey, ..} ) <$> f projectWithRoleDTOProjectKey
+{-# INLINE projectWithRoleDTOProjectKeyL #-}
+
+-- | 'projectWithRoleDTOOrganizationId' Lens
+projectWithRoleDTOOrganizationIdL :: Lens_' ProjectWithRoleDTO (Text)
+projectWithRoleDTOOrganizationIdL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOOrganizationId -> ProjectWithRoleDTO { projectWithRoleDTOOrganizationId, ..} ) <$> f projectWithRoleDTOOrganizationId
+{-# INLINE projectWithRoleDTOOrganizationIdL #-}
+
+-- | 'projectWithRoleDTOUserCount' Lens
+projectWithRoleDTOUserCountL :: Lens_' ProjectWithRoleDTO (Int)
+projectWithRoleDTOUserCountL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOUserCount -> ProjectWithRoleDTO { projectWithRoleDTOUserCount, ..} ) <$> f projectWithRoleDTOUserCount
+{-# INLINE projectWithRoleDTOUserCountL #-}
+
+-- | 'projectWithRoleDTOVisibility' Lens
+projectWithRoleDTOVisibilityL :: Lens_' ProjectWithRoleDTO (ProjectVisibilityDTO)
+projectWithRoleDTOVisibilityL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOVisibility -> ProjectWithRoleDTO { projectWithRoleDTOVisibility, ..} ) <$> f projectWithRoleDTOVisibility
+{-# INLINE projectWithRoleDTOVisibilityL #-}
+
+-- | 'projectWithRoleDTODisplayClass' Lens
+projectWithRoleDTODisplayClassL :: Lens_' ProjectWithRoleDTO (Maybe Text)
+projectWithRoleDTODisplayClassL f ProjectWithRoleDTO{..} = (\projectWithRoleDTODisplayClass -> ProjectWithRoleDTO { projectWithRoleDTODisplayClass, ..} ) <$> f projectWithRoleDTODisplayClass
+{-# INLINE projectWithRoleDTODisplayClassL #-}
+
+-- | 'projectWithRoleDTOName' Lens
+projectWithRoleDTONameL :: Lens_' ProjectWithRoleDTO (Text)
+projectWithRoleDTONameL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOName -> ProjectWithRoleDTO { projectWithRoleDTOName, ..} ) <$> f projectWithRoleDTOName
+{-# INLINE projectWithRoleDTONameL #-}
+
+-- | 'projectWithRoleDTOLastActivity' Lens
+projectWithRoleDTOLastActivityL :: Lens_' ProjectWithRoleDTO (DateTime)
+projectWithRoleDTOLastActivityL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOLastActivity -> ProjectWithRoleDTO { projectWithRoleDTOLastActivity, ..} ) <$> f projectWithRoleDTOLastActivity
+{-# INLINE projectWithRoleDTOLastActivityL #-}
+
+-- | 'projectWithRoleDTOTimeOfCreation' Lens
+projectWithRoleDTOTimeOfCreationL :: Lens_' ProjectWithRoleDTO (DateTime)
+projectWithRoleDTOTimeOfCreationL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOTimeOfCreation -> ProjectWithRoleDTO { projectWithRoleDTOTimeOfCreation, ..} ) <$> f projectWithRoleDTOTimeOfCreation
+{-# INLINE projectWithRoleDTOTimeOfCreationL #-}
+
+-- | 'projectWithRoleDTOUserRoleInOrganization' Lens
+projectWithRoleDTOUserRoleInOrganizationL :: Lens_' ProjectWithRoleDTO (Maybe OrganizationRoleDTO)
+projectWithRoleDTOUserRoleInOrganizationL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOUserRoleInOrganization -> ProjectWithRoleDTO { projectWithRoleDTOUserRoleInOrganization, ..} ) <$> f projectWithRoleDTOUserRoleInOrganization
+{-# INLINE projectWithRoleDTOUserRoleInOrganizationL #-}
+
+-- | 'projectWithRoleDTOAvatarSource' Lens
+projectWithRoleDTOAvatarSourceL :: Lens_' ProjectWithRoleDTO (AvatarSourceEnum)
+projectWithRoleDTOAvatarSourceL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOAvatarSource -> ProjectWithRoleDTO { projectWithRoleDTOAvatarSource, ..} ) <$> f projectWithRoleDTOAvatarSource
+{-# INLINE projectWithRoleDTOAvatarSourceL #-}
+
+-- | 'projectWithRoleDTOLeaderboardEntryCount' Lens
+projectWithRoleDTOLeaderboardEntryCountL :: Lens_' ProjectWithRoleDTO (Int)
+projectWithRoleDTOLeaderboardEntryCountL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOLeaderboardEntryCount -> ProjectWithRoleDTO { projectWithRoleDTOLeaderboardEntryCount, ..} ) <$> f projectWithRoleDTOLeaderboardEntryCount
+{-# INLINE projectWithRoleDTOLeaderboardEntryCountL #-}
+
+-- | 'projectWithRoleDTOUserRoleInProject' Lens
+projectWithRoleDTOUserRoleInProjectL :: Lens_' ProjectWithRoleDTO (ProjectRoleDTO)
+projectWithRoleDTOUserRoleInProjectL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOUserRoleInProject -> ProjectWithRoleDTO { projectWithRoleDTOUserRoleInProject, ..} ) <$> f projectWithRoleDTOUserRoleInProject
+{-# INLINE projectWithRoleDTOUserRoleInProjectL #-}
+
+-- | 'projectWithRoleDTOBackgroundUrl' Lens
+projectWithRoleDTOBackgroundUrlL :: Lens_' ProjectWithRoleDTO (Maybe Text)
+projectWithRoleDTOBackgroundUrlL f ProjectWithRoleDTO{..} = (\projectWithRoleDTOBackgroundUrl -> ProjectWithRoleDTO { projectWithRoleDTOBackgroundUrl, ..} ) <$> f projectWithRoleDTOBackgroundUrl
+{-# INLINE projectWithRoleDTOBackgroundUrlL #-}
+
+
+
+-- * PublicUserProfileDTO
+
+-- | 'publicUserProfileDTOBiography' Lens
+publicUserProfileDTOBiographyL :: Lens_' PublicUserProfileDTO (Text)
+publicUserProfileDTOBiographyL f PublicUserProfileDTO{..} = (\publicUserProfileDTOBiography -> PublicUserProfileDTO { publicUserProfileDTOBiography, ..} ) <$> f publicUserProfileDTOBiography
+{-# INLINE publicUserProfileDTOBiographyL #-}
+
+-- | 'publicUserProfileDTOEmail' Lens
+publicUserProfileDTOEmailL :: Lens_' PublicUserProfileDTO (Maybe Text)
+publicUserProfileDTOEmailL f PublicUserProfileDTO{..} = (\publicUserProfileDTOEmail -> PublicUserProfileDTO { publicUserProfileDTOEmail, ..} ) <$> f publicUserProfileDTOEmail
+{-# INLINE publicUserProfileDTOEmailL #-}
+
+-- | 'publicUserProfileDTOAvatarSource' Lens
+publicUserProfileDTOAvatarSourceL :: Lens_' PublicUserProfileDTO (AvatarSourceEnum)
+publicUserProfileDTOAvatarSourceL f PublicUserProfileDTO{..} = (\publicUserProfileDTOAvatarSource -> PublicUserProfileDTO { publicUserProfileDTOAvatarSource, ..} ) <$> f publicUserProfileDTOAvatarSource
+{-# INLINE publicUserProfileDTOAvatarSourceL #-}
+
+-- | 'publicUserProfileDTOFirstName' Lens
+publicUserProfileDTOFirstNameL :: Lens_' PublicUserProfileDTO (Maybe Text)
+publicUserProfileDTOFirstNameL f PublicUserProfileDTO{..} = (\publicUserProfileDTOFirstName -> PublicUserProfileDTO { publicUserProfileDTOFirstName, ..} ) <$> f publicUserProfileDTOFirstName
+{-# INLINE publicUserProfileDTOFirstNameL #-}
+
+-- | 'publicUserProfileDTOShortInfo' Lens
+publicUserProfileDTOShortInfoL :: Lens_' PublicUserProfileDTO (Text)
+publicUserProfileDTOShortInfoL f PublicUserProfileDTO{..} = (\publicUserProfileDTOShortInfo -> PublicUserProfileDTO { publicUserProfileDTOShortInfo, ..} ) <$> f publicUserProfileDTOShortInfo
+{-# INLINE publicUserProfileDTOShortInfoL #-}
+
+-- | 'publicUserProfileDTOUsername' Lens
+publicUserProfileDTOUsernameL :: Lens_' PublicUserProfileDTO (Text)
+publicUserProfileDTOUsernameL f PublicUserProfileDTO{..} = (\publicUserProfileDTOUsername -> PublicUserProfileDTO { publicUserProfileDTOUsername, ..} ) <$> f publicUserProfileDTOUsername
+{-# INLINE publicUserProfileDTOUsernameL #-}
+
+-- | 'publicUserProfileDTOAvatarUrl' Lens
+publicUserProfileDTOAvatarUrlL :: Lens_' PublicUserProfileDTO (Text)
+publicUserProfileDTOAvatarUrlL f PublicUserProfileDTO{..} = (\publicUserProfileDTOAvatarUrl -> PublicUserProfileDTO { publicUserProfileDTOAvatarUrl, ..} ) <$> f publicUserProfileDTOAvatarUrl
+{-# INLINE publicUserProfileDTOAvatarUrlL #-}
+
+-- | 'publicUserProfileDTOLastName' Lens
+publicUserProfileDTOLastNameL :: Lens_' PublicUserProfileDTO (Maybe Text)
+publicUserProfileDTOLastNameL f PublicUserProfileDTO{..} = (\publicUserProfileDTOLastName -> PublicUserProfileDTO { publicUserProfileDTOLastName, ..} ) <$> f publicUserProfileDTOLastName
+{-# INLINE publicUserProfileDTOLastNameL #-}
+
+-- | 'publicUserProfileDTOLinks' Lens
+publicUserProfileDTOLinksL :: Lens_' PublicUserProfileDTO (UserProfileLinksDTO)
+publicUserProfileDTOLinksL f PublicUserProfileDTO{..} = (\publicUserProfileDTOLinks -> PublicUserProfileDTO { publicUserProfileDTOLinks, ..} ) <$> f publicUserProfileDTOLinks
+{-# INLINE publicUserProfileDTOLinksL #-}
+
+
+
+-- * QuestionnaireDTO
+
+-- | 'questionnaireDTOAnswers' Lens
+questionnaireDTOAnswersL :: Lens_' QuestionnaireDTO (Text)
+questionnaireDTOAnswersL f QuestionnaireDTO{..} = (\questionnaireDTOAnswers -> QuestionnaireDTO { questionnaireDTOAnswers, ..} ) <$> f questionnaireDTOAnswers
+{-# INLINE questionnaireDTOAnswersL #-}
+
+
+
+-- * RegisteredMemberInfoDTO
+
+-- | 'registeredMemberInfoDTOAvatarSource' Lens
+registeredMemberInfoDTOAvatarSourceL :: Lens_' RegisteredMemberInfoDTO (AvatarSourceEnum)
+registeredMemberInfoDTOAvatarSourceL f RegisteredMemberInfoDTO{..} = (\registeredMemberInfoDTOAvatarSource -> RegisteredMemberInfoDTO { registeredMemberInfoDTOAvatarSource, ..} ) <$> f registeredMemberInfoDTOAvatarSource
+{-# INLINE registeredMemberInfoDTOAvatarSourceL #-}
+
+-- | 'registeredMemberInfoDTOLastName' Lens
+registeredMemberInfoDTOLastNameL :: Lens_' RegisteredMemberInfoDTO (Text)
+registeredMemberInfoDTOLastNameL f RegisteredMemberInfoDTO{..} = (\registeredMemberInfoDTOLastName -> RegisteredMemberInfoDTO { registeredMemberInfoDTOLastName, ..} ) <$> f registeredMemberInfoDTOLastName
+{-# INLINE registeredMemberInfoDTOLastNameL #-}
+
+-- | 'registeredMemberInfoDTOFirstName' Lens
+registeredMemberInfoDTOFirstNameL :: Lens_' RegisteredMemberInfoDTO (Text)
+registeredMemberInfoDTOFirstNameL f RegisteredMemberInfoDTO{..} = (\registeredMemberInfoDTOFirstName -> RegisteredMemberInfoDTO { registeredMemberInfoDTOFirstName, ..} ) <$> f registeredMemberInfoDTOFirstName
+{-# INLINE registeredMemberInfoDTOFirstNameL #-}
+
+-- | 'registeredMemberInfoDTOUsername' Lens
+registeredMemberInfoDTOUsernameL :: Lens_' RegisteredMemberInfoDTO (Text)
+registeredMemberInfoDTOUsernameL f RegisteredMemberInfoDTO{..} = (\registeredMemberInfoDTOUsername -> RegisteredMemberInfoDTO { registeredMemberInfoDTOUsername, ..} ) <$> f registeredMemberInfoDTOUsername
+{-# INLINE registeredMemberInfoDTOUsernameL #-}
+
+-- | 'registeredMemberInfoDTOAvatarUrl' Lens
+registeredMemberInfoDTOAvatarUrlL :: Lens_' RegisteredMemberInfoDTO (Text)
+registeredMemberInfoDTOAvatarUrlL f RegisteredMemberInfoDTO{..} = (\registeredMemberInfoDTOAvatarUrl -> RegisteredMemberInfoDTO { registeredMemberInfoDTOAvatarUrl, ..} ) <$> f registeredMemberInfoDTOAvatarUrl
+{-# INLINE registeredMemberInfoDTOAvatarUrlL #-}
+
+
+
+-- * RegistrationSurveyDTO
+
+-- | 'registrationSurveyDTOSurvey' Lens
+registrationSurveyDTOSurveyL :: Lens_' RegistrationSurveyDTO (Text)
+registrationSurveyDTOSurveyL f RegistrationSurveyDTO{..} = (\registrationSurveyDTOSurvey -> RegistrationSurveyDTO { registrationSurveyDTOSurvey, ..} ) <$> f registrationSurveyDTOSurvey
+{-# INLINE registrationSurveyDTOSurveyL #-}
+
+
+
+-- * Series
+
+-- | 'seriesSeriesType' Lens
+seriesSeriesTypeL :: Lens_' Series (SeriesType)
+seriesSeriesTypeL f Series{..} = (\seriesSeriesType -> Series { seriesSeriesType, ..} ) <$> f seriesSeriesType
+{-# INLINE seriesSeriesTypeL #-}
+
+-- | 'seriesChannelName' Lens
+seriesChannelNameL :: Lens_' Series (Maybe Text)
+seriesChannelNameL f Series{..} = (\seriesChannelName -> Series { seriesChannelName, ..} ) <$> f seriesChannelName
+{-# INLINE seriesChannelNameL #-}
+
+-- | 'seriesChannelId' Lens
+seriesChannelIdL :: Lens_' Series (Maybe Text)
+seriesChannelIdL f Series{..} = (\seriesChannelId -> Series { seriesChannelId, ..} ) <$> f seriesChannelId
+{-# INLINE seriesChannelIdL #-}
+
+-- | 'seriesAliasId' Lens
+seriesAliasIdL :: Lens_' Series (Maybe Text)
+seriesAliasIdL f Series{..} = (\seriesAliasId -> Series { seriesAliasId, ..} ) <$> f seriesAliasId
+{-# INLINE seriesAliasIdL #-}
+
+-- | 'seriesLabel' Lens
+seriesLabelL :: Lens_' Series (Text)
+seriesLabelL f Series{..} = (\seriesLabel -> Series { seriesLabel, ..} ) <$> f seriesLabel
+{-# INLINE seriesLabelL #-}
+
+
+
+-- * SeriesDefinition
+
+-- | 'seriesDefinitionLabel' Lens
+seriesDefinitionLabelL :: Lens_' SeriesDefinition (Text)
+seriesDefinitionLabelL f SeriesDefinition{..} = (\seriesDefinitionLabel -> SeriesDefinition { seriesDefinitionLabel, ..} ) <$> f seriesDefinitionLabel
+{-# INLINE seriesDefinitionLabelL #-}
+
+-- | 'seriesDefinitionChannelName' Lens
+seriesDefinitionChannelNameL :: Lens_' SeriesDefinition (Maybe Text)
+seriesDefinitionChannelNameL f SeriesDefinition{..} = (\seriesDefinitionChannelName -> SeriesDefinition { seriesDefinitionChannelName, ..} ) <$> f seriesDefinitionChannelName
+{-# INLINE seriesDefinitionChannelNameL #-}
+
+-- | 'seriesDefinitionAliasId' Lens
+seriesDefinitionAliasIdL :: Lens_' SeriesDefinition (Maybe Text)
+seriesDefinitionAliasIdL f SeriesDefinition{..} = (\seriesDefinitionAliasId -> SeriesDefinition { seriesDefinitionAliasId, ..} ) <$> f seriesDefinitionAliasId
+{-# INLINE seriesDefinitionAliasIdL #-}
+
+-- | 'seriesDefinitionSeriesType' Lens
+seriesDefinitionSeriesTypeL :: Lens_' SeriesDefinition (SeriesType)
+seriesDefinitionSeriesTypeL f SeriesDefinition{..} = (\seriesDefinitionSeriesType -> SeriesDefinition { seriesDefinitionSeriesType, ..} ) <$> f seriesDefinitionSeriesType
+{-# INLINE seriesDefinitionSeriesTypeL #-}
+
+
+
+-- * SeriesType
+
+
+
+-- * SessionDTO
+
+-- | 'sessionDTOSessionId' Lens
+sessionDTOSessionIdL :: Lens_' SessionDTO (Text)
+sessionDTOSessionIdL f SessionDTO{..} = (\sessionDTOSessionId -> SessionDTO { sessionDTOSessionId, ..} ) <$> f sessionDTOSessionId
+{-# INLINE sessionDTOSessionIdL #-}
+
+
+
+-- * StateTransitions
+
+-- | 'stateTransitionsRunning' Lens
+stateTransitionsRunningL :: Lens_' StateTransitions (Maybe DateTime)
+stateTransitionsRunningL f StateTransitions{..} = (\stateTransitionsRunning -> StateTransitions { stateTransitionsRunning, ..} ) <$> f stateTransitionsRunning
+{-# INLINE stateTransitionsRunningL #-}
+
+-- | 'stateTransitionsSucceeded' Lens
+stateTransitionsSucceededL :: Lens_' StateTransitions (Maybe DateTime)
+stateTransitionsSucceededL f StateTransitions{..} = (\stateTransitionsSucceeded -> StateTransitions { stateTransitionsSucceeded, ..} ) <$> f stateTransitionsSucceeded
+{-# INLINE stateTransitionsSucceededL #-}
+
+-- | 'stateTransitionsFailed' Lens
+stateTransitionsFailedL :: Lens_' StateTransitions (Maybe DateTime)
+stateTransitionsFailedL f StateTransitions{..} = (\stateTransitionsFailed -> StateTransitions { stateTransitionsFailed, ..} ) <$> f stateTransitionsFailed
+{-# INLINE stateTransitionsFailedL #-}
+
+-- | 'stateTransitionsAborted' Lens
+stateTransitionsAbortedL :: Lens_' StateTransitions (Maybe DateTime)
+stateTransitionsAbortedL f StateTransitions{..} = (\stateTransitionsAborted -> StateTransitions { stateTransitionsAborted, ..} ) <$> f stateTransitionsAborted
+{-# INLINE stateTransitionsAbortedL #-}
+
+
+
+-- * StorageUsage
+
+-- | 'storageUsageUsage' Lens
+storageUsageUsageL :: Lens_' StorageUsage (Integer)
+storageUsageUsageL f StorageUsage{..} = (\storageUsageUsage -> StorageUsage { storageUsageUsage, ..} ) <$> f storageUsageUsage
+{-# INLINE storageUsageUsageL #-}
+
+
+
+-- * SubscriptionCancelInfoDTO
+
+-- | 'subscriptionCancelInfoDTOReasons' Lens
+subscriptionCancelInfoDTOReasonsL :: Lens_' SubscriptionCancelInfoDTO ([Text])
+subscriptionCancelInfoDTOReasonsL f SubscriptionCancelInfoDTO{..} = (\subscriptionCancelInfoDTOReasons -> SubscriptionCancelInfoDTO { subscriptionCancelInfoDTOReasons, ..} ) <$> f subscriptionCancelInfoDTOReasons
+{-# INLINE subscriptionCancelInfoDTOReasonsL #-}
+
+-- | 'subscriptionCancelInfoDTODescription' Lens
+subscriptionCancelInfoDTODescriptionL :: Lens_' SubscriptionCancelInfoDTO (Maybe Text)
+subscriptionCancelInfoDTODescriptionL f SubscriptionCancelInfoDTO{..} = (\subscriptionCancelInfoDTODescription -> SubscriptionCancelInfoDTO { subscriptionCancelInfoDTODescription, ..} ) <$> f subscriptionCancelInfoDTODescription
+{-# INLINE subscriptionCancelInfoDTODescriptionL #-}
+
+
+
+-- * SystemMetric
+
+-- | 'systemMetricSeries' Lens
+systemMetricSeriesL :: Lens_' SystemMetric ([Text])
+systemMetricSeriesL f SystemMetric{..} = (\systemMetricSeries -> SystemMetric { systemMetricSeries, ..} ) <$> f systemMetricSeries
+{-# INLINE systemMetricSeriesL #-}
+
+-- | 'systemMetricName' Lens
+systemMetricNameL :: Lens_' SystemMetric (Text)
+systemMetricNameL f SystemMetric{..} = (\systemMetricName -> SystemMetric { systemMetricName, ..} ) <$> f systemMetricName
+{-# INLINE systemMetricNameL #-}
+
+-- | 'systemMetricMin' Lens
+systemMetricMinL :: Lens_' SystemMetric (Maybe Double)
+systemMetricMinL f SystemMetric{..} = (\systemMetricMin -> SystemMetric { systemMetricMin, ..} ) <$> f systemMetricMin
+{-# INLINE systemMetricMinL #-}
+
+-- | 'systemMetricMax' Lens
+systemMetricMaxL :: Lens_' SystemMetric (Maybe Double)
+systemMetricMaxL f SystemMetric{..} = (\systemMetricMax -> SystemMetric { systemMetricMax, ..} ) <$> f systemMetricMax
+{-# INLINE systemMetricMaxL #-}
+
+-- | 'systemMetricUnit' Lens
+systemMetricUnitL :: Lens_' SystemMetric (Maybe Text)
+systemMetricUnitL f SystemMetric{..} = (\systemMetricUnit -> SystemMetric { systemMetricUnit, ..} ) <$> f systemMetricUnit
+{-# INLINE systemMetricUnitL #-}
+
+-- | 'systemMetricDescription' Lens
+systemMetricDescriptionL :: Lens_' SystemMetric (Text)
+systemMetricDescriptionL f SystemMetric{..} = (\systemMetricDescription -> SystemMetric { systemMetricDescription, ..} ) <$> f systemMetricDescription
+{-# INLINE systemMetricDescriptionL #-}
+
+-- | 'systemMetricResourceType' Lens
+systemMetricResourceTypeL :: Lens_' SystemMetric (SystemMetricResourceType)
+systemMetricResourceTypeL f SystemMetric{..} = (\systemMetricResourceType -> SystemMetric { systemMetricResourceType, ..} ) <$> f systemMetricResourceType
+{-# INLINE systemMetricResourceTypeL #-}
+
+-- | 'systemMetricExperimentId' Lens
+systemMetricExperimentIdL :: Lens_' SystemMetric (Text)
+systemMetricExperimentIdL f SystemMetric{..} = (\systemMetricExperimentId -> SystemMetric { systemMetricExperimentId, ..} ) <$> f systemMetricExperimentId
+{-# INLINE systemMetricExperimentIdL #-}
+
+-- | 'systemMetricId' Lens
+systemMetricIdL :: Lens_' SystemMetric (Text)
+systemMetricIdL f SystemMetric{..} = (\systemMetricId -> SystemMetric { systemMetricId, ..} ) <$> f systemMetricId
+{-# INLINE systemMetricIdL #-}
+
+
+
+-- * SystemMetricParams
+
+-- | 'systemMetricParamsSeries' Lens
+systemMetricParamsSeriesL :: Lens_' SystemMetricParams ([Text])
+systemMetricParamsSeriesL f SystemMetricParams{..} = (\systemMetricParamsSeries -> SystemMetricParams { systemMetricParamsSeries, ..} ) <$> f systemMetricParamsSeries
+{-# INLINE systemMetricParamsSeriesL #-}
+
+-- | 'systemMetricParamsName' Lens
+systemMetricParamsNameL :: Lens_' SystemMetricParams (Text)
+systemMetricParamsNameL f SystemMetricParams{..} = (\systemMetricParamsName -> SystemMetricParams { systemMetricParamsName, ..} ) <$> f systemMetricParamsName
+{-# INLINE systemMetricParamsNameL #-}
+
+-- | 'systemMetricParamsMin' Lens
+systemMetricParamsMinL :: Lens_' SystemMetricParams (Maybe Double)
+systemMetricParamsMinL f SystemMetricParams{..} = (\systemMetricParamsMin -> SystemMetricParams { systemMetricParamsMin, ..} ) <$> f systemMetricParamsMin
+{-# INLINE systemMetricParamsMinL #-}
+
+-- | 'systemMetricParamsMax' Lens
+systemMetricParamsMaxL :: Lens_' SystemMetricParams (Maybe Double)
+systemMetricParamsMaxL f SystemMetricParams{..} = (\systemMetricParamsMax -> SystemMetricParams { systemMetricParamsMax, ..} ) <$> f systemMetricParamsMax
+{-# INLINE systemMetricParamsMaxL #-}
+
+-- | 'systemMetricParamsUnit' Lens
+systemMetricParamsUnitL :: Lens_' SystemMetricParams (Maybe Text)
+systemMetricParamsUnitL f SystemMetricParams{..} = (\systemMetricParamsUnit -> SystemMetricParams { systemMetricParamsUnit, ..} ) <$> f systemMetricParamsUnit
+{-# INLINE systemMetricParamsUnitL #-}
+
+-- | 'systemMetricParamsDescription' Lens
+systemMetricParamsDescriptionL :: Lens_' SystemMetricParams (Text)
+systemMetricParamsDescriptionL f SystemMetricParams{..} = (\systemMetricParamsDescription -> SystemMetricParams { systemMetricParamsDescription, ..} ) <$> f systemMetricParamsDescription
+{-# INLINE systemMetricParamsDescriptionL #-}
+
+-- | 'systemMetricParamsResourceType' Lens
+systemMetricParamsResourceTypeL :: Lens_' SystemMetricParams (SystemMetricResourceType)
+systemMetricParamsResourceTypeL f SystemMetricParams{..} = (\systemMetricParamsResourceType -> SystemMetricParams { systemMetricParamsResourceType, ..} ) <$> f systemMetricParamsResourceType
+{-# INLINE systemMetricParamsResourceTypeL #-}
+
+
+
+-- * SystemMetricPoint
+
+-- | 'systemMetricPointTimestampMillis' Lens
+systemMetricPointTimestampMillisL :: Lens_' SystemMetricPoint (Integer)
+systemMetricPointTimestampMillisL f SystemMetricPoint{..} = (\systemMetricPointTimestampMillis -> SystemMetricPoint { systemMetricPointTimestampMillis, ..} ) <$> f systemMetricPointTimestampMillis
+{-# INLINE systemMetricPointTimestampMillisL #-}
+
+-- | 'systemMetricPointX' Lens
+systemMetricPointXL :: Lens_' SystemMetricPoint (Integer)
+systemMetricPointXL f SystemMetricPoint{..} = (\systemMetricPointX -> SystemMetricPoint { systemMetricPointX, ..} ) <$> f systemMetricPointX
+{-# INLINE systemMetricPointXL #-}
+
+-- | 'systemMetricPointY' Lens
+systemMetricPointYL :: Lens_' SystemMetricPoint (Double)
+systemMetricPointYL f SystemMetricPoint{..} = (\systemMetricPointY -> SystemMetricPoint { systemMetricPointY, ..} ) <$> f systemMetricPointY
+{-# INLINE systemMetricPointYL #-}
+
+
+
+-- * SystemMetricResourceType
+
+
+
+-- * SystemMetricValues
+
+-- | 'systemMetricValuesMetricId' Lens
+systemMetricValuesMetricIdL :: Lens_' SystemMetricValues (Text)
+systemMetricValuesMetricIdL f SystemMetricValues{..} = (\systemMetricValuesMetricId -> SystemMetricValues { systemMetricValuesMetricId, ..} ) <$> f systemMetricValuesMetricId
+{-# INLINE systemMetricValuesMetricIdL #-}
+
+-- | 'systemMetricValuesSeriesName' Lens
+systemMetricValuesSeriesNameL :: Lens_' SystemMetricValues (Text)
+systemMetricValuesSeriesNameL f SystemMetricValues{..} = (\systemMetricValuesSeriesName -> SystemMetricValues { systemMetricValuesSeriesName, ..} ) <$> f systemMetricValuesSeriesName
+{-# INLINE systemMetricValuesSeriesNameL #-}
+
+-- | 'systemMetricValuesLevel' Lens
+systemMetricValuesLevelL :: Lens_' SystemMetricValues (Maybe Int)
+systemMetricValuesLevelL f SystemMetricValues{..} = (\systemMetricValuesLevel -> SystemMetricValues { systemMetricValuesLevel, ..} ) <$> f systemMetricValuesLevel
+{-# INLINE systemMetricValuesLevelL #-}
+
+-- | 'systemMetricValuesValues' Lens
+systemMetricValuesValuesL :: Lens_' SystemMetricValues ([SystemMetricPoint])
+systemMetricValuesValuesL f SystemMetricValues{..} = (\systemMetricValuesValues -> SystemMetricValues { systemMetricValuesValues, ..} ) <$> f systemMetricValuesValues
+{-# INLINE systemMetricValuesValuesL #-}
+
+
+
+-- * UUID
+
+-- | 'uUIDMostSigBits' Lens
+uUIDMostSigBitsL :: Lens_' UUID (Integer)
+uUIDMostSigBitsL f UUID{..} = (\uUIDMostSigBits -> UUID { uUIDMostSigBits, ..} ) <$> f uUIDMostSigBits
+{-# INLINE uUIDMostSigBitsL #-}
+
+-- | 'uUIDLeastSigBits' Lens
+uUIDLeastSigBitsL :: Lens_' UUID (Integer)
+uUIDLeastSigBitsL f UUID{..} = (\uUIDLeastSigBits -> UUID { uUIDLeastSigBits, ..} ) <$> f uUIDLeastSigBits
+{-# INLINE uUIDLeastSigBitsL #-}
+
+
+
+-- * UpdateTagsParams
+
+-- | 'updateTagsParamsExperimentIds' Lens
+updateTagsParamsExperimentIdsL :: Lens_' UpdateTagsParams ([Text])
+updateTagsParamsExperimentIdsL f UpdateTagsParams{..} = (\updateTagsParamsExperimentIds -> UpdateTagsParams { updateTagsParamsExperimentIds, ..} ) <$> f updateTagsParamsExperimentIds
+{-# INLINE updateTagsParamsExperimentIdsL #-}
+
+-- | 'updateTagsParamsTagsToAdd' Lens
+updateTagsParamsTagsToAddL :: Lens_' UpdateTagsParams ([Text])
+updateTagsParamsTagsToAddL f UpdateTagsParams{..} = (\updateTagsParamsTagsToAdd -> UpdateTagsParams { updateTagsParamsTagsToAdd, ..} ) <$> f updateTagsParamsTagsToAdd
+{-# INLINE updateTagsParamsTagsToAddL #-}
+
+-- | 'updateTagsParamsTagsToDelete' Lens
+updateTagsParamsTagsToDeleteL :: Lens_' UpdateTagsParams ([Text])
+updateTagsParamsTagsToDeleteL f UpdateTagsParams{..} = (\updateTagsParamsTagsToDelete -> UpdateTagsParams { updateTagsParamsTagsToDelete, ..} ) <$> f updateTagsParamsTagsToDelete
+{-# INLINE updateTagsParamsTagsToDeleteL #-}
+
+
+
+-- * UserListDTO
+
+-- | 'userListDTOEntries' Lens
+userListDTOEntriesL :: Lens_' UserListDTO ([UserListItemDTO])
+userListDTOEntriesL f UserListDTO{..} = (\userListDTOEntries -> UserListDTO { userListDTOEntries, ..} ) <$> f userListDTOEntries
+{-# INLINE userListDTOEntriesL #-}
+
+-- | 'userListDTOMatchingItemCount' Lens
+userListDTOMatchingItemCountL :: Lens_' UserListDTO (Int)
+userListDTOMatchingItemCountL f UserListDTO{..} = (\userListDTOMatchingItemCount -> UserListDTO { userListDTOMatchingItemCount, ..} ) <$> f userListDTOMatchingItemCount
+{-# INLINE userListDTOMatchingItemCountL #-}
+
+-- | 'userListDTOTotalItemCount' Lens
+userListDTOTotalItemCountL :: Lens_' UserListDTO (Int)
+userListDTOTotalItemCountL f UserListDTO{..} = (\userListDTOTotalItemCount -> UserListDTO { userListDTOTotalItemCount, ..} ) <$> f userListDTOTotalItemCount
+{-# INLINE userListDTOTotalItemCountL #-}
+
+
+
+-- * UserListItemDTO
+
+-- | 'userListItemDTOAvatarSource' Lens
+userListItemDTOAvatarSourceL :: Lens_' UserListItemDTO (AvatarSourceEnum)
+userListItemDTOAvatarSourceL f UserListItemDTO{..} = (\userListItemDTOAvatarSource -> UserListItemDTO { userListItemDTOAvatarSource, ..} ) <$> f userListItemDTOAvatarSource
+{-# INLINE userListItemDTOAvatarSourceL #-}
+
+-- | 'userListItemDTOLastName' Lens
+userListItemDTOLastNameL :: Lens_' UserListItemDTO (Text)
+userListItemDTOLastNameL f UserListItemDTO{..} = (\userListItemDTOLastName -> UserListItemDTO { userListItemDTOLastName, ..} ) <$> f userListItemDTOLastName
+{-# INLINE userListItemDTOLastNameL #-}
+
+-- | 'userListItemDTOFirstName' Lens
+userListItemDTOFirstNameL :: Lens_' UserListItemDTO (Text)
+userListItemDTOFirstNameL f UserListItemDTO{..} = (\userListItemDTOFirstName -> UserListItemDTO { userListItemDTOFirstName, ..} ) <$> f userListItemDTOFirstName
+{-# INLINE userListItemDTOFirstNameL #-}
+
+-- | 'userListItemDTOUsername' Lens
+userListItemDTOUsernameL :: Lens_' UserListItemDTO (Text)
+userListItemDTOUsernameL f UserListItemDTO{..} = (\userListItemDTOUsername -> UserListItemDTO { userListItemDTOUsername, ..} ) <$> f userListItemDTOUsername
+{-# INLINE userListItemDTOUsernameL #-}
+
+-- | 'userListItemDTOAvatarUrl' Lens
+userListItemDTOAvatarUrlL :: Lens_' UserListItemDTO (Text)
+userListItemDTOAvatarUrlL f UserListItemDTO{..} = (\userListItemDTOAvatarUrl -> UserListItemDTO { userListItemDTOAvatarUrl, ..} ) <$> f userListItemDTOAvatarUrl
+{-# INLINE userListItemDTOAvatarUrlL #-}
+
+
+
+-- * UserPricingStatusDTO
+
+-- | 'userPricingStatusDTOCanCreateTeamFree' Lens
+userPricingStatusDTOCanCreateTeamFreeL :: Lens_' UserPricingStatusDTO (Bool)
+userPricingStatusDTOCanCreateTeamFreeL f UserPricingStatusDTO{..} = (\userPricingStatusDTOCanCreateTeamFree -> UserPricingStatusDTO { userPricingStatusDTOCanCreateTeamFree, ..} ) <$> f userPricingStatusDTOCanCreateTeamFree
+{-# INLINE userPricingStatusDTOCanCreateTeamFreeL #-}
+
+-- | 'userPricingStatusDTOAnyTeamFree' Lens
+userPricingStatusDTOAnyTeamFreeL :: Lens_' UserPricingStatusDTO (Maybe OrganizationWithRoleDTO)
+userPricingStatusDTOAnyTeamFreeL f UserPricingStatusDTO{..} = (\userPricingStatusDTOAnyTeamFree -> UserPricingStatusDTO { userPricingStatusDTOAnyTeamFree, ..} ) <$> f userPricingStatusDTOAnyTeamFree
+{-# INLINE userPricingStatusDTOAnyTeamFreeL #-}
+
+
+
+-- * UserProfileDTO
+
+-- | 'userProfileDTOUsernameHash' Lens
+userProfileDTOUsernameHashL :: Lens_' UserProfileDTO (Text)
+userProfileDTOUsernameHashL f UserProfileDTO{..} = (\userProfileDTOUsernameHash -> UserProfileDTO { userProfileDTOUsernameHash, ..} ) <$> f userProfileDTOUsernameHash
+{-# INLINE userProfileDTOUsernameHashL #-}
+
+-- | 'userProfileDTOEmail' Lens
+userProfileDTOEmailL :: Lens_' UserProfileDTO (Text)
+userProfileDTOEmailL f UserProfileDTO{..} = (\userProfileDTOEmail -> UserProfileDTO { userProfileDTOEmail, ..} ) <$> f userProfileDTOEmail
+{-# INLINE userProfileDTOEmailL #-}
+
+-- | 'userProfileDTOHasLoggedToCli' Lens
+userProfileDTOHasLoggedToCliL :: Lens_' UserProfileDTO (Bool)
+userProfileDTOHasLoggedToCliL f UserProfileDTO{..} = (\userProfileDTOHasLoggedToCli -> UserProfileDTO { userProfileDTOHasLoggedToCli, ..} ) <$> f userProfileDTOHasLoggedToCli
+{-# INLINE userProfileDTOHasLoggedToCliL #-}
+
+-- | 'userProfileDTOAvatarSource' Lens
+userProfileDTOAvatarSourceL :: Lens_' UserProfileDTO (AvatarSourceEnum)
+userProfileDTOAvatarSourceL f UserProfileDTO{..} = (\userProfileDTOAvatarSource -> UserProfileDTO { userProfileDTOAvatarSource, ..} ) <$> f userProfileDTOAvatarSource
+{-# INLINE userProfileDTOAvatarSourceL #-}
+
+-- | 'userProfileDTOFirstName' Lens
+userProfileDTOFirstNameL :: Lens_' UserProfileDTO (Text)
+userProfileDTOFirstNameL f UserProfileDTO{..} = (\userProfileDTOFirstName -> UserProfileDTO { userProfileDTOFirstName, ..} ) <$> f userProfileDTOFirstName
+{-# INLINE userProfileDTOFirstNameL #-}
+
+-- | 'userProfileDTOShortInfo' Lens
+userProfileDTOShortInfoL :: Lens_' UserProfileDTO (Text)
+userProfileDTOShortInfoL f UserProfileDTO{..} = (\userProfileDTOShortInfo -> UserProfileDTO { userProfileDTOShortInfo, ..} ) <$> f userProfileDTOShortInfo
+{-# INLINE userProfileDTOShortInfoL #-}
+
+-- | 'userProfileDTOCreated' Lens
+userProfileDTOCreatedL :: Lens_' UserProfileDTO (DateTime)
+userProfileDTOCreatedL f UserProfileDTO{..} = (\userProfileDTOCreated -> UserProfileDTO { userProfileDTOCreated, ..} ) <$> f userProfileDTOCreated
+{-# INLINE userProfileDTOCreatedL #-}
+
+-- | 'userProfileDTOBiography' Lens
+userProfileDTOBiographyL :: Lens_' UserProfileDTO (Text)
+userProfileDTOBiographyL f UserProfileDTO{..} = (\userProfileDTOBiography -> UserProfileDTO { userProfileDTOBiography, ..} ) <$> f userProfileDTOBiography
+{-# INLINE userProfileDTOBiographyL #-}
+
+-- | 'userProfileDTOHasCreatedExperiments' Lens
+userProfileDTOHasCreatedExperimentsL :: Lens_' UserProfileDTO (Bool)
+userProfileDTOHasCreatedExperimentsL f UserProfileDTO{..} = (\userProfileDTOHasCreatedExperiments -> UserProfileDTO { userProfileDTOHasCreatedExperiments, ..} ) <$> f userProfileDTOHasCreatedExperiments
+{-# INLINE userProfileDTOHasCreatedExperimentsL #-}
+
+-- | 'userProfileDTOUsername' Lens
+userProfileDTOUsernameL :: Lens_' UserProfileDTO (Text)
+userProfileDTOUsernameL f UserProfileDTO{..} = (\userProfileDTOUsername -> UserProfileDTO { userProfileDTOUsername, ..} ) <$> f userProfileDTOUsername
+{-# INLINE userProfileDTOUsernameL #-}
+
+-- | 'userProfileDTOAvatarUrl' Lens
+userProfileDTOAvatarUrlL :: Lens_' UserProfileDTO (Text)
+userProfileDTOAvatarUrlL f UserProfileDTO{..} = (\userProfileDTOAvatarUrl -> UserProfileDTO { userProfileDTOAvatarUrl, ..} ) <$> f userProfileDTOAvatarUrl
+{-# INLINE userProfileDTOAvatarUrlL #-}
+
+-- | 'userProfileDTOLastName' Lens
+userProfileDTOLastNameL :: Lens_' UserProfileDTO (Text)
+userProfileDTOLastNameL f UserProfileDTO{..} = (\userProfileDTOLastName -> UserProfileDTO { userProfileDTOLastName, ..} ) <$> f userProfileDTOLastName
+{-# INLINE userProfileDTOLastNameL #-}
+
+-- | 'userProfileDTOLinks' Lens
+userProfileDTOLinksL :: Lens_' UserProfileDTO (UserProfileLinksDTO)
+userProfileDTOLinksL f UserProfileDTO{..} = (\userProfileDTOLinks -> UserProfileDTO { userProfileDTOLinks, ..} ) <$> f userProfileDTOLinks
+{-# INLINE userProfileDTOLinksL #-}
+
+
+
+-- * UserProfileLinkDTO
+
+-- | 'userProfileLinkDTOLinkType' Lens
+userProfileLinkDTOLinkTypeL :: Lens_' UserProfileLinkDTO (LinkTypeDTO)
+userProfileLinkDTOLinkTypeL f UserProfileLinkDTO{..} = (\userProfileLinkDTOLinkType -> UserProfileLinkDTO { userProfileLinkDTOLinkType, ..} ) <$> f userProfileLinkDTOLinkType
+{-# INLINE userProfileLinkDTOLinkTypeL #-}
+
+-- | 'userProfileLinkDTOUrl' Lens
+userProfileLinkDTOUrlL :: Lens_' UserProfileLinkDTO (Text)
+userProfileLinkDTOUrlL f UserProfileLinkDTO{..} = (\userProfileLinkDTOUrl -> UserProfileLinkDTO { userProfileLinkDTOUrl, ..} ) <$> f userProfileLinkDTOUrl
+{-# INLINE userProfileLinkDTOUrlL #-}
+
+
+
+-- * UserProfileLinksDTO
+
+-- | 'userProfileLinksDTOGithub' Lens
+userProfileLinksDTOGithubL :: Lens_' UserProfileLinksDTO (Maybe Text)
+userProfileLinksDTOGithubL f UserProfileLinksDTO{..} = (\userProfileLinksDTOGithub -> UserProfileLinksDTO { userProfileLinksDTOGithub, ..} ) <$> f userProfileLinksDTOGithub
+{-# INLINE userProfileLinksDTOGithubL #-}
+
+-- | 'userProfileLinksDTOLinkedin' Lens
+userProfileLinksDTOLinkedinL :: Lens_' UserProfileLinksDTO (Maybe Text)
+userProfileLinksDTOLinkedinL f UserProfileLinksDTO{..} = (\userProfileLinksDTOLinkedin -> UserProfileLinksDTO { userProfileLinksDTOLinkedin, ..} ) <$> f userProfileLinksDTOLinkedin
+{-# INLINE userProfileLinksDTOLinkedinL #-}
+
+-- | 'userProfileLinksDTOOthers' Lens
+userProfileLinksDTOOthersL :: Lens_' UserProfileLinksDTO ([Text])
+userProfileLinksDTOOthersL f UserProfileLinksDTO{..} = (\userProfileLinksDTOOthers -> UserProfileLinksDTO { userProfileLinksDTOOthers, ..} ) <$> f userProfileLinksDTOOthers
+{-# INLINE userProfileLinksDTOOthersL #-}
+
+-- | 'userProfileLinksDTOKaggle' Lens
+userProfileLinksDTOKaggleL :: Lens_' UserProfileLinksDTO (Maybe Text)
+userProfileLinksDTOKaggleL f UserProfileLinksDTO{..} = (\userProfileLinksDTOKaggle -> UserProfileLinksDTO { userProfileLinksDTOKaggle, ..} ) <$> f userProfileLinksDTOKaggle
+{-# INLINE userProfileLinksDTOKaggleL #-}
+
+-- | 'userProfileLinksDTOTwitter' Lens
+userProfileLinksDTOTwitterL :: Lens_' UserProfileLinksDTO (Maybe Text)
+userProfileLinksDTOTwitterL f UserProfileLinksDTO{..} = (\userProfileLinksDTOTwitter -> UserProfileLinksDTO { userProfileLinksDTOTwitter, ..} ) <$> f userProfileLinksDTOTwitter
+{-# INLINE userProfileLinksDTOTwitterL #-}
+
+
+
+-- * UserProfileUpdateDTO
+
+-- | 'userProfileUpdateDTOBiography' Lens
+userProfileUpdateDTOBiographyL :: Lens_' UserProfileUpdateDTO (Maybe Text)
+userProfileUpdateDTOBiographyL f UserProfileUpdateDTO{..} = (\userProfileUpdateDTOBiography -> UserProfileUpdateDTO { userProfileUpdateDTOBiography, ..} ) <$> f userProfileUpdateDTOBiography
+{-# INLINE userProfileUpdateDTOBiographyL #-}
+
+-- | 'userProfileUpdateDTOHasLoggedToCli' Lens
+userProfileUpdateDTOHasLoggedToCliL :: Lens_' UserProfileUpdateDTO (Maybe Bool)
+userProfileUpdateDTOHasLoggedToCliL f UserProfileUpdateDTO{..} = (\userProfileUpdateDTOHasLoggedToCli -> UserProfileUpdateDTO { userProfileUpdateDTOHasLoggedToCli, ..} ) <$> f userProfileUpdateDTOHasLoggedToCli
+{-# INLINE userProfileUpdateDTOHasLoggedToCliL #-}
+
+-- | 'userProfileUpdateDTOLastName' Lens
+userProfileUpdateDTOLastNameL :: Lens_' UserProfileUpdateDTO (Maybe Text)
+userProfileUpdateDTOLastNameL f UserProfileUpdateDTO{..} = (\userProfileUpdateDTOLastName -> UserProfileUpdateDTO { userProfileUpdateDTOLastName, ..} ) <$> f userProfileUpdateDTOLastName
+{-# INLINE userProfileUpdateDTOLastNameL #-}
+
+-- | 'userProfileUpdateDTOFirstName' Lens
+userProfileUpdateDTOFirstNameL :: Lens_' UserProfileUpdateDTO (Maybe Text)
+userProfileUpdateDTOFirstNameL f UserProfileUpdateDTO{..} = (\userProfileUpdateDTOFirstName -> UserProfileUpdateDTO { userProfileUpdateDTOFirstName, ..} ) <$> f userProfileUpdateDTOFirstName
+{-# INLINE userProfileUpdateDTOFirstNameL #-}
+
+-- | 'userProfileUpdateDTOShortInfo' Lens
+userProfileUpdateDTOShortInfoL :: Lens_' UserProfileUpdateDTO (Maybe Text)
+userProfileUpdateDTOShortInfoL f UserProfileUpdateDTO{..} = (\userProfileUpdateDTOShortInfo -> UserProfileUpdateDTO { userProfileUpdateDTOShortInfo, ..} ) <$> f userProfileUpdateDTOShortInfo
+{-# INLINE userProfileUpdateDTOShortInfoL #-}
+
+
+
+-- * UsernameValidationStatusDTO
+
+-- | 'usernameValidationStatusDTOStatus' Lens
+usernameValidationStatusDTOStatusL :: Lens_' UsernameValidationStatusDTO (UsernameValidationStatusEnumDTO)
+usernameValidationStatusDTOStatusL f UsernameValidationStatusDTO{..} = (\usernameValidationStatusDTOStatus -> UsernameValidationStatusDTO { usernameValidationStatusDTOStatus, ..} ) <$> f usernameValidationStatusDTOStatus
+{-# INLINE usernameValidationStatusDTOStatusL #-}
+
+
+
+-- * UsernameValidationStatusEnumDTO
+
+
+
+-- * Version
+
+-- | 'versionVersion' Lens
+versionVersionL :: Lens_' Version (Text)
+versionVersionL f Version{..} = (\versionVersion -> Version { versionVersion, ..} ) <$> f versionVersion
+{-# INLINE versionVersionL #-}
+
+
+
+-- * WorkspaceConfig
+
+-- | 'workspaceConfigRealm' Lens
+workspaceConfigRealmL :: Lens_' WorkspaceConfig (Text)
+workspaceConfigRealmL f WorkspaceConfig{..} = (\workspaceConfigRealm -> WorkspaceConfig { workspaceConfigRealm, ..} ) <$> f workspaceConfigRealm
+{-# INLINE workspaceConfigRealmL #-}
+
+-- | 'workspaceConfigIdpHint' Lens
+workspaceConfigIdpHintL :: Lens_' WorkspaceConfig (Text)
+workspaceConfigIdpHintL f WorkspaceConfig{..} = (\workspaceConfigIdpHint -> WorkspaceConfig { workspaceConfigIdpHint, ..} ) <$> f workspaceConfigIdpHint
+{-# INLINE workspaceConfigIdpHintL #-}
+
+
+
+-- * Y
+
+-- | 'yNumericValue' Lens
+yNumericValueL :: Lens_' Y (Maybe Double)
+yNumericValueL f Y{..} = (\yNumericValue -> Y { yNumericValue, ..} ) <$> f yNumericValue
+{-# INLINE yNumericValueL #-}
+
+-- | 'yTextValue' Lens
+yTextValueL :: Lens_' Y (Maybe Text)
+yTextValueL f Y{..} = (\yTextValue -> Y { yTextValue, ..} ) <$> f yTextValue
+{-# INLINE yTextValueL #-}
+
+-- | 'yImageValue' Lens
+yImageValueL :: Lens_' Y (Maybe OutputImageDTO)
+yImageValueL f Y{..} = (\yImageValue -> Y { yImageValue, ..} ) <$> f yImageValue
+{-# INLINE yImageValueL #-}
+
+-- | 'yInputImageValue' Lens
+yInputImageValueL :: Lens_' Y (Maybe InputImageDTO)
+yInputImageValueL f Y{..} = (\yInputImageValue -> Y { yInputImageValue, ..} ) <$> f yInputImageValue
+{-# INLINE yInputImageValueL #-}
+
+
diff --git a/lib/Neptune/Channel.hs b/lib/Neptune/Channel.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Channel.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE RecordWildCards           #-}
+{-# LANGUAGE ScopedTypeVariables       #-}
+{-# LANGUAGE StandaloneDeriving        #-}
+{-# LANGUAGE TemplateHaskell           #-}
+module Neptune.Channel where
+
+import           Control.Lens
+import           Data.Time.Clock           (UTCTime)
+import           Data.Time.Clock.POSIX     (utcTimeToPOSIXSeconds)
+import           Data.Typeable
+import           RIO                       hiding (Lens', (^.))
+import qualified RIO.HashMap               as M
+
+import qualified Neptune.Backend.API       as NBAPI
+import           Neptune.Backend.MimeTypes
+import           Neptune.Backend.Model
+import           Neptune.Backend.ModelLens
+import           Neptune.Session
+
+class (Typeable a, Show a) => NeptDataType a where
+    neptChannelType :: Proxy a -> ChannelTypeEnum
+    toNeptPoint     :: DataPoint a -> Point
+
+data DataPoint a = DataPoint
+    { _dpt_name      :: Text
+    , _dpt_timestamp :: UTCTime
+    , _dpt_value     :: a
+    }
+    deriving Show
+
+data DataPointAny = forall a . NeptDataType a => DataPointAny (DataPoint a)
+deriving instance Show DataPointAny
+
+newtype DataChannel a = DataChannel Text
+    deriving Show
+
+data DataChannelAny = forall a . NeptDataType a => DataChannelAny (DataChannel a)
+deriving instance Show DataChannelAny
+
+data DataChannelWithData = forall a. NeptDataType a => DataChannelWithData (DataChannel a, [DataPoint a])
+
+type ChannelHashMap = TVar (HashMap Text DataChannelAny)
+
+makeLenses ''DataPoint
+
+dpt_name_A :: Lens' DataPointAny Text
+dpt_name_A f (DataPointAny (DataPoint n t v)) =
+    let set = (\n -> DataPointAny (DataPoint n t v))
+     in set <$> f n
+
+dpt_timestamp_A :: Lens' DataPointAny UTCTime
+dpt_timestamp_A f (DataPointAny (DataPoint n t v)) =
+    let set = (\t -> DataPointAny (DataPoint n t v))
+     in set <$> f t
+
+transmitter :: HasCallStack
+            => NeptuneSession
+            -> ExperimentId
+            -> TChan DataPointAny
+            -> ChannelHashMap
+            -> IO ()
+transmitter session@NeptuneSession{..} exp_id chan user_channels = sequence_ (repeat go)
+    where
+        go = do dat <- atomically $ readTChanAtMost 10 chan
+
+                let dup           = Control.Lens.to (\a -> (a, a))
+                    singleton     = Control.Lens.to (\a -> [a])
+                    merge         = M.toList . foldl' (M.unionWith (++)) M.empty . map (uncurry M.singleton)
+                    dat_with_name :: [(Text, [DataPointAny])]
+                    dat_with_name = merge $ dat ^.. traverse . dup . alongside dpt_name_A singleton
+
+                chn_with_dat <- forM dat_with_name $ \(chn_name, dat) -> do
+                    -- If channel doesn't exist, then we create one with
+                    -- channel type from the first element.
+                    chn <- case head dat of
+                             DataPointAny d0 ->
+                                 getOrCreateChannel
+                                    (proxy d0)
+                                    user_channels
+                                    chn_name
+                                    (createChannel session exp_id user_channels chn_name)
+
+                    case chn of
+                      DataChannelAny chn -> do
+                          let (errs, grouped) = gatherDataPoints (proxy chn) dat
+                          -- TODO log properly
+                          mapM_ print errs
+                          return $ DataChannelWithData (chn, grouped)
+
+                sendChannel session exp_id chn_with_dat
+
+        proxy :: f a -> Proxy a
+        proxy _ = Proxy
+
+
+instance NeptDataType Double where
+    neptChannelType  _ = ChannelTypeEnum'Numeric
+    toNeptPoint dat    = let t = floor $ utcTimeToPOSIXSeconds (dat ^. dpt_timestamp) * 1000
+                             y = mkY{ yNumericValue = dat ^. dpt_value . re _Just }
+                          in mkPoint t y
+
+createChannel :: forall t. (NeptDataType t, HasCallStack)
+              => NeptuneSession -> ExperimentId -> ChannelHashMap -> Text -> IO (DataChannel t)
+createChannel NeptuneSession{..} exp_id user_channels chn_name = do
+    -- call create channel api
+    let chn_type = neptChannelType  (Proxy :: Proxy t)
+    chn <- _neptune_dispatch $ NBAPI.createChannel
+        (ContentType MimeJSON)
+        (Accept MimeJSON)
+        (mkChannelParams chn_name chn_type)
+        exp_id
+    let chn_new = DataChannel (chn ^. channelDTOIdL) :: DataChannel t
+    -- add to `user_channels`
+    atomically $ do
+        mapping <- readTVar user_channels
+        writeTVar user_channels (mapping & ix chn_name .~ (DataChannelAny chn_new))
+    return chn_new
+
+getOrCreateChannel :: forall t. NeptDataType t
+                   => Proxy t
+                   -> ChannelHashMap
+                   -> Text
+                   -> IO (DataChannel t)
+                   -> IO DataChannelAny
+getOrCreateChannel _ user_channels chn_name creator = do
+    uc  <- readTVarIO user_channels
+    case uc ^? ix chn_name of
+      Nothing -> DataChannelAny <$> creator
+      Just x  -> return x
+
+sendChannel :: HasCallStack => NeptuneSession -> ExperimentId -> [DataChannelWithData] -> IO ()
+sendChannel NeptuneSession{..} exp_id chn'value = do
+    errors <- _neptune_dispatch $ NBAPI.postChannelValues
+                (ContentType MimeJSON)
+                (Accept MimeJSON)
+                (ChannelsValues $ map toChannelsValues chn'value)
+                exp_id
+    -- TODO proper logging
+    forM_ errors $ \err -> do
+        let chn   = err ^. batchChannelValueErrorDTOChannelIdL
+            xs    = err ^. batchChannelValueErrorDTOXL
+            ecode = err ^. batchChannelValueErrorDTOErrorL . errorCodeL
+            emsg  = err ^. batchChannelValueErrorDTOErrorL . errorMessageL
+        print (chn, xs, ecode, emsg)
+
+    where
+        toChannelsValues :: DataChannelWithData -> InputChannelValues
+        toChannelsValues (DataChannelWithData (DataChannel chn, dat)) =
+            mkInputChannelValues chn (map toNeptPoint dat)
+
+
+readTChanAtMost :: Int -> TChan a -> STM [a]
+readTChanAtMost n chan = do
+    -- blocking-read for the 1st elem
+    -- i.e. wait until there is sth
+    v0 <- readTChan chan
+    vs <- sequence $ replicate (n - 1) (tryReadTChan chan)
+    return $ v0 : catMaybes vs
+
+gatherDataPoints :: forall a. NeptDataType a
+                 => Proxy a
+                 -> [DataPointAny]
+                 -> ([Text], [DataPoint a])
+gatherDataPoints _ dpa = partitionEithers $ map castData dpa
+    where
+        castData (DataPointAny d) = case cast d of
+                                      Nothing -> Left "?? is not compatible for the channel"
+                                      Just o -> Right o
diff --git a/lib/Neptune/Client.hs b/lib/Neptune/Client.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Client.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE RecordWildCards     #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TemplateHaskell     #-}
+module Neptune.Client where
+
+import           Control.Concurrent        (ThreadId, forkIO, killThread)
+import           Control.Lens
+import qualified Data.Text.Lazy            as TL
+import qualified Data.Text.Lazy.Encoding   as TL
+import           Data.Time.Clock           (getCurrentTime)
+import qualified Data.UUID                 as UUID (toText)
+import           Data.UUID.V4              as UUID
+import qualified Network.HTTP.Client       as NH
+import qualified Network.HTTP.Client.TLS   as NH
+import           RIO                       hiding (Lens', (^.))
+import qualified RIO.HashMap               as M
+import qualified RIO.Text                  as T
+import           System.Envy               (decodeEnv)
+
+import qualified Neptune.Backend.API       as NBAPI
+import           Neptune.Backend.Client
+import           Neptune.Backend.Core
+import           Neptune.Backend.MimeTypes
+import           Neptune.Backend.Model     hiding (Experiment, Parameter)
+import           Neptune.Backend.ModelLens
+import           Neptune.Channel
+import           Neptune.OAuth
+import           Neptune.Session
+import           Neptune.Utils
+
+
+data Parameter = ExperimentParamS Text Text
+    | ExperimentParamD Text Double
+
+data Experiment = Experiment
+    { _exp_experiment_id :: ExperimentId
+    , _exp_outbound_q    :: TChan DataPointAny
+    , _exp_user_channels :: ChannelHashMap
+    , _exp_transmitter   :: ThreadId
+    }
+
+makeLenses ''Experiment
+
+
+createExperiment :: HasCallStack
+                 => NeptuneSession
+                 -> Maybe Text
+                 -> Maybe Text
+                 -> [Parameter]
+                 -> [(Text, Text)]
+                 -> [Text]
+                 -> IO Experiment
+createExperiment session@NeptuneSession{..} name description params props tags = do
+    -- TODO support git_info
+    -- TODO support uploading source code
+    -- TODO support abort callback. W/o a callback, the app will
+    --      continue running when you click abort in the web console
+    params <- mapM _mkParameter params
+    exp    <- _neptune_dispatch $ NBAPI.createExperiment
+                (ContentType MimeJSON)
+                (Accept MimeJSON)
+                (mkExperimentCreationParams
+                    (_neptune_project ^. projectWithRoleDTOIdL)
+                    (map (uncurry KeyValueProperty) props)
+                    "" -- legacy
+                    params
+                    "command" -- legacy
+                    (fromMaybe "Untitled" name)
+                    tags){ experimentCreationParamsDescription = description }
+    let exp_id = ExperimentId (exp ^. experimentIdL)
+    chan <- newTChanIO
+    user_channels <- newTVarIO M.empty
+    transmitter_thread <- forkIO $ transmitter session exp_id chan user_channels
+    return $ Experiment exp_id chan user_channels transmitter_thread
+
+    where
+        _mkParameter (ExperimentParamS name value) = do
+            _id <- UUID.toText <$> UUID.nextRandom
+            return $ mkParameter name ParameterTypeEnum'String _id value
+        _mkParameter (ExperimentParamD name value) = do
+            _id <- UUID.toText <$> UUID.nextRandom
+            return $ mkParameter name ParameterTypeEnum'Double _id (tshow value)
+
+nlog :: (HasCallStack, NeptDataType a) => Experiment -> Text -> a -> IO ()
+nlog exp name value = do
+    now <- getCurrentTime
+    let chan = exp ^. exp_outbound_q
+        dat  = DataPointAny $ DataPoint name now value
+    atomically $ writeTChan chan dat
+
+withNept :: Text -> (NeptuneSession -> Experiment -> IO a) -> IO a
+withNept project_qualified_name act = do
+    ses <- initNept project_qualified_name
+    exp <- createExperiment ses Nothing Nothing [] [] []
+
+    result <- try (act ses exp)
+    case result of
+      Left (e :: SomeException) -> do
+          teardownNept ses exp ExperimentState'Failed (T.pack $ displayException e)
+          throwM e
+      Right a -> do
+          teardownNept ses exp ExperimentState'Succeeded ""
+          return a
+
+initNept :: HasCallStack => Text -> IO NeptuneSession
+initNept project_qualified_name = do
+    ct@ClientToken{..} <- decodeEnv >>= either throwString return
+
+    mgr <- NH.newManager NH.tlsManagerSettings
+    config0 <- withStderrLogging =<< newConfig
+
+    let api_endpoint = TL.encodeUtf8 (TL.fromStrict _ct_api_url)
+        config = config0 { configHost = api_endpoint }
+
+    let dispatch = dispatchMime mgr config{configValidateAuthMethods = False}
+                    >=> handleMimeError
+
+    oauth_token <- dispatch  $ NBAPI.exchangeApiToken (Accept MimeJSON) (XNeptuneApiToken _ct_token)
+    (refresh_thread, oauth_session) <- oauth2_setup (oauth_token ^. neptuneOauthTokenAccessTokenL)
+                                                    (oauth_token ^. neptuneOauthTokenRefreshTokenL)
+
+    -- TODO there is a chance that the access token gets invalid right after readMVar
+    let dispatch :: (HasCallStack, Produces req accept, MimeUnrender accept res, MimeType contentType)
+                 => NeptuneBackendRequest req contentType res accept -> IO res
+        dispatch req = do
+            access_token <- readMVar oauth_session <&> _oas_access_token
+            resp <- dispatchMime mgr (config `addAuthMethod` AuthOAuthOauth2 access_token) req
+            handleMimeError resp
+
+    proj <- dispatch $ NBAPI.getProject (Accept MimeJSON) (ProjectIdentifier project_qualified_name)
+    return $ NeptuneSession
+        { _neptune_http_manager = mgr
+        , _neptune_client_token = ct
+        , _neptune_config = config
+        , _neptune_oauth2 = oauth_session
+        , _neptune_oauth2_refresh = refresh_thread
+        , _neptune_project = proj
+        , _neptune_dispatch = dispatch
+        }
+
+teardownNept :: NeptuneSession -> Experiment -> ExperimentState -> Text -> IO ()
+teardownNept NeptuneSession{..} experiment state msg = do
+    killThread $ experiment ^. exp_transmitter
+    killThread $ _neptune_oauth2_refresh
+
+    _neptune_dispatch $ NBAPI.markExperimentCompleted
+        (ContentType MimeJSON)
+        (Accept MimeNoContent)
+        (mkCompletedExperimentParams state msg)
+        (experiment ^. exp_experiment_id) :: IO NoContent
+
+    return ()
+
+
diff --git a/lib/Neptune/OAuth.hs b/lib/Neptune/OAuth.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/OAuth.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE TemplateHaskell #-}
+module Neptune.OAuth where
+
+import           Control.Concurrent    (ThreadId, forkIO)
+import           Control.Lens
+import qualified Data.Aeson            as Aeson
+import           Data.Aeson.Lens
+import           Data.Time.Clock       (NominalDiffTime)
+import           Data.Time.Clock.POSIX (getPOSIXTime)
+import           Network.HTTP.Req      (JsonResponse, POST (..),
+                                        ReqBodyUrlEnc (..), defaultHttpConfig,
+                                        jsonResponse, req, responseBody, runReq,
+                                        useHttpsURI, (=:))
+import           RIO                   hiding (Lens', (^.))
+import qualified RIO.Text              as T
+import           Text.URI              (mkURI)
+import qualified Web.JWT               as JWT
+
+
+data OAuth2Session = OAuth2Session
+    { _oas_client_id     :: Text
+    , _oas_access_token  :: Text
+    , _oas_refresh_token :: Text
+    , _oas_expires_in    :: NominalDiffTime
+    , _oas_refresh_url   :: Text
+    }
+
+makeLenses ''OAuth2Session
+
+oauth2_setup :: Text -> Text -> IO (ThreadId, MVar OAuth2Session)
+oauth2_setup access_token refresh_token = do
+    let decoded = JWT.decode $ access_token
+        claims  = JWT.claims (decoded ^?! _Just)
+        issuer  = JWT.iss claims ^?! _Just & JWT.stringOrURIToText
+        refresh_url = T.append issuer "/protocol/openid-connect/token"
+        client_name = JWT.unClaimsMap (JWT.unregisteredClaims claims) ^?! ix "azp" . _String
+        expires_at  = JWT.exp claims ^?! _Just & JWT.secondsSinceEpoch
+
+    now <- getPOSIXTime
+    let expires_in = expires_at - now
+        session = OAuth2Session client_name access_token refresh_token expires_in refresh_url
+
+    oauth_session_var <- newMVar session
+    refresh_thread <- forkIO (oauth_refresher oauth_session_var)
+    return (refresh_thread, oauth_session_var)
+
+oauth_refresher :: MVar OAuth2Session -> IO ()
+oauth_refresher session_var = update >> oauth_refresher session_var
+    where
+        update = do
+            session <- readMVar session_var
+            let wait_sec = floor $ 1000000 * session ^. oas_expires_in
+            threadDelay wait_sec
+
+            modifyMVar_ session_var $ \session -> do
+                let url = session ^. oas_refresh_url
+                    tok = session ^. oas_refresh_token
+                    body = ReqBodyUrlEnc $ mconcat
+                            [ "grant_type"    =: ("refresh_token" :: Text)
+                            , "refresh_token" =: tok
+                            , "client_id"     =: ("neptune-cli"   :: Text) ]
+
+                {--
+                Accept: application/json
+                Content-Type: application/x-www-form-urlencoded;charset=UTF-8
+
+                grant_type=refresh_token
+                &refresh_token=...
+                &client_id=neptune-cli
+                --}
+                case useHttpsURI =<< mkURI url of
+                  Nothing -> error $ "Bad refresh url " ++ T.unpack url
+                  Just (url, opt) -> do
+                      -- the default retrying pocily is 50ms delay, upto 5 times
+                      resp <- runReq defaultHttpConfig $ req POST url body jsonResponse opt :: IO (JsonResponse Aeson.Value)
+                      resp <- pure $ responseBody resp
+                      -- resp is a json object of keys:
+                      --    "access_token", "expires_in", "refresh_expires_in", "refresh_token",
+                      --    "token_type", "not-before-policy", "session_state", "scope"
+                      let access_token  = resp ^?! key "access_token" . _String
+                          refresh_token = resp ^?! key "refresh_token" . _String
+                          expires_in    = fromIntegral (resp ^?! key "expires_in" . _Integral :: Int)
+                      return $ session
+                        & oas_access_token  .~ access_token
+                        & oas_refresh_token .~ refresh_token
+                        & oas_expires_in    .~ expires_in
diff --git a/lib/Neptune/Session.hs b/lib/Neptune/Session.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Session.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DeriveGeneric   #-}
+{-# LANGUAGE Rank2Types      #-}
+{-# LANGUAGE TemplateHaskell #-}
+module Neptune.Session where
+
+import           Control.Concurrent        (ThreadId)
+import           Control.Lens
+import           Control.Monad.Except
+import qualified Data.Aeson                as Aeson
+import           Data.Aeson.Lens
+import qualified Data.ByteString.Base64    as Base64
+import qualified Network.HTTP.Client       as NH
+import           RIO                       hiding (Lens', (^.))
+import qualified RIO.Text                  as T
+import           System.Envy               (FromEnv (..), Parser, env)
+
+import           Neptune.Backend.Core
+import           Neptune.Backend.MimeTypes
+import           Neptune.Backend.Model
+import           Neptune.OAuth
+
+data ClientToken = ClientToken
+    { _ct_token       :: Text
+    , _ct_api_address :: Text
+    , _ct_api_url     :: Text
+    , _ct_api_key     :: Text
+    }
+    deriving (Generic, Show)
+
+instance FromEnv ClientToken where
+    fromEnv _ = do
+        token <- env "NEPTUNE_API_TOKEN"
+        jsraw <- either throwError return $ Base64.decode $ T.encodeUtf8 token
+        js    <- either throwError return $
+                    Aeson.eitherDecodeStrict' jsraw :: Parser Aeson.Value
+        return $ ClientToken
+            token
+            (js ^?! key "api_address" . _String)
+            (js ^?! key "api_url" . _String)
+            (js ^?! key "api_key" . _String)
+
+
+type Dispatcher = forall req contentType res accept .
+                  (Produces req accept, MimeUnrender accept res, MimeType contentType, HasCallStack)
+                  => NeptuneBackendRequest req contentType res accept
+                  -> IO res
+
+data NeptuneSession = NeptuneSession
+    { _neptune_http_manager   :: NH.Manager
+    , _neptune_client_token   :: ClientToken
+    , _neptune_config         :: NeptuneBackendConfig
+    , _neptune_oauth2         :: MVar OAuth2Session
+    , _neptune_oauth2_refresh :: ThreadId
+    , _neptune_project        :: ProjectWithRoleDTO
+    , _neptune_dispatch       :: Dispatcher
+    }
+
diff --git a/lib/Neptune/Utils.hs b/lib/Neptune/Utils.hs
new file mode 100644
--- /dev/null
+++ b/lib/Neptune/Utils.hs
@@ -0,0 +1,14 @@
+{-# LANGUAGE ViewPatterns #-}
+module Neptune.Utils where
+
+import qualified Data.ByteString.Lazy.Char8 as BSL
+import qualified Network.HTTP.Client        as NH
+import           RIO
+
+import           Neptune.Backend.Client
+
+handleMimeError :: (Monad m, HasCallStack) => MimeResult a -> m a
+handleMimeError (mimeResult -> Left e)  = let err_msg = mimeError e
+                                              response = NH.responseBody $ mimeErrorResponse e
+                                           in error (mimeError e ++ " " ++ BSL.unpack response)
+handleMimeError (mimeResult -> Right r) = return r
diff --git a/neptune-backend.cabal b/neptune-backend.cabal
new file mode 100644
--- /dev/null
+++ b/neptune-backend.cabal
@@ -0,0 +1,137 @@
+cabal-version:  2.2
+name:           neptune-backend
+version:        0.1.1
+synopsis:       Auto-generated neptune-backend API Client
+description:    .
+                Client library for calling the Neptune Backend API API based on http-client.
+                .
+                Neptune Backend API API version: 2.8
+                .
+                OpenAPI version: 3.0.1
+                .
+category:       Web
+author:         Jiasen Wu
+maintainer:     jiasenwu@hotmail.com
+copyright:      2020 - Jiasen Wu
+license:        BSD-3-Clause
+build-type:     Simple
+
+extra-source-files:
+    README.md
+    openapi.yaml
+
+Flag UseKatip
+  Description: Use the katip package to provide logging (if false, use the default monad-logger package)
+  Default:     True
+  Manual:      True
+
+library
+  hs-source-dirs:
+      lib
+  ghc-options: -Wall -funbox-strict-fields
+  build-depends:
+      aeson >=1.0 && <2.0
+    , base >=4.7 && <5.0
+    , base64-bytestring >1.0 && <2.0
+    , bytestring >=0.10.0 && <0.11
+    , case-insensitive
+    , containers >=0.5.0.0 && <0.8
+    , deepseq >= 1.4 && <1.6
+    , exceptions >= 0.4
+    , http-api-data >= 0.3.4 && <0.5
+    , http-client >=0.5 && <0.7
+    , http-client-tls
+    , http-media >= 0.4 && < 0.9
+    , http-types >=0.8 && <0.13
+    , iso8601-time >=0.1.3 && <0.2.0
+    , microlens >= 0.4.3 && <0.5
+    , mtl >=2.2.1
+    , network >=2.6.2 && <3.9
+    , random >=1.1
+    , safe-exceptions <0.2
+    , text >=0.11 && <1.3
+    , time >=1.5
+    , transformers >=0.4.0.0
+    , unordered-containers
+    , vector >=0.10.9 && <0.13
+    , lens
+    , lens-aeson
+    , rio
+    , modern-uri
+    , jwt
+    , req
+    , envy
+    , uuid
+  other-modules:
+      Paths_neptune_backend
+  autogen-modules:
+      Paths_neptune_backend
+  exposed-modules:
+      Neptune
+      Neptune.Client
+      Neptune.Channel
+      Neptune.OAuth
+      Neptune.Session
+      Neptune.Utils
+      Neptune.Backend.API
+      Neptune.Backend.API.ApiDefault
+      Neptune.Backend.Client
+      Neptune.Backend.Core
+      Neptune.Backend.Logging
+      Neptune.Backend.MimeTypes
+      Neptune.Backend.Model
+      Neptune.Backend.ModelLens
+  default-language: Haskell2010
+  default-extensions:  OverloadedStrings
+
+  if flag(UseKatip)
+      build-depends: katip >=0.8 && < 1.0
+      other-modules: Neptune.Backend.LoggingKatip
+      cpp-options: -DUSE_KATIP
+  else
+      build-depends: monad-logger >=0.3 && <0.4
+      other-modules: Neptune.Backend.LoggingMonadLogger
+      cpp-options: -DUSE_MONAD_LOGGER
+
+test-suite tests
+  type: exitcode-stdio-1.0
+  main-is: Test.hs
+  hs-source-dirs:
+      tests
+  ghc-options: -Wall -fno-warn-orphans
+  build-depends:
+      neptune-backend
+    , QuickCheck
+    , aeson
+    , base >=4.7 && <5.0
+    , bytestring >=0.10.0 && <0.11
+    , containers
+    , hspec >=1.8
+    , iso8601-time
+    , mtl >=2.2.1
+    , semigroups
+    , text
+    , time
+    , transformers >=0.4.0.0
+    , unordered-containers
+    , vector
+  other-modules:
+      ApproxEq
+      Instances
+      PropMime
+  default-language: Haskell2010
+
+executable example-app
+  hs-source-dirs:      examples
+  main-is:             Main.hs
+  ghc-options:         -Wall
+  build-depends:       base
+                     , mtl
+                     , rio
+                     , neptune-backend
+  default-extensions:  OverloadedStrings
+  default-language:    Haskell2010
+
+source-repository head
+  type:     git
+  location: https://github.com/pierric/neptune-hs
diff --git a/openapi.yaml b/openapi.yaml
new file mode 100644
--- /dev/null
+++ b/openapi.yaml
@@ -0,0 +1,8392 @@
+openapi: 3.0.1
+info:
+  title: Neptune Backend API
+  version: "2.8"
+servers:
+- url: /
+paths:
+  /api/backend/v1/projects:
+    delete:
+      deprecated: false
+      operationId: deleteProject
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    get:
+      deprecated: false
+      operationId: listProjects
+      parameters:
+      - explode: true
+        in: query
+        name: organizationIdentifier
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: projectKey
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: searchTerm
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: visibility
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: viewedUsername
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: userRelation
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: orgRelation
+        required: false
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: sortBy
+        required: false
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: sortDirection
+        required: false
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: offset
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      - explode: true
+        in: query
+        name: limit
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectListDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: createProject
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/NewProjectDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectWithRoleDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: projectToCreate
+    put:
+      deprecated: false
+      operationId: updateProject
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ProjectUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectWithRoleDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: projectToUpdate
+  /api/backend/v1/projects/get:
+    get:
+      deprecated: false
+      operationId: getProject
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectWithRoleDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects/key:
+    get:
+      deprecated: false
+      operationId: generateProjectKey
+      parameters:
+      - explode: true
+        in: query
+        name: organizationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: projectName
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectKeyDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects/leave:
+    post:
+      deprecated: false
+      operationId: leaveProject
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects/members:
+    get:
+      deprecated: false
+      operationId: listProjectsMembers
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      - explode: true
+        in: query
+        name: includeInvitations
+        required: false
+        schema:
+          default: false
+          type: boolean
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/ProjectMembersDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: addProjectMember
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/NewProjectMemberDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectMemberDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: member
+  /api/backend/v1/projects/members/{userId}:
+    delete:
+      deprecated: false
+      operationId: deleteProjectMember
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      - explode: false
+        in: path
+        name: userId
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    patch:
+      deprecated: false
+      operationId: updateProjectMember
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      - explode: false
+        in: path
+        name: userId
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ProjectMemberUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectMemberDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: member
+  /api/backend/v1/projects/membersOf:
+    get:
+      deprecated: false
+      operationId: listProjectMembers
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/ProjectMemberDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects/metadata:
+    get:
+      deprecated: false
+      operationId: getProjectMetadata
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectMetadataDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects/updateLastViewed:
+    post:
+      deprecated: false
+      operationId: updateLastViewed
+      parameters:
+      - explode: true
+        in: query
+        name: projectId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects/users:
+    get:
+      deprecated: false
+      operationId: listMembers
+      parameters:
+      - explode: true
+        in: query
+        name: organizationIdentifier
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: usernamePrefix
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: offset
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      - explode: true
+        in: query
+        name: limit
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/UserListDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/userProfile:
+    get:
+      deprecated: false
+      operationId: getUserProfile
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/UserProfileDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    patch:
+      deprecated: false
+      operationId: updateUserProfile
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/UserProfileUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/UserProfileDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: userProfileUpdate
+  /api/backend/v1/userProfile/avatar:
+    get:
+      deprecated: false
+      operationId: getUserProfileAvatar
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateUserProfileAvatar
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                avatarFile:
+                  format: binary
+                  type: string
+              required:
+              - avatarFile
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/LinkDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/userProfile/links:
+    delete:
+      deprecated: false
+      operationId: deleteUserProfileLink
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/LinkDTO'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: link
+    post:
+      deprecated: false
+      operationId: addUserProfileLink
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/UserProfileLinkDTO'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: link
+  /api/backend/v1/userProfile/password:
+    put:
+      deprecated: false
+      operationId: changePassword
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/PasswordChangeDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/PasswordChangeDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: passwordToUpdate
+  /api/leaderboard/v1/channels/user:
+    post:
+      deprecated: false
+      operationId: createChannel
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ChannelParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ChannelDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: channelToCreate
+  /api/leaderboard/v1/channels/values:
+    post:
+      deprecated: false
+      operationId: postChannelValues
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/InputChannelValues'
+              type: array
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/BatchChannelValueErrorDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: channelsValues
+  /api/leaderboard/v1/channels/{channelId}/csv:
+    get:
+      deprecated: false
+      operationId: getChannelValuesCSV
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: false
+        schema:
+          format: uuid
+          type: string
+        style: form
+      - explode: false
+        in: path
+        name: channelId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: gzipped
+        required: false
+        schema:
+          type: boolean
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/channels/{channelId}/values:
+    get:
+      deprecated: false
+      operationId: getChannelValues
+      parameters:
+      - explode: false
+        in: path
+        name: channelId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: offset
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      - explode: true
+        in: query
+        name: limit
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/LimitedChannelValuesDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/channels/{id}/values:
+    delete:
+      deprecated: false
+      operationId: resetChannel
+      parameters:
+      - explode: false
+        in: path
+        name: id
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/experiments:
+    get:
+      deprecated: false
+      operationId: getExperiment
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Experiment'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    patch:
+      deprecated: false
+      operationId: updateExperiment
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/EditExperimentParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Experiment'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: editExperimentParams
+    post:
+      deprecated: false
+      operationId: createExperiment
+      parameters:
+      - explode: false
+        in: header
+        name: X-Neptune-CliVersion
+        required: false
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ExperimentCreationParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Experiment'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: experimentCreationParams
+  /api/leaderboard/v1/experiments-attributes-names:
+    get:
+      deprecated: false
+      operationId: getExperimentsAttributesNames
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ExperimentsAttributesNamesDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/experiments/abort:
+    post:
+      deprecated: false
+      operationId: abortExperiments
+      parameters:
+      - explode: true
+        in: query
+        name: markOnly
+        required: false
+        schema:
+          type: boolean
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                format: uuid
+                type: string
+              type: array
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/BatchExperimentUpdateResult'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: experimentIds
+  /api/leaderboard/v1/experiments/markCompleted:
+    post:
+      deprecated: false
+      operationId: markExperimentCompleted
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/CompletedExperimentParams'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: completedExperimentParams
+  /api/leaderboard/v1/experiments/ping:
+    post:
+      deprecated: false
+      operationId: pingExperiment
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/experiments/tags:
+    get:
+      deprecated: false
+      operationId: tagsGet
+      parameters:
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  type: string
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateTags
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/UpdateTagsParams'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: updateTagsParams
+  /api/leaderboard/v1/experiments/trash:
+    post:
+      deprecated: false
+      operationId: trashExperiments
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                format: uuid
+                type: string
+              type: array
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/BatchExperimentUpdateResult'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: experimentIds
+  /api/leaderboard/v1/experiments/trash/empty:
+    post:
+      deprecated: false
+      operationId: emptyExperimentsTrash
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                format: uuid
+                type: string
+              type: array
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/BatchExperimentUpdateResult'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: experimentIds
+  /api/leaderboard/v1/experiments/trash/restore:
+    post:
+      deprecated: false
+      operationId: restoreExperiments
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                format: uuid
+                type: string
+              type: array
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/BatchExperimentUpdateResult'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: experimentIds
+  /api/leaderboard/v1/storage/deleteOutput:
+    delete:
+      deprecated: false
+      operationId: deleteExperimentOutput
+      parameters:
+      - explode: true
+        in: query
+        name: experimentIdentifier
+        required: true
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: path
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/downloadRequest:
+    get:
+      deprecated: false
+      operationId: getDownloadPrepareRequest
+      parameters:
+      - explode: true
+        in: query
+        name: id
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/DownloadPrepareRequestDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/legacy/download:
+    get:
+      deprecated: false
+      operationId: downloadData
+      parameters:
+      - explode: true
+        in: query
+        name: projectId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: path
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/legacy/downloadRequest:
+    post:
+      deprecated: false
+      operationId: prepareForDownload
+      parameters:
+      - explode: true
+        in: query
+        name: experimentIdentity
+        required: true
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: resource
+        required: true
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: path
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/DownloadPrepareRequestDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/legacy/uploadOutput/{experimentId}:
+    post:
+      deprecated: false
+      operationId: uploadExperimentOutput
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/legacy/uploadOutputAsTarStream/{experimentId}:
+    post:
+      deprecated: false
+      operationId: uploadExperimentOutputAsTarstream
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/legacy/uploadSource/{experimentId}:
+    post:
+      deprecated: false
+      operationId: uploadExperimentSource
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/leaderboard/v1/storage/legacy/uploadSourceAsTarStream/{experimentId}:
+    post:
+      deprecated: false
+      operationId: uploadExperimentSourceAsTarstream
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/invitations/organization:
+    post:
+      deprecated: false
+      operationId: createOrganizationInvitation
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/NewOrganizationInvitationDTO'
+        description: addToAllProjects flag is ignored when roleGrant value is admin
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationInvitationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: newOrganizationInvitation
+  /api/backend/v1/invitations/organization/{invitationId}:
+    delete:
+      deprecated: false
+      operationId: revokeOrganizationInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    get:
+      deprecated: false
+      operationId: getOrganizationInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationInvitationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateOrganizationInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OrganizationInvitationUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationInvitationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: update
+  /api/backend/v1/invitations/organization/{invitationId}/accept:
+    post:
+      deprecated: false
+      operationId: acceptOrganizationInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/invitations/project:
+    post:
+      deprecated: false
+      operationId: createProjectInvitation
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/NewProjectInvitationDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectInvitationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: newProjectInvitation
+  /api/backend/v1/invitations/project/{invitationId}:
+    delete:
+      deprecated: false
+      operationId: revokeProjectInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    get:
+      deprecated: false
+      operationId: getProjectInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectInvitationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateProjectInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ProjectInvitationUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ProjectInvitationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: update
+  /api/backend/v1/invitations/project/{invitationId}/accept:
+    post:
+      deprecated: false
+      operationId: acceptProjectInvitation
+      parameters:
+      - explode: false
+        in: path
+        name: invitationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/users:
+    get:
+      deprecated: false
+      operationId: listUsers
+      parameters:
+      - explode: true
+        in: query
+        name: username
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/PublicUserProfileDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/users/{username}/avatar:
+    get:
+      deprecated: false
+      operationId: getUserAvatar
+      parameters:
+      - explode: false
+        in: path
+        name: username
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/user/pricingStatus:
+    get:
+      deprecated: false
+      operationId: userPricingStatus
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/UserPricingStatusDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/{organizationIdentifier}:
+    get:
+      deprecated: false
+      operationId: getCustomer
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/CustomerDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/{organizationIdentifier}/creditCard:
+    get:
+      deprecated: false
+      description: Returns a Stripe Source object
+      operationId: getCreditCard
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                type: string
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: createCardUpdateSession
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/CreateSessionParamsDTO'
+        description: Stripe Checkout Session details
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/SessionDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: createSessionParams
+  /api/backend/v1/payments/{organizationIdentifier}/downgrade:
+    delete:
+      deprecated: false
+      operationId: downgradeTeamOrganization
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/{organizationIdentifier}/invoices/past:
+    get:
+      deprecated: false
+      description: Pass-through to Stripe /v1/invoices
+      operationId: getPastInvoices
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                type: string
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/{organizationIdentifier}/invoices/upcoming:
+    get:
+      deprecated: false
+      description: Pass-through to Stripe /v1/invoices/upcoming
+      operationId: getUpcomingInvoice
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                type: string
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/{organizationIdentifier}/pricingPlan:
+    get:
+      deprecated: false
+      operationId: getPricingPlan
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationPricingPlanDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/payments/{organizationIdentifier}/session:
+    post:
+      deprecated: false
+      operationId: createCheckoutSession
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/CreateSessionParamsDTO'
+        description: Stripe Checkout Session details
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/SessionDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: createSessionParams
+  /api/backend/v1/payments/{organizationName}/synchronizeSubscription:
+    put:
+      deprecated: false
+      operationId: synchronizeSubscription
+      parameters:
+      - explode: false
+        in: path
+        name: organizationName
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/achievements:
+    get:
+      deprecated: false
+      operationId: getAchievements
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/AchievementsDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations2:
+    get:
+      deprecated: false
+      operationId: filterOrganizations
+      parameters:
+      - explode: true
+        in: query
+        name: ids
+        required: true
+        schema:
+          items:
+            type: string
+          type: array
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/OrganizationDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: createOrganization
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OrganizationCreationParamsDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: organizationToCreate
+  /api/backend/v1/organizations2/{organizationIdentifier}/limits:
+    get:
+      deprecated: false
+      operationId: getOrganizationLimits
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationLimitsDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations2/{organizationIdentifier}/members:
+    get:
+      deprecated: false
+      operationId: listOrganizationMembers
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/OrganizationMemberDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: addOrganizationMember
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/NewOrganizationMemberDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationMemberDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: member
+  /api/backend/v1/organizations2/{organizationIdentifier}/members/{userId}:
+    delete:
+      deprecated: false
+      operationId: deleteOrganizationMember
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: userId
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    patch:
+      deprecated: false
+      operationId: updateOrganizationMember
+      parameters:
+      - explode: false
+        in: path
+        name: organizationIdentifier
+        required: true
+        schema:
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: userId
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OrganizationMemberUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationMemberDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: member
+  /api/backend/v1/organizations2/{organizationId}:
+    delete:
+      deprecated: false
+      operationId: deleteOrganization
+      parameters:
+      - explode: false
+        in: path
+        name: organizationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateOrganization
+      parameters:
+      - explode: false
+        in: path
+        name: organizationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/OrganizationUpdateDTO'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: organizationToUpdate
+  /api/backend/v1/organizations2/{organizationId}/avatar:
+    put:
+      deprecated: false
+      operationId: updateOrganizationAvatar
+      parameters:
+      - explode: false
+        in: path
+        name: organizationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                avatarFile:
+                  format: binary
+                  type: string
+              required:
+              - avatarFile
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/LinkDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations2/{organizationId}/cancelSubscription:
+    post:
+      deprecated: false
+      operationId: cancelSubscription
+      parameters:
+      - explode: false
+        in: path
+        name: organizationId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/SubscriptionCancelInfoDTO'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: subscriptionCancel
+  /api/backend/v1/organizations2/{organizationName}/available:
+    get:
+      deprecated: false
+      operationId: isOrganizationNameAvailable
+      parameters:
+      - explode: false
+        in: path
+        name: organizationName
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationNameAvailableDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations2/{organizationName}/avatar:
+    get:
+      deprecated: false
+      operationId: getOrganizationAvatar
+      parameters:
+      - explode: false
+        in: path
+        name: organizationName
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations2/{organization}:
+    get:
+      deprecated: false
+      operationId: getOrganization
+      parameters:
+      - explode: false
+        in: path
+        name: organization
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/OrganizationDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/clients/config:
+    get:
+      deprecated: false
+      operationId: getClientConfig
+      parameters:
+      - explode: false
+        in: header
+        name: X-Neptune-Api-Token
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ClientConfig'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/clients/sso:
+    get:
+      deprecated: false
+      operationId: getSsoConfig
+      parameters:
+      - explode: true
+        in: query
+        name: workspaceName
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/WorkspaceConfig'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/myOrganizations:
+    get:
+      deprecated: false
+      operationId: listOrganizations
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/OrganizationWithRoleDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/channels/lastValues:
+    get:
+      deprecated: false
+      operationId: getChannelsLastValues
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChannelWithValueDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/channels/system:
+    get:
+      deprecated: false
+      operationId: getSystemChannels
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChannelDTO'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: createSystemChannel
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ChannelParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ChannelDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: channelToCreate
+  /api/backend/v1/channels/{channelId}/csv:
+    get:
+      deprecated: false
+      operationId: deprecatedGetChannelValuesCSV
+      parameters:
+      - explode: true
+        in: query
+        name: experimentId
+        required: false
+        schema:
+          format: uuid
+          type: string
+        style: form
+      - explode: false
+        in: path
+        name: channelId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: gzipped
+        required: false
+        schema:
+          type: boolean
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/channels/{channelId}/values:
+    get:
+      deprecated: false
+      operationId: deprecatedGetChannelValues
+      parameters:
+      - explode: false
+        in: path
+        name: channelId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: offset
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      - explode: true
+        in: query
+        name: limit
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/LimitedChannelValuesDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/login/actions:
+    get:
+      deprecated: false
+      description: Returns a list of actions that backend requires the user to complete
+        before he can start working with Neptune
+      operationId: getLoginActions
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/LoginActionsListDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "409":
+          content: {}
+          description: Conflict
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/login/survey:
+    post:
+      deprecated: false
+      description: Processes the survey. Sending {} means that user declined survey
+        and action is removed
+      operationId: sendRegistrationSurvey
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/RegistrationSurveyDTO'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: survey
+  /api/backend/v1/login/username:
+    post:
+      deprecated: false
+      description: |2
+
+        Sets the username as per param.
+        Can be called once, subsequent calls will result in 403 error.
+        Setting to an invalid username will result in 400 error.
+        Setting to an unavailable username will result in 409 error.
+      operationId: setUsername
+      parameters:
+      - explode: true
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "204":
+          content: {}
+          description: No Content
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/login/username/validate:
+    get:
+      deprecated: false
+      operationId: validateUsername
+      parameters:
+      - explode: true
+        in: query
+        name: username
+        required: true
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/UsernameValidationStatusDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+  /api/backend/v1/authorization/api-token:
+    delete:
+      deprecated: false
+      operationId: revokeApiToken
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    get:
+      deprecated: false
+      operationId: getApiToken
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/NeptuneApiToken'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/authorization/authorize:
+    get:
+      deprecated: false
+      operationId: authorize
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/AuthorizedUserDTO'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/authorization/oauth-token:
+    get:
+      deprecated: false
+      operationId: exchangeApiToken
+      parameters:
+      - explode: false
+        in: header
+        name: X-Neptune-Api-Token
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/NeptuneOauthToken'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/reservations:
+    post:
+      deprecated: false
+      operationId: createReservation
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/NewReservationDTO'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: newReservation
+  /api/backend/v1/reservations/{organizationName}/questionnaire:
+    put:
+      deprecated: false
+      operationId: sendQuestionnaire
+      parameters:
+      - explode: false
+        in: path
+        name: organizationName
+        required: true
+        schema:
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/QuestionnaireDTO'
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: questionnaireAnswers
+  /api/backend/healthz:
+    get:
+      deprecated: false
+      operationId: healthz
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/ComponentStatus'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/status:
+    get:
+      deprecated: false
+      operationId: statusGet
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Status'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/chartSets:
+    get:
+      deprecated: false
+      operationId: listProjectChartSets
+      parameters:
+      - explode: true
+        in: query
+        name: projectId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChartSet'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: createChartSet
+      parameters:
+      - explode: true
+        in: query
+        name: projectId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ChartSetParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ChartSet'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: chartSetToCreate
+  /api/backend/v1/chartSets/{chartSetId}:
+    delete:
+      deprecated: false
+      operationId: deleteChartSet
+      parameters:
+      - explode: false
+        in: path
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    get:
+      deprecated: false
+      operationId: getChartSet
+      parameters:
+      - explode: false
+        in: path
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ChartSet'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateChartSet
+      parameters:
+      - explode: false
+        in: path
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ChartSetParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ChartSet'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: chartSetToUpdate
+  /api/backend/v1/chartSets/{chartSetId}/charts:
+    post:
+      deprecated: false
+      operationId: createChart
+      parameters:
+      - explode: false
+        in: path
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ChartDefinition'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Chart'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: chartToCreate
+  /api/backend/v1/chartSets/{chartSetId}/charts/{chartId}:
+    delete:
+      deprecated: false
+      operationId: deleteChart
+      parameters:
+      - explode: false
+        in: path
+        name: chartId
+        required: true
+        schema:
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    put:
+      deprecated: false
+      operationId: updateChart
+      parameters:
+      - explode: false
+        in: path
+        name: chartId
+        required: true
+        schema:
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/ChartDefinition'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Chart'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: chartToUpdate
+  /api/backend/v1/config:
+    get:
+      deprecated: false
+      operationId: globalConfiguration
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/GlobalConfiguration'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/configInfo:
+    get:
+      deprecated: false
+      operationId: configInfoGet
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/ConfigInfo'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/experiments/{experimentId}/charts:
+    get:
+      deprecated: false
+      operationId: getExperimentCharts
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: chartSetId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Charts'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/experiments/{experimentId}/system/metrics:
+    get:
+      deprecated: false
+      operationId: getSystemMetrics
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/SystemMetric'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+    post:
+      deprecated: false
+      operationId: createSystemMetric
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              $ref: '#/components/schemas/SystemMetricParams'
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/SystemMetric'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: metricToCreate
+  /api/backend/v1/experiments/{experimentId}/system/metrics/csv:
+    get:
+      deprecated: false
+      operationId: getSystemMetricsCSV
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: gzipped
+        required: false
+        schema:
+          type: boolean
+        style: form
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/experiments/{experimentId}/system/metrics/values:
+    post:
+      deprecated: false
+      operationId: postSystemMetricValues
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          '*/*':
+            schema:
+              items:
+                $ref: '#/components/schemas/SystemMetricValues'
+              type: array
+        required: true
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+      x-codegen-request-body-name: metricValues
+  /api/backend/v1/experiments/{experimentId}/system/metrics/{metricId}/values:
+    get:
+      deprecated: false
+      operationId: getSystemMetricValues
+      parameters:
+      - explode: false
+        in: path
+        name: experimentId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: metricId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      - explode: true
+        in: query
+        name: startPoint
+        required: false
+        schema:
+          format: int64
+          type: integer
+        style: form
+      - explode: true
+        in: query
+        name: endPoint
+        required: false
+        schema:
+          format: int64
+          type: integer
+        style: form
+      - explode: true
+        in: query
+        name: itemCount
+        required: false
+        schema:
+          format: int32
+          type: integer
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                items:
+                  $ref: '#/components/schemas/SystemMetricValues'
+                type: array
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations/{organizationName}/projects/{projectName}/avatar:
+    get:
+      deprecated: false
+      operationId: getProjectAvatar
+      parameters:
+      - explode: false
+        in: path
+        name: organizationName
+        required: true
+        schema:
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: projectName
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            image/png:
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/organizations/{organizationName}/projects/{projectName}/background:
+    get:
+      deprecated: false
+      operationId: getProjectBackground
+      parameters:
+      - explode: false
+        in: path
+        name: organizationName
+        required: true
+        schema:
+          type: string
+        style: simple
+      - explode: false
+        in: path
+        name: projectName
+        required: true
+        schema:
+          type: string
+        style: simple
+      responses:
+        "200":
+          content: {}
+          description: No response
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects1/{projectId}/avatar:
+    put:
+      deprecated: false
+      operationId: updateProjectAvatar
+      parameters:
+      - explode: false
+        in: path
+        name: projectId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                avatarFile:
+                  format: binary
+                  type: string
+              required:
+              - avatarFile
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Link'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/projects1/{projectId}/background:
+    put:
+      deprecated: false
+      operationId: updateProjectBackground
+      parameters:
+      - explode: false
+        in: path
+        name: projectId
+        required: true
+        schema:
+          format: uuid
+          type: string
+        style: simple
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              properties:
+                backgroundFile:
+                  format: binary
+                  type: string
+              required:
+              - backgroundFile
+        required: true
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Link'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/v1/storage/usage:
+    get:
+      deprecated: false
+      operationId: storageUsage
+      parameters:
+      - explode: true
+        in: query
+        name: organizationIdentifier
+        required: false
+        schema:
+          type: string
+        style: form
+      - explode: true
+        in: query
+        name: projectIdentifier
+        required: false
+        schema:
+          type: string
+        style: form
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/StorageUsage'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /api/backend/version:
+    get:
+      deprecated: false
+      operationId: version
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Version'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+  /version:
+    get:
+      deprecated: false
+      operationId: versionGet
+      responses:
+        "200":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Version'
+          description: OK
+        "400":
+          content:
+            '*/*':
+              schema:
+                $ref: '#/components/schemas/Error'
+          description: Bad Request
+        "401":
+          content: {}
+          description: Unauthorized
+        "403":
+          content: {}
+          description: Forbidden
+        "404":
+          content: {}
+          description: Not Found
+        "408":
+          content: {}
+          description: Request Timeout
+        "422":
+          content: {}
+          description: Unprocessable Entity
+      security:
+      - oauth2: []
+components:
+  schemas:
+    LinkTypeDTO:
+      enum:
+      - github
+      - twitter
+      - kaggle
+      - linkedin
+      - other
+      type: string
+    ParameterTypeEnum:
+      enum:
+      - double
+      - string
+      type: string
+    OrganizationNameAvailableDTO:
+      example:
+        available: true
+      properties:
+        available:
+          type: boolean
+      required:
+      - available
+      type: object
+    RegisteredMemberInfoDTO:
+      example:
+        lastName: lastName
+        firstName: firstName
+        avatarUrl: avatarUrl
+        username: username
+      properties:
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        lastName:
+          type: string
+        firstName:
+          type: string
+        username:
+          type: string
+        avatarUrl:
+          type: string
+      required:
+      - avatarSource
+      - avatarUrl
+      - firstName
+      - lastName
+      - username
+      type: object
+    ProjectMemberDTO:
+      example:
+        canLeaveProject: true
+        registeredMemberInfo:
+          lastName: lastName
+          firstName: firstName
+          avatarUrl: avatarUrl
+          username: username
+        invitationInfo:
+          invitedBy: invitedBy
+          organizationName: organizationName
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          projectName: projectName
+          invitee: invitee
+        editableRole: true
+      properties:
+        role:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+        registeredMemberInfo:
+          $ref: '#/components/schemas/RegisteredMemberInfoDTO'
+        invitationInfo:
+          $ref: '#/components/schemas/ProjectInvitationDTO'
+        editableRole:
+          type: boolean
+        canLeaveProject:
+          type: boolean
+      required:
+      - canLeaveProject
+      - editableRole
+      - role
+      type: object
+    UsernameValidationStatusDTO:
+      example: {}
+      properties:
+        status:
+          $ref: '#/components/schemas/UsernameValidationStatusEnumDTO'
+      required:
+      - status
+      type: object
+    InputMetadata:
+      example:
+        size: 2
+        destination: destination
+        source: source
+      properties:
+        source:
+          type: string
+        destination:
+          type: string
+        size:
+          format: int64
+          type: integer
+      required:
+      - destination
+      - size
+      - source
+      type: object
+    OrganizationTypeDTO:
+      enum:
+      - individual
+      - team
+      type: string
+    EditExperimentParams:
+      example:
+        name: name
+        description: description
+        properties:
+        - value: value
+          key: key
+        - value: value
+          key: key
+        tags:
+        - tags
+        - tags
+      properties:
+        name:
+          type: string
+        description:
+          type: string
+        tags:
+          items:
+            type: string
+          type: array
+        properties:
+          items:
+            $ref: '#/components/schemas/KeyValueProperty'
+          type: array
+      type: object
+    PasswordChangeDTO:
+      example:
+        newPassword: newPassword
+        currentPassword: currentPassword
+      properties:
+        currentPassword:
+          type: string
+        newPassword:
+          type: string
+      required:
+      - currentPassword
+      - newPassword
+      type: object
+    OrganizationMemberUpdateDTO:
+      example: {}
+      properties:
+        role:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+      required:
+      - role
+      type: object
+    UpdateTagsParams:
+      example:
+        experimentIds:
+        - 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        - 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        tagsToAdd:
+        - tagsToAdd
+        - tagsToAdd
+        tagsToDelete:
+        - tagsToDelete
+        - tagsToDelete
+      properties:
+        experimentIds:
+          items:
+            format: uuid
+            type: string
+          type: array
+        tagsToAdd:
+          items:
+            type: string
+          type: array
+        tagsToDelete:
+          items:
+            type: string
+          type: array
+      required:
+      - experimentIds
+      - tagsToAdd
+      - tagsToDelete
+      type: object
+    Experiment:
+      example:
+        shortId: shortId
+        channelsSize: 5
+        inputs:
+        - size: 2
+          destination: destination
+          source: source
+        - size: 2
+          destination: destination
+          source: source
+        description: description
+        checkpointId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        responding: true
+        hostname: hostname
+        entrypoint: entrypoint
+        componentsVersions:
+        - version: version
+        - version: version
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        traceback: traceback
+        stateTransitions:
+          running: 2000-01-23T04:56:07.000+00:00
+          aborted: 2000-01-23T04:56:07.000+00:00
+          failed: 2000-01-23T04:56:07.000+00:00
+          succeeded: 2000-01-23T04:56:07.000+00:00
+        owner: owner
+        organizationName: organizationName
+        isCodeAccessible: true
+        timeOfCreation: 2000-01-23T04:56:07.000+00:00
+        runningTime: 5
+        channelsLastValues:
+        - x: 6.027456183070403
+          y: "y"
+          channelName: channelName
+          channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        - x: 6.027456183070403
+          y: "y"
+          channelName: channelName
+          channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        tags:
+        - tags
+        - tags
+        channels:
+        - name: name
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          lastX: 0.8008281904610115
+        - name: name
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          lastX: 0.8008281904610115
+        notebookId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        paths:
+          output: output
+          source: source
+        storageSize: 1
+        timeOfCompletion: 2000-01-23T04:56:07.000+00:00
+        name: name
+        projectName: projectName
+        parameters:
+        - name: name
+          description: description
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          value: value
+        - name: name
+          description: description
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          value: value
+        projectId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        properties:
+        - value: value
+          key: key
+        - value: value
+          key: key
+        trashed: true
+      properties:
+        channels:
+          items:
+            $ref: '#/components/schemas/Channel'
+          type: array
+        state:
+          $ref: '#/components/schemas/ExperimentState'
+        timeOfCompletion:
+          format: date-time
+          type: string
+        checkpointId:
+          format: uuid
+          type: string
+        paths:
+          $ref: '#/components/schemas/ExperimentPaths'
+        responding:
+          type: boolean
+        organizationId:
+          format: uuid
+          type: string
+        stateTransitions:
+          $ref: '#/components/schemas/StateTransitions'
+        parameters:
+          items:
+            $ref: '#/components/schemas/Parameter'
+          type: array
+        channelsLastValues:
+          items:
+            $ref: '#/components/schemas/ChannelWithValue'
+          type: array
+        storageSize:
+          format: int64
+          type: integer
+        name:
+          type: string
+        notebookId:
+          format: uuid
+          type: string
+        projectName:
+          type: string
+        hostname:
+          type: string
+        trashed:
+          type: boolean
+        description:
+          type: string
+        tags:
+          items:
+            type: string
+          type: array
+        channelsSize:
+          format: int64
+          type: integer
+        timeOfCreation:
+          format: date-time
+          type: string
+        projectId:
+          format: uuid
+          type: string
+        organizationName:
+          type: string
+        isCodeAccessible:
+          type: boolean
+        traceback:
+          type: string
+        entrypoint:
+          type: string
+        runningTime:
+          format: int64
+          type: integer
+        id:
+          format: uuid
+          type: string
+        inputs:
+          items:
+            $ref: '#/components/schemas/InputMetadata'
+          type: array
+        properties:
+          items:
+            $ref: '#/components/schemas/KeyValueProperty'
+          type: array
+        shortId:
+          type: string
+        componentsVersions:
+          items:
+            $ref: '#/components/schemas/ComponentVersion'
+          type: array
+        owner:
+          type: string
+      required:
+      - channels
+      - channelsLastValues
+      - channelsSize
+      - componentsVersions
+      - description
+      - id
+      - inputs
+      - name
+      - organizationId
+      - organizationName
+      - owner
+      - parameters
+      - paths
+      - projectId
+      - projectName
+      - properties
+      - responding
+      - runningTime
+      - shortId
+      - state
+      - stateTransitions
+      - storageSize
+      - tags
+      - timeOfCreation
+      - trashed
+      type: object
+    StorageUsage:
+      example:
+        usage: 0
+      properties:
+        usage:
+          format: int64
+          type: integer
+      required:
+      - usage
+      type: object
+    ProjectVisibilityDTO:
+      enum:
+      - priv
+      - pub
+      type: string
+    Parameter:
+      example:
+        name: name
+        description: description
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        value: value
+      properties:
+        name:
+          type: string
+        description:
+          type: string
+        parameterType:
+          $ref: '#/components/schemas/ParameterTypeEnum'
+        id:
+          format: uuid
+          type: string
+        value:
+          type: string
+      required:
+      - id
+      - name
+      - parameterType
+      - value
+      type: object
+    NeptuneApiToken:
+      example:
+        token: token
+      properties:
+        token:
+          type: string
+      required:
+      - token
+      type: object
+    OrganizationUpdateDTO:
+      example:
+        name: name
+        info: info
+      properties:
+        name:
+          type: string
+        info:
+          type: string
+      type: object
+    NameEnum:
+      enum:
+      - Client
+      type: string
+    Series:
+      example:
+        aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        channelName: channelName
+        label: label
+        channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        seriesType:
+          $ref: '#/components/schemas/SeriesType'
+        channelName:
+          type: string
+        channelId:
+          format: uuid
+          type: string
+        aliasId:
+          format: uuid
+          type: string
+        label:
+          type: string
+      required:
+      - label
+      - seriesType
+      type: object
+    Channel:
+      example:
+        name: name
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        lastX: 0.8008281904610115
+      properties:
+        id:
+          format: uuid
+          type: string
+        name:
+          type: string
+        channelType:
+          $ref: '#/components/schemas/ChannelType'
+        lastX:
+          format: double
+          type: number
+      required:
+      - channelType
+      - id
+      - name
+      type: object
+    OrganizationInvitationUpdateDTO:
+      example: {}
+      properties:
+        roleGrant:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+      required:
+      - roleGrant
+      type: object
+    UserListItemDTO:
+      example:
+        lastName: lastName
+        firstName: firstName
+        avatarUrl: avatarUrl
+        username: username
+      properties:
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        lastName:
+          type: string
+        firstName:
+          type: string
+        username:
+          type: string
+        avatarUrl:
+          type: string
+      required:
+      - avatarSource
+      - avatarUrl
+      - firstName
+      - lastName
+      - username
+      type: object
+    OrganizationMemberDTO:
+      example:
+        totalNumberOfProjects: 0
+        numberOfProjects: 6
+        registeredMemberInfo:
+          lastName: lastName
+          firstName: firstName
+          avatarUrl: avatarUrl
+          username: username
+        invitationInfo:
+          invitedBy: invitedBy
+          organizationName: organizationName
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          invitee: invitee
+        editableRole: true
+      properties:
+        role:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+        editableRole:
+          type: boolean
+        registeredMemberInfo:
+          $ref: '#/components/schemas/RegisteredMemberInfoDTO'
+        invitationInfo:
+          $ref: '#/components/schemas/OrganizationInvitationDTO'
+        totalNumberOfProjects:
+          format: int32
+          type: integer
+        numberOfProjects:
+          format: int32
+          type: integer
+      required:
+      - editableRole
+      - role
+      type: object
+    NewProjectDTO:
+      example:
+        organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        projectKey: projectKey
+        name: name
+        description: description
+        displayClass: displayClass
+      properties:
+        name:
+          type: string
+        description:
+          type: string
+        projectKey:
+          type: string
+        organizationId:
+          format: uuid
+          type: string
+        visibility:
+          $ref: '#/components/schemas/ProjectVisibilityDTO'
+        displayClass:
+          type: string
+      required:
+      - name
+      - organizationId
+      - projectKey
+      type: object
+    SystemMetricValues:
+      example:
+        metricId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        level: 0
+        seriesName: seriesName
+        values:
+        - timestampMillis: 6
+          x: 1
+          y: 5.962133916683182
+        - timestampMillis: 6
+          x: 1
+          y: 5.962133916683182
+      properties:
+        metricId:
+          format: uuid
+          type: string
+        seriesName:
+          type: string
+        level:
+          format: int32
+          type: integer
+        values:
+          items:
+            $ref: '#/components/schemas/SystemMetricPoint'
+          type: array
+      required:
+      - metricId
+      - seriesName
+      - values
+      type: object
+    ProjectCodeAccessDTO:
+      enum:
+      - default
+      - restricted
+      type: string
+    SystemMetricResourceType:
+      enum:
+      - CPU
+      - RAM
+      - GPU
+      - GPU_RAM
+      - OTHER
+      type: string
+    ChannelWithValueDTO:
+      example:
+        x: 0.8008281904610115
+        y: "y"
+        channelName: channelName
+        channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        x:
+          format: double
+          type: number
+        y:
+          type: string
+        channelType:
+          $ref: '#/components/schemas/ChannelTypeEnum'
+        channelName:
+          type: string
+        channelId:
+          format: uuid
+          type: string
+      required:
+      - channelId
+      - channelName
+      - channelType
+      - x
+      - "y"
+      type: object
+    Error:
+      example:
+        code: 6
+        message: message
+      properties:
+        code:
+          format: int32
+          type: integer
+        message:
+          type: string
+        type:
+          $ref: '#/components/schemas/ApiErrorTypeDTO'
+      required:
+      - code
+      - message
+      type: object
+    ProjectRoleDTO:
+      enum:
+      - viewer
+      - member
+      - manager
+      type: string
+    ProjectMembersDTO:
+      example:
+        organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        organizationName: organizationName
+        members:
+        - canLeaveProject: true
+          registeredMemberInfo:
+            lastName: lastName
+            firstName: firstName
+            avatarUrl: avatarUrl
+            username: username
+          invitationInfo:
+            invitedBy: invitedBy
+            organizationName: organizationName
+            id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            projectName: projectName
+            invitee: invitee
+          editableRole: true
+        - canLeaveProject: true
+          registeredMemberInfo:
+            lastName: lastName
+            firstName: firstName
+            avatarUrl: avatarUrl
+            username: username
+          invitationInfo:
+            invitedBy: invitedBy
+            organizationName: organizationName
+            id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            projectName: projectName
+            invitee: invitee
+          editableRole: true
+        projectName: projectName
+        projectId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        projectName:
+          type: string
+        projectId:
+          format: uuid
+          type: string
+        organizationName:
+          type: string
+        members:
+          items:
+            $ref: '#/components/schemas/ProjectMemberDTO'
+          type: array
+        organizationId:
+          format: uuid
+          type: string
+      required:
+      - members
+      - organizationId
+      - organizationName
+      - projectId
+      - projectName
+      type: object
+    Y:
+      example:
+        textValue: textValue
+        numericValue: 1.4658129805029452
+        inputImageValue:
+          data: data
+          name: name
+          description: description
+        imageValue:
+          imageUrl: imageUrl
+          name: name
+          description: description
+          thumbnailUrl: thumbnailUrl
+      properties:
+        numericValue:
+          format: double
+          type: number
+        textValue:
+          type: string
+        imageValue:
+          $ref: '#/components/schemas/OutputImageDTO'
+        inputImageValue:
+          $ref: '#/components/schemas/InputImageDTO'
+      type: object
+    Point:
+      example:
+        timestampMillis: 0
+        x: 6.027456183070403
+        y:
+          textValue: textValue
+          numericValue: 1.4658129805029452
+          inputImageValue:
+            data: data
+            name: name
+            description: description
+          imageValue:
+            imageUrl: imageUrl
+            name: name
+            description: description
+            thumbnailUrl: thumbnailUrl
+      properties:
+        timestampMillis:
+          format: int64
+          type: integer
+        x:
+          format: double
+          type: number
+        y:
+          $ref: '#/components/schemas/Y'
+      required:
+      - timestampMillis
+      - "y"
+      type: object
+    ProjectMemberUpdateDTO:
+      example: {}
+      properties:
+        role:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+      required:
+      - role
+      type: object
+    CompletedExperimentParams:
+      example:
+        traceback: traceback
+      properties:
+        state:
+          $ref: '#/components/schemas/ExperimentState'
+        traceback:
+          type: string
+      required:
+      - state
+      - traceback
+      type: object
+    SeriesDefinition:
+      example:
+        aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        channelName: channelName
+        label: label
+      properties:
+        label:
+          type: string
+        channelName:
+          type: string
+        aliasId:
+          format: uuid
+          type: string
+        seriesType:
+          $ref: '#/components/schemas/SeriesType'
+      required:
+      - label
+      - seriesType
+      type: object
+    UserProfileDTO:
+      example:
+        lastName: lastName
+        avatarUrl: avatarUrl
+        created: 2000-01-23T04:56:07.000+00:00
+        usernameHash: usernameHash
+        biography: biography
+        hasLoggedToCli: true
+        firstName: firstName
+        shortInfo: shortInfo
+        links:
+          github: github
+          kaggle: kaggle
+          twitter: twitter
+          linkedin: linkedin
+          others:
+          - others
+          - others
+        hasCreatedExperiments: true
+        email: email
+        username: username
+      properties:
+        usernameHash:
+          type: string
+        email:
+          type: string
+        hasLoggedToCli:
+          type: boolean
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        firstName:
+          type: string
+        shortInfo:
+          type: string
+        created:
+          format: date-time
+          type: string
+        biography:
+          type: string
+        hasCreatedExperiments:
+          type: boolean
+        username:
+          type: string
+        avatarUrl:
+          type: string
+        lastName:
+          type: string
+        links:
+          $ref: '#/components/schemas/UserProfileLinksDTO'
+      required:
+      - avatarSource
+      - avatarUrl
+      - biography
+      - created
+      - email
+      - firstName
+      - hasCreatedExperiments
+      - hasLoggedToCli
+      - lastName
+      - links
+      - shortInfo
+      - username
+      - usernameHash
+      type: object
+    ProjectKeyDTO:
+      example:
+        proposal: proposal
+      properties:
+        proposal:
+          type: string
+      required:
+      - proposal
+      type: object
+    InvitationTypeEnumDTO:
+      enum:
+      - user
+      - emailRecipient
+      type: string
+    ProjectWithRoleDTO:
+      example:
+        backgroundUrl: backgroundUrl
+        featured: true
+        organizationName: organizationName
+        avatarUrl: avatarUrl
+        timeOfCreation: 2000-01-23T04:56:07.000+00:00
+        description: description
+        version: 0
+        displayClass: displayClass
+        organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        projectKey: projectKey
+        userCount: 6
+        name: name
+        lastActivity: 2000-01-23T04:56:07.000+00:00
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        leaderboardEntryCount: 1
+      properties:
+        codeAccess:
+          $ref: '#/components/schemas/ProjectCodeAccessDTO'
+        avatarUrl:
+          type: string
+        description:
+          type: string
+        organizationType:
+          $ref: '#/components/schemas/OrganizationTypeDTO'
+        featured:
+          type: boolean
+        organizationName:
+          type: string
+        version:
+          format: int32
+          type: integer
+        id:
+          format: uuid
+          type: string
+        projectKey:
+          type: string
+        organizationId:
+          format: uuid
+          type: string
+        userCount:
+          format: int32
+          type: integer
+        visibility:
+          $ref: '#/components/schemas/ProjectVisibilityDTO'
+        displayClass:
+          type: string
+        name:
+          type: string
+        lastActivity:
+          format: date-time
+          type: string
+        timeOfCreation:
+          format: date-time
+          type: string
+        userRoleInOrganization:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        leaderboardEntryCount:
+          format: int32
+          type: integer
+        userRoleInProject:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+        backgroundUrl:
+          type: string
+      required:
+      - avatarSource
+      - avatarUrl
+      - codeAccess
+      - featured
+      - id
+      - lastActivity
+      - leaderboardEntryCount
+      - name
+      - organizationId
+      - organizationName
+      - organizationType
+      - projectKey
+      - timeOfCreation
+      - userCount
+      - userRoleInProject
+      - version
+      - visibility
+      type: object
+    OrganizationRoleDTO:
+      enum:
+      - member
+      - owner
+      type: string
+    SystemMetric:
+      example:
+        unit: unit
+        min: 0.8008281904610115
+        max: 6.027456183070403
+        series:
+        - series
+        - series
+        name: name
+        description: description
+        experimentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        series:
+          items:
+            type: string
+          type: array
+        name:
+          type: string
+        min:
+          format: double
+          type: number
+        max:
+          format: double
+          type: number
+        unit:
+          type: string
+        description:
+          type: string
+        resourceType:
+          $ref: '#/components/schemas/SystemMetricResourceType'
+        experimentId:
+          format: uuid
+          type: string
+        id:
+          format: uuid
+          type: string
+      required:
+      - description
+      - experimentId
+      - id
+      - name
+      - resourceType
+      - series
+      type: object
+    WorkspaceConfig:
+      example:
+        idpHint: idpHint
+        realm: realm
+      properties:
+        realm:
+          type: string
+        idpHint:
+          type: string
+      required:
+      - idpHint
+      - realm
+      type: object
+    UUID:
+      properties:
+        mostSigBits:
+          format: int64
+          type: integer
+        leastSigBits:
+          format: int64
+          type: integer
+      required:
+      - leastSigBits
+      - mostSigBits
+      type: object
+    SystemMetricPoint:
+      example:
+        timestampMillis: 6
+        x: 1
+        y: 5.962133916683182
+      properties:
+        timestampMillis:
+          format: int64
+          type: integer
+        x:
+          format: int64
+          type: integer
+        y:
+          format: double
+          type: number
+      required:
+      - timestampMillis
+      - x
+      - "y"
+      type: object
+    Version:
+      example:
+        version: version
+      properties:
+        version:
+          type: string
+      required:
+      - version
+      type: object
+    OrganizationInvitationDTO:
+      example:
+        invitedBy: invitedBy
+        organizationName: organizationName
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        invitee: invitee
+      properties:
+        roleGrant:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+        invitedBy:
+          type: string
+        organizationName:
+          type: string
+        id:
+          format: uuid
+          type: string
+        invitee:
+          type: string
+        status:
+          $ref: '#/components/schemas/InvitationStatusEnumDTO'
+        invitationType:
+          $ref: '#/components/schemas/InvitationTypeEnumDTO'
+      required:
+      - id
+      - invitationType
+      - invitedBy
+      - invitee
+      - organizationName
+      - roleGrant
+      - status
+      type: object
+    ChannelTypeEnum:
+      enum:
+      - numeric
+      - text
+      - image
+      type: string
+    ChannelWithValue:
+      example:
+        x: 6.027456183070403
+        y: "y"
+        channelName: channelName
+        channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        x:
+          format: double
+          type: number
+        y:
+          type: string
+        channelType:
+          $ref: '#/components/schemas/ChannelType'
+        channelName:
+          type: string
+        channelId:
+          format: uuid
+          type: string
+      required:
+      - channelId
+      - channelName
+      - channelType
+      - x
+      - "y"
+      type: object
+    ChartDefinition:
+      example:
+        series:
+        - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          channelName: channelName
+          label: label
+        - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          channelName: channelName
+          label: label
+        name: name
+      properties:
+        name:
+          type: string
+        series:
+          items:
+            $ref: '#/components/schemas/SeriesDefinition'
+          type: array
+      required:
+      - name
+      - series
+      type: object
+    UsernameValidationStatusEnumDTO:
+      enum:
+      - available
+      - invalid
+      - unavailable
+      type: string
+    ProjectInvitationDTO:
+      example:
+        invitedBy: invitedBy
+        organizationName: organizationName
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        projectName: projectName
+        invitee: invitee
+      properties:
+        roleGrant:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+        projectName:
+          type: string
+        invitedBy:
+          type: string
+        organizationName:
+          type: string
+        id:
+          format: uuid
+          type: string
+        invitee:
+          type: string
+        status:
+          $ref: '#/components/schemas/InvitationStatusEnumDTO'
+        invitationType:
+          $ref: '#/components/schemas/InvitationTypeEnumDTO'
+      required:
+      - id
+      - invitationType
+      - invitedBy
+      - invitee
+      - organizationName
+      - projectName
+      - roleGrant
+      - status
+      type: object
+    OrganizationWithRoleDTO:
+      example:
+        avatarUrl: avatarUrl
+        created: 2000-01-23T04:56:07.000+00:00
+        name: name
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        paymentStatus: paymentStatus
+        info: info
+      properties:
+        name:
+          type: string
+        userRole:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+        paymentStatus:
+          type: string
+        avatarUrl:
+          type: string
+        organizationType:
+          $ref: '#/components/schemas/OrganizationTypeDTO'
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        info:
+          type: string
+        id:
+          format: uuid
+          type: string
+        created:
+          format: date-time
+          type: string
+      required:
+      - avatarSource
+      - avatarUrl
+      - created
+      - id
+      - name
+      - organizationType
+      - paymentStatus
+      type: object
+    DiscountCodeDTO:
+      example:
+        code: code
+      properties:
+        code:
+          type: string
+      required:
+      - code
+      type: object
+    ExperimentPaths:
+      example:
+        output: output
+        source: source
+      properties:
+        output:
+          type: string
+        source:
+          type: string
+      required:
+      - output
+      - source
+      type: object
+    ChannelDTO:
+      example:
+        name: name
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        lastX: 0.8008281904610115
+      properties:
+        id:
+          format: uuid
+          type: string
+        name:
+          type: string
+        channelType:
+          $ref: '#/components/schemas/ChannelTypeEnum'
+        lastX:
+          format: double
+          type: number
+      required:
+      - channelType
+      - id
+      - name
+      type: object
+    AuthorizedUserDTO:
+      example:
+        username: username
+      properties:
+        username:
+          type: string
+      required:
+      - username
+      type: object
+    GlobalConfiguration:
+      example:
+        licenseExpiration: 2000-01-23T04:56:07.000+00:00
+      properties:
+        licenseExpiration:
+          format: date-time
+          type: string
+      required:
+      - licenseExpiration
+      type: object
+    ClientConfig:
+      example:
+        apiUrl: apiUrl
+        applicationUrl: applicationUrl
+        pyLibVersions:
+          maxCompatibleVersion: maxCompatibleVersion
+          minRecommendedVersion: minRecommendedVersion
+          minCompatibleVersion: minCompatibleVersion
+      properties:
+        apiUrl:
+          type: string
+        applicationUrl:
+          type: string
+        pyLibVersions:
+          $ref: '#/components/schemas/ClientVersionsConfigDTO'
+      required:
+      - apiUrl
+      - applicationUrl
+      - pyLibVersions
+      type: object
+    GitInfoDTO:
+      example:
+        commit:
+          authorEmail: authorEmail
+          authorName: authorName
+          commitId: commitId
+          message: message
+          commitDate: 2000-01-23T04:56:07.000+00:00
+        repositoryDirty: true
+        remotes:
+        - remotes
+        - remotes
+        currentBranch: currentBranch
+      properties:
+        currentBranch:
+          type: string
+        remotes:
+          items:
+            type: string
+          type: array
+        commit:
+          $ref: '#/components/schemas/GitCommitDTO'
+        repositoryDirty:
+          type: boolean
+      required:
+      - commit
+      - repositoryDirty
+      type: object
+    CustomerDTO:
+      example:
+        userPriceInCents: 6
+        numberOfUsers: 0
+        discount:
+          amountOffInCents: 5
+          end: 2000-01-23T04:56:07.000+00:00
+          amountOffPercentage: 1
+      properties:
+        numberOfUsers:
+          format: int64
+          type: integer
+        userPriceInCents:
+          format: int64
+          type: integer
+        pricingPlan:
+          $ref: '#/components/schemas/PricingPlanDTO'
+        discount:
+          $ref: '#/components/schemas/DiscountDTO'
+      required:
+      - pricingPlan
+      - userPriceInCents
+      type: object
+    PricingPlanDTO:
+      enum:
+      - free
+      - academia
+      - paid
+      - enterprise
+      type: string
+    ChannelParams:
+      example:
+        name: name
+      properties:
+        name:
+          type: string
+        channelType:
+          $ref: '#/components/schemas/ChannelTypeEnum'
+      required:
+      - channelType
+      - name
+      type: object
+    File:
+      properties:
+        path:
+          type: string
+      required:
+      - path
+      type: object
+    ExperimentCreationParams:
+      example:
+        abortable: true
+        description: description
+        checkpointId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        configPath: configPath
+        execArgsTemplate: execArgsTemplate
+        monitored: true
+        tags:
+        - tags
+        - tags
+        enqueueCommand: enqueueCommand
+        hostname: hostname
+        gitInfo:
+          commit:
+            authorEmail: authorEmail
+            authorName: authorName
+            commitId: commitId
+            message: message
+            commitDate: 2000-01-23T04:56:07.000+00:00
+          repositoryDirty: true
+          remotes:
+          - remotes
+          - remotes
+          currentBranch: currentBranch
+        notebookId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        entrypoint: entrypoint
+        name: name
+        projectId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        parameters:
+        - name: name
+          description: description
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          value: value
+        - name: name
+          description: description
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          value: value
+        properties:
+        - value: value
+          key: key
+        - value: value
+          key: key
+      properties:
+        monitored:
+          type: boolean
+        hostname:
+          type: string
+        checkpointId:
+          format: uuid
+          type: string
+        projectId:
+          format: uuid
+          type: string
+        gitInfo:
+          $ref: '#/components/schemas/GitInfoDTO'
+        properties:
+          items:
+            $ref: '#/components/schemas/KeyValueProperty'
+          type: array
+        configPath:
+          type: string
+        execArgsTemplate:
+          type: string
+        parameters:
+          items:
+            $ref: '#/components/schemas/Parameter'
+          type: array
+        enqueueCommand:
+          type: string
+        name:
+          type: string
+        notebookId:
+          format: uuid
+          type: string
+        description:
+          type: string
+        tags:
+          items:
+            type: string
+          type: array
+        abortable:
+          type: boolean
+        entrypoint:
+          type: string
+      required:
+      - enqueueCommand
+      - execArgsTemplate
+      - name
+      - parameters
+      - projectId
+      - properties
+      - tags
+      type: object
+    RegistrationSurveyDTO:
+      example:
+        survey: survey
+      properties:
+        survey:
+          type: string
+      required:
+      - survey
+      type: object
+    BatchExperimentUpdateResult:
+      example:
+        experimentId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        error:
+          code: 6
+          message: message
+      properties:
+        experimentId:
+          format: uuid
+          type: string
+        error:
+          $ref: '#/components/schemas/Error'
+      required:
+      - experimentId
+      type: object
+    Chart:
+      example:
+        series:
+        - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          channelName: channelName
+          label: label
+          channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          channelName: channelName
+          label: label
+          channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        name: name
+        id: id
+      properties:
+        id:
+          type: string
+        name:
+          type: string
+        series:
+          items:
+            $ref: '#/components/schemas/Series'
+          type: array
+      required:
+      - id
+      - name
+      - series
+      type: object
+    NewProjectInvitationDTO:
+      example:
+        projectIdentifier: projectIdentifier
+        invitee: invitee
+      properties:
+        projectIdentifier:
+          type: string
+        invitee:
+          type: string
+        invitationType:
+          $ref: '#/components/schemas/InvitationTypeEnumDTO'
+        roleGrant:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+      required:
+      - invitationType
+      - invitee
+      - projectIdentifier
+      - roleGrant
+      type: object
+    KeyValueProperty:
+      example:
+        value: value
+        key: key
+      properties:
+        key:
+          type: string
+        value:
+          type: string
+      required:
+      - key
+      - value
+      type: object
+    ConfigInfo:
+      example:
+        maxFormContentSize: 0
+      properties:
+        maxFormContentSize:
+          format: int32
+          type: integer
+      required:
+      - maxFormContentSize
+      type: object
+    InputChannelValues:
+      example:
+        values:
+        - timestampMillis: 0
+          x: 6.027456183070403
+          y:
+            textValue: textValue
+            numericValue: 1.4658129805029452
+            inputImageValue:
+              data: data
+              name: name
+              description: description
+            imageValue:
+              imageUrl: imageUrl
+              name: name
+              description: description
+              thumbnailUrl: thumbnailUrl
+        - timestampMillis: 0
+          x: 6.027456183070403
+          y:
+            textValue: textValue
+            numericValue: 1.4658129805029452
+            inputImageValue:
+              data: data
+              name: name
+              description: description
+            imageValue:
+              imageUrl: imageUrl
+              name: name
+              description: description
+              thumbnailUrl: thumbnailUrl
+        channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        channelId:
+          format: uuid
+          type: string
+        values:
+          items:
+            $ref: '#/components/schemas/Point'
+          type: array
+      required:
+      - channelId
+      - values
+      type: object
+    ChartSet:
+      example:
+        defaultChartsEnabled: true
+        charts:
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          name: name
+          id: id
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          name: name
+          id: id
+        isEditable: true
+        name: name
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        projectId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        isEditable:
+          type: boolean
+        defaultChartsEnabled:
+          type: boolean
+        projectId:
+          format: uuid
+          type: string
+        id:
+          format: uuid
+          type: string
+        name:
+          type: string
+        charts:
+          items:
+            $ref: '#/components/schemas/Chart'
+          type: array
+      required:
+      - id
+      - name
+      - projectId
+      type: object
+    AchievementTypeDTO:
+      enum:
+      - artifactSent
+      - experimentCreated
+      - imageSent
+      - parameterSet
+      - sourceUploaded
+      - tagSet
+      - textSent
+      type: string
+    CreateSessionParamsDTO:
+      description: Stripe Checkout Session details
+      example:
+        successUrl: successUrl
+        failureUrl: failureUrl
+      properties:
+        successUrl:
+          type: string
+        failureUrl:
+          type: string
+      required:
+      - failureUrl
+      - successUrl
+      type: object
+    LinkDTO:
+      example:
+        url: url
+      properties:
+        url:
+          type: string
+      required:
+      - url
+      type: object
+    GitCommitDTO:
+      example:
+        authorEmail: authorEmail
+        authorName: authorName
+        commitId: commitId
+        message: message
+        commitDate: 2000-01-23T04:56:07.000+00:00
+      properties:
+        authorEmail:
+          type: string
+        commitId:
+          type: string
+        message:
+          type: string
+        commitDate:
+          format: date-time
+          type: string
+        authorName:
+          type: string
+      required:
+      - authorEmail
+      - authorName
+      - commitDate
+      - commitId
+      - message
+      type: object
+    PointValueDTO:
+      example:
+        timestampMillis: 0
+        x: 6.027456183070403
+        y:
+          textValue: textValue
+          numericValue: 1.4658129805029452
+          inputImageValue:
+            data: data
+            name: name
+            description: description
+          imageValue:
+            imageUrl: imageUrl
+            name: name
+            description: description
+            thumbnailUrl: thumbnailUrl
+      properties:
+        timestampMillis:
+          format: int64
+          type: integer
+        x:
+          format: double
+          type: number
+        y:
+          $ref: '#/components/schemas/Y'
+      required:
+      - timestampMillis
+      - x
+      - "y"
+      type: object
+    ComponentStatus:
+      example:
+        name: name
+        status: status
+      properties:
+        name:
+          type: string
+        status:
+          type: string
+      required:
+      - name
+      - status
+      type: object
+    ClientVersionsConfigDTO:
+      example:
+        maxCompatibleVersion: maxCompatibleVersion
+        minRecommendedVersion: minRecommendedVersion
+        minCompatibleVersion: minCompatibleVersion
+      properties:
+        minRecommendedVersion:
+          type: string
+        minCompatibleVersion:
+          type: string
+        maxCompatibleVersion:
+          type: string
+      type: object
+    InvitationStatusEnumDTO:
+      enum:
+      - pending
+      - accepted
+      - rejected
+      - revoked
+      type: string
+    OrganizationPricingPlanDTO:
+      example: {}
+      properties:
+        pricingPlan:
+          $ref: '#/components/schemas/PricingPlanDTO'
+      required:
+      - pricingPlan
+      type: object
+    OrganizationDTO:
+      example:
+        avatarUrl: avatarUrl
+        created: 2000-01-23T04:56:07.000+00:00
+        name: name
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        paymentStatus: paymentStatus
+        info: info
+      properties:
+        name:
+          type: string
+        paymentStatus:
+          type: string
+        avatarUrl:
+          type: string
+        organizationType:
+          $ref: '#/components/schemas/OrganizationTypeDTO'
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        info:
+          type: string
+        id:
+          format: uuid
+          type: string
+        created:
+          format: date-time
+          type: string
+      required:
+      - avatarSource
+      - avatarUrl
+      - created
+      - id
+      - name
+      - organizationType
+      - paymentStatus
+      type: object
+    OutputImageDTO:
+      example:
+        imageUrl: imageUrl
+        name: name
+        description: description
+        thumbnailUrl: thumbnailUrl
+      properties:
+        name:
+          type: string
+        description:
+          type: string
+        imageUrl:
+          type: string
+        thumbnailUrl:
+          type: string
+      type: object
+    ExperimentState:
+      enum:
+      - running
+      - succeeded
+      - failed
+      - aborted
+      type: string
+    BatchChannelValueErrorDTO:
+      example:
+        x: 0.8008281904610115
+        error:
+          code: 6
+          message: message
+        channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        channelId:
+          format: uuid
+          type: string
+        x:
+          format: double
+          type: number
+        error:
+          $ref: '#/components/schemas/Error'
+      required:
+      - channelId
+      - error
+      - x
+      type: object
+    ApiErrorTypeDTO:
+      enum:
+      - LIMIT_OF_PROJECTS_REACHED
+      - LIMIT_OF_STORAGE_IN_PROJECT_REACHED
+      - LIMIT_OF_MEMBERS_IN_ORGANIZATION_REACHED
+      - LIMIT_OF_VALUES_IN_CHANNEL_REACHED
+      type: string
+    LoginActionsListDTO:
+      example:
+        requiredActions:
+        - null
+        - null
+      properties:
+        requiredActions:
+          items:
+            $ref: '#/components/schemas/LoginActionDTO'
+          type: array
+      required:
+      - requiredActions
+      type: object
+    ProjectListDTO:
+      example:
+        entries:
+        - backgroundUrl: backgroundUrl
+          featured: true
+          organizationName: organizationName
+          avatarUrl: avatarUrl
+          timeOfCreation: 2000-01-23T04:56:07.000+00:00
+          description: description
+          version: 0
+          displayClass: displayClass
+          organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          projectKey: projectKey
+          userCount: 6
+          name: name
+          lastActivity: 2000-01-23T04:56:07.000+00:00
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          leaderboardEntryCount: 1
+        - backgroundUrl: backgroundUrl
+          featured: true
+          organizationName: organizationName
+          avatarUrl: avatarUrl
+          timeOfCreation: 2000-01-23T04:56:07.000+00:00
+          description: description
+          version: 0
+          displayClass: displayClass
+          organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          projectKey: projectKey
+          userCount: 6
+          name: name
+          lastActivity: 2000-01-23T04:56:07.000+00:00
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          leaderboardEntryCount: 1
+        matchingItemCount: 5
+        totalItemCount: 5
+      properties:
+        entries:
+          items:
+            $ref: '#/components/schemas/ProjectWithRoleDTO'
+          type: array
+        matchingItemCount:
+          format: int32
+          type: integer
+        totalItemCount:
+          format: int32
+          type: integer
+      required:
+      - entries
+      - matchingItemCount
+      - totalItemCount
+      type: object
+    DiscountDTO:
+      example:
+        amountOffInCents: 5
+        end: 2000-01-23T04:56:07.000+00:00
+        amountOffPercentage: 1
+      properties:
+        amountOffPercentage:
+          format: int64
+          type: integer
+        amountOffInCents:
+          format: int64
+          type: integer
+        end:
+          format: date-time
+          type: string
+      type: object
+    StateTransitions:
+      example:
+        running: 2000-01-23T04:56:07.000+00:00
+        aborted: 2000-01-23T04:56:07.000+00:00
+        failed: 2000-01-23T04:56:07.000+00:00
+        succeeded: 2000-01-23T04:56:07.000+00:00
+      properties:
+        running:
+          format: date-time
+          type: string
+        succeeded:
+          format: date-time
+          type: string
+        failed:
+          format: date-time
+          type: string
+        aborted:
+          format: date-time
+          type: string
+      type: object
+    ChannelType:
+      enum:
+      - numeric
+      - text
+      - image
+      type: string
+    SystemMetricParams:
+      example:
+        unit: unit
+        min: 0.8008281904610115
+        max: 6.027456183070403
+        series:
+        - series
+        - series
+        name: name
+        description: description
+      properties:
+        series:
+          items:
+            type: string
+          type: array
+        name:
+          type: string
+        min:
+          format: double
+          type: number
+        max:
+          format: double
+          type: number
+        unit:
+          type: string
+        description:
+          type: string
+        resourceType:
+          $ref: '#/components/schemas/SystemMetricResourceType'
+      required:
+      - description
+      - name
+      - resourceType
+      - series
+      type: object
+    UserPricingStatusDTO:
+      example:
+        canCreateTeamFree: true
+        anyTeamFree:
+          avatarUrl: avatarUrl
+          created: 2000-01-23T04:56:07.000+00:00
+          name: name
+          id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          paymentStatus: paymentStatus
+          info: info
+      properties:
+        canCreateTeamFree:
+          type: boolean
+        anyTeamFree:
+          $ref: '#/components/schemas/OrganizationWithRoleDTO'
+      required:
+      - canCreateTeamFree
+      type: object
+    ProjectInvitationUpdateDTO:
+      example: {}
+      properties:
+        roleGrant:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+      required:
+      - roleGrant
+      type: object
+    UserProfileLinkDTO:
+      example:
+        url: url
+      properties:
+        linkType:
+          $ref: '#/components/schemas/LinkTypeDTO'
+        url:
+          type: string
+      required:
+      - linkType
+      - url
+      type: object
+    Charts:
+      example:
+        manualCharts:
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          name: name
+          id: id
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          name: name
+          id: id
+        defaultCharts:
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          name: name
+          id: id
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+            channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+          name: name
+          id: id
+      properties:
+        manualCharts:
+          items:
+            $ref: '#/components/schemas/Chart'
+          type: array
+        defaultCharts:
+          items:
+            $ref: '#/components/schemas/Chart'
+          type: array
+      required:
+      - defaultCharts
+      - manualCharts
+      type: object
+    SessionDTO:
+      example:
+        sessionId: sessionId
+      properties:
+        sessionId:
+          type: string
+      required:
+      - sessionId
+      type: object
+    AvatarSourceEnum:
+      enum:
+      - default
+      - thirdParty
+      - user
+      - inherited
+      type: string
+    OrganizationCreationParamsDTO:
+      example:
+        discountCode:
+          code: code
+        name: name
+      properties:
+        name:
+          type: string
+        organizationType:
+          $ref: '#/components/schemas/OrganizationTypeDTO'
+        discountCode:
+          $ref: '#/components/schemas/DiscountCodeDTO'
+      required:
+      - name
+      - organizationType
+      type: object
+    UserProfileLinksDTO:
+      example:
+        github: github
+        kaggle: kaggle
+        twitter: twitter
+        linkedin: linkedin
+        others:
+        - others
+        - others
+      properties:
+        github:
+          type: string
+        linkedin:
+          type: string
+        others:
+          items:
+            type: string
+          type: array
+        kaggle:
+          type: string
+        twitter:
+          type: string
+      required:
+      - others
+      type: object
+    SeriesType:
+      enum:
+      - line
+      - dot
+      type: string
+    ComponentVersion:
+      example:
+        version: version
+      properties:
+        name:
+          $ref: '#/components/schemas/NameEnum'
+        version:
+          type: string
+      required:
+      - name
+      - version
+      type: object
+    PublicUserProfileDTO:
+      example:
+        firstName: firstName
+        lastName: lastName
+        shortInfo: shortInfo
+        avatarUrl: avatarUrl
+        links:
+          github: github
+          kaggle: kaggle
+          twitter: twitter
+          linkedin: linkedin
+          others:
+          - others
+          - others
+        biography: biography
+        email: email
+        username: username
+      properties:
+        biography:
+          type: string
+        email:
+          type: string
+        avatarSource:
+          $ref: '#/components/schemas/AvatarSourceEnum'
+        firstName:
+          type: string
+        shortInfo:
+          type: string
+        username:
+          type: string
+        avatarUrl:
+          type: string
+        lastName:
+          type: string
+        links:
+          $ref: '#/components/schemas/UserProfileLinksDTO'
+      required:
+      - avatarSource
+      - avatarUrl
+      - biography
+      - links
+      - shortInfo
+      - username
+      type: object
+    OrganizationLimitsDTO:
+      example:
+        membersLimit: 5
+        projectsLimit: 1
+        storageSize: 0
+        privateProjectMembers: 6
+      properties:
+        storageSize:
+          format: int64
+          type: integer
+        privateProjectMembers:
+          format: int64
+          type: integer
+        projectsLimit:
+          format: int64
+          type: integer
+        membersLimit:
+          format: int64
+          type: integer
+      type: object
+    LoginActionDTO:
+      enum:
+      - SET_USERNAME
+      - SURVEY
+      type: string
+    AchievementsDTO:
+      example:
+        earned:
+        - null
+        - null
+      properties:
+        earned:
+          items:
+            $ref: '#/components/schemas/AchievementTypeDTO'
+          type: array
+      required:
+      - earned
+      type: object
+    ProjectUpdateDTO:
+      example:
+        name: name
+        description: description
+        displayClass: displayClass
+      properties:
+        codeAccess:
+          $ref: '#/components/schemas/ProjectCodeAccessDTO'
+        name:
+          type: string
+        description:
+          type: string
+        visibility:
+          $ref: '#/components/schemas/ProjectVisibilityDTO'
+        displayClass:
+          type: string
+      type: object
+    NewOrganizationInvitationDTO:
+      example:
+        organizationIdentifier: organizationIdentifier
+        addToAllProjects: true
+        invitee: invitee
+      properties:
+        roleGrant:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+        addToAllProjects:
+          type: boolean
+        organizationIdentifier:
+          type: string
+        invitee:
+          type: string
+        invitationType:
+          $ref: '#/components/schemas/InvitationTypeEnumDTO'
+      required:
+      - addToAllProjects
+      - invitationType
+      - invitee
+      - organizationIdentifier
+      - roleGrant
+      type: object
+    UserListDTO:
+      example:
+        entries:
+        - lastName: lastName
+          firstName: firstName
+          avatarUrl: avatarUrl
+          username: username
+        - lastName: lastName
+          firstName: firstName
+          avatarUrl: avatarUrl
+          username: username
+        matchingItemCount: 0
+        totalItemCount: 6
+      properties:
+        entries:
+          items:
+            $ref: '#/components/schemas/UserListItemDTO'
+          type: array
+        matchingItemCount:
+          format: int32
+          type: integer
+        totalItemCount:
+          format: int32
+          type: integer
+      required:
+      - entries
+      - matchingItemCount
+      - totalItemCount
+      type: object
+    ExperimentsAttributesNamesDTO:
+      example:
+        propertiesNames:
+        - propertiesNames
+        - propertiesNames
+        textChannelsNames:
+        - textChannelsNames
+        - textChannelsNames
+        textParametersNames:
+        - textParametersNames
+        - textParametersNames
+        numericParametersNames:
+        - numericParametersNames
+        - numericParametersNames
+        numericChannelsNames:
+        - numericChannelsNames
+        - numericChannelsNames
+      properties:
+        textParametersNames:
+          items:
+            type: string
+          type: array
+        propertiesNames:
+          items:
+            type: string
+          type: array
+        numericChannelsNames:
+          items:
+            type: string
+          type: array
+        numericParametersNames:
+          items:
+            type: string
+          type: array
+        textChannelsNames:
+          items:
+            type: string
+          type: array
+      required:
+      - numericChannelsNames
+      - numericParametersNames
+      - propertiesNames
+      - textChannelsNames
+      - textParametersNames
+      type: object
+    LimitedChannelValuesDTO:
+      example:
+        values:
+        - timestampMillis: 0
+          x: 6.027456183070403
+          y:
+            textValue: textValue
+            numericValue: 1.4658129805029452
+            inputImageValue:
+              data: data
+              name: name
+              description: description
+            imageValue:
+              imageUrl: imageUrl
+              name: name
+              description: description
+              thumbnailUrl: thumbnailUrl
+        - timestampMillis: 0
+          x: 6.027456183070403
+          y:
+            textValue: textValue
+            numericValue: 1.4658129805029452
+            inputImageValue:
+              data: data
+              name: name
+              description: description
+            imageValue:
+              imageUrl: imageUrl
+              name: name
+              description: description
+              thumbnailUrl: thumbnailUrl
+        channelId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        totalItemCount: 1
+      properties:
+        channelId:
+          format: uuid
+          type: string
+        values:
+          items:
+            $ref: '#/components/schemas/PointValueDTO'
+          type: array
+        totalItemCount:
+          format: int32
+          type: integer
+      required:
+      - channelId
+      - totalItemCount
+      - values
+      type: object
+    NewOrganizationMemberDTO:
+      example:
+        userId: userId
+      properties:
+        userId:
+          type: string
+        role:
+          $ref: '#/components/schemas/OrganizationRoleDTO'
+      required:
+      - role
+      - userId
+      type: object
+    DownloadPrepareRequestDTO:
+      example:
+        downloadUrl: downloadUrl
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+      properties:
+        id:
+          format: uuid
+          type: string
+        downloadUrl:
+          type: string
+      required:
+      - id
+      type: object
+    UserProfileUpdateDTO:
+      example:
+        hasLoggedToCli: true
+        lastName: lastName
+        firstName: firstName
+        shortInfo: shortInfo
+        biography: biography
+      properties:
+        biography:
+          type: string
+        hasLoggedToCli:
+          type: boolean
+        lastName:
+          type: string
+        firstName:
+          type: string
+        shortInfo:
+          type: string
+      type: object
+    SubscriptionCancelInfoDTO:
+      example:
+        reasons:
+        - reasons
+        - reasons
+        description: description
+      properties:
+        reasons:
+          items:
+            type: string
+          type: array
+        description:
+          type: string
+      required:
+      - reasons
+      type: object
+    NewProjectMemberDTO:
+      example:
+        userId: userId
+      properties:
+        userId:
+          type: string
+        role:
+          $ref: '#/components/schemas/ProjectRoleDTO'
+      required:
+      - role
+      - userId
+      type: object
+    QuestionnaireDTO:
+      example:
+        answers: answers
+      properties:
+        answers:
+          type: string
+      required:
+      - answers
+      type: object
+    NewReservationDTO:
+      example:
+        name: name
+      properties:
+        name:
+          type: string
+      required:
+      - name
+      type: object
+    ChartSetParams:
+      example:
+        defaultChartsEnabled: true
+        charts:
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+          name: name
+        - series:
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+          - aliasId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+            channelName: channelName
+            label: label
+          name: name
+        isEditable: true
+        name: name
+      properties:
+        name:
+          type: string
+        charts:
+          items:
+            $ref: '#/components/schemas/ChartDefinition'
+          type: array
+        defaultChartsEnabled:
+          type: boolean
+        isEditable:
+          type: boolean
+      required:
+      - name
+      type: object
+    NeptuneOauthToken:
+      example:
+        accessToken: accessToken
+        refreshToken: refreshToken
+        username: username
+      properties:
+        accessToken:
+          type: string
+        refreshToken:
+          type: string
+        username:
+          type: string
+      required:
+      - accessToken
+      - refreshToken
+      - username
+      type: object
+    InputImageDTO:
+      example:
+        data: data
+        name: name
+        description: description
+      properties:
+        name:
+          type: string
+        description:
+          type: string
+        data:
+          type: string
+      type: object
+    ProjectMetadataDTO:
+      example:
+        organizationId: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        projectKey: projectKey
+        organizationName: organizationName
+        timeOfCreation: 2000-01-23T04:56:07.000+00:00
+        name: name
+        id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
+        version: 0
+      properties:
+        name:
+          type: string
+        organizationType:
+          $ref: '#/components/schemas/OrganizationTypeDTO'
+        timeOfCreation:
+          format: date-time
+          type: string
+        organizationName:
+          type: string
+        version:
+          format: int32
+          type: integer
+        id:
+          format: uuid
+          type: string
+        projectKey:
+          type: string
+        organizationId:
+          format: uuid
+          type: string
+      required:
+      - id
+      - name
+      - organizationId
+      - organizationName
+      - organizationType
+      - projectKey
+      - timeOfCreation
+      - version
+      type: object
+    Status:
+      type: object
+    Link:
+      example:
+        url: url
+      properties:
+        url:
+          type: string
+      required:
+      - url
+      type: object
+  securitySchemes:
+    oauth2:
+      flows:
+        authorizationCode:
+          scopes: {}
+      type: oauth2
diff --git a/tests/ApproxEq.hs b/tests/ApproxEq.hs
new file mode 100644
--- /dev/null
+++ b/tests/ApproxEq.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeOperators #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+module ApproxEq where
+
+import Data.Text (Text)
+import Data.Time.Clock
+import Test.QuickCheck
+import GHC.Generics as G
+
+(==~)
+  :: (ApproxEq a, Show a)
+  => a -> a -> Property
+a ==~ b = counterexample (show a ++ " !=~ " ++ show b) (a =~ b)
+
+class GApproxEq f  where
+  gApproxEq :: f a -> f a -> Bool
+
+instance GApproxEq U1 where
+  gApproxEq U1 U1 = True
+
+instance (GApproxEq a, GApproxEq b) =>
+         GApproxEq (a :+: b) where
+  gApproxEq (L1 a) (L1 b) = gApproxEq a b
+  gApproxEq (R1 a) (R1 b) = gApproxEq a b
+  gApproxEq _ _ = False
+
+instance (GApproxEq a, GApproxEq b) =>
+         GApproxEq (a :*: b) where
+  gApproxEq (a1 :*: b1) (a2 :*: b2) = gApproxEq a1 a2 && gApproxEq b1 b2
+
+instance (ApproxEq a) =>
+         GApproxEq (K1 i a) where
+  gApproxEq (K1 a) (K1 b) = a =~ b
+
+instance (GApproxEq f) =>
+         GApproxEq (M1 i t f) where
+  gApproxEq (M1 a) (M1 b) = gApproxEq a b
+
+class ApproxEq a  where
+  (=~) :: a -> a -> Bool
+  default (=~) :: (Generic a, GApproxEq (Rep a)) => a -> a -> Bool
+  a =~ b = gApproxEq (G.from a) (G.from b)
+
+instance ApproxEq Text where
+  (=~) = (==)
+
+instance ApproxEq Char where
+  (=~) = (==)
+
+instance ApproxEq Bool where
+  (=~) = (==)
+
+instance ApproxEq Int where
+  (=~) = (==)
+
+instance ApproxEq Double where
+  (=~) = (==)
+
+instance ApproxEq a =>
+         ApproxEq (Maybe a)
+
+instance ApproxEq UTCTime where
+  (=~) = (==)
+
+instance ApproxEq a =>
+         ApproxEq [a] where
+  as =~ bs = and (zipWith (=~) as bs)
+
+instance (ApproxEq l, ApproxEq r) =>
+         ApproxEq (Either l r) where
+  Left a =~ Left b = a =~ b
+  Right a =~ Right b = a =~ b
+  _ =~ _ = False
+
+instance (ApproxEq l, ApproxEq r) =>
+         ApproxEq (l, r) where
+  (=~) (l1, r1) (l2, r2) = l1 =~ l2 && r1 =~ r2
diff --git a/tests/Instances.hs b/tests/Instances.hs
new file mode 100644
--- /dev/null
+++ b/tests/Instances.hs
@@ -0,0 +1,1304 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports -fno-warn-unused-matches #-}
+
+module Instances where
+
+import NeptuneBackend.Model
+import NeptuneBackend.Core
+
+import qualified Data.Aeson as A
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.HashMap.Strict as HM
+import qualified Data.Set as Set
+import qualified Data.Text as T
+import qualified Data.Time as TI
+import qualified Data.Vector as V
+
+import Control.Monad
+import Data.Char (isSpace)
+import Data.List (sort)
+import Test.QuickCheck
+
+import ApproxEq
+
+instance Arbitrary T.Text where
+  arbitrary = T.pack <$> arbitrary
+
+instance Arbitrary TI.Day where
+  arbitrary = TI.ModifiedJulianDay . (2000 +) <$> arbitrary
+  shrink = (TI.ModifiedJulianDay <$>) . shrink . TI.toModifiedJulianDay
+
+instance Arbitrary TI.UTCTime where
+  arbitrary =
+    TI.UTCTime <$> arbitrary <*> (TI.secondsToDiffTime <$> choose (0, 86401))
+
+instance Arbitrary BL.ByteString where
+    arbitrary = BL.pack <$> arbitrary
+    shrink xs = BL.pack <$> shrink (BL.unpack xs)
+
+instance Arbitrary ByteArray where
+    arbitrary = ByteArray <$> arbitrary
+    shrink (ByteArray xs) = ByteArray <$> shrink xs
+
+instance Arbitrary Binary where
+    arbitrary = Binary <$> arbitrary
+    shrink (Binary xs) = Binary <$> shrink xs
+
+instance Arbitrary DateTime where
+    arbitrary = DateTime <$> arbitrary
+    shrink (DateTime xs) = DateTime <$> shrink xs
+
+instance Arbitrary Date where
+    arbitrary = Date <$> arbitrary
+    shrink (Date xs) = Date <$> shrink xs
+
+-- | A naive Arbitrary instance for A.Value:
+instance Arbitrary A.Value where
+  arbitrary = frequency [(3, simpleTypes), (1, arrayTypes), (1, objectTypes)]
+    where
+      simpleTypes :: Gen A.Value
+      simpleTypes =
+        frequency
+          [ (1, return A.Null)
+          , (2, liftM A.Bool (arbitrary :: Gen Bool))
+          , (2, liftM (A.Number . fromIntegral) (arbitrary :: Gen Int))
+          , (2, liftM (A.String . T.pack) (arbitrary :: Gen String))
+          ]
+      mapF (k, v) = (T.pack k, v)
+      simpleAndArrays = frequency [(1, sized sizedArray), (4, simpleTypes)]
+      arrayTypes = sized sizedArray
+      objectTypes = sized sizedObject
+      sizedArray n = liftM (A.Array . V.fromList) $ replicateM n simpleTypes
+      sizedObject n =
+        liftM (A.object . map mapF) $
+        replicateM n $ (,) <$> (arbitrary :: Gen String) <*> simpleAndArrays
+    
+-- | Checks if a given list has no duplicates in _O(n log n)_.
+hasNoDups
+  :: (Ord a)
+  => [a] -> Bool
+hasNoDups = go Set.empty
+  where
+    go _ [] = True
+    go s (x:xs)
+      | s' <- Set.insert x s
+      , Set.size s' > Set.size s = go s' xs
+      | otherwise = False
+
+instance ApproxEq TI.Day where
+  (=~) = (==)
+    
+arbitraryReduced :: Arbitrary a => Int -> Gen a
+arbitraryReduced n = resize (n `div` 2) arbitrary
+
+arbitraryReducedMaybe :: Arbitrary a => Int -> Gen (Maybe a)
+arbitraryReducedMaybe 0 = elements [Nothing]
+arbitraryReducedMaybe n = arbitraryReduced n
+
+arbitraryReducedMaybeValue :: Int -> Gen (Maybe A.Value)
+arbitraryReducedMaybeValue 0 = elements [Nothing]
+arbitraryReducedMaybeValue n = do
+  generated <- arbitraryReduced n
+  if generated == Just A.Null
+    then return Nothing
+    else return generated
+
+-- * Models
+ 
+instance Arbitrary AchievementsDTO where
+  arbitrary = sized genAchievementsDTO
+
+genAchievementsDTO :: Int -> Gen AchievementsDTO
+genAchievementsDTO n =
+  AchievementsDTO
+    <$> arbitraryReduced n -- achievementsDTOEarned :: [AchievementTypeDTO]
+  
+instance Arbitrary AuthorizedUserDTO where
+  arbitrary = sized genAuthorizedUserDTO
+
+genAuthorizedUserDTO :: Int -> Gen AuthorizedUserDTO
+genAuthorizedUserDTO n =
+  AuthorizedUserDTO
+    <$> arbitrary -- authorizedUserDTOUsername :: Text
+  
+instance Arbitrary BatchChannelValueErrorDTO where
+  arbitrary = sized genBatchChannelValueErrorDTO
+
+genBatchChannelValueErrorDTO :: Int -> Gen BatchChannelValueErrorDTO
+genBatchChannelValueErrorDTO n =
+  BatchChannelValueErrorDTO
+    <$> arbitrary -- batchChannelValueErrorDTOChannelId :: Text
+    <*> arbitrary -- batchChannelValueErrorDTOX :: Double
+    <*> arbitraryReduced n -- batchChannelValueErrorDTOError :: Error
+  
+instance Arbitrary BatchExperimentUpdateResult where
+  arbitrary = sized genBatchExperimentUpdateResult
+
+genBatchExperimentUpdateResult :: Int -> Gen BatchExperimentUpdateResult
+genBatchExperimentUpdateResult n =
+  BatchExperimentUpdateResult
+    <$> arbitrary -- batchExperimentUpdateResultExperimentId :: Text
+    <*> arbitraryReducedMaybe n -- batchExperimentUpdateResultError :: Maybe Error
+  
+instance Arbitrary Channel where
+  arbitrary = sized genChannel
+
+genChannel :: Int -> Gen Channel
+genChannel n =
+  Channel
+    <$> arbitrary -- channelId :: Text
+    <*> arbitrary -- channelName :: Text
+    <*> arbitraryReduced n -- channelChannelType :: ChannelType
+    <*> arbitraryReducedMaybe n -- channelLastX :: Maybe Double
+  
+instance Arbitrary ChannelDTO where
+  arbitrary = sized genChannelDTO
+
+genChannelDTO :: Int -> Gen ChannelDTO
+genChannelDTO n =
+  ChannelDTO
+    <$> arbitrary -- channelDTOId :: Text
+    <*> arbitrary -- channelDTOName :: Text
+    <*> arbitraryReduced n -- channelDTOChannelType :: ChannelTypeEnum
+    <*> arbitraryReducedMaybe n -- channelDTOLastX :: Maybe Double
+  
+instance Arbitrary ChannelParams where
+  arbitrary = sized genChannelParams
+
+genChannelParams :: Int -> Gen ChannelParams
+genChannelParams n =
+  ChannelParams
+    <$> arbitrary -- channelParamsName :: Text
+    <*> arbitraryReduced n -- channelParamsChannelType :: ChannelTypeEnum
+  
+instance Arbitrary ChannelWithValue where
+  arbitrary = sized genChannelWithValue
+
+genChannelWithValue :: Int -> Gen ChannelWithValue
+genChannelWithValue n =
+  ChannelWithValue
+    <$> arbitrary -- channelWithValueX :: Double
+    <*> arbitrary -- channelWithValueY :: Text
+    <*> arbitraryReduced n -- channelWithValueChannelType :: ChannelType
+    <*> arbitrary -- channelWithValueChannelName :: Text
+    <*> arbitrary -- channelWithValueChannelId :: Text
+  
+instance Arbitrary ChannelWithValueDTO where
+  arbitrary = sized genChannelWithValueDTO
+
+genChannelWithValueDTO :: Int -> Gen ChannelWithValueDTO
+genChannelWithValueDTO n =
+  ChannelWithValueDTO
+    <$> arbitrary -- channelWithValueDTOX :: Double
+    <*> arbitrary -- channelWithValueDTOY :: Text
+    <*> arbitraryReduced n -- channelWithValueDTOChannelType :: ChannelTypeEnum
+    <*> arbitrary -- channelWithValueDTOChannelName :: Text
+    <*> arbitrary -- channelWithValueDTOChannelId :: Text
+  
+instance Arbitrary Chart where
+  arbitrary = sized genChart
+
+genChart :: Int -> Gen Chart
+genChart n =
+  Chart
+    <$> arbitrary -- chartId :: Text
+    <*> arbitrary -- chartName :: Text
+    <*> arbitraryReduced n -- chartSeries :: [Series]
+  
+instance Arbitrary ChartDefinition where
+  arbitrary = sized genChartDefinition
+
+genChartDefinition :: Int -> Gen ChartDefinition
+genChartDefinition n =
+  ChartDefinition
+    <$> arbitrary -- chartDefinitionName :: Text
+    <*> arbitraryReduced n -- chartDefinitionSeries :: [SeriesDefinition]
+  
+instance Arbitrary ChartSet where
+  arbitrary = sized genChartSet
+
+genChartSet :: Int -> Gen ChartSet
+genChartSet n =
+  ChartSet
+    <$> arbitraryReducedMaybe n -- chartSetIsEditable :: Maybe Bool
+    <*> arbitraryReducedMaybe n -- chartSetDefaultChartsEnabled :: Maybe Bool
+    <*> arbitrary -- chartSetProjectId :: Text
+    <*> arbitrary -- chartSetId :: Text
+    <*> arbitrary -- chartSetName :: Text
+    <*> arbitraryReducedMaybe n -- chartSetCharts :: Maybe [Chart]
+  
+instance Arbitrary ChartSetParams where
+  arbitrary = sized genChartSetParams
+
+genChartSetParams :: Int -> Gen ChartSetParams
+genChartSetParams n =
+  ChartSetParams
+    <$> arbitrary -- chartSetParamsName :: Text
+    <*> arbitraryReducedMaybe n -- chartSetParamsCharts :: Maybe [ChartDefinition]
+    <*> arbitraryReducedMaybe n -- chartSetParamsDefaultChartsEnabled :: Maybe Bool
+    <*> arbitraryReducedMaybe n -- chartSetParamsIsEditable :: Maybe Bool
+  
+instance Arbitrary Charts where
+  arbitrary = sized genCharts
+
+genCharts :: Int -> Gen Charts
+genCharts n =
+  Charts
+    <$> arbitraryReduced n -- chartsManualCharts :: [Chart]
+    <*> arbitraryReduced n -- chartsDefaultCharts :: [Chart]
+  
+instance Arbitrary ClientConfig where
+  arbitrary = sized genClientConfig
+
+genClientConfig :: Int -> Gen ClientConfig
+genClientConfig n =
+  ClientConfig
+    <$> arbitrary -- clientConfigApiUrl :: Text
+    <*> arbitrary -- clientConfigApplicationUrl :: Text
+    <*> arbitraryReduced n -- clientConfigPyLibVersions :: ClientVersionsConfigDTO
+  
+instance Arbitrary ClientVersionsConfigDTO where
+  arbitrary = sized genClientVersionsConfigDTO
+
+genClientVersionsConfigDTO :: Int -> Gen ClientVersionsConfigDTO
+genClientVersionsConfigDTO n =
+  ClientVersionsConfigDTO
+    <$> arbitraryReducedMaybe n -- clientVersionsConfigDTOMinRecommendedVersion :: Maybe Text
+    <*> arbitraryReducedMaybe n -- clientVersionsConfigDTOMinCompatibleVersion :: Maybe Text
+    <*> arbitraryReducedMaybe n -- clientVersionsConfigDTOMaxCompatibleVersion :: Maybe Text
+  
+instance Arbitrary CompletedExperimentParams where
+  arbitrary = sized genCompletedExperimentParams
+
+genCompletedExperimentParams :: Int -> Gen CompletedExperimentParams
+genCompletedExperimentParams n =
+  CompletedExperimentParams
+    <$> arbitraryReduced n -- completedExperimentParamsState :: ExperimentState
+    <*> arbitrary -- completedExperimentParamsTraceback :: Text
+  
+instance Arbitrary ComponentStatus where
+  arbitrary = sized genComponentStatus
+
+genComponentStatus :: Int -> Gen ComponentStatus
+genComponentStatus n =
+  ComponentStatus
+    <$> arbitrary -- componentStatusName :: Text
+    <*> arbitrary -- componentStatusStatus :: Text
+  
+instance Arbitrary ComponentVersion where
+  arbitrary = sized genComponentVersion
+
+genComponentVersion :: Int -> Gen ComponentVersion
+genComponentVersion n =
+  ComponentVersion
+    <$> arbitraryReduced n -- componentVersionName :: NameEnum
+    <*> arbitrary -- componentVersionVersion :: Text
+  
+instance Arbitrary ConfigInfo where
+  arbitrary = sized genConfigInfo
+
+genConfigInfo :: Int -> Gen ConfigInfo
+genConfigInfo n =
+  ConfigInfo
+    <$> arbitrary -- configInfoMaxFormContentSize :: Int
+  
+instance Arbitrary CreateSessionParamsDTO where
+  arbitrary = sized genCreateSessionParamsDTO
+
+genCreateSessionParamsDTO :: Int -> Gen CreateSessionParamsDTO
+genCreateSessionParamsDTO n =
+  CreateSessionParamsDTO
+    <$> arbitrary -- createSessionParamsDTOSuccessUrl :: Text
+    <*> arbitrary -- createSessionParamsDTOFailureUrl :: Text
+  
+instance Arbitrary CustomerDTO where
+  arbitrary = sized genCustomerDTO
+
+genCustomerDTO :: Int -> Gen CustomerDTO
+genCustomerDTO n =
+  CustomerDTO
+    <$> arbitraryReducedMaybe n -- customerDTONumberOfUsers :: Maybe Integer
+    <*> arbitrary -- customerDTOUserPriceInCents :: Integer
+    <*> arbitraryReduced n -- customerDTOPricingPlan :: PricingPlanDTO
+    <*> arbitraryReducedMaybe n -- customerDTODiscount :: Maybe DiscountDTO
+  
+instance Arbitrary DiscountCodeDTO where
+  arbitrary = sized genDiscountCodeDTO
+
+genDiscountCodeDTO :: Int -> Gen DiscountCodeDTO
+genDiscountCodeDTO n =
+  DiscountCodeDTO
+    <$> arbitrary -- discountCodeDTOCode :: Text
+  
+instance Arbitrary DiscountDTO where
+  arbitrary = sized genDiscountDTO
+
+genDiscountDTO :: Int -> Gen DiscountDTO
+genDiscountDTO n =
+  DiscountDTO
+    <$> arbitraryReducedMaybe n -- discountDTOAmountOffPercentage :: Maybe Integer
+    <*> arbitraryReducedMaybe n -- discountDTOAmountOffInCents :: Maybe Integer
+    <*> arbitraryReducedMaybe n -- discountDTOEnd :: Maybe DateTime
+  
+instance Arbitrary DownloadPrepareRequestDTO where
+  arbitrary = sized genDownloadPrepareRequestDTO
+
+genDownloadPrepareRequestDTO :: Int -> Gen DownloadPrepareRequestDTO
+genDownloadPrepareRequestDTO n =
+  DownloadPrepareRequestDTO
+    <$> arbitrary -- downloadPrepareRequestDTOId :: Text
+    <*> arbitraryReducedMaybe n -- downloadPrepareRequestDTODownloadUrl :: Maybe Text
+  
+instance Arbitrary EditExperimentParams where
+  arbitrary = sized genEditExperimentParams
+
+genEditExperimentParams :: Int -> Gen EditExperimentParams
+genEditExperimentParams n =
+  EditExperimentParams
+    <$> arbitraryReducedMaybe n -- editExperimentParamsName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- editExperimentParamsDescription :: Maybe Text
+    <*> arbitraryReducedMaybe n -- editExperimentParamsTags :: Maybe [Text]
+    <*> arbitraryReducedMaybe n -- editExperimentParamsProperties :: Maybe [KeyValueProperty]
+  
+instance Arbitrary Error where
+  arbitrary = sized genError
+
+genError :: Int -> Gen Error
+genError n =
+  Error
+    <$> arbitrary -- errorCode :: Int
+    <*> arbitrary -- errorMessage :: Text
+    <*> arbitraryReducedMaybe n -- errorType :: Maybe ApiErrorTypeDTO
+  
+instance Arbitrary Experiment where
+  arbitrary = sized genExperiment
+
+genExperiment :: Int -> Gen Experiment
+genExperiment n =
+  Experiment
+    <$> arbitraryReduced n -- experimentChannels :: [Channel]
+    <*> arbitraryReduced n -- experimentState :: ExperimentState
+    <*> arbitraryReducedMaybe n -- experimentTimeOfCompletion :: Maybe DateTime
+    <*> arbitraryReducedMaybe n -- experimentCheckpointId :: Maybe Text
+    <*> arbitraryReduced n -- experimentPaths :: ExperimentPaths
+    <*> arbitrary -- experimentResponding :: Bool
+    <*> arbitrary -- experimentOrganizationId :: Text
+    <*> arbitraryReduced n -- experimentStateTransitions :: StateTransitions
+    <*> arbitraryReduced n -- experimentParameters :: [Parameter]
+    <*> arbitraryReduced n -- experimentChannelsLastValues :: [ChannelWithValue]
+    <*> arbitrary -- experimentStorageSize :: Integer
+    <*> arbitrary -- experimentName :: Text
+    <*> arbitraryReducedMaybe n -- experimentNotebookId :: Maybe Text
+    <*> arbitrary -- experimentProjectName :: Text
+    <*> arbitraryReducedMaybe n -- experimentHostname :: Maybe Text
+    <*> arbitrary -- experimentTrashed :: Bool
+    <*> arbitrary -- experimentDescription :: Text
+    <*> arbitrary -- experimentTags :: [Text]
+    <*> arbitrary -- experimentChannelsSize :: Integer
+    <*> arbitraryReduced n -- experimentTimeOfCreation :: DateTime
+    <*> arbitrary -- experimentProjectId :: Text
+    <*> arbitrary -- experimentOrganizationName :: Text
+    <*> arbitraryReducedMaybe n -- experimentIsCodeAccessible :: Maybe Bool
+    <*> arbitraryReducedMaybe n -- experimentTraceback :: Maybe Text
+    <*> arbitraryReducedMaybe n -- experimentEntrypoint :: Maybe Text
+    <*> arbitrary -- experimentRunningTime :: Integer
+    <*> arbitrary -- experimentId :: Text
+    <*> arbitraryReduced n -- experimentInputs :: [InputMetadata]
+    <*> arbitraryReduced n -- experimentProperties :: [KeyValueProperty]
+    <*> arbitrary -- experimentShortId :: Text
+    <*> arbitraryReduced n -- experimentComponentsVersions :: [ComponentVersion]
+    <*> arbitrary -- experimentOwner :: Text
+  
+instance Arbitrary ExperimentCreationParams where
+  arbitrary = sized genExperimentCreationParams
+
+genExperimentCreationParams :: Int -> Gen ExperimentCreationParams
+genExperimentCreationParams n =
+  ExperimentCreationParams
+    <$> arbitraryReducedMaybe n -- experimentCreationParamsMonitored :: Maybe Bool
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsHostname :: Maybe Text
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsCheckpointId :: Maybe Text
+    <*> arbitrary -- experimentCreationParamsProjectId :: Text
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsGitInfo :: Maybe GitInfoDTO
+    <*> arbitraryReduced n -- experimentCreationParamsProperties :: [KeyValueProperty]
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsConfigPath :: Maybe Text
+    <*> arbitrary -- experimentCreationParamsExecArgsTemplate :: Text
+    <*> arbitraryReduced n -- experimentCreationParamsParameters :: [Parameter]
+    <*> arbitrary -- experimentCreationParamsEnqueueCommand :: Text
+    <*> arbitrary -- experimentCreationParamsName :: Text
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsNotebookId :: Maybe Text
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsDescription :: Maybe Text
+    <*> arbitrary -- experimentCreationParamsTags :: [Text]
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsAbortable :: Maybe Bool
+    <*> arbitraryReducedMaybe n -- experimentCreationParamsEntrypoint :: Maybe Text
+  
+instance Arbitrary ExperimentPaths where
+  arbitrary = sized genExperimentPaths
+
+genExperimentPaths :: Int -> Gen ExperimentPaths
+genExperimentPaths n =
+  ExperimentPaths
+    <$> arbitrary -- experimentPathsOutput :: Text
+    <*> arbitrary -- experimentPathsSource :: Text
+  
+instance Arbitrary ExperimentsAttributesNamesDTO where
+  arbitrary = sized genExperimentsAttributesNamesDTO
+
+genExperimentsAttributesNamesDTO :: Int -> Gen ExperimentsAttributesNamesDTO
+genExperimentsAttributesNamesDTO n =
+  ExperimentsAttributesNamesDTO
+    <$> arbitrary -- experimentsAttributesNamesDTOTextParametersNames :: [Text]
+    <*> arbitrary -- experimentsAttributesNamesDTOPropertiesNames :: [Text]
+    <*> arbitrary -- experimentsAttributesNamesDTONumericChannelsNames :: [Text]
+    <*> arbitrary -- experimentsAttributesNamesDTONumericParametersNames :: [Text]
+    <*> arbitrary -- experimentsAttributesNamesDTOTextChannelsNames :: [Text]
+  
+instance Arbitrary File where
+  arbitrary = sized genFile
+
+genFile :: Int -> Gen File
+genFile n =
+  File
+    <$> arbitrary -- filePath :: Text
+  
+instance Arbitrary GitCommitDTO where
+  arbitrary = sized genGitCommitDTO
+
+genGitCommitDTO :: Int -> Gen GitCommitDTO
+genGitCommitDTO n =
+  GitCommitDTO
+    <$> arbitrary -- gitCommitDTOAuthorEmail :: Text
+    <*> arbitrary -- gitCommitDTOCommitId :: Text
+    <*> arbitrary -- gitCommitDTOMessage :: Text
+    <*> arbitraryReduced n -- gitCommitDTOCommitDate :: DateTime
+    <*> arbitrary -- gitCommitDTOAuthorName :: Text
+  
+instance Arbitrary GitInfoDTO where
+  arbitrary = sized genGitInfoDTO
+
+genGitInfoDTO :: Int -> Gen GitInfoDTO
+genGitInfoDTO n =
+  GitInfoDTO
+    <$> arbitraryReducedMaybe n -- gitInfoDTOCurrentBranch :: Maybe Text
+    <*> arbitraryReducedMaybe n -- gitInfoDTORemotes :: Maybe [Text]
+    <*> arbitraryReduced n -- gitInfoDTOCommit :: GitCommitDTO
+    <*> arbitrary -- gitInfoDTORepositoryDirty :: Bool
+  
+instance Arbitrary GlobalConfiguration where
+  arbitrary = sized genGlobalConfiguration
+
+genGlobalConfiguration :: Int -> Gen GlobalConfiguration
+genGlobalConfiguration n =
+  GlobalConfiguration
+    <$> arbitraryReduced n -- globalConfigurationLicenseExpiration :: DateTime
+  
+instance Arbitrary InputChannelValues where
+  arbitrary = sized genInputChannelValues
+
+genInputChannelValues :: Int -> Gen InputChannelValues
+genInputChannelValues n =
+  InputChannelValues
+    <$> arbitrary -- inputChannelValuesChannelId :: Text
+    <*> arbitraryReduced n -- inputChannelValuesValues :: [Point]
+  
+instance Arbitrary InputImageDTO where
+  arbitrary = sized genInputImageDTO
+
+genInputImageDTO :: Int -> Gen InputImageDTO
+genInputImageDTO n =
+  InputImageDTO
+    <$> arbitraryReducedMaybe n -- inputImageDTOName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- inputImageDTODescription :: Maybe Text
+    <*> arbitraryReducedMaybe n -- inputImageDTOData :: Maybe Text
+  
+instance Arbitrary InputMetadata where
+  arbitrary = sized genInputMetadata
+
+genInputMetadata :: Int -> Gen InputMetadata
+genInputMetadata n =
+  InputMetadata
+    <$> arbitrary -- inputMetadataSource :: Text
+    <*> arbitrary -- inputMetadataDestination :: Text
+    <*> arbitrary -- inputMetadataSize :: Integer
+  
+instance Arbitrary KeyValueProperty where
+  arbitrary = sized genKeyValueProperty
+
+genKeyValueProperty :: Int -> Gen KeyValueProperty
+genKeyValueProperty n =
+  KeyValueProperty
+    <$> arbitrary -- keyValuePropertyKey :: Text
+    <*> arbitrary -- keyValuePropertyValue :: Text
+  
+instance Arbitrary LimitedChannelValuesDTO where
+  arbitrary = sized genLimitedChannelValuesDTO
+
+genLimitedChannelValuesDTO :: Int -> Gen LimitedChannelValuesDTO
+genLimitedChannelValuesDTO n =
+  LimitedChannelValuesDTO
+    <$> arbitrary -- limitedChannelValuesDTOChannelId :: Text
+    <*> arbitraryReduced n -- limitedChannelValuesDTOValues :: [PointValueDTO]
+    <*> arbitrary -- limitedChannelValuesDTOTotalItemCount :: Int
+  
+instance Arbitrary Link where
+  arbitrary = sized genLink
+
+genLink :: Int -> Gen Link
+genLink n =
+  Link
+    <$> arbitrary -- linkUrl :: Text
+  
+instance Arbitrary LinkDTO where
+  arbitrary = sized genLinkDTO
+
+genLinkDTO :: Int -> Gen LinkDTO
+genLinkDTO n =
+  LinkDTO
+    <$> arbitrary -- linkDTOUrl :: Text
+  
+instance Arbitrary LoginActionsListDTO where
+  arbitrary = sized genLoginActionsListDTO
+
+genLoginActionsListDTO :: Int -> Gen LoginActionsListDTO
+genLoginActionsListDTO n =
+  LoginActionsListDTO
+    <$> arbitraryReduced n -- loginActionsListDTORequiredActions :: [LoginActionDTO]
+  
+instance Arbitrary NeptuneApiToken where
+  arbitrary = sized genNeptuneApiToken
+
+genNeptuneApiToken :: Int -> Gen NeptuneApiToken
+genNeptuneApiToken n =
+  NeptuneApiToken
+    <$> arbitrary -- neptuneApiTokenToken :: Text
+  
+instance Arbitrary NeptuneOauthToken where
+  arbitrary = sized genNeptuneOauthToken
+
+genNeptuneOauthToken :: Int -> Gen NeptuneOauthToken
+genNeptuneOauthToken n =
+  NeptuneOauthToken
+    <$> arbitrary -- neptuneOauthTokenAccessToken :: Text
+    <*> arbitrary -- neptuneOauthTokenRefreshToken :: Text
+    <*> arbitrary -- neptuneOauthTokenUsername :: Text
+  
+instance Arbitrary NewOrganizationInvitationDTO where
+  arbitrary = sized genNewOrganizationInvitationDTO
+
+genNewOrganizationInvitationDTO :: Int -> Gen NewOrganizationInvitationDTO
+genNewOrganizationInvitationDTO n =
+  NewOrganizationInvitationDTO
+    <$> arbitraryReduced n -- newOrganizationInvitationDTORoleGrant :: OrganizationRoleDTO
+    <*> arbitrary -- newOrganizationInvitationDTOAddToAllProjects :: Bool
+    <*> arbitrary -- newOrganizationInvitationDTOOrganizationIdentifier :: Text
+    <*> arbitrary -- newOrganizationInvitationDTOInvitee :: Text
+    <*> arbitraryReduced n -- newOrganizationInvitationDTOInvitationType :: InvitationTypeEnumDTO
+  
+instance Arbitrary NewOrganizationMemberDTO where
+  arbitrary = sized genNewOrganizationMemberDTO
+
+genNewOrganizationMemberDTO :: Int -> Gen NewOrganizationMemberDTO
+genNewOrganizationMemberDTO n =
+  NewOrganizationMemberDTO
+    <$> arbitrary -- newOrganizationMemberDTOUserId :: Text
+    <*> arbitraryReduced n -- newOrganizationMemberDTORole :: OrganizationRoleDTO
+  
+instance Arbitrary NewProjectDTO where
+  arbitrary = sized genNewProjectDTO
+
+genNewProjectDTO :: Int -> Gen NewProjectDTO
+genNewProjectDTO n =
+  NewProjectDTO
+    <$> arbitrary -- newProjectDTOName :: Text
+    <*> arbitraryReducedMaybe n -- newProjectDTODescription :: Maybe Text
+    <*> arbitrary -- newProjectDTOProjectKey :: Text
+    <*> arbitrary -- newProjectDTOOrganizationId :: Text
+    <*> arbitraryReducedMaybe n -- newProjectDTOVisibility :: Maybe ProjectVisibilityDTO
+    <*> arbitraryReducedMaybe n -- newProjectDTODisplayClass :: Maybe Text
+  
+instance Arbitrary NewProjectInvitationDTO where
+  arbitrary = sized genNewProjectInvitationDTO
+
+genNewProjectInvitationDTO :: Int -> Gen NewProjectInvitationDTO
+genNewProjectInvitationDTO n =
+  NewProjectInvitationDTO
+    <$> arbitrary -- newProjectInvitationDTOProjectIdentifier :: Text
+    <*> arbitrary -- newProjectInvitationDTOInvitee :: Text
+    <*> arbitraryReduced n -- newProjectInvitationDTOInvitationType :: InvitationTypeEnumDTO
+    <*> arbitraryReduced n -- newProjectInvitationDTORoleGrant :: ProjectRoleDTO
+  
+instance Arbitrary NewProjectMemberDTO where
+  arbitrary = sized genNewProjectMemberDTO
+
+genNewProjectMemberDTO :: Int -> Gen NewProjectMemberDTO
+genNewProjectMemberDTO n =
+  NewProjectMemberDTO
+    <$> arbitrary -- newProjectMemberDTOUserId :: Text
+    <*> arbitraryReduced n -- newProjectMemberDTORole :: ProjectRoleDTO
+  
+instance Arbitrary NewReservationDTO where
+  arbitrary = sized genNewReservationDTO
+
+genNewReservationDTO :: Int -> Gen NewReservationDTO
+genNewReservationDTO n =
+  NewReservationDTO
+    <$> arbitrary -- newReservationDTOName :: Text
+  
+instance Arbitrary OrganizationCreationParamsDTO where
+  arbitrary = sized genOrganizationCreationParamsDTO
+
+genOrganizationCreationParamsDTO :: Int -> Gen OrganizationCreationParamsDTO
+genOrganizationCreationParamsDTO n =
+  OrganizationCreationParamsDTO
+    <$> arbitrary -- organizationCreationParamsDTOName :: Text
+    <*> arbitraryReduced n -- organizationCreationParamsDTOOrganizationType :: OrganizationTypeDTO
+    <*> arbitraryReducedMaybe n -- organizationCreationParamsDTODiscountCode :: Maybe DiscountCodeDTO
+  
+instance Arbitrary OrganizationDTO where
+  arbitrary = sized genOrganizationDTO
+
+genOrganizationDTO :: Int -> Gen OrganizationDTO
+genOrganizationDTO n =
+  OrganizationDTO
+    <$> arbitrary -- organizationDTOName :: Text
+    <*> arbitrary -- organizationDTOPaymentStatus :: Text
+    <*> arbitrary -- organizationDTOAvatarUrl :: Text
+    <*> arbitraryReduced n -- organizationDTOOrganizationType :: OrganizationTypeDTO
+    <*> arbitraryReduced n -- organizationDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitraryReducedMaybe n -- organizationDTOInfo :: Maybe Text
+    <*> arbitrary -- organizationDTOId :: Text
+    <*> arbitraryReduced n -- organizationDTOCreated :: DateTime
+  
+instance Arbitrary OrganizationInvitationDTO where
+  arbitrary = sized genOrganizationInvitationDTO
+
+genOrganizationInvitationDTO :: Int -> Gen OrganizationInvitationDTO
+genOrganizationInvitationDTO n =
+  OrganizationInvitationDTO
+    <$> arbitraryReduced n -- organizationInvitationDTORoleGrant :: OrganizationRoleDTO
+    <*> arbitrary -- organizationInvitationDTOInvitedBy :: Text
+    <*> arbitrary -- organizationInvitationDTOOrganizationName :: Text
+    <*> arbitrary -- organizationInvitationDTOId :: Text
+    <*> arbitrary -- organizationInvitationDTOInvitee :: Text
+    <*> arbitraryReduced n -- organizationInvitationDTOStatus :: InvitationStatusEnumDTO
+    <*> arbitraryReduced n -- organizationInvitationDTOInvitationType :: InvitationTypeEnumDTO
+  
+instance Arbitrary OrganizationInvitationUpdateDTO where
+  arbitrary = sized genOrganizationInvitationUpdateDTO
+
+genOrganizationInvitationUpdateDTO :: Int -> Gen OrganizationInvitationUpdateDTO
+genOrganizationInvitationUpdateDTO n =
+  OrganizationInvitationUpdateDTO
+    <$> arbitraryReduced n -- organizationInvitationUpdateDTORoleGrant :: OrganizationRoleDTO
+  
+instance Arbitrary OrganizationLimitsDTO where
+  arbitrary = sized genOrganizationLimitsDTO
+
+genOrganizationLimitsDTO :: Int -> Gen OrganizationLimitsDTO
+genOrganizationLimitsDTO n =
+  OrganizationLimitsDTO
+    <$> arbitraryReducedMaybe n -- organizationLimitsDTOStorageSize :: Maybe Integer
+    <*> arbitraryReducedMaybe n -- organizationLimitsDTOPrivateProjectMembers :: Maybe Integer
+    <*> arbitraryReducedMaybe n -- organizationLimitsDTOProjectsLimit :: Maybe Integer
+    <*> arbitraryReducedMaybe n -- organizationLimitsDTOMembersLimit :: Maybe Integer
+  
+instance Arbitrary OrganizationMemberDTO where
+  arbitrary = sized genOrganizationMemberDTO
+
+genOrganizationMemberDTO :: Int -> Gen OrganizationMemberDTO
+genOrganizationMemberDTO n =
+  OrganizationMemberDTO
+    <$> arbitraryReduced n -- organizationMemberDTORole :: OrganizationRoleDTO
+    <*> arbitrary -- organizationMemberDTOEditableRole :: Bool
+    <*> arbitraryReducedMaybe n -- organizationMemberDTORegisteredMemberInfo :: Maybe RegisteredMemberInfoDTO
+    <*> arbitraryReducedMaybe n -- organizationMemberDTOInvitationInfo :: Maybe OrganizationInvitationDTO
+    <*> arbitraryReducedMaybe n -- organizationMemberDTOTotalNumberOfProjects :: Maybe Int
+    <*> arbitraryReducedMaybe n -- organizationMemberDTONumberOfProjects :: Maybe Int
+  
+instance Arbitrary OrganizationMemberUpdateDTO where
+  arbitrary = sized genOrganizationMemberUpdateDTO
+
+genOrganizationMemberUpdateDTO :: Int -> Gen OrganizationMemberUpdateDTO
+genOrganizationMemberUpdateDTO n =
+  OrganizationMemberUpdateDTO
+    <$> arbitraryReduced n -- organizationMemberUpdateDTORole :: OrganizationRoleDTO
+  
+instance Arbitrary OrganizationNameAvailableDTO where
+  arbitrary = sized genOrganizationNameAvailableDTO
+
+genOrganizationNameAvailableDTO :: Int -> Gen OrganizationNameAvailableDTO
+genOrganizationNameAvailableDTO n =
+  OrganizationNameAvailableDTO
+    <$> arbitrary -- organizationNameAvailableDTOAvailable :: Bool
+  
+instance Arbitrary OrganizationPricingPlanDTO where
+  arbitrary = sized genOrganizationPricingPlanDTO
+
+genOrganizationPricingPlanDTO :: Int -> Gen OrganizationPricingPlanDTO
+genOrganizationPricingPlanDTO n =
+  OrganizationPricingPlanDTO
+    <$> arbitraryReduced n -- organizationPricingPlanDTOPricingPlan :: PricingPlanDTO
+  
+instance Arbitrary OrganizationUpdateDTO where
+  arbitrary = sized genOrganizationUpdateDTO
+
+genOrganizationUpdateDTO :: Int -> Gen OrganizationUpdateDTO
+genOrganizationUpdateDTO n =
+  OrganizationUpdateDTO
+    <$> arbitraryReducedMaybe n -- organizationUpdateDTOName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- organizationUpdateDTOInfo :: Maybe Text
+  
+instance Arbitrary OrganizationWithRoleDTO where
+  arbitrary = sized genOrganizationWithRoleDTO
+
+genOrganizationWithRoleDTO :: Int -> Gen OrganizationWithRoleDTO
+genOrganizationWithRoleDTO n =
+  OrganizationWithRoleDTO
+    <$> arbitrary -- organizationWithRoleDTOName :: Text
+    <*> arbitraryReducedMaybe n -- organizationWithRoleDTOUserRole :: Maybe OrganizationRoleDTO
+    <*> arbitrary -- organizationWithRoleDTOPaymentStatus :: Text
+    <*> arbitrary -- organizationWithRoleDTOAvatarUrl :: Text
+    <*> arbitraryReduced n -- organizationWithRoleDTOOrganizationType :: OrganizationTypeDTO
+    <*> arbitraryReduced n -- organizationWithRoleDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitraryReducedMaybe n -- organizationWithRoleDTOInfo :: Maybe Text
+    <*> arbitrary -- organizationWithRoleDTOId :: Text
+    <*> arbitraryReduced n -- organizationWithRoleDTOCreated :: DateTime
+  
+instance Arbitrary OutputImageDTO where
+  arbitrary = sized genOutputImageDTO
+
+genOutputImageDTO :: Int -> Gen OutputImageDTO
+genOutputImageDTO n =
+  OutputImageDTO
+    <$> arbitraryReducedMaybe n -- outputImageDTOName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- outputImageDTODescription :: Maybe Text
+    <*> arbitraryReducedMaybe n -- outputImageDTOImageUrl :: Maybe Text
+    <*> arbitraryReducedMaybe n -- outputImageDTOThumbnailUrl :: Maybe Text
+  
+instance Arbitrary Parameter where
+  arbitrary = sized genParameter
+
+genParameter :: Int -> Gen Parameter
+genParameter n =
+  Parameter
+    <$> arbitrary -- parameterName :: Text
+    <*> arbitraryReducedMaybe n -- parameterDescription :: Maybe Text
+    <*> arbitraryReduced n -- parameterParameterType :: ParameterTypeEnum
+    <*> arbitrary -- parameterId :: Text
+    <*> arbitrary -- parameterValue :: Text
+  
+instance Arbitrary PasswordChangeDTO where
+  arbitrary = sized genPasswordChangeDTO
+
+genPasswordChangeDTO :: Int -> Gen PasswordChangeDTO
+genPasswordChangeDTO n =
+  PasswordChangeDTO
+    <$> arbitrary -- passwordChangeDTOCurrentPassword :: Text
+    <*> arbitrary -- passwordChangeDTONewPassword :: Text
+  
+instance Arbitrary Point where
+  arbitrary = sized genPoint
+
+genPoint :: Int -> Gen Point
+genPoint n =
+  Point
+    <$> arbitrary -- pointTimestampMillis :: Integer
+    <*> arbitraryReducedMaybe n -- pointX :: Maybe Double
+    <*> arbitraryReduced n -- pointY :: Y
+  
+instance Arbitrary PointValueDTO where
+  arbitrary = sized genPointValueDTO
+
+genPointValueDTO :: Int -> Gen PointValueDTO
+genPointValueDTO n =
+  PointValueDTO
+    <$> arbitrary -- pointValueDTOTimestampMillis :: Integer
+    <*> arbitrary -- pointValueDTOX :: Double
+    <*> arbitraryReduced n -- pointValueDTOY :: Y
+  
+instance Arbitrary ProjectInvitationDTO where
+  arbitrary = sized genProjectInvitationDTO
+
+genProjectInvitationDTO :: Int -> Gen ProjectInvitationDTO
+genProjectInvitationDTO n =
+  ProjectInvitationDTO
+    <$> arbitraryReduced n -- projectInvitationDTORoleGrant :: ProjectRoleDTO
+    <*> arbitrary -- projectInvitationDTOProjectName :: Text
+    <*> arbitrary -- projectInvitationDTOInvitedBy :: Text
+    <*> arbitrary -- projectInvitationDTOOrganizationName :: Text
+    <*> arbitrary -- projectInvitationDTOId :: Text
+    <*> arbitrary -- projectInvitationDTOInvitee :: Text
+    <*> arbitraryReduced n -- projectInvitationDTOStatus :: InvitationStatusEnumDTO
+    <*> arbitraryReduced n -- projectInvitationDTOInvitationType :: InvitationTypeEnumDTO
+  
+instance Arbitrary ProjectInvitationUpdateDTO where
+  arbitrary = sized genProjectInvitationUpdateDTO
+
+genProjectInvitationUpdateDTO :: Int -> Gen ProjectInvitationUpdateDTO
+genProjectInvitationUpdateDTO n =
+  ProjectInvitationUpdateDTO
+    <$> arbitraryReduced n -- projectInvitationUpdateDTORoleGrant :: ProjectRoleDTO
+  
+instance Arbitrary ProjectKeyDTO where
+  arbitrary = sized genProjectKeyDTO
+
+genProjectKeyDTO :: Int -> Gen ProjectKeyDTO
+genProjectKeyDTO n =
+  ProjectKeyDTO
+    <$> arbitrary -- projectKeyDTOProposal :: Text
+  
+instance Arbitrary ProjectListDTO where
+  arbitrary = sized genProjectListDTO
+
+genProjectListDTO :: Int -> Gen ProjectListDTO
+genProjectListDTO n =
+  ProjectListDTO
+    <$> arbitraryReduced n -- projectListDTOEntries :: [ProjectWithRoleDTO]
+    <*> arbitrary -- projectListDTOMatchingItemCount :: Int
+    <*> arbitrary -- projectListDTOTotalItemCount :: Int
+  
+instance Arbitrary ProjectMemberDTO where
+  arbitrary = sized genProjectMemberDTO
+
+genProjectMemberDTO :: Int -> Gen ProjectMemberDTO
+genProjectMemberDTO n =
+  ProjectMemberDTO
+    <$> arbitraryReduced n -- projectMemberDTORole :: ProjectRoleDTO
+    <*> arbitraryReducedMaybe n -- projectMemberDTORegisteredMemberInfo :: Maybe RegisteredMemberInfoDTO
+    <*> arbitraryReducedMaybe n -- projectMemberDTOInvitationInfo :: Maybe ProjectInvitationDTO
+    <*> arbitrary -- projectMemberDTOEditableRole :: Bool
+    <*> arbitrary -- projectMemberDTOCanLeaveProject :: Bool
+  
+instance Arbitrary ProjectMemberUpdateDTO where
+  arbitrary = sized genProjectMemberUpdateDTO
+
+genProjectMemberUpdateDTO :: Int -> Gen ProjectMemberUpdateDTO
+genProjectMemberUpdateDTO n =
+  ProjectMemberUpdateDTO
+    <$> arbitraryReduced n -- projectMemberUpdateDTORole :: ProjectRoleDTO
+  
+instance Arbitrary ProjectMembersDTO where
+  arbitrary = sized genProjectMembersDTO
+
+genProjectMembersDTO :: Int -> Gen ProjectMembersDTO
+genProjectMembersDTO n =
+  ProjectMembersDTO
+    <$> arbitrary -- projectMembersDTOProjectName :: Text
+    <*> arbitrary -- projectMembersDTOProjectId :: Text
+    <*> arbitrary -- projectMembersDTOOrganizationName :: Text
+    <*> arbitraryReduced n -- projectMembersDTOMembers :: [ProjectMemberDTO]
+    <*> arbitrary -- projectMembersDTOOrganizationId :: Text
+  
+instance Arbitrary ProjectMetadataDTO where
+  arbitrary = sized genProjectMetadataDTO
+
+genProjectMetadataDTO :: Int -> Gen ProjectMetadataDTO
+genProjectMetadataDTO n =
+  ProjectMetadataDTO
+    <$> arbitrary -- projectMetadataDTOName :: Text
+    <*> arbitraryReduced n -- projectMetadataDTOOrganizationType :: OrganizationTypeDTO
+    <*> arbitraryReduced n -- projectMetadataDTOTimeOfCreation :: DateTime
+    <*> arbitrary -- projectMetadataDTOOrganizationName :: Text
+    <*> arbitrary -- projectMetadataDTOVersion :: Int
+    <*> arbitrary -- projectMetadataDTOId :: Text
+    <*> arbitrary -- projectMetadataDTOProjectKey :: Text
+    <*> arbitrary -- projectMetadataDTOOrganizationId :: Text
+  
+instance Arbitrary ProjectUpdateDTO where
+  arbitrary = sized genProjectUpdateDTO
+
+genProjectUpdateDTO :: Int -> Gen ProjectUpdateDTO
+genProjectUpdateDTO n =
+  ProjectUpdateDTO
+    <$> arbitraryReducedMaybe n -- projectUpdateDTOCodeAccess :: Maybe ProjectCodeAccessDTO
+    <*> arbitraryReducedMaybe n -- projectUpdateDTOName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- projectUpdateDTODescription :: Maybe Text
+    <*> arbitraryReducedMaybe n -- projectUpdateDTOVisibility :: Maybe ProjectVisibilityDTO
+    <*> arbitraryReducedMaybe n -- projectUpdateDTODisplayClass :: Maybe Text
+  
+instance Arbitrary ProjectWithRoleDTO where
+  arbitrary = sized genProjectWithRoleDTO
+
+genProjectWithRoleDTO :: Int -> Gen ProjectWithRoleDTO
+genProjectWithRoleDTO n =
+  ProjectWithRoleDTO
+    <$> arbitraryReduced n -- projectWithRoleDTOCodeAccess :: ProjectCodeAccessDTO
+    <*> arbitrary -- projectWithRoleDTOAvatarUrl :: Text
+    <*> arbitraryReducedMaybe n -- projectWithRoleDTODescription :: Maybe Text
+    <*> arbitraryReduced n -- projectWithRoleDTOOrganizationType :: OrganizationTypeDTO
+    <*> arbitrary -- projectWithRoleDTOFeatured :: Bool
+    <*> arbitrary -- projectWithRoleDTOOrganizationName :: Text
+    <*> arbitrary -- projectWithRoleDTOVersion :: Int
+    <*> arbitrary -- projectWithRoleDTOId :: Text
+    <*> arbitrary -- projectWithRoleDTOProjectKey :: Text
+    <*> arbitrary -- projectWithRoleDTOOrganizationId :: Text
+    <*> arbitrary -- projectWithRoleDTOUserCount :: Int
+    <*> arbitraryReduced n -- projectWithRoleDTOVisibility :: ProjectVisibilityDTO
+    <*> arbitraryReducedMaybe n -- projectWithRoleDTODisplayClass :: Maybe Text
+    <*> arbitrary -- projectWithRoleDTOName :: Text
+    <*> arbitraryReduced n -- projectWithRoleDTOLastActivity :: DateTime
+    <*> arbitraryReduced n -- projectWithRoleDTOTimeOfCreation :: DateTime
+    <*> arbitraryReducedMaybe n -- projectWithRoleDTOUserRoleInOrganization :: Maybe OrganizationRoleDTO
+    <*> arbitraryReduced n -- projectWithRoleDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitrary -- projectWithRoleDTOLeaderboardEntryCount :: Int
+    <*> arbitraryReduced n -- projectWithRoleDTOUserRoleInProject :: ProjectRoleDTO
+    <*> arbitraryReducedMaybe n -- projectWithRoleDTOBackgroundUrl :: Maybe Text
+  
+instance Arbitrary PublicUserProfileDTO where
+  arbitrary = sized genPublicUserProfileDTO
+
+genPublicUserProfileDTO :: Int -> Gen PublicUserProfileDTO
+genPublicUserProfileDTO n =
+  PublicUserProfileDTO
+    <$> arbitrary -- publicUserProfileDTOBiography :: Text
+    <*> arbitraryReducedMaybe n -- publicUserProfileDTOEmail :: Maybe Text
+    <*> arbitraryReduced n -- publicUserProfileDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitraryReducedMaybe n -- publicUserProfileDTOFirstName :: Maybe Text
+    <*> arbitrary -- publicUserProfileDTOShortInfo :: Text
+    <*> arbitrary -- publicUserProfileDTOUsername :: Text
+    <*> arbitrary -- publicUserProfileDTOAvatarUrl :: Text
+    <*> arbitraryReducedMaybe n -- publicUserProfileDTOLastName :: Maybe Text
+    <*> arbitraryReduced n -- publicUserProfileDTOLinks :: UserProfileLinksDTO
+  
+instance Arbitrary QuestionnaireDTO where
+  arbitrary = sized genQuestionnaireDTO
+
+genQuestionnaireDTO :: Int -> Gen QuestionnaireDTO
+genQuestionnaireDTO n =
+  QuestionnaireDTO
+    <$> arbitrary -- questionnaireDTOAnswers :: Text
+  
+instance Arbitrary RegisteredMemberInfoDTO where
+  arbitrary = sized genRegisteredMemberInfoDTO
+
+genRegisteredMemberInfoDTO :: Int -> Gen RegisteredMemberInfoDTO
+genRegisteredMemberInfoDTO n =
+  RegisteredMemberInfoDTO
+    <$> arbitraryReduced n -- registeredMemberInfoDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitrary -- registeredMemberInfoDTOLastName :: Text
+    <*> arbitrary -- registeredMemberInfoDTOFirstName :: Text
+    <*> arbitrary -- registeredMemberInfoDTOUsername :: Text
+    <*> arbitrary -- registeredMemberInfoDTOAvatarUrl :: Text
+  
+instance Arbitrary RegistrationSurveyDTO where
+  arbitrary = sized genRegistrationSurveyDTO
+
+genRegistrationSurveyDTO :: Int -> Gen RegistrationSurveyDTO
+genRegistrationSurveyDTO n =
+  RegistrationSurveyDTO
+    <$> arbitrary -- registrationSurveyDTOSurvey :: Text
+  
+instance Arbitrary Series where
+  arbitrary = sized genSeries
+
+genSeries :: Int -> Gen Series
+genSeries n =
+  Series
+    <$> arbitraryReduced n -- seriesSeriesType :: SeriesType
+    <*> arbitraryReducedMaybe n -- seriesChannelName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- seriesChannelId :: Maybe Text
+    <*> arbitraryReducedMaybe n -- seriesAliasId :: Maybe Text
+    <*> arbitrary -- seriesLabel :: Text
+  
+instance Arbitrary SeriesDefinition where
+  arbitrary = sized genSeriesDefinition
+
+genSeriesDefinition :: Int -> Gen SeriesDefinition
+genSeriesDefinition n =
+  SeriesDefinition
+    <$> arbitrary -- seriesDefinitionLabel :: Text
+    <*> arbitraryReducedMaybe n -- seriesDefinitionChannelName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- seriesDefinitionAliasId :: Maybe Text
+    <*> arbitraryReduced n -- seriesDefinitionSeriesType :: SeriesType
+  
+instance Arbitrary SessionDTO where
+  arbitrary = sized genSessionDTO
+
+genSessionDTO :: Int -> Gen SessionDTO
+genSessionDTO n =
+  SessionDTO
+    <$> arbitrary -- sessionDTOSessionId :: Text
+  
+instance Arbitrary StateTransitions where
+  arbitrary = sized genStateTransitions
+
+genStateTransitions :: Int -> Gen StateTransitions
+genStateTransitions n =
+  StateTransitions
+    <$> arbitraryReducedMaybe n -- stateTransitionsRunning :: Maybe DateTime
+    <*> arbitraryReducedMaybe n -- stateTransitionsSucceeded :: Maybe DateTime
+    <*> arbitraryReducedMaybe n -- stateTransitionsFailed :: Maybe DateTime
+    <*> arbitraryReducedMaybe n -- stateTransitionsAborted :: Maybe DateTime
+  
+instance Arbitrary StorageUsage where
+  arbitrary = sized genStorageUsage
+
+genStorageUsage :: Int -> Gen StorageUsage
+genStorageUsage n =
+  StorageUsage
+    <$> arbitrary -- storageUsageUsage :: Integer
+  
+instance Arbitrary SubscriptionCancelInfoDTO where
+  arbitrary = sized genSubscriptionCancelInfoDTO
+
+genSubscriptionCancelInfoDTO :: Int -> Gen SubscriptionCancelInfoDTO
+genSubscriptionCancelInfoDTO n =
+  SubscriptionCancelInfoDTO
+    <$> arbitrary -- subscriptionCancelInfoDTOReasons :: [Text]
+    <*> arbitraryReducedMaybe n -- subscriptionCancelInfoDTODescription :: Maybe Text
+  
+instance Arbitrary SystemMetric where
+  arbitrary = sized genSystemMetric
+
+genSystemMetric :: Int -> Gen SystemMetric
+genSystemMetric n =
+  SystemMetric
+    <$> arbitrary -- systemMetricSeries :: [Text]
+    <*> arbitrary -- systemMetricName :: Text
+    <*> arbitraryReducedMaybe n -- systemMetricMin :: Maybe Double
+    <*> arbitraryReducedMaybe n -- systemMetricMax :: Maybe Double
+    <*> arbitraryReducedMaybe n -- systemMetricUnit :: Maybe Text
+    <*> arbitrary -- systemMetricDescription :: Text
+    <*> arbitraryReduced n -- systemMetricResourceType :: SystemMetricResourceType
+    <*> arbitrary -- systemMetricExperimentId :: Text
+    <*> arbitrary -- systemMetricId :: Text
+  
+instance Arbitrary SystemMetricParams where
+  arbitrary = sized genSystemMetricParams
+
+genSystemMetricParams :: Int -> Gen SystemMetricParams
+genSystemMetricParams n =
+  SystemMetricParams
+    <$> arbitrary -- systemMetricParamsSeries :: [Text]
+    <*> arbitrary -- systemMetricParamsName :: Text
+    <*> arbitraryReducedMaybe n -- systemMetricParamsMin :: Maybe Double
+    <*> arbitraryReducedMaybe n -- systemMetricParamsMax :: Maybe Double
+    <*> arbitraryReducedMaybe n -- systemMetricParamsUnit :: Maybe Text
+    <*> arbitrary -- systemMetricParamsDescription :: Text
+    <*> arbitraryReduced n -- systemMetricParamsResourceType :: SystemMetricResourceType
+  
+instance Arbitrary SystemMetricPoint where
+  arbitrary = sized genSystemMetricPoint
+
+genSystemMetricPoint :: Int -> Gen SystemMetricPoint
+genSystemMetricPoint n =
+  SystemMetricPoint
+    <$> arbitrary -- systemMetricPointTimestampMillis :: Integer
+    <*> arbitrary -- systemMetricPointX :: Integer
+    <*> arbitrary -- systemMetricPointY :: Double
+  
+instance Arbitrary SystemMetricValues where
+  arbitrary = sized genSystemMetricValues
+
+genSystemMetricValues :: Int -> Gen SystemMetricValues
+genSystemMetricValues n =
+  SystemMetricValues
+    <$> arbitrary -- systemMetricValuesMetricId :: Text
+    <*> arbitrary -- systemMetricValuesSeriesName :: Text
+    <*> arbitraryReducedMaybe n -- systemMetricValuesLevel :: Maybe Int
+    <*> arbitraryReduced n -- systemMetricValuesValues :: [SystemMetricPoint]
+  
+instance Arbitrary UUID where
+  arbitrary = sized genUUID
+
+genUUID :: Int -> Gen UUID
+genUUID n =
+  UUID
+    <$> arbitrary -- uUIDMostSigBits :: Integer
+    <*> arbitrary -- uUIDLeastSigBits :: Integer
+  
+instance Arbitrary UpdateTagsParams where
+  arbitrary = sized genUpdateTagsParams
+
+genUpdateTagsParams :: Int -> Gen UpdateTagsParams
+genUpdateTagsParams n =
+  UpdateTagsParams
+    <$> arbitrary -- updateTagsParamsExperimentIds :: [Text]
+    <*> arbitrary -- updateTagsParamsTagsToAdd :: [Text]
+    <*> arbitrary -- updateTagsParamsTagsToDelete :: [Text]
+  
+instance Arbitrary UserListDTO where
+  arbitrary = sized genUserListDTO
+
+genUserListDTO :: Int -> Gen UserListDTO
+genUserListDTO n =
+  UserListDTO
+    <$> arbitraryReduced n -- userListDTOEntries :: [UserListItemDTO]
+    <*> arbitrary -- userListDTOMatchingItemCount :: Int
+    <*> arbitrary -- userListDTOTotalItemCount :: Int
+  
+instance Arbitrary UserListItemDTO where
+  arbitrary = sized genUserListItemDTO
+
+genUserListItemDTO :: Int -> Gen UserListItemDTO
+genUserListItemDTO n =
+  UserListItemDTO
+    <$> arbitraryReduced n -- userListItemDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitrary -- userListItemDTOLastName :: Text
+    <*> arbitrary -- userListItemDTOFirstName :: Text
+    <*> arbitrary -- userListItemDTOUsername :: Text
+    <*> arbitrary -- userListItemDTOAvatarUrl :: Text
+  
+instance Arbitrary UserPricingStatusDTO where
+  arbitrary = sized genUserPricingStatusDTO
+
+genUserPricingStatusDTO :: Int -> Gen UserPricingStatusDTO
+genUserPricingStatusDTO n =
+  UserPricingStatusDTO
+    <$> arbitrary -- userPricingStatusDTOCanCreateTeamFree :: Bool
+    <*> arbitraryReducedMaybe n -- userPricingStatusDTOAnyTeamFree :: Maybe OrganizationWithRoleDTO
+  
+instance Arbitrary UserProfileDTO where
+  arbitrary = sized genUserProfileDTO
+
+genUserProfileDTO :: Int -> Gen UserProfileDTO
+genUserProfileDTO n =
+  UserProfileDTO
+    <$> arbitrary -- userProfileDTOUsernameHash :: Text
+    <*> arbitrary -- userProfileDTOEmail :: Text
+    <*> arbitrary -- userProfileDTOHasLoggedToCli :: Bool
+    <*> arbitraryReduced n -- userProfileDTOAvatarSource :: AvatarSourceEnum
+    <*> arbitrary -- userProfileDTOFirstName :: Text
+    <*> arbitrary -- userProfileDTOShortInfo :: Text
+    <*> arbitraryReduced n -- userProfileDTOCreated :: DateTime
+    <*> arbitrary -- userProfileDTOBiography :: Text
+    <*> arbitrary -- userProfileDTOHasCreatedExperiments :: Bool
+    <*> arbitrary -- userProfileDTOUsername :: Text
+    <*> arbitrary -- userProfileDTOAvatarUrl :: Text
+    <*> arbitrary -- userProfileDTOLastName :: Text
+    <*> arbitraryReduced n -- userProfileDTOLinks :: UserProfileLinksDTO
+  
+instance Arbitrary UserProfileLinkDTO where
+  arbitrary = sized genUserProfileLinkDTO
+
+genUserProfileLinkDTO :: Int -> Gen UserProfileLinkDTO
+genUserProfileLinkDTO n =
+  UserProfileLinkDTO
+    <$> arbitraryReduced n -- userProfileLinkDTOLinkType :: LinkTypeDTO
+    <*> arbitrary -- userProfileLinkDTOUrl :: Text
+  
+instance Arbitrary UserProfileLinksDTO where
+  arbitrary = sized genUserProfileLinksDTO
+
+genUserProfileLinksDTO :: Int -> Gen UserProfileLinksDTO
+genUserProfileLinksDTO n =
+  UserProfileLinksDTO
+    <$> arbitraryReducedMaybe n -- userProfileLinksDTOGithub :: Maybe Text
+    <*> arbitraryReducedMaybe n -- userProfileLinksDTOLinkedin :: Maybe Text
+    <*> arbitrary -- userProfileLinksDTOOthers :: [Text]
+    <*> arbitraryReducedMaybe n -- userProfileLinksDTOKaggle :: Maybe Text
+    <*> arbitraryReducedMaybe n -- userProfileLinksDTOTwitter :: Maybe Text
+  
+instance Arbitrary UserProfileUpdateDTO where
+  arbitrary = sized genUserProfileUpdateDTO
+
+genUserProfileUpdateDTO :: Int -> Gen UserProfileUpdateDTO
+genUserProfileUpdateDTO n =
+  UserProfileUpdateDTO
+    <$> arbitraryReducedMaybe n -- userProfileUpdateDTOBiography :: Maybe Text
+    <*> arbitraryReducedMaybe n -- userProfileUpdateDTOHasLoggedToCli :: Maybe Bool
+    <*> arbitraryReducedMaybe n -- userProfileUpdateDTOLastName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- userProfileUpdateDTOFirstName :: Maybe Text
+    <*> arbitraryReducedMaybe n -- userProfileUpdateDTOShortInfo :: Maybe Text
+  
+instance Arbitrary UsernameValidationStatusDTO where
+  arbitrary = sized genUsernameValidationStatusDTO
+
+genUsernameValidationStatusDTO :: Int -> Gen UsernameValidationStatusDTO
+genUsernameValidationStatusDTO n =
+  UsernameValidationStatusDTO
+    <$> arbitraryReduced n -- usernameValidationStatusDTOStatus :: UsernameValidationStatusEnumDTO
+  
+instance Arbitrary Version where
+  arbitrary = sized genVersion
+
+genVersion :: Int -> Gen Version
+genVersion n =
+  Version
+    <$> arbitrary -- versionVersion :: Text
+  
+instance Arbitrary WorkspaceConfig where
+  arbitrary = sized genWorkspaceConfig
+
+genWorkspaceConfig :: Int -> Gen WorkspaceConfig
+genWorkspaceConfig n =
+  WorkspaceConfig
+    <$> arbitrary -- workspaceConfigRealm :: Text
+    <*> arbitrary -- workspaceConfigIdpHint :: Text
+  
+instance Arbitrary Y where
+  arbitrary = sized genY
+
+genY :: Int -> Gen Y
+genY n =
+  Y
+    <$> arbitraryReducedMaybe n -- yNumericValue :: Maybe Double
+    <*> arbitraryReducedMaybe n -- yTextValue :: Maybe Text
+    <*> arbitraryReducedMaybe n -- yImageValue :: Maybe OutputImageDTO
+    <*> arbitraryReducedMaybe n -- yInputImageValue :: Maybe InputImageDTO
+  
+
+
+
+instance Arbitrary AchievementTypeDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ApiErrorTypeDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary AvatarSourceEnum where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ChannelType where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ChannelTypeEnum where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ExperimentState where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary InvitationStatusEnumDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary InvitationTypeEnumDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary LinkTypeDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary LoginActionDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary NameEnum where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary OrganizationRoleDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary OrganizationTypeDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ParameterTypeEnum where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary PricingPlanDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ProjectCodeAccessDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ProjectRoleDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary ProjectVisibilityDTO where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary SeriesType where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary SystemMetricResourceType where
+  arbitrary = arbitraryBoundedEnum
+
+instance Arbitrary UsernameValidationStatusEnumDTO where
+  arbitrary = arbitraryBoundedEnum
+
diff --git a/tests/PropMime.hs b/tests/PropMime.hs
new file mode 100644
--- /dev/null
+++ b/tests/PropMime.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE ConstraintKinds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+module PropMime where
+
+import Data.Aeson
+import Data.Aeson.Types (parseEither)
+import Data.Monoid ((<>))
+import Data.Typeable (Proxy(..), typeOf, Typeable)
+import qualified Data.ByteString.Lazy.Char8 as BL8
+import Test.Hspec
+import Test.QuickCheck
+import Test.QuickCheck.Property
+import Test.Hspec.QuickCheck (prop)
+
+import NeptuneBackend.MimeTypes
+
+import ApproxEq
+
+-- * Type Aliases
+
+type ArbitraryMime mime a = ArbitraryRoundtrip (MimeUnrender mime) (MimeRender mime) a
+
+type ArbitraryRoundtrip from to a = (from a, to a, Arbitrary' a)
+
+type Arbitrary' a = (Arbitrary a, Show a, Typeable a)
+
+-- * Mime
+
+propMime
+  :: forall a b mime.
+     (ArbitraryMime mime a, Testable b)
+  => String -> (a -> a -> b) -> mime -> Proxy a -> Spec
+propMime eqDescr eq m _ =
+  prop
+    (show (typeOf (undefined :: a)) <> " " <> show (typeOf (undefined :: mime)) <> " roundtrip " <> eqDescr) $
+  \(x :: a) ->
+     let rendered = mimeRender' m x
+         actual = mimeUnrender' m rendered
+         expected = Right x
+         failMsg =
+           "ACTUAL: " <> show actual <> "\nRENDERED: " <> BL8.unpack rendered
+     in counterexample failMsg $
+        either reject property (eq <$> actual <*> expected)
+  where
+    reject = property . const rejected
+
+propMimeEq :: (ArbitraryMime mime a, Eq a) => mime -> Proxy a -> Spec
+propMimeEq = propMime "(EQ)" (==)
diff --git a/tests/Test.hs b/tests/Test.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE PartialTypeSignatures #-}
+
+module Main where
+
+import Data.Typeable (Proxy(..))
+import Test.Hspec
+import Test.Hspec.QuickCheck
+
+import PropMime
+import Instances ()
+
+import NeptuneBackend.Model
+import NeptuneBackend.MimeTypes
+
+main :: IO ()
+main =
+  hspec $ modifyMaxSize (const 10) $ do
+    describe "JSON instances" $ do
+      pure ()
+      propMimeEq MimeJSON (Proxy :: Proxy AchievementTypeDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy AchievementsDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ApiErrorTypeDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy AuthorizedUserDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy AvatarSourceEnum)
+      propMimeEq MimeJSON (Proxy :: Proxy BatchChannelValueErrorDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy BatchExperimentUpdateResult)
+      propMimeEq MimeJSON (Proxy :: Proxy Channel)
+      propMimeEq MimeJSON (Proxy :: Proxy ChannelDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ChannelParams)
+      propMimeEq MimeJSON (Proxy :: Proxy ChannelType)
+      propMimeEq MimeJSON (Proxy :: Proxy ChannelTypeEnum)
+      propMimeEq MimeJSON (Proxy :: Proxy ChannelWithValue)
+      propMimeEq MimeJSON (Proxy :: Proxy ChannelWithValueDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy Chart)
+      propMimeEq MimeJSON (Proxy :: Proxy ChartDefinition)
+      propMimeEq MimeJSON (Proxy :: Proxy ChartSet)
+      propMimeEq MimeJSON (Proxy :: Proxy ChartSetParams)
+      propMimeEq MimeJSON (Proxy :: Proxy Charts)
+      propMimeEq MimeJSON (Proxy :: Proxy ClientConfig)
+      propMimeEq MimeJSON (Proxy :: Proxy ClientVersionsConfigDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy CompletedExperimentParams)
+      propMimeEq MimeJSON (Proxy :: Proxy ComponentStatus)
+      propMimeEq MimeJSON (Proxy :: Proxy ComponentVersion)
+      propMimeEq MimeJSON (Proxy :: Proxy ConfigInfo)
+      propMimeEq MimeJSON (Proxy :: Proxy CreateSessionParamsDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy CustomerDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy DiscountCodeDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy DiscountDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy DownloadPrepareRequestDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy EditExperimentParams)
+      propMimeEq MimeJSON (Proxy :: Proxy Error)
+      propMimeEq MimeJSON (Proxy :: Proxy Experiment)
+      propMimeEq MimeJSON (Proxy :: Proxy ExperimentCreationParams)
+      propMimeEq MimeJSON (Proxy :: Proxy ExperimentPaths)
+      propMimeEq MimeJSON (Proxy :: Proxy ExperimentState)
+      propMimeEq MimeJSON (Proxy :: Proxy ExperimentsAttributesNamesDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy File)
+      propMimeEq MimeJSON (Proxy :: Proxy GitCommitDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy GitInfoDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy GlobalConfiguration)
+      propMimeEq MimeJSON (Proxy :: Proxy InputChannelValues)
+      propMimeEq MimeJSON (Proxy :: Proxy InputImageDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy InputMetadata)
+      propMimeEq MimeJSON (Proxy :: Proxy InvitationStatusEnumDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy InvitationTypeEnumDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy KeyValueProperty)
+      propMimeEq MimeJSON (Proxy :: Proxy LimitedChannelValuesDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy Link)
+      propMimeEq MimeJSON (Proxy :: Proxy LinkDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy LinkTypeDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy LoginActionDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy LoginActionsListDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy NameEnum)
+      propMimeEq MimeJSON (Proxy :: Proxy NeptuneApiToken)
+      propMimeEq MimeJSON (Proxy :: Proxy NeptuneOauthToken)
+      propMimeEq MimeJSON (Proxy :: Proxy NewOrganizationInvitationDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy NewOrganizationMemberDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy NewProjectDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy NewProjectInvitationDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy NewProjectMemberDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy NewReservationDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationCreationParamsDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationInvitationDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationInvitationUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationLimitsDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationMemberDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationMemberUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationNameAvailableDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationPricingPlanDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationRoleDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationTypeDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OrganizationWithRoleDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy OutputImageDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy Parameter)
+      propMimeEq MimeJSON (Proxy :: Proxy ParameterTypeEnum)
+      propMimeEq MimeJSON (Proxy :: Proxy PasswordChangeDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy Point)
+      propMimeEq MimeJSON (Proxy :: Proxy PointValueDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy PricingPlanDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectCodeAccessDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectInvitationDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectInvitationUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectKeyDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectListDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectMemberDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectMemberUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectMembersDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectMetadataDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectRoleDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectVisibilityDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy ProjectWithRoleDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy PublicUserProfileDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy QuestionnaireDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy RegisteredMemberInfoDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy RegistrationSurveyDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy Series)
+      propMimeEq MimeJSON (Proxy :: Proxy SeriesDefinition)
+      propMimeEq MimeJSON (Proxy :: Proxy SeriesType)
+      propMimeEq MimeJSON (Proxy :: Proxy SessionDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy StateTransitions)
+      propMimeEq MimeJSON (Proxy :: Proxy StorageUsage)
+      propMimeEq MimeJSON (Proxy :: Proxy SubscriptionCancelInfoDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy SystemMetric)
+      propMimeEq MimeJSON (Proxy :: Proxy SystemMetricParams)
+      propMimeEq MimeJSON (Proxy :: Proxy SystemMetricPoint)
+      propMimeEq MimeJSON (Proxy :: Proxy SystemMetricResourceType)
+      propMimeEq MimeJSON (Proxy :: Proxy SystemMetricValues)
+      propMimeEq MimeJSON (Proxy :: Proxy UUID)
+      propMimeEq MimeJSON (Proxy :: Proxy UpdateTagsParams)
+      propMimeEq MimeJSON (Proxy :: Proxy UserListDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UserListItemDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UserPricingStatusDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UserProfileDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UserProfileLinkDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UserProfileLinksDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UserProfileUpdateDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UsernameValidationStatusDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy UsernameValidationStatusEnumDTO)
+      propMimeEq MimeJSON (Proxy :: Proxy Version)
+      propMimeEq MimeJSON (Proxy :: Proxy WorkspaceConfig)
+      propMimeEq MimeJSON (Proxy :: Proxy Y)
+      
