Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Earn badges and make progress

You're on your way to the next level! Join the Kudos program to earn points and save your progress.

Deleted user Avatar
Deleted user

Level 1: Seed

25 / 150 points

Next: Root


1 badge earned


Participate in fun challenges

Challenges come and go, but your rewards stay with you. Do more to earn more!


Gift kudos to your peers

What goes around comes around! Share the love by gifting kudos to your peers.


Rise up in the ranks

Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!


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

Resolving a 400 Bad Request error on a Script Listener

Hi Jira gurus!  

After many searches, I am reaching out to the community for a little help on this one.  I am using this ScriptListener to update the story points from all issues in an Epic to the Epic parent.  

The listener is working except for its main purpose - updating the field!  Every attempt I make to fix this results in an error.   Any suggestions are much appreciated. 

The original script is here and I have modified it for IssueType to include Bugs, Tech Debt, Hot Fixes, etc.

Screen Shot 2019-11-05 at 1.47.39 PM.png

1 answer

1 accepted

0 votes
Answer accepted
Leo Community Leader Nov 05, 2019

Hi @Davey ,

From the error log I could see that you've framed your jql query in script with syntax error

Can you paste your jql part in script to take a look




Thanks @Leo !  

Pasting the script since it is a small one.   From what I can tell the jql is where this comment starts - // Note: The search API is limited that to only be able to return a maximum of 50 results

* This script listiner which should be configured on the issue updated event and shows how you can update the value of the story points field on the epic to show a sum of the values from the story points field for all stories linked to the epic, each time the epic issue is updated.
* "All right, title and interest in this code snippet shall remain the exclusive intellectual property of Adaptavist Group Ltd and its affiliates. Customers with a valid ScriptRunner
* license shall be granted a non-exclusive, non-transferable, freely revocable right to use this code snippet only within their own instance of Atlassian products. This licensing notice cannot be removed
* or amended and must be included in any circumstances where the code snippet is shared by You or a third party."

if( == "Epic"){

// Get the Epic Issue Key
def epicIssueKey = issue.key.toString()"Epic Key = " + epicIssueKey)

// Get the field ids
def fields = get('/rest/api/2/field')
.body as List<Map>

// Get the story points custom field to use in the script
def storyPointsField = fields.find { == "Story Points" }.id"The id of the story points field is: $storyPointsField")

// Note: The search API is limited that to only be able to return a maximum of 50 results
def allStories = get("/rest/api/2/search")
.queryString("jql", "parentEpic =${epicIssueKey} and issuetype = 'Story', 'Bug'")
.queryString("fields", "parent,$storyPointsField")
.issues as List<Map>"Total stories for ${epicIssueKey}: ${allStories.size()}")

// Sum the storyPoints
def estimate = allStories.collect { Map story ->
story.fields[storyPointsField] ?: 0

}.sum()"Summed Story Points: ${estimate}")

// Store the summed story points on the Story Points field of the epic issue
def summedEstimateField = fields.find { == "Story Points" }.id"Custom field ID to update: ${summedEstimateField}")

// Now update the Epic issue
def result = put("/rest/api/2/issue/${epicIssueKey}")
.header('Content-Type', 'application/json')
fields: [
(summedEstimateField): estimate

// check that updating the Epic issue worked
assert result.status >= 200 && result.status < 300

}else{"Not an Epic issue so do nothing")

Leo Community Leader Nov 06, 2019


As I suspected, there is a syntax error with your JQL >>>  "parentEpic =${epicIssueKey} and issuetype = 'Story', 'Bug'"

if you replace to anyone of them below may fix your issue

1.  "parentEpic =${epicIssueKey} and (issuetype = 'Story' or issuetype = 'Bug')"

"parentEpic =${epicIssueKey} and issuetype in ('Story', 'Bug')"




@Leo - You're the!   That was it!  

Thanks so much! 

Well now there is a new quirk.   The script is updating the field, but it is giving the max 50 stories and a total of 122 story points to everything.  (faceplam) 

Leo Community Leader Nov 06, 2019 • edited

If I'm right scriptrunner goes with search api  internally which is limited in jira(which is not configurable)

you can try with pagination, but I never played with that :( 

Working perfectly now.   

Added a queryString parameter for maxresults = 50 and adjusted the JQL to use the in statement for the issue types! 


On to the next project. 

Suggest an answer

Log in or Sign up to answer

Atlassian Community Events