diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -3,6 +3,10 @@
 import Control.Exception (SomeException, catch)
 import Control.Monad (void)
 import DBus (Variant, toVariant)
+import Data.Bits (Bits (shiftR), (.&.))
+import Data.ByteString (ByteString)
+import Data.ByteString qualified as ByteString
+import Data.Char (intToDigit)
 import Data.Default.Class (def)
 import Data.Sequence (Seq)
 import Data.Sequence qualified as Seq
@@ -54,6 +58,7 @@
   | AddNotification
   | ReadSettings
   | ReadSettingsFinish ReadAllResults
+  | RetrieveSecret
   | SetShowOpenURI Bool
   | SetShowDocuments Bool
   | RequestFailed Text
@@ -107,7 +112,8 @@
                   button "Documents" (SetShowDocuments True),
                   button "Add Notification" AddNotification,
                   button "Read Settings" ReadSettings,
-                  button "Open URI" (SetShowOpenURI True)
+                  button "Open URI" (SetShowOpenURI True),
+                  button "Retrieve Secret" RetrieveSecret
                 ]
                 `styleBasic` [padding 5],
               hagrid
@@ -258,6 +264,11 @@
     ]
   ReadSettingsFinish results ->
     [Model model {alertContents = AlertSettings results}]
+  RetrieveSecret ->
+    [ Producer $ \emit -> do
+        secret <- Portal.retrieveSecret model.portalClient
+        emit (ShowAlertMessage "Retrieved Secret Successfully" (hex secret))
+    ]
   ShowAlertMessage {title, body} ->
     [Model model {alertContents = AlertMessage {title, body}}]
   CancelRequest ->
@@ -283,3 +294,8 @@
   putStrLn $ "  Notification Id: " <> show notificationId
   putStrLn $ "  Action: " <> show action
   putStrLn $ "  Action Target: " <> show actionTarget
+
+hex :: ByteString -> Text
+hex = pack . ByteString.foldr' (\w acc -> hexChar (shiftR w 4) : hexChar (w .&. 0b1111) : acc) []
+  where
+    hexChar = intToDigit . fromIntegral
diff --git a/assets/io.github.Dretch.MonomerFlatpakExample.metainfo.xml b/assets/io.github.Dretch.MonomerFlatpakExample.metainfo.xml
--- a/assets/io.github.Dretch.MonomerFlatpakExample.metainfo.xml
+++ b/assets/io.github.Dretch.MonomerFlatpakExample.metainfo.xml
@@ -23,6 +23,11 @@
   </screenshots>
 
   <releases>
+    <release version="0.0.12.0" date="2023-09-10">
+      <description>
+      Add a demo of the Secret API.
+      </description>
+    </release>
     <release version="0.0.11.0" date="2023-08-27">
       <description>
       Add a demo of OpenFile and OpenDirectory from the OpenURI portal.
diff --git a/monomer-flatpak-example.cabal b/monomer-flatpak-example.cabal
--- a/monomer-flatpak-example.cabal
+++ b/monomer-flatpak-example.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name:          monomer-flatpak-example
-version:       0.0.11.0
+version:       0.0.12.0
 license:       MIT
 license-file:  LICENSE
 maintainer:    garethdanielsmith@gmail.com
@@ -34,10 +34,10 @@
 
     default-language:   Haskell2010
     default-extensions:
-        DisambiguateRecordFields DuplicateRecordFields FlexibleContexts
-        ImportQualifiedPost LambdaCase NamedFieldPuns NoFieldSelectors
-        OverloadedRecordDot OverloadedStrings RecordWildCards
-        ScopedTypeVariables
+        BinaryLiterals DisambiguateRecordFields DuplicateRecordFields
+        FlexibleContexts ImportQualifiedPost LambdaCase NamedFieldPuns
+        NoFieldSelectors OverloadedRecordDot OverloadedStrings
+        RecordWildCards ScopedTypeVariables
 
     ghc-options:
         -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat
@@ -46,10 +46,11 @@
 
     build-depends:
         base >=4.7 && <5,
+        bytestring <0.12,
         containers <0.7,
         data-default-class <0.2,
         dbus <1.4,
-        desktop-portal <0.4,
+        desktop-portal >=0.3.1.0 && <0.4,
         directory <1.4,
         modern-uri <0.4,
         monomer <1.6,
