JIRA API
JIRA
https://www.atlassian.com/software/jira
The best software teams ship early and often.
Jira Software is built for every member of your software team to plan,
track, and release great software.
REST API
search with jql
https://docs.atlassian.com/software/jira/docs/api/REST/8.12.2/#api/2/search-search
Search
GET /rest/api/2/search
Searches for issues using JQL.
Sorting the
jql
parameter is a full JQL expression, and includes anORDER BY
clause.The
fields
param (which can be specified multiple times) gives a comma-separated list of fields to include in the response. This can be used to retrieve a subset of fields. A particular field can be excluded by prefixing it with a minus.
Request
query parameters
parameter type description jql
string a JQL query string
startAt
int the index of the first issue to return (0-based)
maxResults
int the maximum number of issues to return (defaults to 50). The maximum allowable value is dictated by the Jira property 'jira.search.views.default.max'. If you specify a value that is higher than this number, your search results will be truncated.
validateQuery
boolean Default: true
whether to validate the JQL query
fields
string the list of fields to return for each issue. By default, all navigable fields are returned.
expand
string A comma-separated list of the parameters to expand.
Responses
- Status 200 - application/json
Returns a JSON representation of the search results.Example
{ "expand": "names,schema", "startAt": 0, "maxResults": 50, "total": 1, "issues": [ { "expand": "", "id": "10001", "self": "http://www.example.com/jira/rest/api/2/issue/10001", "key": "HSP-1" } ] }
Schema
- Status 400
Returned if there is a problem with the JQL query.
Issue API
https://docs.atlassian.com/software/jira/docs/api/REST/8.12.2/#api/2/issue
api/2/issueExpand all methods
Create issue
POST /rest/api/2/issue
Create issues
POST /rest/api/2/issue/bulk
Get issue
GET /rest/api/2/issue/{issueIdOrKey}
Delete issue
DELETE /rest/api/2/issue/{issueIdOrKey}
Edit issue
PUT /rest/api/2/issue/{issueIdOrKey}
Archive issue
PUT /rest/api/2/issue/{issueIdOrKey}/archive
Assign
PUT /rest/api/2/issue/{issueIdOrKey}/assignee
Get comments
GET /rest/api/2/issue/{issueIdOrKey}/comment
Add comment
POST /rest/api/2/issue/{issueIdOrKey}/comment
Update comment
PUT /rest/api/2/issue/{issueIdOrKey}/comment/{id}
Delete comment
DELETE /rest/api/2/issue/{issueIdOrKey}/comment/{id}
Get comment
GET /rest/api/2/issue/{issueIdOrKey}/comment/{id}
Get edit issue meta
GET /rest/api/2/issue/{issueIdOrKey}/editmeta
Notify
POST /rest/api/2/issue/{issueIdOrKey}/notify
Get remote issue links
GET /rest/api/2/issue/{issueIdOrKey}/remotelink
Create or update remote issue link
POST /rest/api/2/issue/{issueIdOrKey}/remotelink
Delete remote issue link by global id
DELETE /rest/api/2/issue/{issueIdOrKey}/remotelink
Get remote issue link by id
GET /rest/api/2/issue/{issueIdOrKey}/remotelink/{linkId}
Update remote issue link
PUT /rest/api/2/issue/{issueIdOrKey}/remotelink/{linkId}
Delete remote issue link by id
DELETE /rest/api/2/issue/{issueIdOrKey}/remotelink/{linkId}
Restore issue
PUT /rest/api/2/issue/{issueIdOrKey}/restore
Get transitions
GET /rest/api/2/issue/{issueIdOrKey}/transitions
Do transition
POST /rest/api/2/issue/{issueIdOrKey}/transitions
Remove vote
DELETE /rest/api/2/issue/{issueIdOrKey}/votes
Add vote
POST /rest/api/2/issue/{issueIdOrKey}/votes
Get votes
GET /rest/api/2/issue/{issueIdOrKey}/votes
Get issue watchers
GET /rest/api/2/issue/{issueIdOrKey}/watchers
Add watcher
POST /rest/api/2/issue/{issueIdOrKey}/watchers
Remove watcher
DELETE /rest/api/2/issue/{issueIdOrKey}/watchers
Get issue worklog
GET /rest/api/2/issue/{issueIdOrKey}/worklog
Add worklog
POST /rest/api/2/issue/{issueIdOrKey}/worklog
Get worklog
GET /rest/api/2/issue/{issueIdOrKey}/worklog/{id}
Update worklog
PUT /rest/api/2/issue/{issueIdOrKey}/worklog/{id}
Delete worklog
DELETE /rest/api/2/issue/{issueIdOrKey}/worklog/{id}
Archive issues
POST /rest/api/2/issue/archive
Get create issue meta deprecated
GET /rest/api/2/issue/createmeta
Get create issue meta project issue types
GET /rest/api/2/issue/createmeta/{projectIdOrKey}/issuetypes
Get create issue meta fields
GET /rest/api/2/issue/createmeta/{projectIdOrKey}/issuetypes/{issueTypeId}
Get issue picker resource
GET /rest/api/2/issue/picker
PYTHON LIBRARY
https://jira.readthedocs.io/en/master/installation.html
The easiest (and best) way to install jira-python is through pip:
$ pip install jira
https://jira.readthedocs.io/en/master/examples.html
# This script shows how to use the client in anonymous mode # against jira.atlassian.com. from jira import JIRA import re # By default, the client will connect to a Jira instance started from the Atlassian Plugin SDK # (see https://developer.atlassian.com/display/DOCS/Installing+the+Atlassian+Plugin+SDK for details). # Override this with the options parameter. options = {"server": "https://jira.atlassian.com"} jira = JIRA(options) # Get all projects viewable by anonymous users. projects = jira.projects() # Sort available project keys, then return the second, third, and fourth keys. keys = sorted([project.key for project in projects])[2:5] # Get an issue. issue = jira.issue("JRA-1330") # Find all comments made by Atlassians on this issue. atl_comments = [ comment for comment in issue.fields.comment.comments if re.search(r"@atlassian.com$", comment.author.emailAddress) ] # Add a comment to the issue. jira.add_comment(issue, "Comment text") # Change the issue's summary and description. issue.update( summary="I'm different!", description="Changed the summary to be different." ) # Change the issue without sending updates issue.update(notify=False, description="Quiet summary update.") # You can update the entire labels field like this issue.update(fields={"labels": ["AAA", "BBB"]}) # Or modify the List of existing labels. The new label is unicode with no # spaces issue.fields.labels.append(u"new_text") issue.update(fields={"labels": issue.fields.labels}) # Send the issue away for good. issue.delete() # Linking a remote jira issue (needs applinks to be configured to work) issue = jira.issue("JRA-1330") issue2 = jira.issue("XX-23") # could also be another instance jira.add_remote_link(issue, issue2)