diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 95bdfd072e..506a615624 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -243,6 +243,8 @@ func RegisterRoutes(m *macaron.Macaron) {
 			m.Get("/search", repo.Search)
 		})
 
+		m.Combo("/repositories/:id", reqToken()).Get(repo.GetByID)
+
 		m.Group("/repos", func() {
 			m.Post("/migrate", bind(auth.MigrateRepoForm{}), repo.Migrate)
 			m.Combo("/:username/:reponame", context.ExtractOwnerAndRepo()).
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index 1fa0b14b40..33d474ebd8 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -251,6 +251,21 @@ func Get(ctx *context.APIContext) {
 	ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true}))
 }
 
+// GetByID returns a single Repository
+func GetByID(ctx *context.APIContext) {
+	repo, err := models.GetRepositoryByID(ctx.ParamsInt64(":id"))
+	if err != nil {
+		if models.IsErrRepoNotExist(err) {
+			ctx.Status(404)
+		} else {
+			ctx.Error(500, "GetRepositoryByID", err)
+		}
+		return
+	}
+
+	ctx.JSON(200, repo.APIFormat(&api.Permission{true, true, true}))
+}
+
 // Delete delete one repository
 // see https://github.com/gogits/go-gogs-client/wiki/Repositories#delete
 func Delete(ctx *context.APIContext) {