diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,8 @@
-## [_Unreleased_](https://github.com/freckle/asana-hs/compare/v1.0.0.0...main)
+## [_Unreleased_](https://github.com/freckle/asana-hs/compare/v1.0.1.0...main)
+
+## [v1.0.1.0](https://github.com/freckle/asana-hs/compare/v1.0.0.0...v1.0.1.0)
+
+- Add support for seeing and adding tags on `Task`s
 
 ## [v1.0.0.0](https://github.com/freckle/asana-hs/tree/v1.0.0.0)
 
diff --git a/asana.cabal b/asana.cabal
--- a/asana.cabal
+++ b/asana.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               asana
-version:            1.0.0.0
+version:            1.0.1.0
 license:            MIT
 license-file:       LICENSE
 maintainer:         Freckle Education
@@ -27,6 +27,7 @@
         Asana.Api.Prelude
         Asana.Api.Project
         Asana.Api.Request
+        Asana.Api.Tag
         Asana.Api.Task
         Asana.Api.Task.Search
 
@@ -48,23 +49,23 @@
         -Wno-monomorphism-restriction -Wno-unsafe -Wno-safe
 
     build-depends:
-        aeson >=1.3.1.1,
-        aeson-casing >=0.1.0.5,
+        aeson,
+        aeson-casing,
         base >=4.11.1.0 && <5,
-        bytestring >=0.10.8.2,
-        hashable >=1.2.7.0,
-        http-conduit >=2.3.2,
-        iso8601-time >=0.1.5,
-        microlens >=0.4.9.1,
-        microlens-mtl >=0.1.11.1,
-        monad-logger >=0.3.30,
-        mtl >=2.2.2,
-        scientific >=0.3.6.2,
-        text >=1.2.3.1,
-        time >=1.8.0.2,
-        unliftio >=0.2.9.0,
-        unliftio-core >=0.1.2.0,
-        unordered-containers >=0.2.9.0
+        bytestring,
+        hashable,
+        http-conduit,
+        iso8601-time,
+        microlens,
+        microlens-mtl,
+        monad-logger,
+        mtl,
+        scientific,
+        text,
+        time,
+        unliftio,
+        unliftio-core,
+        unordered-containers
 
     if impl(ghc >=9.2)
         ghc-options: -Wno-missing-kind-signatures
diff --git a/library/Asana/Api/Tag.hs b/library/Asana/Api/Tag.hs
new file mode 100644
--- /dev/null
+++ b/library/Asana/Api/Tag.hs
@@ -0,0 +1,18 @@
+module Asana.Api.Tag
+  ( Tag(..)
+  ) where
+
+import Asana.Api.Prelude
+
+import Asana.Api.Gid
+import Data.Aeson
+import Data.Aeson.Casing (aesonPrefix, snakeCase)
+
+data Tag = Tag
+  { tGid :: Gid
+  , tName :: Text
+  }
+  deriving stock (Eq, Generic, Show)
+
+instance FromJSON Tag where
+  parseJSON = genericParseJSON $ aesonPrefix snakeCase
diff --git a/library/Asana/Api/Task.hs b/library/Asana/Api/Task.hs
--- a/library/Asana/Api/Task.hs
+++ b/library/Asana/Api/Task.hs
@@ -8,6 +8,7 @@
   , getProjectTasks
   , getProjectTasksCompletedSince
   , postTask
+  , addTag
   , putCompleted
   , taskUrl
   , extractNumberField
@@ -20,6 +21,7 @@
 import Asana.Api.Gid
 import Asana.Api.Named
 import Asana.Api.Request
+import Asana.Api.Tag
 import Data.Aeson
 import Data.Aeson.Casing (aesonPrefix, snakeCase)
 import Data.HashMap.Strict (HashMap)
@@ -55,6 +57,7 @@
   , tResourceSubtype :: ResourceSubtype
   , tNotes :: Text
   , tProjects :: [AsanaReference]
+  , tTags :: [Tag]
   }
   deriving stock (Eq, Generic, Show)
 
@@ -123,6 +126,15 @@
 getProjectTasksCompletedSince projectId since = getAllParams
   (T.unpack $ "/projects/" <> gidToText projectId <> "/tasks")
   [("completed_since", formatISO8601 since)]
+
+addTag
+  :: (MonadUnliftIO m, MonadLogger m, MonadReader env m, HasAsanaAccessKey env)
+  => Gid
+  -> Gid -- ^ Tag
+  -> m ()
+addTag task tag =
+  void $ post ("/tasks/" <> T.unpack (gidToText task) <> "/addTag") $ ApiData
+    (object ["tag" .= tag])
 
 putCompleted
   :: (MonadUnliftIO m, MonadLogger m, MonadReader env m, HasAsanaAccessKey env)
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: asana
-version: 1.0.0.0
+version: 1.0.1.0
 maintainer: Freckle Education
 category: Utils
 github: freckle/asana-hs
