diff --git a/bugsnag-types.cabal b/bugsnag-types.cabal
--- a/bugsnag-types.cabal
+++ b/bugsnag-types.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            bugsnag-types
-version:         1.1.0.0
+version:         1.1.0.1
 license:         MIT
 maintainer:      pbrisbin@gmail.com
 author:          Patrick Brisbin
diff --git a/src/Data/Bugsnag/Types/Application.hs b/src/Data/Bugsnag/Types/Application.hs
--- a/src/Data/Bugsnag/Types/Application.hs
+++ b/src/Data/Bugsnag/Types/Application.hs
@@ -5,40 +5,45 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.BinaryArch
 
+-- | Information about the app where the error occurred. These fields are
+-- optional but highly recommended. To display custom app data alongside
+-- these standard fields on the dashboard, the custom data should be
+-- included in the @metaData@ object in an @app@ object.
 data Application = Application
   { id :: Maybe Text
   -- ^ A unique ID for the application.
   , version :: Maybe Text
   -- ^ The version number of the application which generated the error.
   , versionCode :: Maybe Int
-  -- ^ The [version
-  -- code](https://developer.android.com/studio/publish/versioning.html) of the
-  -- application (Android only)
+  -- ^ The
+  -- <https://developer.android.com/studio/publish/versioning.html version code>
+  -- of the application (Android only)
   , bundleVersion :: Maybe Text
-  -- ^ The [bundle version/build number](https://developer.apple.com/library/content/technotes/tn2420/_index.html)
-  -- of the application (iOS/macOS/tvOS only)
+  -- ^ The
+  -- <https://developer.apple.com/library/content/technotes/tn2420/_index.html bundle version\/build number>
+  -- of the application (iOS\/macOS\/tvOS only)
   , codeBundleId :: Maybe Text
-  -- ^ A unique identifier to identify a code bundle release when using tools like
-  -- CodePush (mobile only).
+  -- ^ A unique identifier to identify a code bundle release when using tools
+  -- like CodePush (mobile only).
   , buildUUID :: Maybe Text
-  -- ^ A build ID that is required to identify a specific build when the version
-  -- and version code are the same.
+  -- ^ A build ID that is required to identify a specific build when the
+  -- version and version code are the same.
   , releaseStage :: Maybe Text
-  -- ^ The release stage that this error occurred in, for example "development",
-  -- "staging" or "production".
+  -- ^ The release stage that this error occurred in, for example
+  -- \"development\", \"staging\" or \"production\".
   , type_ :: Maybe Text
   -- ^ A specialized type of the application, such as the worker queue or web
-  -- framework used, like "rails", "mailman", or "celery".
+  -- framework used, like \"rails\", \"mailman\", or \"celery\".
   , dsymUUIDs :: Maybe [Text]
-  -- ^ The UUIDs of the [debug symbols file](http://lldb.llvm.org/symbols.html)
+  -- ^ The UUIDs of the <http://lldb.llvm.org/symbols.html debug symbols file>
   -- corresponding to this application, if any.
   , duration :: Maybe Int
   -- ^ How long the app has been running for in milliseconds.
   , durationInForeground :: Maybe Int
-  -- ^ How long the app has been in the foreground of the device in milliseconds.
+  -- ^ How long the app has been in the foreground of the device in
+  -- milliseconds.
   , inForeground :: Maybe Bool
   -- ^ Whether or not the app was in the foreground when the error occurred.
   , isLaunching :: Maybe Bool
diff --git a/src/Data/Bugsnag/Types/BinaryArch.hs b/src/Data/Bugsnag/Types/BinaryArch.hs
--- a/src/Data/Bugsnag/Types/BinaryArch.hs
+++ b/src/Data/Bugsnag/Types/BinaryArch.hs
@@ -5,16 +5,12 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | The architecture of the running binary.
 data BinaryArch
   = X86
-  -- ^ x86/i386 (32-bit).
   | X86_64
-  -- ^ x86 (64-bit).
   | Arm32
-  -- ^ armeabi/armeabi-v7a (32-bit).
   | Arm64
-  -- ^ arm64-v8a (64-bit).
   | Arm64e
   | Armv6
   | Armv7
@@ -33,4 +29,4 @@
   toEncoding = genericToEncoding aesonOptions
 
 exampleBinaryArch :: BinaryArch
-exampleBinaryArch = toEnum 0
+exampleBinaryArch = X86
diff --git a/src/Data/Bugsnag/Types/Breadcrumb.hs b/src/Data/Bugsnag/Types/Breadcrumb.hs
--- a/src/Data/Bugsnag/Types/Breadcrumb.hs
+++ b/src/Data/Bugsnag/Types/Breadcrumb.hs
@@ -5,26 +5,47 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.BreadcrumbType
 
 data Breadcrumb = Breadcrumb
   { timestamp :: Text
-  -- ^ The time at which the event occurred, in [ISO 8601
-  -- format](https://tools.ietf.org/html/rfc3339#section-5.8).
+  -- ^ The time at which the event occurred, in
+  -- <https://tools.ietf.org/html/rfc3339#section-5.8 ISO 8601 format>.
   , name :: Text
-  -- ^ A short summary describing the event, such as the user action taken or a new application state.
+  -- ^ A short summary describing the event, such as the user action taken or a
+  -- new application state.
   , type_ :: BreadcrumbType
-  -- ^ A category which describes the breadcrumb, from the list of allowed values.
+  -- ^ A category which describes the breadcrumb, from the list of allowed
+  -- values.
+  --
+  -- -   @navigation@ - Changing screens or content being displayed, with a
+  --     defined destination and optionally a previous location.
+  --
+  -- -   @request@ - Sending and receiving requests and responses.
+  --
+  -- -   @process@ - Performing an intensive task or query.
+  --
+  -- -   @log@ - Messages and severity sent to a logging platform.
+  --
+  -- -   @user@ - Actions performed by the user, like text input, button
+  --     presses, or confirming\/cancelling an alert dialog.
+  --
+  -- -   @state@ - Changing the overall state of an app, such as closing,
+  --     pausing, or being moved to the background, as well as device state
+  --     changes like memory or battery warnings and network connectivity
+  --     changes.
+  --
+  -- -   @error@ - An error which was reported to BugSnag encountered in the
+  --     same session.
+  --
+  -- -   @manual@ - User-defined, manually added breadcrumbs.
   , metaData :: Maybe (KeyMap Text)
-  -- ^ Additional information about the event, as key/value pairs.
-  -- 
-  -- ```
-  -- {
-  --     "to": "PauseView",
-  --     "from": "PodBayDoorView"
-  -- }
-  -- ```
+  -- ^ Additional information about the event, as key\/value pairs.
+  --
+  -- > {
+  -- >     "to": "PauseView",
+  -- >     "from": "PodBayDoorView"
+  -- > }
   }
   deriving stock (Eq, Show, Generic)
 
@@ -40,5 +61,5 @@
   { timestamp = "2016-07-19T12:17:27-0700"
   , name = "Open menu"
   , type_ = exampleBreadcrumbType
-  , metaData = Just mempty
+  , metaData = Nothing
   }
diff --git a/src/Data/Bugsnag/Types/BreadcrumbType.hs b/src/Data/Bugsnag/Types/BreadcrumbType.hs
--- a/src/Data/Bugsnag/Types/BreadcrumbType.hs
+++ b/src/Data/Bugsnag/Types/BreadcrumbType.hs
@@ -5,24 +5,39 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | A category which describes the breadcrumb, from the list of allowed
+-- values.
+--
+-- -   @navigation@ - Changing screens or content being displayed, with a
+--     defined destination and optionally a previous location.
+--
+-- -   @request@ - Sending and receiving requests and responses.
+--
+-- -   @process@ - Performing an intensive task or query.
+--
+-- -   @log@ - Messages and severity sent to a logging platform.
+--
+-- -   @user@ - Actions performed by the user, like text input, button
+--     presses, or confirming\/cancelling an alert dialog.
+--
+-- -   @state@ - Changing the overall state of an app, such as closing,
+--     pausing, or being moved to the background, as well as device state
+--     changes like memory or battery warnings and network connectivity
+--     changes.
+--
+-- -   @error@ - An error which was reported to BugSnag encountered in the
+--     same session.
+--
+-- -   @manual@ - User-defined, manually added breadcrumbs.
 data BreadcrumbType
   = Navigation
-  -- ^ Changing screens or content being displayed, with a defined destination and optionally a previous location.
   | Request
-  -- ^ Sending and receiving requests and responses.
   | Process
-  -- ^ Performing an intensive task or query.
   | Log
-  -- ^ Messages and severity sent to a logging platform.
   | User
-  -- ^ Actions performed by the user, like text input, button presses, or confirming/cancelling an alert dialog.
   | State
-  -- ^ Changing the overall state of an app, such as closing, pausing, or being moved to the background, as well as device state changes like memory or battery warnings and network connectivity changes.
   | Error
-  -- ^ An error which was reported to Bugsnag encountered in the same session.
   | Manual
-  -- ^ User-defined, manually added breadcrumbs.
   deriving stock (Bounded, Enum, Eq, Show, Generic)
 
 instance FromJSON BreadcrumbType where
@@ -33,4 +48,4 @@
   toEncoding = genericToEncoding aesonOptions
 
 exampleBreadcrumbType :: BreadcrumbType
-exampleBreadcrumbType = toEnum 0
+exampleBreadcrumbType = Navigation
diff --git a/src/Data/Bugsnag/Types/DependentNotifier.hs b/src/Data/Bugsnag/Types/DependentNotifier.hs
--- a/src/Data/Bugsnag/Types/DependentNotifier.hs
+++ b/src/Data/Bugsnag/Types/DependentNotifier.hs
@@ -5,12 +5,11 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 data DependentNotifier = DependentNotifier
   { name :: Text
   -- ^ The notifier name.
   , version :: Text
-  -- ^ The notifier's current version.
+  -- ^ The notifier\'s current version.
   , url :: Text
   -- ^ The URL associated with the notifier.
   }
diff --git a/src/Data/Bugsnag/Types/Device.hs b/src/Data/Bugsnag/Types/Device.hs
--- a/src/Data/Bugsnag/Types/Device.hs
+++ b/src/Data/Bugsnag/Types/Device.hs
@@ -5,9 +5,12 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.RuntimeVersion
 
+-- | Information about the computer\/device running the app. These fields are
+-- optional but highly recommended. To display custom device data alongside
+-- these standard fields on the dashboard, the custom data should be
+-- included in the @metaData@ object in a @device@ object.
 data Device = Device
   { hostname :: Maybe Text
   -- ^ The hostname of the server running your code, if applicable.
@@ -20,13 +23,13 @@
   , modelNumber :: Maybe Text
   -- ^ The model number of the device.
   , osName :: Maybe Text
-  -- ^ The device's operating system name.
+  -- ^ The device\'s operating system name.
   , osVersion :: Maybe Text
-  -- ^ The device's operating system version.
+  -- ^ The device\'s operating system version.
   , freeMemory :: Maybe Int
-  -- ^ The number of bytes unused in the device's RAM.
+  -- ^ The number of bytes unused in the device\'s RAM.
   , totalMemory :: Maybe Int
-  -- ^ The number of total bytes in the device's RAM.
+  -- ^ The number of total bytes in the device\'s RAM.
   , freeDisk :: Maybe Int
   -- ^ The number of unused bytes on the drive running the application.
   , browserName :: Maybe Text
@@ -38,14 +41,14 @@
   , orientation :: Maybe Text
   -- ^ The orientation of the device at the time of the error.
   , time :: Maybe Text
-  -- ^ The time at which the error occurred, in [ISO 8601
-  -- format](https://tools.ietf.org/html/rfc3339#section-5.8).
+  -- ^ The time at which the error occurred, in
+  -- <https://tools.ietf.org/html/rfc3339#section-5.8 ISO 8601 format>.
   , cpuAbi :: Maybe [Text]
-  -- ^ The [ABIs](https://developer.android.com/ndk/guides/abis) supported by the device (Android only).
+  -- ^ The <https://developer.android.com/ndk/guides/abis ABIs> supported by
+  -- the device (Android only).
   , runtimeVersions :: Maybe RuntimeVersion
-  -- ^ The versions of the relevant runtimes, languages and/or frameworks for the platform.
   , macCatalystiOSVersion :: Maybe Text
-  -- ^ The device's Mac Catalyst iOS version.
+  -- ^ The device\'s Mac Catalyst iOS version.
   }
   deriving stock (Eq, Show, Generic)
 
@@ -61,7 +64,7 @@
   { hostname = Just "web1.internal"
   , id = Just "fd124e87760c4281aef"
   , manufacturer = Just "LGE"
-  , model = Just $ "Nexus 6P"
+  , model = Just "Nexus 6P"
   , modelNumber = Just "600"
   , osName = Just "android"
   , osVersion = Just "8.0.1"
@@ -70,7 +73,7 @@
   , freeDisk = Just 13478064128
   , browserName = Just "Chrome"
   , browserVersion = Just "61.0.3163.100"
-  , jailbroken = Just False
+  , jailbroken = Nothing
   , orientation = Just "portrait"
   , time = Just "2018-08-07T10:16:34.564Z"
   , cpuAbi = Just ["x86_64"]
diff --git a/src/Data/Bugsnag/Types/ErrorType.hs b/src/Data/Bugsnag/Types/ErrorType.hs
--- a/src/Data/Bugsnag/Types/ErrorType.hs
+++ b/src/Data/Bugsnag/Types/ErrorType.hs
@@ -5,38 +5,24 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | This should be set to indicate the type of runtime the thread was
+-- running on so that the stacktrace can be parsed correctly.
 data ErrorType
   = Android
-  -- ^ For Android
   | Browserjs
-  -- ^ For browser-based JavaScript
   | C
-  -- ^ For C based platforms
   | Cocoa
-  -- ^ For Cocoa (iOS/tvOS/macOS)
   | Csharp
-  -- ^ For C# based platforms
   | Electronnodejs
-  -- ^ For Electron main thread
   | Electronrendererjs
-  -- ^ For Electron renderer thread
   | Expojs
-  -- ^ For Expo JavaScript
   | Go
-  -- ^ For Go based platforms
   | Java
-  -- ^ For Java based platforms
   | Nodejs
-  -- ^ For Node.js JavaScript
   | Php
-  -- ^ For PHP based platforms
   | Python
-  -- ^ For Python based platforms
   | Reactnativejs
-  -- ^ For React Native JavaScript
   | Ruby
-  -- ^ For Ruby based platforms
   deriving stock (Bounded, Enum, Eq, Show, Generic)
 
 instance FromJSON ErrorType where
@@ -47,4 +33,4 @@
   toEncoding = genericToEncoding aesonOptions
 
 exampleErrorType :: ErrorType
-exampleErrorType = toEnum 0
+exampleErrorType = Android
diff --git a/src/Data/Bugsnag/Types/Event.hs b/src/Data/Bugsnag/Types/Event.hs
--- a/src/Data/Bugsnag/Types/Event.hs
+++ b/src/Data/Bugsnag/Types/Event.hs
@@ -5,7 +5,6 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.Exception
 import Data.Bugsnag.Types.Breadcrumb
 import Data.Bugsnag.Types.Request
@@ -21,128 +20,112 @@
 data Event = Event
   { exceptions :: [Exception]
   -- ^ An array of exceptions that occurred during this event. There must be at
-  -- least one entry. Most of the time there will only be one exception, but some
-  -- languages support "nested" or "caused by" exceptions. In this case,
-  -- exceptions should be unwrapped and added to the array one at a time. The
-  -- array should be in order from the outermost error to the innermost. For
-  -- example, the first element in the array should be the error caused by the
-  -- second element, and so on.
+  -- least one entry. Most of the time there will only be one exception, but
+  -- some languages support \"nested\" or \"caused by\" exceptions. In this
+  -- case, exceptions should be unwrapped and added to the array one at a
+  -- time. The array should be in order from the outermost error to the
+  -- innermost. For example, the first element in the array should be the
+  -- error caused by the second element, and so on.
   , breadcrumbs :: Maybe [Breadcrumb]
   -- ^ An array of user- and system-initiated events which led up to an error,
-  -- providing additional context. This list is sequential and ordered newest to
-  -- oldest.
+  -- providing additional context. This list is sequential and ordered newest
+  -- to oldest.
   , request :: Maybe Request
-  -- ^ Details about the web request from the client that experienced the error,
-  -- if relevant. To display custom request data alongside these standard fields
-  -- on the Bugsnag website, the custom data should be included in the `metaData`
-  -- object in a `request` object.
   , threads :: Maybe [Thread]
-  -- ^ An array of background threads. This is optional but recommended for apps
-  -- that rely heavily on threading. Threads should be in an order that makes
-  -- sense for your application.
+  -- ^ An array of background threads. This is optional but recommended for
+  -- apps that rely heavily on threading. Threads should be in an order that
+  -- makes sense for your application.
   , context :: Maybe Text
-  -- ^ A string representing what was happening in the application at the time of
-  -- the error. This string could be used for grouping purposes, depending on the
-  -- event. Usually this would represent the controller and action in a server
-  -- based project. It could represent the screen that the user was interacting
-  -- with in a client side project.
-  -- For example:
-  -- 
-  -- * On Ruby on Rails the context could be `controller#action`.
-  -- 
-  -- * In Android, the context could be the top most Activity.
-  -- 
-  -- * In iOS, the context could be the name of the top most
-  --      UIViewController.
+  -- ^ A string representing what was happening in the application at the time
+  -- of the error. This string could be used for grouping purposes, depending
+  -- on the event. Usually this would represent the controller and action in
+  -- a server based project. It could represent the screen that the user was
+  -- interacting with in a client side project. For example:
+  --
+  -- -   On Ruby on Rails the context could be @controller#action@.
+  --
+  -- -   In Android, the context could be the top most Activity.
+  --
+  -- -   In iOS, the context could be the name of the top most
+  --     UIViewController.
   , groupingHash :: Maybe Text
-  -- ^ Bugsnag's [default
-  -- error grouping](https://docs.bugsnag.com/product/error-grouping) can be
-  -- overridden by specifying a custom grouping hash.
+  -- ^ The
+  -- <https://docs.bugsnag.com/product/error-grouping default error grouping>
+  -- can be overridden by specifying a custom grouping hash.
   , unhandled :: Maybe Bool
   -- ^ Whether the error was unhandled. If true, the error was detected by the
-  -- notifier because it was not handled by the application. If false, the errors
-  -- was handled and reported using Bugsnag.notify.
+  -- notifier because it was not handled by the application. If false, the
+  -- errors was handled and reported using Bugsnag.notify.
   , severity :: Maybe Severity
   -- ^ The severity of the error
+  --
+  -- -   @error@ - The default for unhandled errors.
+  --
+  -- -   @warning@ - The default when Bugsnag.notify is called.
+  --
+  -- -   @info@ - Can be used in manual Bugsnag.notify calls.
   , severityReason :: Maybe SeverityReason
-  -- ^ Information about why the severity was picked.
   , projectPackages :: Maybe [Text]
-  -- ^ Sets which package names Bugsnag should consider as a part of the running
-  -- application. We mark stacktrace lines as in-project if they originate from
-  -- any of these packages and this allows us to improve the visual display of the
-  -- stacktrace on the dashboard.
+  -- ^ Sets which package names should be considered as a part of the running
+  -- application. We mark stacktrace lines as in-project if they originate
+  -- from any of these packages and this allows us to improve the visual
+  -- display of the stacktrace on the dashboard.
   , user :: Maybe User
-  -- ^ Information about the user affected by the error. These fields are optional
-  -- but highly recommended. To display custom user data alongside these standard
-  -- fields on the Bugsnag website, the custom data should be included in the
-  -- `metaData` object in a `user` object.
   , app :: Maybe Application
-  -- ^ Information about the app where the error occurred. These fields are
-  -- optional but highly recommended. To display custom app data alongside these
-  -- standard fields on the Bugsnag website, the custom data should be included
-  -- in the `metaData` object in an `app` object.
   , device :: Maybe Device
-  -- ^ Information about the computer/device running the app. These fields are
-  -- optional but highly recommended. To display custom device data alongside
-  -- these standard fields on the Bugsnag website, the custom data should be
-  -- included in the `metaData` object in a `device` object.
   , session :: Maybe Session
-  -- ^ Details of any session information associated with the event.
-  -- 
-  -- This can be used alongside the [Bugsnag Session Tracking API](https://bugsnagsessiontrackingapi.docs.apiary.io) to associate the event with a session so that a release's crash rate can be determined.
   , featureFlags :: Maybe [FeatureFlag]
-  -- ^ Details of the feature flags (experiments) and associated variants that were active when the error occurred.
+  -- ^ Details of the feature flags (experiments) and associated variants that
+  -- were active when the error occurred.
   , metaData :: Maybe (KeyMap (KeyMap Text))
-  -- ^ An object containing any further data you wish to attach to this
-  -- error event. This should contain one or more objects, with each
-  -- object being displayed in its own tab on the event details on Bugsnag.
-  -- 
-  -- ```
-  -- {
-  --     // Custom user data to be displayed in the User tab along with standard
-  --     // user fields on the Bugsnag website.
-  --     "user": {
-  --        ...
-  --     },
-  -- 
-  --     // Custom app data to be displayed in the App tab along with standard
-  --     // app fields on the Bugsnag website.
-  --     "app": {
-  --        ...
-  --     },
-  -- 
-  --     // Custom device data to be displayed in the Device tab along with
-  --     //standard device fields on the Bugsnag website.
-  --     "device": {
-  --        ...
-  --     },
-  -- 
-  --     Custom request data to be displayed in the Request tab along with
-  --     standard request fields on the Bugsnag website.
-  --     "request": {
-  --        ...
-  --     },
-  -- 
-  --     // This will be displayed as an extra tab on the Bugsnag website.
-  --     "Some data": {
-  -- 
-  --         // A key value pair that will be displayed in the first tab.
-  --         "key": "value",
-  -- 
-  --         // Key value pairs can be contained in nested objects which helps
-  --         // to organise the information presented in the tab.
-  --         "setOfKeys": {
-  --             "key": "value",
-  --             "key2": "value"
-  --         }
-  --     },
-  -- 
-  --     // This would be the second extra tab on the Bugsnag website.
-  --     "Some more data": {
-  --         ...
-  --     }
-  -- }
-  -- ```
+  -- ^ An object containing any further data you wish to attach to this error
+  -- event. This should contain one or more objects, with each object being
+  -- displayed in its own tab on the event details on the dashboard.
+  --
+  -- >   {
+  -- >       // Custom user data to be displayed in the User tab along with standard
+  -- >       // user fields on the dashboard.
+  -- >       "user": {
+  -- >          ...
+  -- >       },
+  -- >
+  -- >       // Custom app data to be displayed in the App tab along with standard
+  -- >       // app fields on the dashboard.
+  -- >       "app": {
+  -- >          ...
+  -- >       },
+  -- >
+  -- >       // Custom device data to be displayed in the Device tab along with
+  -- >       //standard device fields on the dashboard.
+  -- >       "device": {
+  -- >          ...
+  -- >       },
+  -- >
+  -- >       Custom request data to be displayed in the Request tab along with
+  -- >       standard request fields on the dashboard.
+  -- >       "request": {
+  -- >          ...
+  -- >       },
+  -- >
+  -- >       // This will be displayed as an extra tab on the dashboard.
+  -- >       "Some data": {
+  -- >
+  -- >           // A key value pair that will be displayed in the first tab.
+  -- >           "key": "value",
+  -- >
+  -- >           // Key value pairs can be contained in nested objects which helps
+  -- >           // to organize the information presented in the tab.
+  -- >           "setOfKeys": {
+  -- >               "key": "value",
+  -- >               "key2": "value"
+  -- >           }
+  -- >       },
+  -- >
+  -- >       // This would be the second extra tab on the dashboard.
+  -- >       "Some more data": {
+  -- >           ...
+  -- >       }
+  -- >   }
   }
   deriving stock (Eq, Show, Generic)
 
@@ -164,11 +147,11 @@
   , unhandled = Just True
   , severity = Just exampleSeverity
   , severityReason = Just exampleSeverityReason
-  , projectPackages = Just ["com.example.package1"]
+  , projectPackages = Just ["com.example.package1","com.example.package2"]
   , user = Just exampleUser
   , app = Just exampleApplication
   , device = Just exampleDevice
   , session = Just exampleSession
   , featureFlags = Just [exampleFeatureFlag]
-  , metaData = Just mempty
+  , metaData = Nothing
   }
diff --git a/src/Data/Bugsnag/Types/Exception.hs b/src/Data/Bugsnag/Types/Exception.hs
--- a/src/Data/Bugsnag/Types/Exception.hs
+++ b/src/Data/Bugsnag/Types/Exception.hs
@@ -5,27 +5,24 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.Stackframe
 import Data.Bugsnag.Types.ErrorType
 
 data Exception = Exception
   { errorClass :: Text
-  -- ^ The class of error which occurred. This field is used to group the errors
-  -- together so should not contain any contextual information that would
-  -- prevent correct grouping. This would ordinarily be the Exception name when
-  -- dealing with an exception.
+  -- ^ The class of error which occurred. This field is used to group the
+  -- errors together so should not contain any contextual information that
+  -- would prevent correct grouping. This would ordinarily be the Exception
+  -- name when dealing with an exception.
   , message :: Maybe Text
-  -- ^ The error message associated with the error. Usually this will contain some
-  -- information about this specific instance of the error and is not used to
-  -- group the errors.
+  -- ^ The error message associated with the error. Usually this will contain
+  -- some information about this specific instance of the error and is not
+  -- used to group the errors.
   , stacktrace :: [Stackframe]
   -- ^ An array of stackframe objects. Each object represents one line in the
-  -- exception's stacktrace. Bugsnag uses this information to help with error
+  -- exception\'s stacktrace. This information is used to help with error
   -- grouping, as well as displaying it to the user.
   , type_ :: Maybe ErrorType
-  -- ^ This should be set for the following platforms so that the stacktrace can be
-  -- parsed correctly.
   }
   deriving stock (Eq, Show, Generic)
 
@@ -39,7 +36,7 @@
 exampleException :: Exception
 exampleException = Exception
   { errorClass = "NoMethodError"
-  , message = Just $ "Unable to connect to database"
+  , message = Just "Unable to connect to database"
   , stacktrace = [exampleStackframe]
   , type_ = Just exampleErrorType
   }
diff --git a/src/Data/Bugsnag/Types/FeatureFlag.hs b/src/Data/Bugsnag/Types/FeatureFlag.hs
--- a/src/Data/Bugsnag/Types/FeatureFlag.hs
+++ b/src/Data/Bugsnag/Types/FeatureFlag.hs
@@ -5,7 +5,6 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 data FeatureFlag = FeatureFlag
   { featureFlag :: Text
   -- ^ The name of the feature flag.
diff --git a/src/Data/Bugsnag/Types/Notifier.hs b/src/Data/Bugsnag/Types/Notifier.hs
--- a/src/Data/Bugsnag/Types/Notifier.hs
+++ b/src/Data/Bugsnag/Types/Notifier.hs
@@ -5,19 +5,21 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.DependentNotifier
 
+-- | Describes the notifier itself. These properties are used within BugSnag
+-- to track error rates from a notifier.
 data Notifier = Notifier
   { name :: Text
   -- ^ The notifier name.
   , version :: Text
-  -- ^ The notifier's current version.
+  -- ^ The notifier\'s current version.
   , url :: Text
   -- ^ The URL associated with the notifier.
   , dependencies :: Maybe [DependentNotifier]
-  -- ^ For platforms where multiple notifiers are used to capture an event, an optional
-  -- array containing the details of the additional notifiers can be specified.
+  -- ^ For platforms where multiple notifiers are used to capture an event, an
+  -- optional array containing the details of the additional notifiers can be
+  -- specified.
   }
   deriving stock (Eq, Show, Generic)
 
diff --git a/src/Data/Bugsnag/Types/Payload.hs b/src/Data/Bugsnag/Types/Payload.hs
--- a/src/Data/Bugsnag/Types/Payload.hs
+++ b/src/Data/Bugsnag/Types/Payload.hs
@@ -5,27 +5,24 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.Notifier
 import Data.Bugsnag.Types.Event
 
 data Payload = Payload
   { apiKey :: Maybe Text
-  -- ^ The API Key associated with the project. Informs Bugsnag which project has
-  -- generated this error.
-  -- 
-  -- This is provided for legacy notifiers. It is preferable to use the `Bugsnag-Api-Key` header instead.
+  -- ^ The API Key associated with the project. Informs BugSnag which project
+  -- has generated this error. This is provided for legacy notifiers. It is
+  -- preferable to use the @Bugsnag-Api-Key@ header instead.
   , payloadVersion :: Text
-  -- ^ The version number of the payload. This is currently `5`.
-  -- 
-  -- The `Bugsnag-Payload-Version` header should be included as well, for compatibility reasons.
+  -- ^ The version number of the payload. This is currently @5@. The
+  -- @Bugsnag-Payload-Version@ header should be included as well for
+  -- compatibility reasons.
   , notifier :: Notifier
-  -- ^ Describes the notifier itself. These properties are used within Bugsnag to
-  -- track error rates from a notifier.
   , events :: [Event]
-  -- ^ An array of error events that Bugsnag should be notified of. A notifier
-  -- can choose to group notices into an array to minimize network traffic, or
-  -- can notify Bugsnag each time an event occurs. Should contain at least 1 event.
+  -- ^ An array of error events that BugSnag should be notified of. A notifier
+  -- can choose to group notices into an array to minimize network traffic,
+  -- or can notify BugSnag each time an event occurs. Should contain at least
+  -- 1 event.
   }
   deriving stock (Eq, Show, Generic)
 
diff --git a/src/Data/Bugsnag/Types/Request.hs b/src/Data/Bugsnag/Types/Request.hs
--- a/src/Data/Bugsnag/Types/Request.hs
+++ b/src/Data/Bugsnag/Types/Request.hs
@@ -5,26 +5,27 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | Details about the web request from the client that experienced the
+-- error, if relevant. To display custom request data alongside these
+-- standard fields on the dashboard, the custom data should be included in
+-- the @metaData@ object in a @request@ object.
 data Request = Request
   { clientIp :: Maybe Text
   -- ^ The IP address of the client that experienced the error.
   , headers :: Maybe (KeyMap Text)
   -- ^ The headers sent with the request.
-  -- 
-  -- ```
-  -- {
-  --     "Accept": "*/*",
-  --     "Accept-Encoding": "gzip, deflate, sdch, br",
-  --     "Accept-Language": "en-US,en;q=0.8"
-  -- }
-  -- ```
+  --
+  -- > {
+  -- >     "Accept": "*/*",
+  -- >     "Accept-Encoding": "gzip, deflate, sdch, br",
+  -- >     "Accept-Language": "en-US,en;q=0.8"
+  -- > }
   , httpMethod :: Maybe Text
   -- ^ The HTTP method used.
   , url :: Maybe Text
   -- ^ The URL of the request.
   , referer :: Maybe Text
-  -- ^ The [HTTP referer](https://en.wikipedia.org/wiki/HTTP_referer)
+  -- ^ The <https://en.wikipedia.org/wiki/HTTP_referer HTTP referer>
   }
   deriving stock (Eq, Show, Generic)
 
@@ -38,7 +39,7 @@
 exampleRequest :: Request
 exampleRequest = Request
   { clientIp = Just "192.168.44.0"
-  , headers = Just mempty
+  , headers = Nothing
   , httpMethod = Just "PUT"
   , url = Just "http://example.com/users/19/settings"
   , referer = Just "http://example.com?q=awesome"
diff --git a/src/Data/Bugsnag/Types/RuntimeVersion.hs b/src/Data/Bugsnag/Types/RuntimeVersion.hs
--- a/src/Data/Bugsnag/Types/RuntimeVersion.hs
+++ b/src/Data/Bugsnag/Types/RuntimeVersion.hs
@@ -5,7 +5,8 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | The versions of the relevant runtimes, languages and\/or frameworks for
+-- the platform.
 data RuntimeVersion = RuntimeVersion
   { androidApiLevel :: Maybe Text
   -- ^ The Android API level (Android only).
@@ -14,7 +15,7 @@
   , celery :: Maybe Text
   -- ^ Celery task queue version (Python only).
   , clangVersion :: Maybe Text
-  -- ^ Clang compiler version (iOS/tvOS/macOS only).
+  -- ^ Clang compiler version (iOS\/tvOS\/macOS only).
   , cocos2dx :: Maybe Text
   -- ^ Cocos2d-x framework version (Cocos2d-x only).
   , delayedJob :: Maybe Text
@@ -64,7 +65,7 @@
   , node :: Maybe Text
   -- ^ Node.js version (Javascript only).
   , osBuild :: Maybe Text
-  -- ^ Build number of the OS (iOS/tvOS/macOS only).
+  -- ^ Build number of the OS (iOS\/tvOS\/macOS only).
   , php :: Maybe Text
   -- ^ Version of PHP (PHP only).
   , python :: Maybe Text
@@ -78,9 +79,9 @@
   , rake :: Maybe Text
   -- ^ Rake tool version (Ruby only).
   , reactNative :: Maybe Text
-  -- ^ Version of React Native (React Native/Expo only).
+  -- ^ Version of React Native (React Native\/Expo only).
   , reactNativeJsEngine :: Maybe Text
-  -- ^ Javascript engine type (React Native/Expo only).
+  -- ^ Javascript engine type (React Native\/Expo only).
   , resque :: Maybe Text
   -- ^ Resque library version (Ruby only).
   , revel :: Maybe Text
@@ -100,7 +101,7 @@
   , springFramework :: Maybe Text
   -- ^ Spring framework version (Java only).
   , swift :: Maybe Text
-  -- ^ Swift language version (iOS/tvOS/macOS only).
+  -- ^ Swift language version (iOS\/tvOS\/macOS only).
   , symfony :: Maybe Text
   -- ^ Symfony framework version (PHP only).
   , tornado :: Maybe Text
@@ -130,10 +131,10 @@
   , cocos2dx = Just "3.17.2"
   , delayedJob = Just "4.1.8"
   , django = Just "2.1.7"
-  , dotnet = Just $ ".NET Framework 4.7.3416.0"
-  , dotnetApiCompatibility = Just $ ".NET 2.0 Subset"
+  , dotnet = Just ".NET Framework 4.7.3416.0"
+  , dotnetApiCompatibility = Just ".NET 2.0 Subset"
   , dotnetClr = Just "4.0.30319.17379"
-  , dotnetScriptingRuntime = Just $ ".NET 3.5 equivalent"
+  , dotnetScriptingRuntime = Just ".NET 3.5 equivalent"
   , electron = Just "11.4.3"
   , eventMachine = Just "1.2.7"
   , expoApp = Just "2.10.0.105125"
@@ -141,7 +142,7 @@
   , flask = Just "1.0.2"
   , gin = Just "1.3.0"
   , go = Just "1.11.2"
-  , javaType = Just $ "Java(TM) SE Runtime Environment"
+  , javaType = Just "Java(TM) SE Runtime Environment"
   , javaVersion = Just "1.8.0_131-b11"
   , jruby = Just "9.2.5.0"
   , laravel = Just "5.7.22"
diff --git a/src/Data/Bugsnag/Types/Session.hs b/src/Data/Bugsnag/Types/Session.hs
--- a/src/Data/Bugsnag/Types/Session.hs
+++ b/src/Data/Bugsnag/Types/Session.hs
@@ -5,16 +5,21 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.SessionEvent
 
+-- | Details of any session information associated with the event.
+--
+-- This can be used alongside the
+-- <https://smartbear.portal.swaggerhub.com/bugsnag/default/bugsnag-session-reporting-api Session Tracking API>
+-- to associate the event with a session so that a release\'s crash rate
+-- can be determined.
 data Session = Session
   { id :: Text
   -- ^ The unique identifier of the session.
   , startedAt :: Text
-  -- ^ The time (in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format) at which the session started.
+  -- ^ The time (in <https://en.wikipedia.org/wiki/ISO_8601 ISO 8601> format)
+  -- at which the session started.
   , events :: SessionEvent
-  -- ^ Details of the number of handled and unhandled events that have occurred so far in this session.
   }
   deriving stock (Eq, Show, Generic)
 
diff --git a/src/Data/Bugsnag/Types/SessionEvent.hs b/src/Data/Bugsnag/Types/SessionEvent.hs
--- a/src/Data/Bugsnag/Types/SessionEvent.hs
+++ b/src/Data/Bugsnag/Types/SessionEvent.hs
@@ -5,12 +5,15 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | Details of the number of handled and unhandled events that have occurred
+-- so far in this session.
 data SessionEvent = SessionEvent
   { handled :: Int
-  -- ^  The number of handled events that have occurred in this session (including this event).
+  -- ^ The number of handled events that have occurred in this session
+  -- (including this event).
   , unhandled :: Int
-  -- ^  The number of unhandled events that have occurred in this session (including this event)
+  -- ^ The number of unhandled events that have occurred in this session
+  -- (including this event)
   }
   deriving stock (Eq, Show, Generic)
 
diff --git a/src/Data/Bugsnag/Types/Severity.hs b/src/Data/Bugsnag/Types/Severity.hs
--- a/src/Data/Bugsnag/Types/Severity.hs
+++ b/src/Data/Bugsnag/Types/Severity.hs
@@ -5,14 +5,17 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | The severity of the error
+--
+-- -   @error@ - The default for unhandled errors.
+--
+-- -   @warning@ - The default when Bugsnag.notify is called.
+--
+-- -   @info@ - Can be used in manual Bugsnag.notify calls.
 data Severity
   = Error
-  -- ^ The default for unhandled errors.
   | Warning
-  -- ^ The default when Bugsnag.notify is called.
   | Info
-  -- ^ Can be used in manual Bugsnag.notify calls.
   deriving stock (Bounded, Enum, Eq, Show, Generic)
 
 instance FromJSON Severity where
@@ -23,4 +26,4 @@
   toEncoding = genericToEncoding aesonOptions
 
 exampleSeverity :: Severity
-exampleSeverity = toEnum 0
+exampleSeverity = Error
diff --git a/src/Data/Bugsnag/Types/SeverityReason.hs b/src/Data/Bugsnag/Types/SeverityReason.hs
--- a/src/Data/Bugsnag/Types/SeverityReason.hs
+++ b/src/Data/Bugsnag/Types/SeverityReason.hs
@@ -5,17 +5,54 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.SeverityReasonType
 import Data.Bugsnag.Types.SeverityReasonAttributes
 
+-- | Information about why the severity was picked.
 data SeverityReason = SeverityReason
   { type_ :: Maybe SeverityReasonType
   -- ^ A type key that represents the reason for the assigned severity.
+  --
+  -- -   @unhandledException@- Whenever an uncaught exception is discovered
+  --     (generic).
+  -- -   @unhandledError@ - When an error is discovered (PHP).
+  -- -   @log@ - Whenever a log message is sent (generic).
+  -- -   @signal@ - Whenever a \"fatal\" signal is discovered (iOS).
+  -- -   @strictMode@ - Whenever a strictMode issue is discovered (Android).
+  -- -   @unhandledPromiseRejection@ Whenever an unhandled promise rejection
+  --     is discovered (JS\/Node JS\/React Native).
+  -- -   @callbackErrorIntercept@- callbackErrorIntercept (Node JS).
+  -- -   @errorClass@ - Whenever an exception with a particular class is
+  --     automatically sent (Ruby).
+  -- -   @exceptionClass@ - Whenever an exception with a particular class is
+  --     automatically sent (Java).
+  -- -   @unhandledPanic@ - When a panic is unhandled and crashes the app
+  --     (Go).
+  -- -   @unhandledErrorMiddleware@ - Unhandled errors in ${Negroni}
+  --     middleware have a default severity:error.
+  -- -   @unhandledExceptionMiddleware@ - Unhandled exceptions in ${Rack}
+  --     middleware have a default severity:error.
+  -- -   @userCallbackSetSeverity@ - Whenever a callback changes a report\'s
+  --     severity (generic).
+  -- -   @userSpecifiedSeverity@ - Whenever a severity is set through a
+  --     manual notify call (generic).
+  -- -   @handledException@ - Whenever a handled exception is sent through
+  --     (generic).
+  -- -   @handledError@ - Whenever a handled error is sent through (PHP).
+  -- -   @handledPanic@ - Whenever a panic is handled through AutoNotify or
+  --     Recover (Go).
+  -- -   @userContextSetSeverity@ - When a user creates a context which
+  --     changes the severity (Python).
+  -- -   @anrError@ - Whenever an ANR is detected (Android).
+  -- -   @appHang@ - Whenever an app hang is detected (Cocoa).
+  -- -   @outOfMemory@ - When an app is terminated because it used too much
+  --     memory (Cocoa).
+  -- -   @thermalKill@ - When an app is terminated because the device is
+  --     overheating (Cocoa).
   , attributes :: Maybe SeverityReasonAttributes
-  -- ^ Optional attributes to provide extra information about the severity reason.
   , unhandledOverridden :: Maybe Bool
-  -- ^ Whether the event's `unhandled` flag was overridden from the notifier's default value.
+  -- ^ Whether the event\'s @unhandled@ flag was overridden from the
+  -- notifier\'s default value.
   }
   deriving stock (Eq, Show, Generic)
 
diff --git a/src/Data/Bugsnag/Types/SeverityReasonAttributes.hs b/src/Data/Bugsnag/Types/SeverityReasonAttributes.hs
--- a/src/Data/Bugsnag/Types/SeverityReasonAttributes.hs
+++ b/src/Data/Bugsnag/Types/SeverityReasonAttributes.hs
@@ -5,27 +5,28 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | Optional attributes to provide extra information about the severity
+-- reason.
 data SeverityReasonAttributes = SeverityReasonAttributes
   { errorType :: Maybe Text
-  -- ^ Included for `unhandledError` severity reason. See [PHP Error
-  -- Constants](http://php.net/manual/en/errorfunc.constants.php).
+  -- ^ Included for @unhandledError@ severity reason. See
+  -- <http://php.net/manual/en/errorfunc.constants.php PHP Error Constants>.
   , level :: Maybe Text
-  -- ^ Included for `log` severity reason.
+  -- ^ Included for @log@ severity reason.
   , signalType :: Maybe Text
-  -- ^ Included for `signal` severity reason. See [Signal
-  -- Codes](https://en.wikipedia.org/wiki/C_signal_handling).
+  -- ^ Included for @signal@ severity reason. See
+  -- <https://en.wikipedia.org/wiki/C_signal_handling Signal Codes>.
   , violationType :: Maybe Text
-  -- ^ Included for `strictMode` severity reason. See [Strict
-  -- Mode](https://developer.android.com/reference/android/os/StrictMode.html).
+  -- ^ Included for @strictMode@ severity reason. See
+  -- <https://developer.android.com/reference/android/os/StrictMode.html Strict Mode>.
   , errorClass :: Maybe Text
-  -- ^ Included for `errorClass` severity reason. Specifies the error class
+  -- ^ Included for @errorClass@ severity reason. Specifies the error class
   -- that is automatically sent.
   , framework :: Maybe Text
-  -- ^ Included for middleware severity reasons, specifies the middleware
-  -- that had an error.
+  -- ^ Included for middleware severity reasons, specifies the middleware that
+  -- had an error.
   , exceptionClass :: Maybe Text
-  -- ^ Included for `exceptionClass` severity reason. Specifies the error class
+  -- ^ Included for @exceptionClass@ severity reason. Specifies the error class
   -- that is automatically sent.
   }
   deriving stock (Eq, Show, Generic)
diff --git a/src/Data/Bugsnag/Types/SeverityReasonType.hs b/src/Data/Bugsnag/Types/SeverityReasonType.hs
--- a/src/Data/Bugsnag/Types/SeverityReasonType.hs
+++ b/src/Data/Bugsnag/Types/SeverityReasonType.hs
@@ -5,52 +5,67 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | A type key that represents the reason for the assigned severity.
+--
+-- -   @unhandledException@- Whenever an uncaught exception is discovered
+--     (generic).
+-- -   @unhandledError@ - When an error is discovered (PHP).
+-- -   @log@ - Whenever a log message is sent (generic).
+-- -   @signal@ - Whenever a \"fatal\" signal is discovered (iOS).
+-- -   @strictMode@ - Whenever a strictMode issue is discovered (Android).
+-- -   @unhandledPromiseRejection@ Whenever an unhandled promise rejection
+--     is discovered (JS\/Node JS\/React Native).
+-- -   @callbackErrorIntercept@- callbackErrorIntercept (Node JS).
+-- -   @errorClass@ - Whenever an exception with a particular class is
+--     automatically sent (Ruby).
+-- -   @exceptionClass@ - Whenever an exception with a particular class is
+--     automatically sent (Java).
+-- -   @unhandledPanic@ - When a panic is unhandled and crashes the app
+--     (Go).
+-- -   @unhandledErrorMiddleware@ - Unhandled errors in ${Negroni}
+--     middleware have a default severity:error.
+-- -   @unhandledExceptionMiddleware@ - Unhandled exceptions in ${Rack}
+--     middleware have a default severity:error.
+-- -   @userCallbackSetSeverity@ - Whenever a callback changes a report\'s
+--     severity (generic).
+-- -   @userSpecifiedSeverity@ - Whenever a severity is set through a
+--     manual notify call (generic).
+-- -   @handledException@ - Whenever a handled exception is sent through
+--     (generic).
+-- -   @handledError@ - Whenever a handled error is sent through (PHP).
+-- -   @handledPanic@ - Whenever a panic is handled through AutoNotify or
+--     Recover (Go).
+-- -   @userContextSetSeverity@ - When a user creates a context which
+--     changes the severity (Python).
+-- -   @anrError@ - Whenever an ANR is detected (Android).
+-- -   @appHang@ - Whenever an app hang is detected (Cocoa).
+-- -   @outOfMemory@ - When an app is terminated because it used too much
+--     memory (Cocoa).
+-- -   @thermalKill@ - When an app is terminated because the device is
+--     overheating (Cocoa).
 data SeverityReasonType
   = UnhandledException
-  -- ^ Whenever an uncaught exception is discovered (generic).
   | UnhandledError
-  -- ^ When an error is discovered (PHP).
   | Log
-  -- ^ Whenever a log message is sent (generic).
   | Signal
-  -- ^ Whenever a "fatal" signal is discovered (iOS).
   | StrictMode
-  -- ^ Whenever a strictMode issue is discovered (Android).
   | UnhandledPromiseRejection
-  -- ^ Whenever an unhandled promise rejection is discovered (JS/Node JS/React Native).
   | CallbackErrorIntercept
-  -- ^ callbackErrorIntercept (Node JS).
   | ErrorClass
-  -- ^ Whenever an exception with a particular class is automatically sent (Ruby).
   | ExceptionClass
-  -- ^ Whenever an exception with a particular class is automatically sent (Java).
   | UnhandledPanic
-  -- ^ When a panic is unhandled and crashes the app (Go).
   | UnhandledErrorMiddleware
-  -- ^ Unhandled errors in ${Negroni} middleware have a default severity:error.
   | UnhandledExceptionMiddleware
-  -- ^ Unhandled exceptions in ${Rack} middleware have a default severity:error.
   | UserCallbackSetSeverity
-  -- ^ Whenever a callback changes a report's severity (generic).
   | UserSpecifiedSeverity
-  -- ^ Whenever a severity is set through a manual notify call (generic).
   | HandledException
-  -- ^ Whenever a handled exception is sent through (generic).
   | HandledError
-  -- ^ Whenever a handled error is sent through (PHP).
   | HandledPanic
-  -- ^ Whenever a panic is handled through AutoNotify or Recover (Go).
   | UserContextSetSeverity
-  -- ^ When a user creates a context which changes the severity (Python).
   | AnrError
-  -- ^ Whenever an ANR is detected (Android).
   | AppHang
-  -- ^ Whenever an app hang is detected (Cocoa).
   | OutOfMemory
-  -- ^ When an app is terminated because it used too much memory (Cocoa).
   | ThermalKill
-  -- ^ When an app is terminated because the device is overheating (Cocoa).
   deriving stock (Bounded, Enum, Eq, Show, Generic)
 
 instance FromJSON SeverityReasonType where
@@ -61,4 +76,4 @@
   toEncoding = genericToEncoding aesonOptions
 
 exampleSeverityReasonType :: SeverityReasonType
-exampleSeverityReasonType = toEnum 0
+exampleSeverityReasonType = UnhandledException
diff --git a/src/Data/Bugsnag/Types/Stackframe.hs b/src/Data/Bugsnag/Types/Stackframe.hs
--- a/src/Data/Bugsnag/Types/Stackframe.hs
+++ b/src/Data/Bugsnag/Types/Stackframe.hs
@@ -5,11 +5,11 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 data Stackframe = Stackframe
   { file :: Text
   -- ^ The file that this stack frame was executing. It is recommended that you
-  -- strip any unnecessary or common information from the beginning of the path.
+  -- strip any unnecessary or common information from the beginning of the
+  -- path.
   , lineNumber :: Int
   -- ^ The line of the file that this frame of the stack was in.
   , columnNumber :: Maybe Int
@@ -17,56 +17,42 @@
   , method :: Text
   -- ^ The method that this particular stack frame is within.
   , inProject :: Maybe Bool
-  -- ^ If this stacktrace line is in the user's project code, set this to true. It
-  -- is useful for developers to be able to see which lines of a stacktrace are
-  -- within their own application, and which are within third party libraries.
-  -- This boolean field allows Bugsnag to display this information in the
-  -- stacktrace as well as use the information to help group errors better.
+  -- ^ If this stacktrace line is in the user\'s project code, set this to
+  -- true. It is useful for developers to be able to see which lines of a
+  -- stacktrace are within their own application, and which are within third
+  -- party libraries. This information is shown in the stacktrace on the
+  -- dashboard and is used to help group errors better.
   , code :: Maybe (KeyMap Text)
-  -- ^ The code in this file surrounding this line. This is an object containing
-  -- key value pairs where each key is a line number and each value is the code
-  -- from that line. You can include up to three lines on either side of the line
-  -- where the error occurred. These will be displayed on the bugsnag dashboard
-  -- when you expand that line.
-  -- 
-  -- ```
-  -- {
-  --     "1231": "  def a",
-  --     "1232": "",
-  --     "1233": "    if problem?",
-  --     "1234": "      raise 'something went wrong'",
-  --     "1235": "    end"
-  --     "1236": "",
-  --     "1237": "  end"
-  -- }
-  -- ```
   , frameAddress :: Maybe Text
-  -- ^ The run time memory address of the instruction being executed (for the first
-  -- stack frame) or to which control will return after the function call or
-  -- subroutine completes.
+  -- ^ The run time memory address of the instruction being executed (for the
+  -- first stack frame) or to which control will return after the function
+  -- call or subroutine completes.
   , loadAddress :: Maybe Text
   -- ^ The address in memory where the binary has been loaded at run time.
   , isLR :: Maybe Bool
-  -- ^ True if `frameAddress` corresponds to value of the Link Register. This is sometimes
-  -- the case for the second frame in a stack - e.g. for signals and mach exceptions.
+  -- ^ True if @frameAddress@ corresponds to value of the Link Register. This
+  -- is sometimes the case for the second frame in a stack - e.g. for signals
+  -- and mach exceptions.
   , isPC :: Maybe Bool
-  -- ^ True if `frameAddress` corresponds to the Program Counter.
+  -- ^ True if @frameAddress@ corresponds to the Program Counter.
   , symbolAddress :: Maybe Text
-  -- ^ The run time memory address of the symbol that most closely matches `frameAddress`.
+  -- ^ The run time memory address of the symbol that most closely matches
+  -- @frameAddress@.
   , machoFile :: Maybe Text
-  -- ^ The full path of the Mach-O binary (iOS/macOS/tvOS only).
+  -- ^ The full path of the Mach-O binary (iOS\/macOS\/tvOS only).
   , machoLoadAddress :: Maybe Text
-  -- ^ The address in memory where the Mach-O binary has been loaded at run time.
-  -- This may differ from `machoVMAddress` due to Address Space Layout Randomization.
-  -- The difference between `machoLoadAddress` and `machoVMAddress` is known as the
-  -- "slide" (iOS/macOS/tvOS only).
+  -- ^ The address in memory where the Mach-O binary has been loaded at run
+  -- time. This may differ from @machoVMAddress@ due to Address Space Layout
+  -- Randomization. The difference between @machoLoadAddress@ and
+  -- @machoVMAddress@ is known as the \"slide\" (iOS\/macOS\/tvOS only).
   , machoUUID :: Maybe Text
-  -- ^ A UUID which uniquely identifies this Mach-O binary (iOS/macOS/tvOS only).
+  -- ^ A UUID which uniquely identifies this Mach-O binary (iOS\/macOS\/tvOS
+  -- only).
   , machoVMAddress :: Maybe Text
-  -- ^ The memory address assigned to the Mach-O binary by the linker at build time
-  -- (iOS/macOS/tvOS only).
+  -- ^ The memory address assigned to the Mach-O binary by the linker at build
+  -- time (iOS\/macOS\/tvOS only).
   , codeIdentifier :: Maybe Text
-  -- ^ The ID of the executable/library that the frame relates to.
+  -- ^ The ID of the executable\/library that the frame relates to.
   }
   deriving stock (Eq, Show, Generic)
 
@@ -84,10 +70,10 @@
   , columnNumber = Just 123
   , method = "create"
   , inProject = Just True
-  , code = Just mempty
+  , code = Nothing
   , frameAddress = Just "0x000000010d131040"
   , loadAddress = Just "0x000000010d12e000"
-  , isLR = Just False
+  , isLR = Nothing
   , isPC = Just True
   , symbolAddress = Just "0x000000010d130fe6"
   , machoFile = Just "/System/Library/Frameworks/Foundation.framework/Foundation"
diff --git a/src/Data/Bugsnag/Types/Thread.hs b/src/Data/Bugsnag/Types/Thread.hs
--- a/src/Data/Bugsnag/Types/Thread.hs
+++ b/src/Data/Bugsnag/Types/Thread.hs
@@ -5,7 +5,6 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
 import Data.Bugsnag.Types.Stackframe
 import Data.Bugsnag.Types.ErrorType
 
@@ -15,15 +14,14 @@
   , name :: Maybe Text
   -- ^ A human readable name for the thread.
   , errorReportingThread :: Maybe Bool
-  -- ^ If this is the thread that the error was reported from (either an unhandled error or a call to bugsnag.notify), set this to true.
+  -- ^ If this is the thread that the error was reported from (either an
+  -- unhandled error or a call to bugsnag.notify), set this to true.
   , stacktrace :: Maybe [Stackframe]
   -- ^ An array of stacktrace objects. Each object represents one line in the
   -- stacktrace of the thread at the point that the error occurred.
   , state :: Maybe Text
   -- ^ The state of the thread at the time of the error.
   , type_ :: Maybe ErrorType
-  -- ^ This should be set to indicate the type of runtime the thread was running on so that the stacktrace can be
-  -- parsed correctly.
   }
   deriving stock (Eq, Show, Generic)
 
diff --git a/src/Data/Bugsnag/Types/User.hs b/src/Data/Bugsnag/Types/User.hs
--- a/src/Data/Bugsnag/Types/User.hs
+++ b/src/Data/Bugsnag/Types/User.hs
@@ -5,15 +5,18 @@
 
 import Data.Bugsnag.Types.Prelude
 
-
+-- | Information about the user affected by the error. These fields are
+-- optional but highly recommended. To display custom user data alongside
+-- these standard fields on the dashboard, the custom data should be
+-- included in the @metaData@ object in a @user@ object.
 data User = User
   { id :: Maybe Text
   -- ^ A unique identifier for a user affected by this event. This could be any
-  -- distinct identifier that makes sense for your application/platform.
+  -- distinct identifier that makes sense for your application\/platform.
   , name :: Maybe Text
-  -- ^ The user's name, or a string you use to identify them.
+  -- ^ The user\'s name, or a string you use to identify them.
   , email :: Maybe Text
-  -- ^ The user's email address.
+  -- ^ The user\'s email address.
   }
   deriving stock (Eq, Show, Generic)
 
@@ -27,6 +30,6 @@
 exampleUser :: User
 exampleUser = User
   { id = Just "19"
-  , name = Just $ "Robert Hawkins"
+  , name = Just "Robert Hawkins"
   , email = Just "bob@example.com"
   }
diff --git a/test/Data/Bugsnag/Types/PayloadSpec.hs b/test/Data/Bugsnag/Types/PayloadSpec.hs
--- a/test/Data/Bugsnag/Types/PayloadSpec.hs
+++ b/test/Data/Bugsnag/Types/PayloadSpec.hs
@@ -30,10 +30,8 @@
           , ",\"columnNumber\":123"
           , ",\"method\":\"create\""
           , ",\"inProject\":true"
-          , ",\"code\":{}"
           , ",\"frameAddress\":\"0x000000010d131040\""
           , ",\"loadAddress\":\"0x000000010d12e000\""
-          , ",\"isLR\":false"
           , ",\"isPC\":true"
           , ",\"symbolAddress\":\"0x000000010d130fe6\""
           , ",\"machoFile\":\"/System/Library/Frameworks/Foundation.framework/Foundation\""
@@ -44,10 +42,8 @@
           , ",\"type\":\"android\"}]"
           , ",\"breadcrumbs\":[{\"timestamp\":\"2016-07-19T12:17:27-0700\""
           , ",\"name\":\"Open menu\""
-          , ",\"type\":\"navigation\""
-          , ",\"metaData\":{}}]"
+          , ",\"type\":\"navigation\"}]"
           , ",\"request\":{\"clientIp\":\"192.168.44.0\""
-          , ",\"headers\":{}"
           , ",\"httpMethod\":\"PUT\""
           , ",\"url\":\"http://example.com/users/19/settings\""
           , ",\"referer\":\"http://example.com?q=awesome\"}"
@@ -59,10 +55,8 @@
           , ",\"columnNumber\":123"
           , ",\"method\":\"create\""
           , ",\"inProject\":true"
-          , ",\"code\":{}"
           , ",\"frameAddress\":\"0x000000010d131040\""
           , ",\"loadAddress\":\"0x000000010d12e000\""
-          , ",\"isLR\":false"
           , ",\"isPC\":true"
           , ",\"symbolAddress\":\"0x000000010d130fe6\""
           , ",\"machoFile\":\"/System/Library/Frameworks/Foundation.framework/Foundation\""
@@ -85,7 +79,8 @@
           , ",\"framework\":\"Rack\""
           , ",\"exceptionClass\":\"TypeMismatchException\"}"
           , ",\"unhandledOverridden\":false}"
-          , ",\"projectPackages\":[\"com.example.package1\"]"
+          , ",\"projectPackages\":[\"com.example.package1\""
+          , ",\"com.example.package2\"]"
           , ",\"user\":{\"id\":\"19\""
           , ",\"name\":\"Robert Hawkins\""
           , ",\"email\":\"bob@example.com\"}"
@@ -116,7 +111,6 @@
           , ",\"freeDisk\":13478064128"
           , ",\"browserName\":\"Chrome\""
           , ",\"browserVersion\":\"61.0.3163.100\""
-          , ",\"jailbroken\":false"
           , ",\"orientation\":\"portrait\""
           , ",\"time\":\"2018-08-07T10:16:34.564Z\""
           , ",\"cpuAbi\":[\"x86_64\"]"
@@ -178,8 +172,7 @@
           , ",\"events\":{\"handled\":1"
           , ",\"unhandled\":1}}"
           , ",\"featureFlags\":[{\"featureFlag\":\"share_ios_photo_sharing_button\""
-          , ",\"variant\":\"blue_button\"}]"
-          , ",\"metaData\":{}}]}"
+          , ",\"variant\":\"blue_button\"}]}]}"
           ]
 
     it "round-trips" $ do
