diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go
index 8073f773ac..e89a6359ae 100644
--- a/integrations/api_repo_test.go
+++ b/integrations/api_repo_test.go
@@ -63,3 +63,24 @@ func TestAPIViewRepo(t *testing.T) {
 	assert.EqualValues(t, 1, repo.ID)
 	assert.EqualValues(t, "repo1", repo.Name)
 }
+
+func TestAPIOrgRepos(t *testing.T) {
+	prepareTestEnv(t)
+	user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
+	// User3 is an Org. Check their repos.
+	sourceOrg := models.AssertExistsAndLoadBean(t, &models.User{ID: 3}).(*models.User)
+	// Login as User2.
+	session := loginUser(t, user.Name)
+
+	req := NewRequestf(t, "GET", "/api/v1/orgs/%s/repos", sourceOrg.Name)
+	resp := session.MakeRequest(t, req, http.StatusOK)
+
+	var apiRepos []*api.Repository
+	DecodeJSON(t, resp, &apiRepos)
+	expectedLen := models.GetCount(t, models.Repository{OwnerID: sourceOrg.ID},
+		models.Cond("is_private = ?", false))
+	assert.Len(t, apiRepos, expectedLen)
+	for _, repo := range apiRepos {
+		assert.False(t, repo.Private)
+	}
+}
diff --git a/public/swagger.v1.json b/public/swagger.v1.json
index 68f8227933..3ce534d44f 100644
--- a/public/swagger.v1.json
+++ b/public/swagger.v1.json
@@ -187,6 +187,22 @@
         }
       }
     },
+    "/orgs/{org}/repos": {
+      "get": {
+        "produces": [
+          "application/json"
+        ],
+        "operationId": "orgListRepos",
+        "responses": {
+          "200": {
+            "$ref": "#/responses/RepositoryList"
+          },
+          "500": {
+            "$ref": "#/responses/error"
+          }
+        }
+      }
+    },
     "/repos/search": {
       "get": {
         "produces": [
@@ -1357,4 +1373,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 8dda892955..bac5af7be6 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -458,6 +458,7 @@ func RegisterRoutes(m *macaron.Macaron) {
 		m.Get("/user/orgs", reqToken(), org.ListMyOrgs)
 		m.Get("/users/:username/orgs", org.ListUserOrgs)
 		m.Group("/orgs/:orgname", func() {
+			m.Get("/repos", user.ListOrgRepos)
 			m.Combo("").Get(org.Get).
 				Patch(reqToken(), reqOrgOwnership(), bind(api.EditOrgOption{}), org.Edit)
 			m.Group("/members", func() {
diff --git a/routers/api/v1/user/repo.go b/routers/api/v1/user/repo.go
index c929da5e37..b4a4653faa 100644
--- a/routers/api/v1/user/repo.go
+++ b/routers/api/v1/user/repo.go
@@ -1,3 +1,7 @@
+// Copyright 2017 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 user
 
 import (
@@ -80,3 +84,17 @@ func ListMyRepos(ctx *context.APIContext) {
 	}
 	ctx.JSON(200, &apiRepos)
 }
+
+// ListOrgRepos - list the repositories of an organization.
+func ListOrgRepos(ctx *context.APIContext) {
+	// swagger:route GET /orgs/{org}/repos orgListRepos
+	//
+	//     Produces:
+	//     - application/json
+	//
+	//     Responses:
+	//       200: RepositoryList
+	//       500: error
+
+	listUserRepos(ctx, ctx.Org.Organization)
+}