diff --git a/Github/Data.hs b/Github/Data.hs
--- a/Github/Data.hs
+++ b/Github/Data.hs
@@ -189,6 +189,9 @@
          <*> o .: "size"
   parseJSON _          = fail "Could not build a Blob"
 
+instance ToJSON NewGitReference where
+  toJSON (NewGitReference r s) = object [ "ref" .= r, "sha" .= s  ]
+
 instance FromJSON GitReference where
   parseJSON (Object o) =
     GitReference <$> o .: "object"
diff --git a/Github/Data/Definitions.hs b/Github/Data/Definitions.hs
--- a/Github/Data/Definitions.hs
+++ b/Github/Data/Definitions.hs
@@ -173,6 +173,11 @@
   ,blobSize :: Int
 } deriving (Show, Data, Typeable, Eq, Ord)
 
+data NewGitReference = NewGitReference {
+   newGitReferenceRef :: String
+  ,newGitReferenceSha :: String
+} deriving (Show, Data, Typeable, Eq, Ord)
+
 data GitReference = GitReference {
    gitReferenceObject :: GitObject
   ,gitReferenceUrl :: String
diff --git a/Github/GitData/References.hs b/Github/GitData/References.hs
--- a/Github/GitData/References.hs
+++ b/Github/GitData/References.hs
@@ -4,6 +4,7 @@
 module Github.GitData.References (
  reference
 ,references
+,createReference
 ,namespacedReferences
 ,module Github.Data
 ) where
@@ -24,6 +25,10 @@
 references :: String -> String -> IO (Either Error [GitReference])
 references user reqRepoName =
   githubGet ["repos", user, reqRepoName, "git", "refs"]
+
+createReference :: GithubAuth -> String -> String -> NewGitReference -> IO (Either Error GitReference)
+createReference auth owner reqRepoName newRef =
+  githubPost auth ["repos", owner, reqRepoName, "git", "refs"] newRef
 
 -- | Limited references by a namespace.
 --
diff --git a/github.cabal b/github.cabal
--- a/github.cabal
+++ b/github.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.12
+Version:             0.13
 
 -- A short (one-line) description of the package.
 Synopsis:            Access to the Github API, v3.
@@ -50,6 +50,7 @@
                     ,samples/Gists/ListGists.hs
                     ,samples/Gists/ShowGist.hs
                     ,samples/GitData/Commits/GitShow.hs
+                    ,samples/GitData/References/GitCreateReference.hs
                     ,samples/GitData/References/GitLsRemote.hs
                     ,samples/GitData/References/GitLsRemoteTags.hs
                     ,samples/GitData/References/GitLsRemoteWithRef.hs
diff --git a/samples/GitData/References/GitCreateReference.hs b/samples/GitData/References/GitCreateReference.hs
new file mode 100644
--- /dev/null
+++ b/samples/GitData/References/GitCreateReference.hs
@@ -0,0 +1,19 @@
+module GitCreateRef where
+
+import qualified Github.Auth as Auth
+import Github.GitData.References
+
+main :: IO ()
+main = do
+  let auth = Auth.GithubOAuth "oauthtoken"
+  newlyCreatedGitRef <- createReference auth "myrepo" "myowner" NewGitReference {
+       newGitReferenceRef = "refs/heads/fav_tag"
+      ,newGitReferenceSha = "aa218f56b14c9653891f9e74264a383fa43fefbd"
+    }
+  case newlyCreatedGitRef of
+   (Left err) -> putStrLn $ "Error: " ++ show err
+   (Right newRef) -> putStrLn . formatReference $ newRef
+                        
+formatReference :: GitReference -> String
+formatReference ref  =
+  (gitObjectSha $ gitReferenceObject ref) ++ "\t" ++ (gitReferenceRef ref)
