JIRA SOAP to REST Migration Guide

JIRA's SOAP and XML-RPC remote APIs were removed in JIRA 7.0 for JIRA Server. Read the announcement for more information.

This guide will help you migrate to the JIRA REST APIs, by providing the Atlassian-recommend REST equivalents for the existing SOAP methods. Alternatively, if you prefer, you can browse the full JIRA REST API documentation by clicking the button below:

On this page:

Global configuration

SOAP method Recommended REST resource REST method
getConfiguration(java.lang.String token) /rest/api/2/configuration GET
getServerInfo(java.lang.String token) /rest/api/2/serverInfo GET
getCustomFields(java.lang.String token) /rest/api/2/field GET
getIssueTypes(java.lang.String token)  /rest/api/2/issuetype GET
getPriorities(java.lang.String token)  /rest/api/2/priority GET
getProjectsNoSchemes(java.lang.String token)  /rest/api/2/project GET
getResolutions(java.lang.String token)  /rest/api/2/resolution GET
getStatuses(java.lang.String token)  /rest/api/2/status GET
refreshCustomFields(java.lang.String token)  This method was intentionally omitted in REST and we do not intend to implement it in the future. n/a

Issues

SOAP method Recommended REST resource REST method
addBase64EncodedAttachmentsToIssue(java.lang.String token, java.lang.String issueKey, java.lang.String[] fileNames, java.lang.String[] base64EncodedAttachmentData)  /rest/api/2/issue/{issueIdOrKey}/attachments POST
addComment(java.lang.String token, java.lang.String issueKey, RemoteComment remoteComment)  /rest/api/2/issue/{issueIdOrKey}/comment POST
createIssue(java.lang.String token, RemoteIssue rIssue)  /rest/api/2/issue POST
createIssueWithParent(java.lang.String token, RemoteIssue rIssue, java.lang.String parentIssueKey)  Follow the documented instructions in /rest/api/2/issue  to create a sub-task POST
createIssueWithSecurityLevel(java.lang.String token, RemoteIssue rIssue, java.lang.Long securityLevelId)  /rest/api/2/issue   POST
createIssueWithParentWithSecurityLevel(java.lang.String token, RemoteIssue rIssue, java.lang.String parentIssueKey, java.lang.Long securityLevelId)  /rest/api/2/issue   POST
deleteIssue(java.lang.String token, java.lang.String issueKey)  /rest/api/2/issue/{issueIdOrKey} DELETE
editComment(java.lang.String token, RemoteComment remoteComment)  /rest/api/2/issue/{issueIdOrKey}/comment/{id} PUT
getAttachmentsFromIssue(java.lang.String token, java.lang.String issueKey) 

/rest/api/2/issue/{issueIdOrKey}?fields=attachment

GET
getAvailableActions(java.lang.String token, java.lang.String issueKey)  /rest/api/2/issue/{issueIdOrKey}/transitions GET
getComment(java.lang.String token, java.lang.Long id)  /rest/api/2/issue/{issueIdOrKey}/comment/{id} GET
getComments(java.lang.String token, java.lang.String issueKey) 

/rest/api/2/issue/{issueIdOrKey}/comment

GET
getFieldsForAction(java.lang.String token, java.lang.String issueKey, java.lang.String actionIdString)   /rest/api/2/issue/{issueIdOrKey}/transitions    GET 
getFieldsForCreate(java.lang.String token, java.lang.String projectKey, java.lang.Long issueTypeId)  /rest/api/2/issue/createmeta GET
getFieldsForEdit(java.lang.String token, java.lang.String issueKey)  /rest/api/2/issue/{issueIdOrKey}/editmeta GET
getIssue(java.lang.String token, java.lang.String issueKey)  /rest/api/2/issue/{issueIdOrKey}    GET
getIssueById(java.lang.String token, java.lang.String issueId)  /rest/api/2/issue/{issueIdOrKey}    GET
getResolutionDateById(java.lang.String token, java.lang.Long issueId) 

/rest/api/2/issue/{issueIdOrKey}?fields=resolution

GET
getResolutionDateByKey(java.lang.String token, java.lang.String issueKey) 

/rest/api/2/issue/{issueIdOrKey}?fields=resolution

GET
getSecurityLevel(java.lang.String token, java.lang.String issueKey) 

/rest/api/2/issue/{issueIdOrKey}?fields=security

GET
progressWorkflowAction(java.lang.String token, java.lang.String issueKey, java.lang.String actionIdString, RemoteFieldValue[] actionParams)  /rest/api/2/issue/{issueIdOrKey}/transitions POST
updateIssue(java.lang.String token, java.lang.String issueKey, RemoteFieldValue[] actionParams)  /rest/api/2/issue/{issueIdOrKey}    PUT

Issue types

SOAP method Recommended REST resource REST method
getIssueTypesForProject(java.lang.String token, java.lang.String projectId) 

/rest/api/2/issue/createmeta?project={projectIdOrKey}

GET
getSubTaskIssueTypes(java.lang.String token) 

/rest/api/2/issuetype

Supported only by filtering the response for all issue types.

GET
getSubTaskIssueTypesForProject(java.lang.String token, java.lang.String projectId) 

/rest/api/2/issue/createmeta?project= {projectIdOrKey}

Filter for subtasks.

GET

Login

SOAP method Recommended REST resource REST method
login(java.lang.String username, java.lang.String password)

Intentionally omitted. JIRA will not support this.

Read about authentication.

n/a
logout(java.lang.String token) 

Intentionally omitted. JIRA will not support this.

n/a

Notifications

SOAP method Recommended REST resource REST method
getAssociatedNotificationSchemes(java.lang.String token, RemoteProjectRole projectRole)  

/rest/api/2/project/{projectKeyOrId}/notificationscheme

(warning) Coming in JIRA 7.0 EAP

GET
getNotificationSchemes(java.lang.String token) 

/rest/api/2/notificationscheme

(warning) Coming in JIRA 7.0 EAP

GET

Permissions

SOAP method

Recommended REST resource

REST method

addPermissionTo(java.lang.String token, RemotePermissionScheme permissionScheme, RemotePermission permission, RemoteEntity remoteEntity)  

/rest/api/2/permissionscheme/{schemeId}/permission

(warning) Coming in JIRA 7.0 EAP

POST

createPermissionScheme(java.lang.String token, java.lang.String name, java.lang.String description) 

/rest/api/2/permissionscheme

(warning) Coming in JIRA 7.0 EAP

POST

deletePermissionFrom(java.lang.String token, RemotePermissionScheme permissionSchemeName, RemotePermission permission, RemoteEntity remoteEntity) 

/rest/api/2/permissionscheme/{schemeId}/permission/{permissionId}

(warning) Coming in JIRA 7.0 EAP

DELETE

deletePermissionScheme(java.lang.String token, java.lang.String permissionSchemeName) 

/rest/api/2/permissionscheme/{schemeId}

(warning) Coming in JIRA 7.0 EAP

DELETE

getAllPermissions(java.lang.String token) 

/rest/api/2/permissions OR /rest/api/2/mypermissions

(warning) Coming in JIRA 7.0 EAP

GET

getAssociatedPermissionSchemes(java.lang.String token, RemoteProjectRole projectRole) 

/rest/api/2/project/{projectKeyOrId}/permissionscheme

(warning) Coming in JIRA 7.0 EAP

GET

getPermissionSchemes(java.lang.String token) 

/rest/api/2/permissionscheme

(warning) Coming in JIRA 7.0 EAP

GET

Projects

SOAP method Recommended REST resource REST method
getComponents(java.lang.String token, java.lang.String projectKey)    /rest/api/2/project/{projectIdOrKey}/components GET
addVersion(java.lang.String token, java.lang.String projectKey, RemoteVersion remoteVersion)  /rest/api/2/version POST
archiveVersion(java.lang.String token, java.lang.String projectKey, java.lang.String versionName, boolean archive) 

/rest/api/2/version/{versionId}

In request body:

{"archived": true}

PUT
createProject(java.lang.String token, java.lang.String key, java.lang.String name, java.lang.String description, java.lang.String url, java.lang.String lead, RemotePermissionScheme permissionScheme, RemoteScheme notificationScheme, RemoteScheme issueSecurityScheme) 

/rest/api/2/project

(warning) Coming in JIRA 7.0 EAP

POST
createProjectFromObject(java.lang.String token, RemoteProject rproject) 

/rest/api/2/project

(warning) Coming in JIRA 7.0 EAP

POST
deleteProject(java.lang.String token, java.lang.String projectKey) 

/rest/api/2/project/{projectId}

(warning) Coming in JIRA 7.0 EAP

DELETE
deleteProjectAvatar(java.lang.String token, long avatarId) 

/rest/api/2/project/{projectIdOrKey}/avatar/{id}

DELETE
getProjectAvatar(java.lang.String token, java.lang.String projectKey)  /rest/api/2/project/{projectIdOrKey}/avatars GET
getProjectAvatars(java.lang.String token, java.lang.String projectKey, boolean includeSystemAvatars)  /rest/api/2/project/{projectIdOrKey}/avatars   GET
getProjectById(java.lang.String token, java.lang.Long projectId)  /rest/api/2/project/{projectIdOrKey} GET
getProjectByKey(java.lang.String token, java.lang.String projectKey)  /rest/api/2/project/{projectIdOrKey}     GET
getVersions(java.lang.String token, java.lang.String projectKey)  /rest/api/2/project/{projectIdOrKey}/versions GET
releaseVersion(java.lang.String token, java.lang.String projectKey, RemoteVersion version)  /rest/api/2/version/{id} PUT
setNewProjectAvatar(java.lang.String token, java.lang.String projectKey, java.lang.String contentType, java.lang.String base64ImageData) 

/rest/api/2/project/{projectIdOrKey}/avatar/temporary

 

POST
setProjectAvatar(java.lang.String token, java.lang.String projectKey, java.lang.Long avatarId) 

/rest/api/2/project/{projectIdOrKey}/avatar    

PUT
getProjectWithSchemesById(java.lang.String token, java.lang.Long projectId) 

/rest/api/2/project/{projectIdOrKey}  

and calls to

/rest/api/2/project/{projectIdOrKey}/issuesecuritylevelscheme

/rest/api/2/project/{projectIdOrKey} /permissionscheme

/rest/api/2/project/{projectIdOrKey} /notificationscheme    

(warning) Coming in JIRA 7.0 EAP

GET

Project roles

SOAP method Recommended REST resource REST method
getProjectRole(java.lang.String token, java.lang.Long id)  /rest/api/2/role/{id} GET
getProjectRoleActors(java.lang.String token, RemoteProjectRole projectRole, RemoteProject project)  /rest/api/2/project/{projectIdOrKey}/role/{id} GET
getProjectRoles(java.lang.String token)  /rest/api/2/role GET
isProjectRoleNameUnique(java.lang.String token, java.lang.String name)  Intentionally omitted from REST. You can calculate this from the /rest/api/2/role response. n/a
removeActorsFromProjectRole(java.lang.String token, java.lang.String[] actors, RemoteProjectRole projectRole, RemoteProject project, java.lang.String actorType)  /rest/api/2/project/{projectIdOrKey}/role/{id} DELETE
removeAllRoleActorsByNameAndType(java.lang.String token, java.lang.String name, java.lang.String type)  Can be done indirectly. n/a
removeAllRoleActorsByProject(java.lang.String token, RemoteProject project)  Can be done indirectly. n/a
removeDefaultActorsFromProjectRole(java.lang.String token, java.lang.String[] actors, RemoteProjectRole projectRole, java.lang.String actorType)  Can be done indirectly. n/a
updateProject(java.lang.String token, RemoteProject rProject) 

/rest/api/2/project{projectIdOrKey}

(warning) Coming in JIRA 7.0 EAP

PUT
updateProjectRole(java.lang.String token, RemoteProjectRole projectRole) 

/rest/api/2/project/{projectIdOrKey}/role/{id}

(warning) Coming in JIRA 7.0 EAP

PUT
getDefaultRoleActors(java.lang.String token, RemoteProjectRole projectRole)  /rest/api/2/project/{projectIdOrKey}/role/{id} GET
addActorsToProjectRole(java.lang.String token, java.lang.String[] actors, RemoteProjectRole projectRole, RemoteProject project, java.lang.String actorType) 

/rest/api/2/project/{projectIdOrKey}/role/{id}

There is also PUT alternative

POST
addDefaultActorsToProjectRole(java.lang.String token, java.lang.String[] actors, RemoteProjectRole projectRole, java.lang.String type) 

/rest/api/2/project/{projectIdOrKey}/role/{id}

There is also PUT alternative

POST
createProjectRole(java.lang.String token, RemoteProjectRole projectRole) 

/rest/api/2/role

(warning) Coming in JIRA 7.0 EAP

POST
deleteProjectRole(java.lang.String token, RemoteProjectRole projectRole, boolean confirm) 

/rest/api/2/role/{roleId}

  (warning) Coming in JIRA 7.0 EAP

DELETE
SOAP method Recommended REST resource REST method
getFavouriteFilters(java.lang.String token)  /rest/api/2/filter/favourite GET
getIssueCountForFilter(java.lang.String token, java.lang.String filterId) 

Retrieve filter's JQL from:

/rest/api/2/filter/{id}

then call:

/rest/api/2/search

GET
getIssuesFromFilter(java.lang.String token, java.lang.String filterId)  Same as above. GET
getIssuesFromFilterWithLimit(java.lang.String token, java.lang.String filterId, int offSet, int maxNumResults)  Same as above. GET
getIssuesFromJqlSearch(java.lang.String token, java.lang.String jqlSearch, int maxNumResults)  /rest/api/2/search GET
getIssuesFromTextSearch(java.lang.String token, java.lang.String searchTerms) 

Intentionally omitted. Use text ~ "foo" as a JQL query on /rest/api/2/search

GET
getIssuesFromTextSearchWithLimit(java.lang.String token, java.lang.String searchTerms, int offSet, int maxNumResults)  See above. GET
getIssuesFromTextSearchWithProject(java.lang.String token, java.lang.String[] projectKeys, java.lang.String searchTerms, int maxNumResults)  See above. GET
getSavedFilters(java.lang.String token)  /rest/api/2/filter/favourite  

Security

SOAP method Recommended REST resource REST method
getSecurityLevels(java.lang.String token, java.lang.String projectKey) 

api/2/project/{projectKeyOrId}/securitylevel   

(warning) Coming in JIRA 7.0 EAP

GET
getSecuritySchemes(java.lang.String token) 

api/2/issuesecurityschemes

(warning) Coming in JIRA 7.0 EAP

GET

User management

SOAP method Recommended REST resource REST method
removeUserFromGroup(java.lang.String token, RemoteGroup group, RemoteUser ruser)  /rest/api/2/group/user DELETE
setUserPassword(java.lang.String token, RemoteUser user, java.lang.String newPassword)  /rest/api/2/user/password PUT
addUserToGroup(java.lang.String token, RemoteGroup group, RemoteUser ruser)  /rest/api/2/group/user POST
createGroup(java.lang.String token, java.lang.String groupName, RemoteUser firstUser)  /rest/api/2/group POST
createUser(java.lang.String token, java.lang.String username, java.lang.String password, java.lang.String fullName, java.lang.String email)  /rest/api/2/user POST
deleteGroup(java.lang.String token, java.lang.String groupName, java.lang.String swapGroupName)  /rest/api/2/group     DELETE
deleteUser(java.lang.String token, java.lang.String username)  /rest/api/2/user     DELETE
getGroup(java.lang.String token, java.lang.String groupName)  /rest/api/2/group     GET
getUser(java.lang.String token, java.lang.String username)  /rest/api/2/user     GET
updateGroup(java.lang.String token, RemoteGroup group)  /rest/api/2/group     PUT
updateUser(java.lang.String token, RemoteUser user) 

/rest/api/2/user

(warning) Coming in JIRA 7.0 EAP

PUT

Worklog

SOAP method Recommended REST resource REST method
addWorklogAndAutoAdjustRemainingEstimate(java.lang.String token, java.lang.String issueKey, RemoteWorklog remoteWorklog)  /rest/api/2/issue/{issueIdOrKey}/worklog POST
addWorklogAndRetainRemainingEstimate(java.lang.String token, java.lang.String issueKey, RemoteWorklog remoteWorklog) 

/rest/api/2/issue/{issueIdOrKey}/worklog

See documentation on including leave parameter

POST
addWorklogWithNewRemainingEstimate(java.lang.String token, java.lang.String issueKey, RemoteWorklog remoteWorklog, java.lang.String newRemainingEstimate) 

/rest/api/2/issue/{issueIdOrKey}/worklog

See documentation on including new parameter

POST
deleteWorklogAndAutoAdjustRemainingEstimate(java.lang.String token, java.lang.String worklogId)  /rest/api/2/issue/{issueIdOrKey}/worklog/{id} DELETE
deleteWorklogAndRetainRemainingEstimate(java.lang.String token, java.lang.String worklogId) 

/rest/api/2/issue/{issueIdOrKey}/worklog/{id}

See documentation on including leave parameter

DELETE
deleteWorklogWithNewRemainingEstimate(java.lang.String token, java.lang.String worklogId, java.lang.String newRemainingEstimate) 

/rest/api/2/issue/{issueIdOrKey}/worklog/{id}

See documentation on including new parameter

DELETE
getWorklogs(java.lang.String token, java.lang.String issueKey)  /rest/api/2/issue/{issueIdOrKey}/worklog GET
hasPermissionToCreateWorklog(java.lang.String token, java.lang.String issueKey)  /rest/api/2/mypermissions GET
hasPermissionToDeleteWorklog(java.lang.String token, java.lang.String worklogId)  /rest/api/2/mypermissions     GET
hasPermissionToEditComment(java.lang.String token, RemoteComment remoteComment)  /rest/api/2/mypermissions     GET
hasPermissionToUpdateWorklog(java.lang.String token, java.lang.String worklogId)  /rest/api/2/mypermissions     GET
updateWorklogAndAutoAdjustRemainingEstimate(java.lang.String token, RemoteWorklog remoteWorklog)  /rest/api/2/issue/{issueIdOrKey}/worklog/{id} PUT
updateWorklogAndRetainRemainingEstimate(java.lang.String token, RemoteWorklog remoteWorklog) 

/rest/api/2/issue/{issueIdOrKey}/worklog/{id}

See documentation on including leave parameter

PUT
updateWorklogWithNewRemainingEstimate(java.lang.String token, RemoteWorklog remoteWorklog, java.lang.String newRemainingEstimate) 

/rest/api/2/issue/{issueIdOrKey}/worklog/{id}

See documentation on including new parameter

PUT

Note on session invalidation

SOAP used to throw an exception when user's session expired. The JIRA REST API returns an X-AUSERNAME header. The header's value will either be username of logged in user or 'anonymous'. 

Was this page helpful?

Have a question about this article?

See questions about this article

Powered by Confluence and Scroll Viewport