diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Changelog for Calamity
 
+## 0.1.14.7
+
+*2020-06-21*
+
+* Fix missing usage of GetAuditLogOptions in GetAuditLog
+
 ## 0.1.14.6
 
 *2020-06-18*
diff --git a/calamity.cabal b/calamity.cabal
--- a/calamity.cabal
+++ b/calamity.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 2086b0049d6b378a9ae414918e814465d2f693c8c0d59cd2ab0c6817275ccc30
+-- hash: 8d7e2384272bd3170cf997e20fa3c1aa01a622aa2f515fda81b9cde2ee1dd641
 
 name:           calamity
-version:        0.1.14.6
+version:        0.1.14.7
 synopsis:       A library for writing discord bots in haskell
 description:    Please see the README on GitHub at <https://github.com/nitros12/calamity#readme>
 category:       Network, Web
diff --git a/src/Calamity/Commands/Parser.hs b/src/Calamity/Commands/Parser.hs
--- a/src/Calamity/Commands/Parser.hs
+++ b/src/Calamity/Commands/Parser.hs
@@ -174,7 +174,7 @@
 -- @'KleenePlusConcat' 'L.Text'@ Is therefore consumes all remaining input.
 data KleenePlusConcat (a :: Type)
 
-instance (Monoid (ParserResult a), Parser a r) => Parser (KleenePlusConcat a) r where
+instance (Semigroup (ParserResult a), Parser a r) => Parser (KleenePlusConcat a) r where
   type ParserResult (KleenePlusConcat a) = ParserResult a
 
   parse = sconcat <$> parse @(NonEmpty a)
@@ -194,18 +194,23 @@
 instance Typeable (Snowflake a) => Parser (Snowflake a) r where
   parse = parseMP (parserName @(Snowflake a)) snowflake
 
+-- | Accepts both plain IDs and mentions
 instance {-# OVERLAPS #-}Parser (Snowflake User) r where
   parse = parseMP (parserName @(Snowflake User)) (try (ping "@") <|> snowflake)
 
+-- | Accepts both plain IDs and mentions
 instance {-# OVERLAPS #-}Parser (Snowflake Member) r where
   parse = parseMP (parserName @(Snowflake Member)) (try (ping "@") <|> snowflake)
 
+-- | Accepts both plain IDs and mentions
 instance {-# OVERLAPS #-}Parser (Snowflake Channel) r where
   parse = parseMP (parserName @(Snowflake Channel)) (try (ping "#") <|> snowflake)
 
+-- | Accepts both plain IDs and mentions
 instance {-# OVERLAPS #-}Parser (Snowflake Role) r where
   parse = parseMP (parserName @(Snowflake Role)) (try (ping "@&") <|> snowflake)
 
+-- | Accepts both plain IDs and uses of emoji
 instance {-# OVERLAPS #-}Parser (Snowflake Emoji) r where
   parse = parseMP (parserName @(Snowflake Emoji)) (try emoji <|> snowflake)
 
@@ -273,6 +278,7 @@
               ctx <- P.ask
               pure $ ctx ^? #guild . _Just . #emojis . ix eid)
 
+-- | Parses both discord emojis, and unicode emojis
 instance Parser RawEmoji r where
   parse = parseMP (parserName @RawEmoji) (try parseCustomEmoji <|> (UnicodeEmoji <$> takeP (Just "A unicode emoji") 1))
     where parseCustomEmoji = CustomEmoji <$> partialEmoji
diff --git a/src/Calamity/HTTP/AuditLog.hs b/src/Calamity/HTTP/AuditLog.hs
--- a/src/Calamity/HTTP/AuditLog.hs
+++ b/src/Calamity/HTTP/AuditLog.hs
@@ -5,20 +5,23 @@
 
 import           Calamity.HTTP.Internal.Request
 import           Calamity.HTTP.Internal.Route
-import           Calamity.Internal.AesonThings
 import           Calamity.Internal.Utils        ()
 import           Calamity.Types.Model.Guild
 import           Calamity.Types.Model.User
 import           Calamity.Types.Snowflake
 
-import           Data.Aeson
+import           Control.Lens
+import           Control.Arrow                  ( (>>>) )
+
 import           Data.Default.Class
-import           Data.Function
+import           Data.Maybe                     ( maybeToList )
 
 import           GHC.Generics
 
 import           Network.Wreq
 
+import           TextShow                       ( showt )
+
 data GetAuditLogOptions = GetAuditLogOptions
   { userID     :: Maybe (Snowflake User)
   , actionType :: Maybe AuditLogAction
@@ -26,16 +29,19 @@
   , limit      :: Maybe Integer
   }
   deriving ( Show, Generic, Default )
-  deriving ( ToJSON ) via CalamityJSON GetAuditLogOptions
 
 data AuditLogRequest a where
-  GetAuditLog :: HasID Guild g => g -> AuditLogRequest AuditLog
+  GetAuditLog :: HasID Guild g => g -> GetAuditLogOptions -> AuditLogRequest AuditLog
 
 instance Request (AuditLogRequest a) where
   type Result (AuditLogRequest a) = a
 
-  route (GetAuditLog (getID @Guild -> gid)) = mkRouteBuilder // S "guilds" // ID @Guild // S "audit-logs"
+  route (GetAuditLog (getID @Guild -> gid) _) = mkRouteBuilder // S "guilds" // ID @Guild // S "audit-logs"
     & giveID gid
     & buildRoute
 
-  action (GetAuditLog _) = getWith
+  action (GetAuditLog _ GetAuditLogOptions { userID, actionType, before, limit }) = getWithP
+    (param "user_id" .~ maybeToList (showt <$> userID) >>>
+     param "action_type" .~ maybeToList (showt .fromEnum <$> actionType) >>>
+     param "before" .~ maybeToList (showt <$> before) >>>
+     param "limit" .~ maybeToList (showt <$> limit))
diff --git a/src/Calamity/HTTP/Channel.hs b/src/Calamity/HTTP/Channel.hs
--- a/src/Calamity/HTTP/Channel.hs
+++ b/src/Calamity/HTTP/Channel.hs
@@ -257,8 +257,9 @@
   action DeleteOwnReaction {} = deleteWith
   action DeleteUserReaction {} = deleteWith
   action (GetReactions _ _ _ GetReactionsOptions { before, after, limit }) = getWithP
-    (param "before" .~ maybeToList (showt <$> before) >>> param "after" .~ maybeToList (showt <$> after) >>> param
-     "limit" .~ maybeToList (showt <$> limit))
+    (param "before" .~ maybeToList (showt <$> before) >>>
+     param "after" .~ maybeToList (showt <$> after) >>>
+     param "limit" .~ maybeToList (showt <$> limit))
   action (DeleteAllReactions _ _) = deleteWith
   action (EditMessage _ _ content embed) = patchWith' (object ["content" .= content, "embed" .= embed])
   action (DeleteMessage _ _) = deleteWith
diff --git a/src/Calamity/Types/Model/Guild/AuditLog.hs b/src/Calamity/Types/Model/Guild/AuditLog.hs
--- a/src/Calamity/Types/Model/Guild/AuditLog.hs
+++ b/src/Calamity/Types/Model/Guild/AuditLog.hs
@@ -107,9 +107,85 @@
   deriving ( Show, Generic )
   deriving ( TextShow ) via TSG.FromGeneric AuditLogAction
 
+instance Enum AuditLogAction where
+  toEnum v = case v of
+      1  -> GUILD_UPDATE
+      10 -> CHANNEL_CREATE
+      11 -> CHANNEL_UPDATE
+      12 -> CHANNEL_DELETE
+      13 -> CHANNEL_OVERWRITE_CREATE
+      14 -> CHANNEL_OVERWRITE_UPDATE
+      15 -> CHANNEL_OVERWRITE_DELETE
+      20 -> MEMBER_KICK
+      21 -> MEMBER_PRUNE
+      22 -> MEMBER_BAN_ADD
+      23 -> MEMBER_BAN_REMOVE
+      24 -> MEMBER_UPDATE
+      25 -> MEMBER_ROLE_UPDATE
+      26 -> MEMBER_MOVE
+      27 -> MEMBER_DISCONNECT
+      28 -> BOT_ADD
+      30 -> ROLE_CREATE
+      31 -> ROLE_UPDATE
+      32 -> ROLE_DELETE
+      40 -> INVITE_CREATE
+      41 -> INVITE_UPDATE
+      42 -> INVITE_DELETE
+      50 -> WEBHOOK_CREATE
+      51 -> WEBHOOK_UPDATE
+      52 -> WEBHOOK_DELETE
+      60 -> EMOJI_CREATE
+      61 -> EMOJI_UPDATE
+      62 -> EMOJI_DELETE
+      72 -> MESSAGE_DELETE
+      73 -> MESSAGE_BULK_DELETE
+      74 -> MESSAGE_PIN
+      75 -> MESSAGE_UNPIN
+      80 -> INTEGRATION_CREATE
+      81 -> INTEGRATION_UPDATE
+      82 -> INTEGRATION_DELETE
+      _  -> error $ "Invalid AuditLogAction: " <> show v
+
+  fromEnum v = case v of
+    GUILD_UPDATE             -> 1
+    CHANNEL_CREATE           -> 10
+    CHANNEL_UPDATE           -> 11
+    CHANNEL_DELETE           -> 12
+    CHANNEL_OVERWRITE_CREATE -> 13
+    CHANNEL_OVERWRITE_UPDATE -> 14
+    CHANNEL_OVERWRITE_DELETE -> 15
+    MEMBER_KICK              -> 20
+    MEMBER_PRUNE             -> 21
+    MEMBER_BAN_ADD           -> 22
+    MEMBER_BAN_REMOVE        -> 23
+    MEMBER_UPDATE            -> 24
+    MEMBER_ROLE_UPDATE       -> 25
+    MEMBER_MOVE              -> 26
+    MEMBER_DISCONNECT        -> 27
+    BOT_ADD                  -> 28
+    ROLE_CREATE              -> 30
+    ROLE_UPDATE              -> 31
+    ROLE_DELETE              -> 32
+    INVITE_CREATE            -> 40
+    INVITE_UPDATE            -> 41
+    INVITE_DELETE            -> 42
+    WEBHOOK_CREATE           -> 50
+    WEBHOOK_UPDATE           -> 51
+    WEBHOOK_DELETE           -> 52
+    EMOJI_CREATE             -> 60
+    EMOJI_UPDATE             -> 61
+    EMOJI_DELETE             -> 62
+    MESSAGE_DELETE           -> 72
+    MESSAGE_BULK_DELETE      -> 73
+    MESSAGE_PIN              -> 74
+    MESSAGE_UNPIN            -> 75
+    INTEGRATION_CREATE       -> 80
+    INTEGRATION_UPDATE       -> 81
+    INTEGRATION_DELETE       -> 82
+
 instance FromJSON AuditLogAction where
   parseJSON = withScientific "AuditLogAction" $ \n -> case toBoundedInteger @Int n of
-    Just v  -> case v of
+    Just v  -> case v of --  no safe toEnum :S
       1  -> pure GUILD_UPDATE
       10 -> pure CHANNEL_CREATE
       11 -> pure CHANNEL_UPDATE
@@ -149,39 +225,4 @@
     Nothing -> fail $ "Invalid AuditLogAction: " <> show n
 
 instance ToJSON AuditLogAction where
-  toJSON x = toJSON @Int $ case x of
-    GUILD_UPDATE             -> 1
-    CHANNEL_CREATE           -> 10
-    CHANNEL_UPDATE           -> 11
-    CHANNEL_DELETE           -> 12
-    CHANNEL_OVERWRITE_CREATE -> 13
-    CHANNEL_OVERWRITE_UPDATE -> 14
-    CHANNEL_OVERWRITE_DELETE -> 15
-    MEMBER_KICK              -> 20
-    MEMBER_PRUNE             -> 21
-    MEMBER_BAN_ADD           -> 22
-    MEMBER_BAN_REMOVE        -> 23
-    MEMBER_UPDATE            -> 24
-    MEMBER_ROLE_UPDATE       -> 25
-    MEMBER_MOVE              -> 26
-    MEMBER_DISCONNECT        -> 27
-    BOT_ADD                  -> 28
-    ROLE_CREATE              -> 30
-    ROLE_UPDATE              -> 31
-    ROLE_DELETE              -> 32
-    INVITE_CREATE            -> 40
-    INVITE_UPDATE            -> 41
-    INVITE_DELETE            -> 42
-    WEBHOOK_CREATE           -> 50
-    WEBHOOK_UPDATE           -> 51
-    WEBHOOK_DELETE           -> 52
-    EMOJI_CREATE             -> 60
-    EMOJI_UPDATE             -> 61
-    EMOJI_DELETE             -> 62
-    MESSAGE_DELETE           -> 72
-    MESSAGE_BULK_DELETE      -> 73
-    MESSAGE_PIN              -> 74
-    MESSAGE_UNPIN            -> 75
-    INTEGRATION_CREATE       -> 80
-    INTEGRATION_UPDATE       -> 81
-    INTEGRATION_DELETE       -> 82
+  toJSON = toJSON @Int . fromEnum
