diff --git a/postmark.cabal b/postmark.cabal
--- a/postmark.cabal
+++ b/postmark.cabal
@@ -1,5 +1,5 @@
 Name:               postmark
-Version:            0.2.0
+Version:            0.2.1
 License:            BSD3
 License-File:       LICENSE
 Author:             Mark Hibberd <mark@hibberd.id.au>
diff --git a/src/Network/Api/Postmark/Core.hs b/src/Network/Api/Postmark/Core.hs
--- a/src/Network/Api/Postmark/Core.hs
+++ b/src/Network/Api/Postmark/Core.hs
@@ -2,6 +2,7 @@
 module Network.Api.Postmark.Core (
   email,
   emails,
+  emailWithTemplate,
   request
 ) where
 
@@ -28,6 +29,9 @@
 emails :: [Email] -> PostmarkRequest' [Sent]
 emails es = PostmarkRequest POST "/email/batch" $ setJson es
 
+-- | Send a single email using a template: https://postmarkapp.com/developer/api/templates-api#email-with-template
+emailWithTemplate :: EmailWithTemplate -> PostmarkRequest' Sent
+emailWithTemplate ewt = PostmarkRequest POST "/email/withTemplate" $ setJson ewt
 
 -- * Run a request
 
diff --git a/src/Network/Api/Postmark/Data.hs b/src/Network/Api/Postmark/Data.hs
--- a/src/Network/Api/Postmark/Data.hs
+++ b/src/Network/Api/Postmark/Data.hs
@@ -41,6 +41,20 @@
   , attachmentContentType :: Text
   }
 
+data EmailWithTemplate = EmailWithTemplate {
+    templateId :: Int
+  , templateModel :: Map Text Text
+  , inlineCss :: Bool
+  , emailFrom' :: Text
+  , emailTo' :: [Text]
+  , emailCc' :: [Text]
+  , emailBcc' :: [Text]
+  , emailTag' :: Maybe Text
+  , emailReplyTo' :: Text
+  , emailHeaders' :: Map Text Text
+  , emailAttachments' :: [Attachment]
+  }
+
 defaultEmail :: Email
 defaultEmail = Email {
     emailFrom = ""
@@ -56,6 +70,20 @@
   , emailAttachments = []
   }
 
+defaultEmailWithTemplate :: EmailWithTemplate
+defaultEmailWithTemplate = EmailWithTemplate {
+    templateId = 0
+  , templateModel = M.empty
+  , inlineCss = False
+  , emailFrom' = ""
+  , emailTo' = []
+  , emailCc' = []
+  , emailBcc' = []
+  , emailTag' = Nothing
+  , emailReplyTo' = ""
+  , emailHeaders' = M.empty
+  , emailAttachments' = []
+  }
 
 instance ToJSON Email where
   toJSON v = object ([
@@ -80,6 +108,20 @@
     , "ContentType" .= attachmentContentType v
     ]
 
+instance ToJSON EmailWithTemplate where
+  toJSON v = object ([
+      "TemplateId" .= templateId v
+    , "TemplateModel" .= templateModel v
+    , "From" .= (emailFrom' v)
+    , "To" .= T.intercalate "," (emailTo' v)
+    , "ReplyTo" .= emailReplyTo' v
+    ] ++ catMaybes [
+      ojson "Tag" (emailTag' v)
+    , oljson "Cc" (emailCc' v) (T.intercalate ",")
+    , oljson "Bcc" (emailBcc' v) (T.intercalate ",")
+    , omjson "Headers" (emailHeaders' v)
+    , oljson "Attachments" (emailAttachments' v) id
+    ])
 -- * Response types
 
 data Sent =
diff --git a/src/Network/Api/Postmark/Error.hs b/src/Network/Api/Postmark/Error.hs
--- a/src/Network/Api/Postmark/Error.hs
+++ b/src/Network/Api/Postmark/Error.hs
@@ -25,6 +25,13 @@
   | PostmarkBounceQueryException
   | PostmarkJsonRequired
   | PostmarkTooManyMessages
+  | PostmarkTemplateQueryException
+  | PostmarkTemplateNotFound
+  | PostmarkTemplateLimitWouldBeExceeded
+  | PostmarkTemplateNoDataReceived
+  | PostmarkTemplateRequiredFieldMissing
+  | PostmarkTemplateFieldTooLarge
+  | PostmarkTemplateFieldInvalid
   | PostmarkUnkownError Int
   deriving Eq
 
@@ -44,6 +51,13 @@
           408 -> PostmarkBounceQueryException
           409 -> PostmarkJsonRequired
           410 -> PostmarkTooManyMessages
+          1100 -> PostmarkTemplateQueryException
+          1101 -> PostmarkTemplateNotFound
+          1105 -> PostmarkTemplateLimitWouldBeExceeded
+          1109 -> PostmarkTemplateNoDataReceived
+          1120 -> PostmarkTemplateRequiredFieldMissing
+          1121 -> PostmarkTemplateFieldTooLarge
+          1122 -> PostmarkTemplateFieldInvalid
           _ -> PostmarkUnkownError code) (o .: "ErrorCode"))
     <*> (o .: "Message")
   parseJSON _ = fail "Invalid Postmark Error Response"
@@ -73,5 +87,19 @@
     "Your HTTP request does not have the Accept and Content-Type headers set to application/json."
   show PostmarkTooManyMessages =
     "Your batched request contains more than 500 messages."
+  show PostmarkTemplateQueryException =
+    "The value of a GET parameter for the request is not valid."
+  show PostmarkTemplateNotFound =
+     "TemplateId not found. The TemplateId references a Template that does not exist, or is not associated with the Server specified for this request."
+  show PostmarkTemplateLimitWouldBeExceeded =
+     "Template limit would be exceeded. A Server may have up to 300 active templates, processing this request would exceed this limit."
+  show PostmarkTemplateNoDataReceived =
+      "No Template data received. You didn’t provide JSON body parameters in your request. Refer to the Template API reference for more details on required parameters."
+  show PostmarkTemplateRequiredFieldMissing =
+      "A required Template field is missing. A required field is missing from the body of the POST request."
+  show PostmarkTemplateFieldTooLarge =
+      "Template field is too large. One of the values of the request's body exceeds our size restrictions for that field."
+  show PostmarkTemplateFieldInvalid =
+      "A Templated field has been submitted that is invalid. One of the fields of the request body is invalid."
   show (PostmarkUnkownError code) =
     "An unexpected error code [" ++ show code ++ "] was retured from postmark."
diff --git a/src/Network/Api/Postmark/Tutorial.hs b/src/Network/Api/Postmark/Tutorial.hs
--- a/src/Network/Api/Postmark/Tutorial.hs
+++ b/src/Network/Api/Postmark/Tutorial.hs
@@ -50,7 +50,7 @@
 
 > import Network.Api.Postmark
 >
-> demo = request postmarkHttpTrest $ emails [
+> demo = request postmarkHttpTest $ emails [
 >     defaultEmail {
 >       emailFrom = "demo-from@postmark.hs"
 >     , emailTo = ["demo-to@postmark.hs"]
