diff --git a/sbp.cabal b/sbp.cabal
--- a/sbp.cabal
+++ b/sbp.cabal
@@ -1,5 +1,5 @@
 name: sbp
-version: 2.3.1
+version: 2.3.2
 cabal-version: >=1.22
 build-type: Simple
 license: LGPL-3
diff --git a/src/SwiftNav/SBP/Msg.hs b/src/SwiftNav/SBP/Msg.hs
--- a/src/SwiftNav/SBP/Msg.hs
+++ b/src/SwiftNav/SBP/Msg.hs
@@ -151,6 +151,7 @@
    | SBPMsgSettingsRegister MsgSettingsRegister Msg
    | SBPMsgSettingsSave MsgSettingsSave Msg
    | SBPMsgSettingsWrite MsgSettingsWrite Msg
+   | SBPMsgSettingsWriteResp MsgSettingsWriteResp Msg
    | SBPMsgSpecan MsgSpecan Msg
    | SBPMsgSpecanDep MsgSpecanDep Msg
    | SBPMsgStartup MsgStartup Msg
@@ -291,6 +292,7 @@
           | _msgSBPType == msgSettingsRegister = SBPMsgSettingsRegister (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSettingsSave = SBPMsgSettingsSave (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSettingsWrite = SBPMsgSettingsWrite (decode (fromStrict (unBytes _msgSBPPayload))) m
+          | _msgSBPType == msgSettingsWriteResp = SBPMsgSettingsWriteResp (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSpecan = SBPMsgSpecan (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgSpecanDep = SBPMsgSpecanDep (decode (fromStrict (unBytes _msgSBPPayload))) m
           | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m
@@ -423,6 +425,7 @@
       encoder (SBPMsgSettingsRegister _ m) = put m
       encoder (SBPMsgSettingsSave _ m) = put m
       encoder (SBPMsgSettingsWrite _ m) = put m
+      encoder (SBPMsgSettingsWriteResp _ m) = put m
       encoder (SBPMsgSpecan _ m) = put m
       encoder (SBPMsgSpecanDep _ m) = put m
       encoder (SBPMsgStartup _ m) = put m
@@ -559,6 +562,7 @@
         | msgType == msgSettingsRegister = SBPMsgSettingsRegister <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSettingsSave = SBPMsgSettingsSave <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSettingsWrite = SBPMsgSettingsWrite <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
+        | msgType == msgSettingsWriteResp = SBPMsgSettingsWriteResp <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSpecan = SBPMsgSpecan <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgSpecanDep = SBPMsgSpecanDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
         | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj
@@ -696,6 +700,7 @@
   toJSON (SBPMsgSettingsRegister n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSettingsSave n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSettingsWrite n m) = toJSON n <<>> toJSON m
+  toJSON (SBPMsgSettingsWriteResp n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSpecan n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgSpecanDep n m) = toJSON n <<>> toJSON m
   toJSON (SBPMsgStartup n m) = toJSON n <<>> toJSON m
@@ -827,6 +832,7 @@
   msg f (SBPMsgSettingsRegister n m) = SBPMsgSettingsRegister n <$> f m
   msg f (SBPMsgSettingsSave n m) = SBPMsgSettingsSave n <$> f m
   msg f (SBPMsgSettingsWrite n m) = SBPMsgSettingsWrite n <$> f m
+  msg f (SBPMsgSettingsWriteResp n m) = SBPMsgSettingsWriteResp n <$> f m
   msg f (SBPMsgSpecan n m) = SBPMsgSpecan n <$> f m
   msg f (SBPMsgSpecanDep n m) = SBPMsgSpecanDep n <$> f m
   msg f (SBPMsgStartup n m) = SBPMsgStartup n <$> f m
diff --git a/src/SwiftNav/SBP/Settings.hs b/src/SwiftNav/SBP/Settings.hs
--- a/src/SwiftNav/SBP/Settings.hs
+++ b/src/SwiftNav/SBP/Settings.hs
@@ -84,6 +84,35 @@
 $(makeJSON "_msgSettingsWrite_" ''MsgSettingsWrite)
 $(makeLenses ''MsgSettingsWrite)
 
+msgSettingsWriteResp :: Word16
+msgSettingsWriteResp = 0x00AF
+
+-- | SBP class for message MSG_SETTINGS_WRITE_RESP (0x00AF).
+--
+-- Return the status of a write request with the new value of the setting.  If
+-- the requested value is rejected, the current value will be returned.
+data MsgSettingsWriteResp = MsgSettingsWriteResp
+  { _msgSettingsWriteResp_status :: !Word8
+    -- ^ Write status
+  , _msgSettingsWriteResp_setting :: !Text
+    -- ^ A NULL-terminated and delimited string with contents [SECTION_SETTING,
+    -- SETTING, VALUE].
+  } deriving ( Show, Read, Eq )
+
+instance Binary MsgSettingsWriteResp where
+  get = do
+    _msgSettingsWriteResp_status <- getWord8
+    _msgSettingsWriteResp_setting <- decodeUtf8 . toStrict <$> getRemainingLazyByteString
+    pure MsgSettingsWriteResp {..}
+
+  put MsgSettingsWriteResp {..} = do
+    putWord8 _msgSettingsWriteResp_status
+    putByteString $ encodeUtf8 _msgSettingsWriteResp_setting
+
+$(makeSBP 'msgSettingsWriteResp ''MsgSettingsWriteResp)
+$(makeJSON "_msgSettingsWriteResp_" ''MsgSettingsWriteResp)
+$(makeLenses ''MsgSettingsWriteResp)
+
 msgSettingsReadReq :: Word16
 msgSettingsReadReq = 0x00A4
 
