diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,19 @@
+# Version 0.9.3.0
+
+- `Order` now has `Maybe Bool` instead of `Bool` for `postOnly`. Required to maintain spec compliance.
+  From https://docs.pro.coinbase.com/#upcoming-changes:
+
+```
+08/09/21
+
+    Orders with a "pending" status returned by the REST API endpoints GET /orders, GET /orders/<id>,
+	and GET /orders/client:<client_oid> will have a reduced set of fields. See the List Orders documentation
+	for more details. Orders with non-pending statuses will be unaffected by this change. The change will
+	take effect in Sandbox starting after August 12th, 2021 and in Production starting after August 19th, 2021.
+```
+
+- Added tests to test order parsing from json file
+
 # Version 0.9.2.2
 
 - Added `CoinbasePro.Unauthenticated.singleProduct`
diff --git a/coinbase-pro.cabal b/coinbase-pro.cabal
--- a/coinbase-pro.cabal
+++ b/coinbase-pro.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           coinbase-pro
-version:        0.9.2.2
+version:        0.9.3.0
 synopsis:       Client for Coinbase Pro
 description:    Client for Coinbase Pro REST and Websocket APIs
 category:       Web, Finance
@@ -93,6 +93,8 @@
     , servant >=0.14 && <0.19
     , servant-client >=0.14 && <0.19
     , servant-client-core >=0.14 && <0.19
+    , tasty >=1.2.2
+    , tasty-hunit >=0.10
     , text ==1.2.*
     , time >=1.8 && <2.0
     , transformers ==0.5.*
@@ -133,6 +135,8 @@
     , servant >=0.14 && <0.19
     , servant-client >=0.14 && <0.19
     , servant-client-core >=0.14 && <0.19
+    , tasty >=1.2.2
+    , tasty-hunit >=0.10
     , text ==1.2.*
     , time >=1.8 && <2.0
     , transformers ==0.5.*
@@ -173,6 +177,51 @@
     , servant >=0.14 && <0.19
     , servant-client >=0.14 && <0.19
     , servant-client-core >=0.14 && <0.19
+    , tasty >=1.2.2
+    , tasty-hunit >=0.10
+    , text ==1.2.*
+    , time >=1.8 && <2.0
+    , transformers ==0.5.*
+    , unagi-streams ==0.2.*
+    , unordered-containers ==0.2.*
+    , uuid ==1.3.*
+    , vector ==0.12.*
+    , websockets ==0.12.*
+    , wuss ==1.1.*
+  default-language: Haskell2010
+
+test-suite coinbase-pro-test
+  type: exitcode-stdio-1.0
+  main-is: Test.hs
+  other-modules:
+      Paths_coinbase_pro
+  hs-source-dirs:
+      src/test
+  build-depends:
+      HsOpenSSL ==0.11.*
+    , aeson >=1.2 && <1.6
+    , aeson-casing >=0.1 && <0.3
+    , async >=2.1 && <2.3
+    , base >=4.7 && <5
+    , binary ==0.8.*
+    , bytestring ==0.10.*
+    , coinbase-pro
+    , containers >=0.5 && <0.7
+    , cryptonite >=0.24 && <0.30
+    , exceptions >=0.4 && <1.0
+    , http-api-data >=0.3 && <0.5
+    , http-client >=0.5 && <0.7
+    , http-client-tls ==0.3.*
+    , http-streams ==0.8.*
+    , http-types ==0.12.*
+    , io-streams ==1.5.*
+    , memory >=0.14 && <0.16
+    , network >=2.6 && <3.2
+    , servant >=0.14 && <0.19
+    , servant-client >=0.14 && <0.19
+    , servant-client-core >=0.14 && <0.19
+    , tasty >=1.2.2
+    , tasty-hunit >=0.10
     , text ==1.2.*
     , time >=1.8 && <2.0
     , transformers ==0.5.*
diff --git a/src/lib/CoinbasePro/Authenticated.hs b/src/lib/CoinbasePro/Authenticated.hs
--- a/src/lib/CoinbasePro/Authenticated.hs
+++ b/src/lib/CoinbasePro/Authenticated.hs
@@ -11,6 +11,7 @@
   , getOrder
   , getClientOrder
   , placeOrder
+  , placeOrderBody
   , cancelOrder
   , cancelAll
   , fills
@@ -247,7 +248,16 @@
     authRequest methodPost requestPath (encodeBody body) $ API.placeOrder body
   where
     requestPath = encodeRequestPath [ordersPath]
-    body        = PlaceOrderBody clordid prid sd sz price po ot stp tif
+    body        = PlaceOrderBody clordid prid sd sz price po ot stp tif Nothing Nothing
+
+
+-- | https://docs.pro.coinbase.com/#place-a-new-order
+-- Use the underlying post body record
+placeOrderBody :: PlaceOrderBody -> CBAuthT ClientM Order
+placeOrderBody body =
+    authRequest methodPost requestPath (encodeBody body) $ API.placeOrder body
+  where
+    requestPath = encodeRequestPath [ordersPath]
 
 
 -- | https://docs.pro.coinbase.com/#cancel-an-order
diff --git a/src/lib/CoinbasePro/Authenticated/Orders.hs b/src/lib/CoinbasePro/Authenticated/Orders.hs
--- a/src/lib/CoinbasePro/Authenticated/Orders.hs
+++ b/src/lib/CoinbasePro/Authenticated/Orders.hs
@@ -8,6 +8,7 @@
   , STP (..)
   , TimeInForce (..)
   , PlaceOrderBody (..)
+  , StopLossSide (..)
 
   , statuses
   ) where
@@ -94,7 +95,18 @@
     parseJSON = withText "executed_value" $ \t ->
       return . ExecutedValue . read $ unpack t
 
+data StopLossSide = Loss | Entry
+    deriving (Eq, Ord, Show)
 
+
+instance ToHttpApiData StopLossSide where
+    toUrlPiece   = toLower . pack . show
+    toQueryParam = toLower . pack . show
+
+
+deriveJSON defaultOptions {constructorTagModifier = fmap Char.toLower} ''StopLossSide
+
+
 -- TODO: This might need to be split up into different order types.
 data Order = Order
     { id            :: OrderId
@@ -105,13 +117,15 @@
     , stp           :: Maybe STP
     , orderType     :: OrderType
     , timeInForce   :: Maybe TimeInForce
-    , postOnly      :: Bool
+    , postOnly      :: Maybe Bool
     , createdAt     :: CreatedAt
     , fillFees      :: FillFees
     , filledSize    :: Size
     , executedValue :: Maybe ExecutedValue
     , status        :: Status
     , settled       :: Bool
+    , stop          :: Maybe StopLossSide
+    , stopPrice     :: Maybe Price
     } deriving (Eq, Show)
 
 
@@ -119,15 +133,17 @@
 
 
 data PlaceOrderBody = PlaceOrderBody
-    { bClientOid :: Maybe ClientOrderId
-    , bProductId :: ProductId
-    , bSide      :: Side
-    , bSize      :: Size
-    , bPrice     :: Price
-    , bPostOnly  :: Bool
-    , bOrderType :: Maybe OrderType
-    , bStp       :: Maybe STP
-    , bTif       :: Maybe TimeInForce
+    { bClientOid   :: Maybe ClientOrderId
+    , bProductId   :: ProductId
+    , bSide        :: Side
+    , bSize        :: Size
+    , bPrice       :: Price
+    , bPostOnly    :: Bool
+    , bOrderType   :: Maybe OrderType
+    , bStp         :: Maybe STP
+    , bTimeInForce :: Maybe TimeInForce
+    , bStop        :: Maybe StopLossSide
+    , bStopPrice   :: Maybe Price
     } deriving (Eq, Show)
 
 
diff --git a/src/test/Test.hs b/src/test/Test.hs
new file mode 100644
--- /dev/null
+++ b/src/test/Test.hs
@@ -0,0 +1,18 @@
+import           Data.Aeson                       (decode')
+import qualified Data.ByteString.Lazy             as B
+import           Data.Maybe                       (isJust)
+import           Test.Tasty
+import           Test.Tasty.HUnit
+
+import           CoinbasePro.Authenticated.Orders (Order)
+
+
+main :: IO ()
+main = defaultMain listOrderParse
+
+
+listOrderParse :: TestTree
+listOrderParse = testCase "parse orders" $ do
+    bytes <- B.readFile "./src/test/data/list-orders.json"
+    let orders = (decode' bytes :: Maybe [Order])
+    assertBool "failed to parse" $ isJust orders
