Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
Community Members
Community Events
Community Groups

Bitbucket Create/Delete branch based on Jira workflow


Hello Team,

Can we Create/Delete branch in bitbucket based on Jira workflow?

Please advise.

3 answers

Yes, you certainly can. You would need ScriptRunner in your Jira instance.

There are two ways to do it. Basically you make a POST call using the following Rest API to create a branch in a workflow post function from Jira to BitBucket:



With App links, without need to pass username and password

1. Setup the app links as mentioned in this documentation.

2. Following snippet works as I have tested:

import com.atlassian.applinks.api.ApplicationLinkResponseHandler
import com.atlassian.applinks.api.ApplicationLinkResponseHandler
import com.atlassian.applinks.api.ApplicationLinkService
import com.atlassian.applinks.api.application.bitbucket.BitbucketApplicationType
import com.atlassian.sal.api.component.ComponentLocator
import groovy.json.JsonSlurper

import groovy.json.JsonBuilder

def appLinkService = ComponentLocator.getComponent(ApplicationLinkService)
def appLink = appLinkService.getPrimaryApplicationLink(BitbucketApplicationType)
def applicationLinkRequestFactory = appLink.createAuthenticatedRequestFactory()

Map body = [
name: "test-branch",
startPoint: "refs/heads/master",

def request = applicationLinkRequestFactory
.createRequest(Request.MethodType.POST, "/rest/branch-utils/1.0/projects/JP/repos/just-repository/branches")
.addHeader("Content-Type", "application/json")
.setRequestBody(new JsonBuilder(body).toString())
.execute(new ApplicationLinkResponseHandler<Map>() {
Map credentialsRequired(Response response) throws ResponseException {
return null
Map handle(Response response) throws ResponseException {
new JsonSlurper().parseText(response.getResponseBodyAsString()) as Map

With username and password

You can use this sample script from our library as reference to make the same POST call:

import groovy.json.JsonOutput
import groovy.json.JsonBuilder

final externalUrl = "http://<BitBucket_Base_URL>/"

def body = [
name: "test-branch",
startPoint: "refs/heads/master",

def postResponse = post(externalUrl, "/rest/branch-utils/1.0/projects/JP/repos/just-repository/branches", new JsonBuilder(body).toString())

def post(def hostUrl, def endpointAndQuery, def bodyJson) {
def client = new RESTClient(hostUrl)
'Accept' : ContentType.JSON,
'Authorization': "Basic ${'xxxx:xxxxxxxx'.bytes.encodeBase64()}"
client.handler.success = { HttpResponseDecorator response, json ->
client.handler.failure = { HttpResponseDecorator response ->
// Failure can be handled here
log.error response.entity.content.text
path: endpointAndQuery,
contentType: ContentType.JSON,
body: bodyJson

Please note that this will hardcode a username and password in your script.

Deleting a branch is just similar using a DELETE call on the same REST API.

I hope this helps!

@Ramya Yarru ,

Thank you for your question.

Please can I confirm if you have ScriptRunner for Jira or ScriptRunner for Bitbucket?

Kind regards,

Robert Giddings,

Product Manager, ScriptRunner for Bitbucket

Hello @Robert Giddings [Adaptavist] 

yes, i do have have scriptrunner for bitbucket and jira.

Thanks and Regards


Suggest an answer

Log in or Sign up to answer

Atlassian Community Events