diff --git a/Calamity/HTTP/Internal/Ratelimit.hs b/Calamity/HTTP/Internal/Ratelimit.hs
--- a/Calamity/HTTP/Internal/Ratelimit.hs
+++ b/Calamity/HTTP/Internal/Ratelimit.hs
@@ -211,11 +211,8 @@
             let resp = responseBody r'
             debug $ "Got good response from discord: " +|| status ||+ ""
             now <- P.embed getCurrentTime
-            case buildBucketState now r' of
-              Just (!bs, !key) ->
-                pure $ Good resp bs key
-              Nothing ->
-                pure $ ServerError (statusCode status)
+            let rlHeaders = buildBucketState now r'
+            pure $ Good resp rlHeaders
           | status == status429 -> do
             now <- P.embed getCurrentTime
             let resp = responseBody r'
@@ -334,13 +331,16 @@
   r' <- doDiscordRequest r
 
   case r' of
-    Good v bs bk -> do
+    Good v rlHeaders -> do
       void . P.embed . atomically $ do
         case rl of
           KnownRatelimit bucket ->
             modifyTVar' (bucket ^. #state) (#ongoing -~ 1)
           _ -> pure ()
-        updateBucket rlstate route bk bs
+        case rlHeaders of
+          Just (bs, bk) ->
+            void $ updateBucket rlstate route bk bs
+          Nothing -> pure ()
       pure $ RGood v
     Ratelimited unlockWhen False (Just (bs, bk)) -> do
       debug $ "429 ratelimited on route, retrying at " +| unlockWhen |+ ""
diff --git a/Calamity/HTTP/Internal/Types.hs b/Calamity/HTTP/Internal/Types.hs
--- a/Calamity/HTTP/Internal/Types.hs
+++ b/Calamity/HTTP/Internal/Types.hs
@@ -66,9 +66,8 @@
   = Good
     -- ^ A good response
     LB.ByteString
-    BucketState
-    B.ByteString
-    -- ^ The bucket the route is in
+    (Maybe (BucketState, B.ByteString))
+    -- ^ The ratelimit headers if we got them
   | Ratelimited
     -- ^ We hit a 429, no response and ratelimited
     UTCTime
diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for Calamity
 
+## 0.1.28.3
+
++ Fix HTTP responses from discord that don't have ratelimit info being treated
+  as errors.
+
 ## 0.1.28.2
 
 + Correct the emoji HTTP endpoints to work with `CustomEmoji`s
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: 83f8a2a236db8e2db8a1000d7a922dc0ad1f4c27ec148e6c0776bdb2fb3be4ae
+-- hash: 3ef864682cfb94fce9b938cf2c9b2cf32ac1170e904fb5fd492abf28259a6c81
 
 name:           calamity
-version:        0.1.28.2
+version:        0.1.28.3
 synopsis:       A library for writing discord bots in haskell
 description:    Please see the README on GitHub at <https://github.com/simmsb/calamity#readme>
 category:       Network, Web
