diff --git a/airbrake.cabal b/airbrake.cabal
--- a/airbrake.cabal
+++ b/airbrake.cabal
@@ -1,5 +1,5 @@
 name:                airbrake
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            An Airbrake notifier for Haskell
 description:         Airbrake notifier.
 homepage:            https://github.com/joelteon/airbrake
@@ -12,12 +12,14 @@
 cabal-version:       >=1.10
 
 library
-  exposed-modules:     Airbrake, Airbrake.WebRequest
+  exposed-modules:     Airbrake, Airbrake.WebRequest, Airbrake.Credentials
   other-modules:       Paths_airbrake
   build-depends:       base == 4.*
                      , blaze-markup
                      , bytestring
+                     , directory
                      , exceptions
+                     , filepath
                      , http-conduit
                      , monad-control
                      , network
diff --git a/src/Airbrake.hs b/src/Airbrake.hs
--- a/src/Airbrake.hs
+++ b/src/Airbrake.hs
@@ -31,9 +31,13 @@
     APIKey, Environment,
     airbrakeConf, defaultApiEndpoint,
     AirbrakeConf (..),
-    Server (..)
+    Server (..),
+
+    -- * Convenience exports
+    module Airbrake.Credentials
 ) where
 
+import Airbrake.Credentials hiding (APIKey)
 import qualified Airbrake.WebRequest as W
 import Control.Exception
 import Control.Monad.Catch
diff --git a/src/Airbrake/Credentials.hs b/src/Airbrake/Credentials.hs
new file mode 100644
--- /dev/null
+++ b/src/Airbrake/Credentials.hs
@@ -0,0 +1,79 @@
+-- | Utilities for loading the API key from the environment.
+module Airbrake.Credentials (
+    APIKey,
+    credentialsDefaultFile, credentialsDefaultKey,
+    loadCredentialsFromFile, loadCredentialsFromEnv,
+    loadCredentialsFromEnvOrFile, loadCredentialsDefault
+) where
+
+import Control.Monad (liftM)
+import Control.Monad.IO.Class
+import Data.Functor
+import Data.List (find)
+import System.Directory
+import System.Environment
+import System.FilePath
+
+type APIKey = String
+
+-- | The file where API credentials are loaded when using
+-- 'loadCredentialsDefault'.
+--
+-- Default: @$HOME/.airbrake-keys@
+credentialsDefaultFile :: MonadIO m => m FilePath
+credentialsDefaultFile = liftIO $ liftM (</> ".airbrake-keys") getHomeDirectory
+
+-- | The key to be used in the loaded API credentials file, when using
+-- 'loadCredentialsDefault'.
+--
+-- Default: @default@
+credentialsDefaultKey :: String
+credentialsDefaultKey = "default"
+
+-- | Load API credentials from a text file given a key name.
+--
+-- The file should consist of newline-separated credentials in the
+-- following format:
+--
+-- @keyName apiKey@
+loadCredentialsFromFile :: MonadIO m => FilePath -> String -> m (Maybe APIKey)
+loadCredentialsFromFile file key = liftIO $ do
+    contents <- map words . lines <$> readFile file
+    return $ do
+        [_k, apikey] <- find (hasKey key) contents
+        return apikey
+    where
+        hasKey _ [] = False
+        hasKey k (k2 : _) = k == k2
+
+-- | Load API credentials from the environment if possible, or alternately
+-- from the default file with the default key name.
+--
+-- Default file: @$HOME/.airbrake-keys@
+--
+-- Default key: @default@
+--
+-- See 'loadCredentialsFromEnv' and 'loadCredentialsFromFile'.
+loadCredentialsDefault :: MonadIO m => m (Maybe APIKey)
+loadCredentialsDefault = do
+    file <- credentialsDefaultFile
+    loadCredentialsFromEnvOrFile file credentialsDefaultKey
+
+-- | Load API credentials from the environment variable @AIRBRAKE_API_KEY@.
+loadCredentialsFromEnv :: MonadIO m => m (Maybe APIKey)
+loadCredentialsFromEnv = liftIO $ do
+    env <- getEnvironment
+    let lk = flip lookup env
+        key = lk "AIRBRAKE_API_KEY"
+    return key
+
+-- | Load API credentials from the environment, or, failing that, from the
+-- given file with the given key name.
+--
+-- See 'loadCredentialsFromEnv' and 'loadCredentialsFromFile'.
+loadCredentialsFromEnvOrFile :: MonadIO m => FilePath -> String -> m (Maybe APIKey)
+loadCredentialsFromEnvOrFile file key = do
+    envcr <- loadCredentialsFromEnv
+    case envcr of
+        Just cr -> return (Just cr)
+        Nothing -> loadCredentialsFromFile file key
