diff --git a/modules/structs/fork.go b/modules/structs/fork.go
index dd6e24e8b7..21afd636c7 100644
--- a/modules/structs/fork.go
+++ b/modules/structs/fork.go
@@ -8,4 +8,6 @@ package structs
 type CreateForkOption struct {
 	// organization name, if forking into an organization
 	Organization *string `json:"organization"`
+	// name of the forked repository
+	Name *string `json:"name"`
 }
diff --git a/routers/api/v1/repo/fork.go b/routers/api/v1/repo/fork.go
index 542af60741..b0ba5db253 100644
--- a/routers/api/v1/repo/fork.go
+++ b/routers/api/v1/repo/fork.go
@@ -97,6 +97,8 @@ func CreateFork(ctx *context.APIContext) {
 	//     "$ref": "#/responses/Repository"
 	//   "403":
 	//     "$ref": "#/responses/forbidden"
+	//   "409":
+	//     description: The repository with the same name already exists.
 	//   "422":
 	//     "$ref": "#/responses/validationError"
 
@@ -126,13 +128,24 @@ func CreateFork(ctx *context.APIContext) {
 		forker = org.AsUser()
 	}
 
+	var name string
+	if form.Name == nil {
+		name = repo.Name
+	} else {
+		name = *form.Name
+	}
+
 	fork, err := repo_service.ForkRepository(ctx.User, forker, repo_service.ForkRepoOptions{
 		BaseRepo:    repo,
-		Name:        repo.Name,
+		Name:        name,
 		Description: repo.Description,
 	})
 	if err != nil {
-		ctx.Error(http.StatusInternalServerError, "ForkRepository", err)
+		if repo_model.IsErrRepoAlreadyExist(err) {
+			ctx.Error(http.StatusConflict, "ForkRepository", err)
+		} else {
+			ctx.Error(http.StatusInternalServerError, "ForkRepository", err)
+		}
 		return
 	}
 
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 96dd262301..992cdf5bda 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -3509,6 +3509,9 @@
           "403": {
             "$ref": "#/responses/forbidden"
           },
+          "409": {
+            "description": "The repository with the same name already exists."
+          },
           "422": {
             "$ref": "#/responses/validationError"
           }
@@ -13376,6 +13379,11 @@
       "description": "CreateForkOption options for creating a fork",
       "type": "object",
       "properties": {
+        "name": {
+          "description": "name of the forked repository",
+          "type": "string",
+          "x-go-name": "Name"
+        },
         "organization": {
           "description": "organization name, if forking into an organization",
           "type": "string",