Creating a Pull Request from a Bamboo Plan
Asked by Subhi Andrews:

We have some plans ( both build and deploy) that do commit and pushes of branches. We would like to create a pull request automatically after a branch is pushed. Is there a quick way to do this?   

If we have to use Bitbucket APIs. Is there an example/documentation of how to use Python APIs for this purpose?

Thanks,


Answers:
author: Daniel Santos
body: Hi [@Subhi Andrews](/t5/user/viewprofilepage/user-id/191872)

You could use a script task and call a REST API to create the pull request.

Below you can find two examples using the curl command, one for Bitbucket cloud and another for server.

**Bitbucket Cloud**

```
 curl https://api.bitbucket.org/2.0/repositories/\<USER_NAME\>/\<REPOSITORY\>/pullrequests \    -u <USER_NAME>:<APP_PASSWORD> \    --request POST \    --header 'Content-Type: application/json' \    --data '{        "title": "\<PULL-REQUEST TITLE\>",        "description": "\<PULL-REQUEST DESCRIPTION\>",        "source": {            "branch": {                "name": "\<SOURCE_BRANCH\>"                }            },            "destination": {                "branch": {                    "name": "\<DESTINATION_BRANCH\>"                }            }        }'
```

Reference: [/repositories/{username}/{repo_slug}/pullrequests - Bitbucket API](https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/{username}/{repo_slug}/pullrequests)  
??Please make sure you create an app password with read/write permission for pull-requests.  

**Bitbucket server**

```
curl <BITBUCKET_URL>/rest/api/1.0/projects/<PROJECT>/repos/<REPOSITORY-SLUG>/pull-requests \    -u <USERNAME>:<PASSWORD> \    --request POST \    --header 'Content-Type: application/json' \    --data '{    "title": "\<PULL-REQUEST TITLE\>",    "description": "\<PULL-REQUEST DESCRIPTION\>",    "fromRef": {        "id": "\<SOURCE BRANCH\>",        "repository": {            "slug": "\<REPOSITORY_SLUG\>",            "project": {                "key": "\<PROJECT\>"            }        }    },    "toRef": {        "id": "\<DESTINATION BRANCH\>",        "repository": {            "slug": "\<REPOSITORY SLUG\>",            "project": {                "key": "\<PROJECT\>"            }        }    }}'
```

Reference: [/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/archive - Bitbucket Server - REST](https://docs.atlassian.com/bitbucket-server/rest/5.16.0/bitbucket-rest.html#idm8287391664)

I hope that helps.

comments: author: Subhi Andrews
body: [@Daniel Santos](/t5/user/viewprofilepage/user-id/502125) , Thanks. Could you also help us with APIs for merging the pull request?


author: Subhi Andrews
body: We probably need to extract pull-request id from the creation of pull-request step.


author: Daniel Santos
body: Hi [@Subhi Andrews](/t5/user/viewprofilepage/user-id/191872)

That should be the right direction.

* Were you able to get it working?
* Do you need it for Bitbucket cloud or server?


author: Subhi Andrews
body: We were able to create Pull-Requests from Script task. Need an automatic merge from another script task or the same script task.


author: Subhi Andrews
body: We use Bitbucket server


author: Daniel Santos
body: You will need to extract both the pull request ID version to merge it.

This is the call you can use:  

**Bitbucket server**

```
curl -X POST <BITBUCKET_URL>/rest/api/1.0/projects/<PROJECT>/repos/<REPOSITORY_SLUG>/pull-requests/<PULL_REQUEST_ID>/merge?version=<VERSION> \
-u <USERNAME>:<PASSWORD> \
--header "Content-Type:application/json" \
--header "Accept:application/json"
```

Reference: [/rest/api/1.0/projects/{projectKey}/repos/{repositorySlug}/pull-requests/{pullRequestId}/merge - Bitbucket Server REST API](https://docs.atlassian.com/bitbucket-server/rest/4.4.1/bitbucket-rest.html#idp2469152)

Please keep us posted on your progres =\]


Tags: bitbucket-server