diff --git a/modules/convert/git_commit.go b/modules/convert/git_commit.go
index 55cbb3af8..86d6dae96 100644
--- a/modules/convert/git_commit.go
+++ b/modules/convert/git_commit.go
@@ -28,8 +28,9 @@ func ToCommitUser(sig *git.Signature) *api.CommitUser {
 // ToCommitMeta convert a git.Tag to an api.CommitMeta
 func ToCommitMeta(repo *models.Repository, tag *git.Tag) *api.CommitMeta {
 	return &api.CommitMeta{
-		SHA: tag.Object.String(),
-		URL: util.URLJoin(repo.APIURL(), "git/commits", tag.ID.String()),
+		SHA:     tag.Object.String(),
+		URL:     util.URLJoin(repo.APIURL(), "git/commits", tag.ID.String()),
+		Created: tag.Tagger.When,
 	}
 }
 
diff --git a/modules/convert/git_commit_test.go b/modules/convert/git_commit_test.go
new file mode 100644
index 000000000..2158d0d77
--- /dev/null
+++ b/modules/convert/git_commit_test.go
@@ -0,0 +1,42 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package convert
+
+import (
+	"testing"
+	"time"
+
+	"code.gitea.io/gitea/models"
+	"code.gitea.io/gitea/modules/git"
+	api "code.gitea.io/gitea/modules/structs"
+	"code.gitea.io/gitea/modules/util"
+
+	"github.com/go-git/go-git/v5/plumbing/object"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestToCommitMeta(t *testing.T) {
+	assert.NoError(t, models.PrepareTestDatabase())
+	headRepo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
+	sha1, _ := git.NewIDFromString("0000000000000000000000000000000000000000")
+	signature := &object.Signature{Name: "Test Signature", Email: "test@email.com", When: time.Unix(0, 0)}
+	tag := &git.Tag{
+		Name:    "Test Tag",
+		ID:      sha1,
+		Object:  sha1,
+		Type:    "Test Type",
+		Tagger:  signature,
+		Message: "Test Message",
+	}
+
+	commitMeta := ToCommitMeta(headRepo, tag)
+
+	assert.NotNil(t, commitMeta)
+	assert.EqualValues(t, &api.CommitMeta{
+		SHA:     "0000000000000000000000000000000000000000",
+		URL:     util.URLJoin(headRepo.APIURL(), "git/commits", "0000000000000000000000000000000000000000"),
+		Created: time.Unix(0, 0),
+	}, commitMeta)
+}
diff --git a/modules/structs/repo_commit.go b/modules/structs/repo_commit.go
index 088ccdf5a..b9607b185 100644
--- a/modules/structs/repo_commit.go
+++ b/modules/structs/repo_commit.go
@@ -20,6 +20,8 @@ type Identity struct {
 type CommitMeta struct {
 	URL string `json:"url"`
 	SHA string `json:"sha"`
+	// swagger:strfmt date-time
+	Created time.Time `json:"created"`
 }
 
 // CommitUser contains information of a user in the context of a commit.
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index e54f40d67..837705682 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -11297,6 +11297,11 @@
         "committer": {
           "$ref": "#/definitions/User"
         },
+        "created": {
+          "type": "string",
+          "format": "date-time",
+          "x-go-name": "Created"
+        },
         "html_url": {
           "type": "string",
           "x-go-name": "HTMLURL"
@@ -11340,6 +11345,11 @@
       "type": "object",
       "title": "CommitMeta contains meta information of a commit in terms of API.",
       "properties": {
+        "created": {
+          "type": "string",
+          "format": "date-time",
+          "x-go-name": "Created"
+        },
         "sha": {
           "type": "string",
           "x-go-name": "SHA"
@@ -13065,6 +13075,11 @@
         "committer": {
           "$ref": "#/definitions/CommitUser"
         },
+        "created": {
+          "type": "string",
+          "format": "date-time",
+          "x-go-name": "Created"
+        },
         "html_url": {
           "type": "string",
           "x-go-name": "HTMLURL"