diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## [_Unreleased_](https://github.com/freckle/freckle-http/compare/v0.3.0.1...main)
+## [_Unreleased_](https://github.com/freckle/freckle-http/compare/v0.3.1.0...main)
+
+## [v0.3.1.0](https://github.com/freckle/freckle-http/compare/v0.3.0.1...v0.3.1.0)
+
+- Add `HttpCacheSettings{forceTTL}`
 
 ## [v0.3.0.1](https://github.com/freckle/freckle-http/tree/v0.3.0.1)
 
diff --git a/freckle-http.cabal b/freckle-http.cabal
--- a/freckle-http.cabal
+++ b/freckle-http.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               freckle-http
-version:            0.3.0.1
+version:            0.3.1.0
 license:            MIT
 license-file:       LICENSE
 maintainer:         Freckle Education
diff --git a/library/Freckle/App/Http/Cache.hs b/library/Freckle/App/Http/Cache.hs
--- a/library/Freckle/App/Http/Cache.hs
+++ b/library/Freckle/App/Http/Cache.hs
@@ -53,6 +53,7 @@
 data HttpCacheSettings m t = HttpCacheSettings
   { shared :: Bool
   , cacheable :: Request -> Bool
+  , forceTTL :: Maybe CacheTTL
   , defaultTTL :: CacheTTL
   , getCurrentTime :: m UTCTime
   , logDebug :: Message -> m ()
@@ -238,7 +239,9 @@
   guard
     $ not settings.shared || Private `notElem` responseHeaders.cacheControl
   guard $ statusIsCacheable $ HTTP.responseStatus resp
-  pure $ fromMaybe settings.defaultTTL $ responseHeadersToTTL responseHeaders
+  pure $ case settings.forceTTL of
+    Nothing -> fromMaybe settings.defaultTTL $ responseHeadersToTTL responseHeaders
+    Just ttl -> ttl
  where
   responseHeaders = getResponseHeaders resp
 
diff --git a/library/Freckle/App/Http/Cache/Memcached.hs b/library/Freckle/App/Http/Cache/Memcached.hs
--- a/library/Freckle/App/Http/Cache/Memcached.hs
+++ b/library/Freckle/App/Http/Cache/Memcached.hs
@@ -47,6 +47,7 @@
   HttpCacheSettings
     { shared = True
     , cacheable = const True
+    , forceTTL = Nothing
     , defaultTTL
     , getCurrentTime = liftIO getCurrentTime
     , logDebug = logDebugNS "http.cache"
diff --git a/library/Freckle/App/Http/Cache/State.hs b/library/Freckle/App/Http/Cache/State.hs
--- a/library/Freckle/App/Http/Cache/State.hs
+++ b/library/Freckle/App/Http/Cache/State.hs
@@ -56,6 +56,7 @@
   HttpCacheSettings
     { shared = False
     , cacheable = const True
+    , forceTTL = Nothing
     , defaultTTL = fiveMinuteTTL
     , getCurrentTime = liftIO getCurrentTime
     , logDebug = \_ -> pure ()
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: freckle-http
-version: 0.3.0.1
+version: 0.3.1.0
 maintainer: Freckle Education
 category: HTTP
 github: freckle/freckle-http
