Last updatedApr 4, 2019

JIRA SOAP to REST Migration Guide

Global configuration

SOAP methodRecommended REST resource. REST method
getConfiguration(java.lang.String token)

/rest/api/2/configuration

REST method: GET

getServerInfo(java.lang.String token)

/rest/api/2/serverInfo

REST method: GET

getCustomFields(java.lang.String token)

/rest/api/2/field

REST method: GET

getIssueTypes(java.lang.String token) 

/rest/api/2/issuetype

REST method: GET

getPriorities(java.lang.String token) 

/rest/api/2/priority

REST method: GET

getProjectsNoSchemes(java.lang.String token) 

/rest/api/2/project

REST method: GET

getResolutions(java.lang.String token) 

/rest/api/2/resolution

REST method: GET

getStatuses(java.lang.String token) 

/rest/api/2/status

REST method: GET

refreshCustomFields(java.lang.String token) 

This method was intentionally omitted in REST and we do not intend to implement it in the future.

Rest method: n/a

Issues

SOAP methodRecommended 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

REST method: POST

addComment(java.lang.String token, java.lang.String issueKey, RemoteComment remoteComment) 

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

REST method: POST

createIssue(java.lang.String token, RemoteIssue rIssue) 

/rest/api/2/issue

REST method: 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

REST method: POST

createIssueWithSecurityLevel(java.lang.String token, RemoteIssue rIssue, java.lang.Long securityLevelId) 

/rest/api/2/issue

REST method:

createIssueWithParentWithSecurityLevel(java.lang.String token, RemoteIssue rIssue, java.lang.String parentIssueKey, java.lang.Long securityLevelId) 

/rest/api/2/issue

REST method: POST

deleteIssue(java.lang.String token, java.lang.String issueKey) 

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

REST method: DELETE

editComment(java.lang.String token, RemoteComment remoteComment) 

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

REST method: PUT

getAttachmentsFromIssue(java.lang.String token, java.lang.String issueKey) 

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

REST method: GET

getAvailableActions(java.lang.String token, java.lang.String issueKey) 

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

REST method: GET

getComment(java.lang.String token, java.lang.Long id) 

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

REST method: GET

getComments(java.lang.String token, java.lang.String issueKey) 

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

REST method: GET

getFieldsForAction(java.lang.String token, java.lang.String issueKey, java.lang.String actionIdString)  

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

REST method: GET

getFieldsForCreate(java.lang.String token, java.lang.String projectKey, java.lang.Long issueTypeId) 

/rest/api/2/issue/createmeta

REST method: GET

getFieldsForEdit(java.lang.String token, java.lang.String issueKey) 

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

REST method: GET

getIssue(java.lang.String token, java.lang.String issueKey) 

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

REST method: GET

getIssueById(java.lang.String token, java.lang.String issueId) 

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

REST method: GET

getResolutionDateById(java.lang.String token, java.lang.Long issueId) 

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

REST method: GET

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

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

REST method: GET

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

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

REST method: GET

progressWorkflowAction(java.lang.String token, java.lang.String issueKey, java.lang.String actionIdString, RemoteFieldValue[] actionParams) 

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

REST method: POST

updateIssue(java.lang.String token, java.lang.String issueKey, RemoteFieldValue[] actionParams) 

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

REST method: PUT

Issue types

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

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

REST method: GET

getSubTaskIssueTypes(java.lang.String token) 

/rest/api/2/issuetype

Supported only by filtering the response for all issue types.

REST method: GET

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

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

Filter for subtasks.

REST method: GET

Login

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

Intentionally omitted. JIRA will not support this.

Read about authentication.

REST method: n/a

logout(java.lang.String token) 

Intentionally omitted. JIRA will not support this.

REST method: n/a

Notifications

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

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

 

Coming in JIRA 7.0 EAP

REST method: GET

getNotificationSchemes(java.lang.String token) 

/rest/api/2/notificationscheme

Coming in JIRA 7.0 EAP

REST method: 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

Coming in JIRA 7.0 EAP

REST method: POST

 

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

/rest/api/2/permissionscheme

Coming in JIRA 7.0 EAP

REST method: POST

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

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

 

Coming in JIRA 7.0 EAP

 

REST method: DELETE

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

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

Coming in JIRA 7.0 EAP

REST method: DELETE

getAllPermissions(java.lang.String token) 

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

Coming in JIRA 7.0 EAP

REST method: GET

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

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

Coming in JIRA 7.0 EAP

REST method: GET

getPermissionSchemes(java.lang.String token) 

/rest/api/2/permissionscheme

 

Coming in JIRA 7.0 EAP

REST method: GET

Projects

SOAP methodRecommended REST resource. REST method
getComponents(java.lang.String token, java.lang.String projectKey)   

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

REST method: GET

addVersion(java.lang.String token, java.lang.String projectKey, RemoteVersion remoteVersion) 

/rest/api/2/version

REST method: 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}

REST method: 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

Coming in JIRA 7.0 EAP

REST method: POST

 

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

/rest/api/2/project

Coming in JIRA 7.0 EAP

REST method: POST

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

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

Coming in JIRA 7.0 EAP

REST method: DELETE

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

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

REST method: DELETE

getProjectAvatar(java.lang.String token, java.lang.String projectKey) 

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

REST method: GET

getProjectAvatars(java.lang.String token, java.lang.String projectKey, boolean includeSystemAvatars) 

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

REST method: GET

getProjectById(java.lang.String token, java.lang.Long projectId) 

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

REST method: GET

getProjectByKey(java.lang.String token, java.lang.String projectKey) 

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

REST method: GET

getVersions(java.lang.String token, java.lang.String projectKey) 

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

REST method: GET

releaseVersion(java.lang.String token, java.lang.String projectKey, RemoteVersion version) 

/rest/api/2/version/{id}

REST method: 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

REST method: POST

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

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

REST method: 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    

Coming in JIRA 7.0 EAP

REST method: GET

 

Project roles

SOAP methodRecommended REST resource. REST method
getProjectRole(java.lang.String token, java.lang.Long id) 

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

REST method: GET

getProjectRoleActors(java.lang.String token, RemoteProjectRole projectRole, RemoteProject project) 

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

REST method: GET

getProjectRoles(java.lang.String token) 

/rest/api/2/role

REST method: 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.

REST method: 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}

REST method: DELETE

removeAllRoleActorsByNameAndType(java.lang.String token, java.lang.String name, java.lang.String type) 

Can be done indirectly.

REST method: n/a

removeAllRoleActorsByProject(java.lang.String token, RemoteProject project) 

Can be done indirectly.

REST method: n/a

removeDefaultActorsFromProjectRole(java.lang.String token, java.lang.String[] actors, RemoteProjectRole projectRole, java.lang.String actorType) 

Can be done indirectly.

REST method: n/a

updateProject(java.lang.String token, RemoteProject rProject) 

/rest/api/2/project{projectIdOrKey}

Coming in JIRA 7.0 EAP

REST method: PUT

 

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

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

Coming in JIRA 7.0 EAP

REST method: PUT

 

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

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

REST method: 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

REST method: 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

REST method: POST

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

/rest/api/2/role

Coming in JIRA 7.0 EAP

REST method: POST

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

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

 

Coming in JIRA 7.0 EAP

REST method: DELETE

SOAP methodRecommended REST resource.
getFavouriteFilters(java.lang.String token) 

/rest/api/2/filter/favourite

REST method: 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

REST method: GET

getIssuesFromFilter(java.lang.String token, java.lang.String filterId) 

Same as above.

REST method: GET

getIssuesFromFilterWithLimit(java.lang.String token, java.lang.String filterId, int offSet, int maxNumResults) 

Same as above.

REST method: GET

getIssuesFromJqlSearch(java.lang.String token, java.lang.String jqlSearch, int maxNumResults) 

/rest/api/2/search

REST method: GET

getIssuesFromTextSearch(java.lang.String token, java.lang.String searchTerms) 

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

getIssuesFromTextSearchWithLimit(java.lang.String token, java.lang.String searchTerms, int offSet, int maxNumResults) 

See above.

REST method: GET

getIssuesFromTextSearchWithProject(java.lang.String token, java.lang.String[] projectKeys, java.lang.String searchTerms, int maxNumResults) 

See above.

REST method: GET

getSavedFilters(java.lang.String token) 

/rest/api/2/filter/favourite

REST method:

Security

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

api/2/project/{projectKeyOrId}/securitylevel   

Coming in JIRA 7.0 EAP

REST method: GET

getSecuritySchemes(java.lang.String token) 

api/2/issuesecurityschemes

Coming in JIRA 7.0 EAP

REST method: GET

User management

SOAP methodRecommended REST resource. REST method
removeUserFromGroup(java.lang.String token, RemoteGroup group, RemoteUser ruser) 

/rest/api/2/group/user

REST method: DELETE

setUserPassword(java.lang.String token, RemoteUser user, java.lang.String newPassword) 

/rest/api/2/user/password

REST method: PUT

addUserToGroup(java.lang.String token, RemoteGroup group, RemoteUser ruser) 

/rest/api/2/group/user

REST method: POST

createGroup(java.lang.String token, java.lang.String groupName, RemoteUser firstUser) 

/rest/api/2/group

REST method: 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

REST method: POST

deleteGroup(java.lang.String token, java.lang.String groupName, java.lang.String swapGroupName) 

/rest/api/2/group    

REST method: DELETE

deleteUser(java.lang.String token, java.lang.String username) 

/rest/api/2/user    

REST method: DELETE

getGroup(java.lang.String token, java.lang.String groupName) 

/rest/api/2/group    

REST method: GET

getUser(java.lang.String token, java.lang.String username) 

/rest/api/2/user    

REST method: GET

updateGroup(java.lang.String token, RemoteGroup group) 

/rest/api/2/group    

REST method: PUT

updateUser(java.lang.String token, RemoteUser user) 

/rest/api/2/user

Coming in JIRA 7.0 EAP

REST method: PUT

 

Worklog

SOAP methodRecommended REST resource. REST method
addWorklogAndAutoAdjustRemainingEstimate(java.lang.String token, java.lang.String issueKey, RemoteWorklog remoteWorklog) 

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

REST method: POST

addWorklogAndRetainRemainingEstimate(java.lang.String token, java.lang.String issueKey, RemoteWorklog remoteWorklog) 

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

See documentation on including leave parameter

REST method: 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

REST method: POST

deleteWorklogAndAutoAdjustRemainingEstimate(java.lang.String token, java.lang.String worklogId) 

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

REST method: DELETE

deleteWorklogAndRetainRemainingEstimate(java.lang.String token, java.lang.String worklogId) 

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

See documentation on including leave parameter

REST method: 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

REST method: DELETE

getWorklogs(java.lang.String token, java.lang.String issueKey) 

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

REST method: GET

hasPermissionToCreateWorklog(java.lang.String token, java.lang.String issueKey) 

/rest/api/2/mypermissions

REST method: GET

hasPermissionToDeleteWorklog(java.lang.String token, java.lang.String worklogId) 

/rest/api/2/mypermissions    

REST method: GET

hasPermissionToEditComment(java.lang.String token, RemoteComment remoteComment) 

/rest/api/2/mypermissions    

REST method: GET

hasPermissionToUpdateWorklog(java.lang.String token, java.lang.String worklogId) 

/rest/api/2/mypermissions    

REST method: GET

updateWorklogAndAutoAdjustRemainingEstimate(java.lang.String token, RemoteWorklog remoteWorklog) 

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

REST method: PUT

updateWorklogAndRetainRemainingEstimate(java.lang.String token, RemoteWorklog remoteWorklog) 

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

See documentation on including leave parameter

REST method: 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

REST method: 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'.