diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+# Version [0.7.0.0](https://github.com/blockfrost/blockfrost-haskell/compare/client-core-0.6.0.1...client-core-0.7.0.0) (2025-12-02)
+
+* Changes
+  * Add `CustomURL` to `Env`, to allow arbitrary Blockfrost instance [#79](https://github.com/blockfrost/blockfrost-haskell/pull/79)
+  * `BlockfrostNotFound` constructor of `BlockfrostError` is now `BlockfrostNotFound Text`
+    containing path that resulted in 404 error [#80](https://github.com/blockfrost/blockfrost-haskell/pull/80)
+  * Drop `Sanchonet` `Env` [#79](https://github.com/blockfrost/blockfrost-haskell/pull/79)
+
 # Version [0.6.0.1](https://github.com/blockfrost/blockfrost-haskell/compare/v0.6.0.0...client-core-0.6.0.1) (2024-01-16)
 
 * Allow servant `0.20`
diff --git a/blockfrost-client-core.cabal b/blockfrost-client-core.cabal
--- a/blockfrost-client-core.cabal
+++ b/blockfrost-client-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                blockfrost-client-core
-version:             0.6.0.1
+version:             0.7.0.0
 synopsis:            blockfrost.io common client definitions / instances
 description:         HasClient for our auth
 homepage:            https://github.com/blockfrost/blockfrost-haskell
@@ -50,6 +50,7 @@
                       , case-insensitive
                       , containers
                       , data-default
+                      , exceptions
                       , http-client
                       , http-client-tls
                       , http-types
diff --git a/src/Blockfrost/Client/Core.hs b/src/Blockfrost/Client/Core.hs
--- a/src/Blockfrost/Client/Core.hs
+++ b/src/Blockfrost/Client/Core.hs
@@ -34,14 +34,18 @@
 import Data.Aeson (eitherDecode)
 import Data.Default (Default (def))
 import Data.Text (Text)
+import qualified Data.ByteString.Char8
+import qualified Data.Text
 import qualified Data.Text.IO
 import qualified Network.HTTP.Client
 import qualified Network.HTTP.Client.TLS
 import Network.HTTP.Types
 import Servant.Client
+import Servant.Client.Core.Request
 import Servant.Multipart.API
 import Servant.Multipart.Client ()
 import qualified System.Environment
+import Control.Monad.Catch.Pure (runCatch)
 
 domain :: String
 domain = "blockfrost.io"
@@ -60,17 +64,20 @@
     mempty
 
 baseUrlByEnv :: Env -> BaseUrl
-baseUrlByEnv Localhost = BaseUrl Http "localhost" 8000 ""
-baseUrlByEnv e         = maybe (error "absurd") buildUrl (subdomainByEnv e)
+baseUrlByEnv (CustomURL url) = case runCatch $ parseBaseUrl url of
+  Left e     -> error ("parseBaseUrl exception: " <> show e)
+  Right bUrl -> bUrl
+baseUrlByEnv Localhost       = BaseUrl Http "localhost" 8000 ""
+baseUrlByEnv e               = maybe (error "absurd") buildUrl (subdomainByEnv e)
 
 subdomainByEnv :: Env -> Maybe String
-subdomainByEnv Ipfs      = pure "ipfs"
-subdomainByEnv Mainnet   = pure "cardano-mainnet"
-subdomainByEnv Testnet   = pure "cardano-testnet"
-subdomainByEnv Preprod   = pure "cardano-preprod"
-subdomainByEnv Preview   = pure "cardano-preview"
-subdomainByEnv Sanchonet = pure "cardano-sanchonet"
-subdomainByEnv Localhost = Nothing
+subdomainByEnv Ipfs          = pure "ipfs"
+subdomainByEnv Mainnet       = pure "cardano-mainnet"
+subdomainByEnv Testnet       = pure "cardano-testnet"
+subdomainByEnv Preprod       = pure "cardano-preprod"
+subdomainByEnv Preview       = pure "cardano-preview"
+subdomainByEnv Localhost     = Nothing
+subdomainByEnv (CustomURL _) = Nothing
 
 -- | Read file according to BLOCKFROST_TOKEN_PATH environment variable name.
 projectFromEnv :: IO Project
@@ -92,7 +99,7 @@
     BlockfrostError Text
   | BlockfrostBadRequest Text   -- 400
   | BlockfrostTokenMissing Text -- 403
-  | BlockfrostNotFound          -- 404
+  | BlockfrostNotFound Text     -- 404
   | BlockfrostIPBanned          -- 418
   | BlockfrostMempoolFullOrPinQueueFull -- 425
   | BlockfrostUsageLimitReached -- 429
@@ -102,13 +109,17 @@
 
 fromServantClientError :: ClientError -> BlockfrostError
 fromServantClientError e = case e of
-  FailureResponse _bUrl (Response s _ _ body)
+  FailureResponse req (Response s _ _ body)
     | s == status400 ->
         BlockfrostBadRequest (withMessage body)
     | s == status403 ->
         BlockfrostTokenMissing (withMessage body)
     | s == status404 ->
         BlockfrostNotFound
+          . Data.Text.pack
+          . Data.ByteString.Char8.unpack
+          . snd
+          $ requestPath req
     | s == status418 ->
         BlockfrostIPBanned
     | s == mkStatus 425 "Mempool Full (TXs) or Pin Queue Full (IPFS)" ->
