Developer
News and Updates
Get Support
Sign in
Get Support
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Last updated Sep 10, 2026

Preparing for JIRA 7.6

This page covers changes in JIRA 7.6 that can affect add-on compatibility and functionality. This includes changes to the JIRA platform and the JIRA applications (JIRA Core, JIRA Software, JIRA Service Desk).

As a rule, Atlassian makes every effort to inform add-on developers of known API changes as far in advance as possible. Where possible, we attach release targets. Unless otherwise indicated, every change on this page is expected to be released with the first public release of the JIRA Server 7.6 products. We also make release milestones available prior to the release:

  • For JIRA Server, the JIRA development team releases a number of EAP milestones prior to the final release, for customers and developers to keep abreast of upcoming changes. For more information on these releases, see JIRA EAP Releases.
  • For JIRA Cloud, the JIRA team releases updates to the JIRA Cloud products on a weekly basis. Add-ons that integrate with the JIRA Cloud products via Atlassian Connect should use the JIRA REST API, which is subject to the Atlassian REST API Policy.

We will update this page as development progresses, so please stay tuned for more updates. We also recommend following the JIRA news on Atlassian Developers blog for important announcements and helpful articles.

Summary

The risk level indicates the level of certainty we have that things will break if you are in the "Affected" column and you don't make the necessary changes.

Change. Platform/ApplicationRisk level. Affects

Change: Priority schemes (UI changes)

Platform/Application: JIRA Core, JIRA Software

Risk level: medium

Affects: Add-on developers using APIs to manage priorities in JIRA, and administrators.

With JIRA 7.6, we're introducing priority schemes that change the way priorities are managed. Now, by using priority schemes, you can associate different sets of priorities with your project.

This doesn't change your configuration until you create some schemes and make use of them. After the upgrade, all priorities are moved to the default priority scheme, which works like a global list of priorities (always includes all existing priorities). The default priority scheme can't be edited or deleted.

See Priority schemes - release notes.

Change: Priority schemes (API changes)

 Platform/Application: JIRA Core, JIRA Software

 

Risk level: medium

Affects: Add-on developers using APIs to manage priorities in JIRA.

Together with priority schemes, we've added and changed some APIs so that plugins can manage them.

See API changes for plugin developers.

Change: API changes - experimental API

 Platform/Application: JIRA Service Desk

Risk level:low

Affects: With an upcoming release of JIRA Service Desk, a number of the methods in our API will be moving out of the experimental state and in to standard API state. For most of these components the API will remain unchanged, but for some there will be adjustments which will represent a breaking change. 

See API changes - experimental API.

JIRA platform changes

All changes in JIRA platform are also relevant for JIRA Core and JIRA Software.

Priority schemes - UI changes

For more information about managing priority schemes in the UI, see release notes.

Priority schemes - API changes for plugin developers

If you're a plugin developer, and want your plugin to manage priority schemes, take a look at this list of API changes. We've not only added new APIs that allow plugins to manage priority schemes, but we also changed the existing ones, which will most likely make your plugins incompatible. This is for priority schemes, the APIs for managing priorities don't change, but bear in mind that the current global list of priorities now becomes the default priority scheme, so your plugins might retrieve inaccurate data regarding priorities themselves. 

What's new?

We're adding these APIs to allow plugins to manage priority schemes. 

 Classname - com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

Method signatures:

Method signatureJavadoc
1
2
3
4
5
FieldConfigScheme createWithDefaultMapping(
  String name,
  String description,
  List<String> optionIds
);
Doc
1
2
3
4
FieldConfigScheme updateWithDefaultMapping(
  FieldConfigScheme fieldConfigScheme,
  List<String> optionIds
);
Doc
1
2
3
FieldConfig getFieldConfigForDefaultMapping(
  FieldConfigScheme fieldConfigScheme
);
Doc
1
2
3
void delete(
  FieldConfigScheme fieldConfigScheme
);
Doc
1
2
3
FieldConfigScheme getScheme(
  Project project
);
Doc
1
2
3
FieldConfigScheme getScheme(
  Long id
);
Doc
1
List<FieldConfigScheme> getAllSchemes();
Doc
1
2
3
boolean isDefaultScheme(
  FieldConfigScheme fieldConfigScheme
);
Doc
1
FieldConfigScheme getDefaultScheme();
Doc
1
2
3
String getDefaultOption(
  IssueContext issueContext
);
Doc
1
2
3
String getDefaultOption(
	FieldConfig fieldConfig
);
Doc
1
2
3
4
void setDefaultOption(
  FieldConfig fieldConfig,
  String optionId
);
Doc
1
2
3
List<String> getOptions(
  IssueContext issueContext
);
Doc
1
2
3
List<String> getOptions(
  FieldConfig fieldConfig
);
Doc
1
2
3
4
void setOptions(
  FieldConfig fieldConfig,
  List<String> optionIds
);
Doc
1
2
3
void addOptionToDefault(
  String optionId
);
Doc
1
2
3
void removeOptionFromAllSchemes(
  String optionId
);
Doc
1
2
3
Collection<FieldConfigScheme> getAllRelatedSchemes(
  String optionId
);
Doc
1
2
3
4
void assignProject(
  @Nonnull FieldConfigScheme priorityFieldConfig,
  @Nonnull Project project
);
Doc
1
2
3
Set<Project> getProjectsWithScheme(
  @Nonnull FieldConfigScheme fieldConfigScheme
);
Doc
1
2
3
4
void unassignProject(
  @Nonnull FieldConfigScheme scheme,
  @Nonnull Project project
);
Doc

We're also adding new events for whenever a priority scheme is created, updated, or deleted.

Classname - com.atlassian.jira.issue.fields.config.manager.PrioritySchemeManager

EventJavadoc
1
2
3
4
5
6
7
8
9
com
  .atlassian
  .jira
  .event
  .issue
  .fields
  .config
  .manager
  .PrioritySchemeCreatedEvent
Doc
1
2
3
4
5
6
7
8
9
com
  .atlassian
  .jira
  .event
  .issue
  .fields
  .config
  .manager
  .PrioritySchemeDeletedEvent
Doc
1
2
3
4
5
6
7
8
9
com
  .atlassian
  .jira
  .event
  .issue
  .fields
  .config
  .manager
  .PrioritySchemeUpdatedEvent
Doc

What's changing?

Some APIs also receive additional options, so that priorities are added or removed from priority schemes.

Classname - com.atlassian.jira.config.PriorityManager 

What's deprecated?

These APIs are deprecated, and replaced by the new PrioritySchemeManager class.

com.atlassian.jira.config.PriorityManager

Method signatures:

com.atlassian.jira.config.ConstantsManager

Method signatures:

JIRA Service Desk changes

JIRA Service Desk has a number of elements of its API which are currently defined as experimental but that is about to change. With the 3.7.0 release a number of components were either deprecated for removal, or updated with details about how they will represent a breaking change in a future release. Well, those changes are coming now in the JIRA Service Desk 3.9.0 release. This release will also be moving the majority of the components in our API out of the experimental state and into a standard public API state. 

What's Changing?

A number of components will have breaking changes. The changes are relatively minor and revolve around changes to IDs that will be returning integers rather than longs. This helps us to align with the values that we are currently storing in the database and will stop us having to do a lot of unnecessary type conversion in the future. 

Classname

Breaking change

New method signature

ServiceDeskService

The getServiceDeskById method will require an integer rather than a long as the serviceDeskId.

Old method signature:

Either<[object Object]   AnError, ServiceDesk[object Object] >[object Object] getServiceDeskById([object Object]   ApplicationUser user,[object Object]   long serviceDeskId[object Object] );

Old javadoc:

ServiceDeskService: getServiceDeskById

Either<[object Object]   AnError, ServiceDesk[object Object] >[object Object] getServiceDeskById([object Object]   ApplicationUser user,[object Object]   int serviceDeskId[object Object] );

New javadoc:

ServiceDeskService: getServiceDeskById

PortalService

The getPortalForId method will request and integer rather than a long as the portalId.

Old method signature:

Either<[object Object]   AnError, Portal[object Object] > [object Object] getPortalForId([object Object]   ApplicationUser user,[object Object]   long portalId[object Object] );

Old javadoc:

PortalService: getPortalForId 

Either<[object Object]   AnError, Portal[object Object] >[object Object] getPortalForId([object Object]   ApplicationUser user,[object Object]   int portalId[object Object] );

New javadoc:

PortalService: getPortalForId

Queue

The return value for this method will return an integer rather than a long.

Old method signature:

long getId()

Old javadoc:

Queue: getId 

int getId()

New javadoc:

Queue: getId

The return value for this method will return an integer rather than a long.

Old method signature:

long getServiceDeskId()

Old javadoc:

Queue: getServiceDeskId

int getServiceDeskId()

New javadoc:

Queue: getServiceDeskId

QueueQuery

The return value for this method will return an integer rather than a long.

Old method signature:

Optional<Long> queueId();

Old javadoc:

Optional<Integer> queueId(); 

New javadoc:

 QueueQuery: queueId


The return value for this method will return an integer rather than a long.

Old method signature:

long serviceDeskId();

Old javadoc:

QueueQuery: serviceDeskId

int serviceDeskId();

New javadoc:

QueueQuery: serviceDeskId

QueueQuery Builder interface

The serviceDeskID interface will require an integer rather than a long as the serviceDeskId

Old method signature:

Builder serviceDeskId([object Object]   longserviceDeskId[object Object] );

Old javadoc:

QueueQuery.Builder: serviceDeskId 

Builder serviceDeskId([object Object]   int serviceDeskId[object Object] );

New javadoc:

The queueId interface will require an integer rather than a long as the queueId

Old method signature:

Builder queueId([object Object]   long queueId[object Object] );

Old javadoc:

QueueQuery.Builder: queueId

Builder queueId([object Object]   int queueId[object Object] );

New javadoc:

QueueQuery.Builder: queueId

 

QueueRequestQuery

The return values for this method will return an integer rather than a long

Old method signature:

[object Object][object Object]();

Old javadoc:

[object Object][object Object]();

New javadoc:

The return values for this method will return an integer rather than a long

Old method signature:

long serviceDeskId();

Old javadoc:

QueueRequestQuery: serviceDeskId

int serviceDeskId();

New javadoc:

QueueRequestQuery: serviceDeskId


QueueRequestQuery Builder interface

The serviceDeskID interface will require an integer rather than a long as the serviceDeskId

Old method signature:

Builder serviceDeskId([object Object]   longserviceDeskId[object Object] );

Old javadoc:

Builder serviceDeskId([object Object]   int serviceDeskId[object Object] );

New javadoc:

The queueId interface will require an integer rather than a long as the queueId

Old method signature:

Builder queueId([object Object]   long queueId[object Object] );

Old javadoc:

QueueRequestQuery.Builder: queueId

Builder queueId([object Object]   int queueId[object Object] );

New javadoc:

QueueRequestQuery.Builder: queueId


RequestType

The getPortalId method will return an integer instead of a long.

Old method signature:

[object Object][object Object]();

Old javadoc:

[object Object][object Object]();

New javadoc:

SlaInformation

The getId method will return an integer instead of a long.

Old method signature:

long getId();

Old javadoc:

int getId();

New javadoc:

SlaInformation: getId

SlaInformationQuery

The id method will return an integerinstead of a long.

Old method signature:

Optional<Long> id();

Old javadoc:

Optional<Integer> id();

New javadoc:

 

SlaInformationQuery Builder

The id interface will require an integer instead of a long.

Old method signature:

Builder id(Long slaMetricId);

Old javadoc:

Builder id(Integer slaMetricId);

New javadoc:

SlaInformationQuery.Builder: id

 

What's been removed?

As well as the breaking changes listed above, we've also removed a number of existing experimental API that were deprecated previously. This is being done to make the new public API state, both cleaner and more useable.What's been removed? 

The following classes have been removed:

  • CreateInternalCommentParameters
  • CreatePublicCommentParameters
  • ServiceDeskCommentParameters
  • ValidatedInternalCommentParameters
  • ValidatedPublicCommentParameters
  • RequestTypeUpdateParameters
  • RequestTypeQueryParameters

In addition, the following methods have been removed. Most of these have equivalents which can now be used as a direct replacement. The ones that don't have been deemed insufficient for making public, as the usage was not recommended.

Classname

Method signature

Replacement

ServiceDeskCommentService

Either<[object Object]   AnError,[object Object]   ValidatedPublicCommentParameters[object Object] >[object Object] validatePublicComment([object Object]   @Nonnull[object Object]     ApplicationUser user,[object Object]   @Nonnull[object Object]     CreatePublicCommentParameters[object Object]     commentInternalParameters[object Object] );

Old javadoc:

ServiceDeskCommentService: validatePublicComment 

#createServiceDeskComment([object Object]   ApplicationUser,[object Object]   ServiceDeskCommentCreateParameters[object Object] )

New javadoc:

ServiceDeskCommentService: createServiceDeskComment

Either<[object Object]   AnError,[object Object]   ValidatedInternalCommentParameters[object Object] >[object Object] validateInternalComment([object Object]   @Nonnull[object Object]     ApplicationUser user,[object Object]   @Nonnull[object Object]     CreateInternalCommentParameters[object Object]     commentPublicParameters[object Object] );

ServiceDeskCommentService: validateInternalComment

Old javadoc:

#createServiceDeskComment([object Object]   ApplicationUser,[object Object]   ServiceDeskCommentCreateParameters[object Object] )

ServiceDeskCommentService: createServiceDeskComment

Either<[object Object]   AnError,[object Object]   ServiceDeskComment[object Object] >[object Object] createPublicComment([object Object]   @Nonnull[object Object]     ApplicationUser[object Object]     user,[object Object]   @Nonnull[object Object]     ValidatedPublicCommentParameters[object Object]     commentParameters[object Object] );

ServiceDeskCommentService: createPublicComment

Old javadoc:

#createServiceDeskComment([object Object]   ApplicationUser,[object Object]   ServiceDeskCommentCreateParameters[object Object] )

ServiceDeskCommentService: createServiceDeskComment

Either<[object Object]   AnError,[object Object]   ServiceDeskComment[object Object] >[object Object] createInternalComment([object Object]   @Nonnull[object Object]     ApplicationUser user,[object Object]   @Nonnull[object Object]     ValidatedInternalCommentParameters[object Object]     commentParameters[object Object] );

ServiceDeskCommentService: createInternalComment

Old javadoc:

#createServiceDeskComment([object Object]   ApplicationUser,[object Object]   ServiceDeskCommentCreateParameters[object Object] )

ServiceDeskCommentService: createServiceDeskComment

CustomerContextService

<T> T inCustomerContext([object Object]   Callable<T> callable[object Object] );

Old javadoc:

#runInCustomerContext([object Object]   NoExceptionsCallable[object Object] )

New javadoc:

void inCustomerContext([object Object]   Runnable runnable[object Object] );

CustomerContextService: inCustomerContext

Old javadoc:

#runInCustomerContext([object Object]   Runnable[object Object] )

CustomerContextService: runInCustomerContext

<T> T outOfCustomerContext([object Object]   Callable<T> callable[object Object] );

CustomerContextService: outOfCustomerContext

Old javadoc:

#runOutOfCustomerContext([object Object]   NoExceptionsCallable[object Object] )

CustomerContextService: runOutOfCustomerContext

void outOfCustomerContext([object Object]   Runnable runnable)[object Object] ;

CustomerContextService: outOfCustomerContext

Old javadoc:

CustomerContextService: runOutOfCustomerContext

ServiceDeskLicence

String getLicenseType();

Old javadoc:

#runOutOfCustomerContext([object Object]   Runnable[object Object] )

This method is not applicable anymore. It will always be ABP

ServiceDeskCustomerRequestService

Either<[object Object]   AnError,[object Object]   CustomerRequest[object Object] >[object Object] getRequestForKey([object Object]   @Nullable[object Object]     ApplicationUser[object Object]     user,[object Object]   @Nonnull[object Object]     String[object Object]     issueKey[object Object] );

Old javadoc:

ServiceDeskCustomerRequestService: getRequestForKey 

#getCustomerRequests([object Object]   ApplicationUser,[object Object]   CustomerRequestQuery[object Object] )

New javadoc:

ServiceDeskCustomerRequestService: getCustomerRequests

Either<[object Object]   AnError,[object Object]   CustomerRequest[object Object] >[object Object] getRequestForIssue([object Object]   @Nullable[object Object]     ApplicationUser[object Object]     user,[object Object]   @Nonnull[object Object]     Issue[object Object]     issue[object Object] );

ServiceDeskCustomerRequestService: getRequestForIssue

Old javadoc:

#getCustomerRequests([object Object]   ApplicationUser,[object Object]   CustomerRequestQuery[object Object] )

ServiceDeskCustomerRequestService: getCustomerRequests

RequestTypeUpdateParameters[object Object]   .Builder[object Object]     requestTypeUpdateParametersBuilder();

ServiceDeskCustomerRequestService: requestTypeUpdateParametersBuilder

Old javadoc:

#newUpdateBuilder()

ServiceDeskCustomerRequestService: newUpdateBuilder

Either<[object Object]   AnError,[object Object]   CustomerRequest[object Object] > ([object Object]   @Nullable[object Object]     ApplicationUser user,[object Object]   RequestTypeUpdateParameters[object Object]     requestTypeUpdateParameters[object Object] );

ServiceDeskCustomerRequestService: updateRequestType

Old javadoc:

#updateCustomerRequest([object Object]   ApplicationUser,[object Object]   CustomerRequestUpdateParameters[object Object] )

ServiceDeskCustomerRequestService: updateCustomerRequest

Either<[object Object]   AnError,[object Object]   CustomerRequest[object Object] >[object Object] getRequestForIssueOverrideSecurity([object Object]   Issue issue[object Object] );

ServiceDeskCustomerRequestService: getRequestForIssueOverrideSecurity

Old javadoc:

#getCustomerRequests([object Object]   ApplicationUser,[object Object]   CustomerRequestQuery[object Object] )

ServiceDeskCustomerRequestService: getCustomerRequests

Either<[object Object]   AnError,[object Object]   CustomerRequest[object Object] >[object Object] getRequestForKeyOverrideSecurity([object Object]   String issueKey[object Object] );

ServiceDeskCustomerRequestService: getRequestForKeyOverrideSecurity

Old javadoc:

#getCustomerRequests([object Object]   ApplicationUser,[object Object]   CustomerRequestQuery[object Object] )

ServiceDeskCustomerRequestService: getCustomerRequests

RequestTypeGroup

RequestTypeGroup withOrder([object Object]   Option<Integer> order[object Object] );

Old javadoc:

This deprecated and Experimental API has been removed.

RequestTypeService

Either<[object Object]   AnError,[object Object]   List<[object Object]     RequestType[object Object]   >[object Object] >[object Object] getRequestTypes([object Object]   @Nonnull[object Object]     ApplicationUser user,[object Object]   @Nonnull[object Object]     RequestTypeQueryParameters[object Object]     requestTypeQueryParameters[object Object] );

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

New javadoc:

RequestTypeService: getRequestTypes 

RequestTypeQueryParameters[object Object]   .Builder queryBuilder();

RequestTypeService: queryBuilder

Old javadoc:

#newQueryBuilder()

RequestTypeService: newQueryBuilder

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] getRequestTypeForRequest([object Object]   @Nonnull[object Object]     ApplicationUser user,[object Object]   @Nonnull[object Object]     CustomerRequest[object Object]     customerRequest[object Object] );

RequestTypeService: getRequestTypeForRequest

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] getRequestTypeForIssue([object Object]   @Nonnull[object Object]     ApplicationUser user,[object Object]   @Nonnull Issue issue[object Object] );

RequestTypeService: getRequestTypeForIssue

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   List<[object Object]     nRequestType[object Object]   >[object Object] >[object Object] getAllRequestTypes([object Object]   ApplicationUser user[object Object] );

RequestTypeService: getAllRequestTypes

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] getRequestTypeForRequestOverrideSecurity([object Object]   @Nonnull[object Object]     CustomerRequest[object Object]     customerRequest[object Object] );

RequestTypeService: getRequestTypeForRequestOverrideSecurity

Old javadoc:


RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] getRequestTypeForIssueOverrideSecurity([object Object]   @Nonnull Issue issue[object Object] );

RequestTypeService: getRequestTypeForIssueOverrideSecurity

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] createRequestType([object Object]   long projectId,[object Object]   int issueTypeId,[object Object]   name,[object Object]   description,[object Object]   long iconId,[object Object]   Integer groupIds[object Object] );

RequestTypeService: createRequestType

Old javadoc:

#createRequestType([object Object]   ApplicationUser,[object Object]   RequestTypeCreateParameters[object Object] )

RequestTypeService: createRequestType

Either<[object Object]   AnError,[object Object]   List<[object Object]     RequestType[object Object]   >[object Object] >[object Object] getRequestTypesForGroup([object Object]   Integer groupId,[object Object]   Long projectId[object Object] );

RequestTypeService: getRequestTypesForGroup

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   List<[object Object]     RequestType[object Object]   >[object Object] >[object Object] getRequestTypesByGroup([object Object]   Integer groupId,[object Object]   Integer serviceDeskId[object Object] );

RequestTypeService: getRequestTypesByGroup

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] getRequestTypeByIdAndProjectId ([object Object]   Integer requestTypeId,[object Object]   Long projectId[object Object] );

RequestTypeService: getRequestTypeByIdAndProjectId

Old javadoc:

#getRequestTypes([object Object]   ApplicationUser,[object Object]   RequestTypeQuery[object Object] )

RequestTypeService: getRequestTypes

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] deleteRequestTypeByIdAndProjectId([object Object]   Integer requestTypeId,[object Object]   Long projectId[object Object] );

RequestTypeService: deleteRequestTypeByIdAndProjectId

Old javadoc:

#deleteRequestType([object Object]   ApplicationUser,[object Object]   RequestTypeDeleteParameters[object Object] )

RequestTypeService: deleteRequestType

Either<[object Object]   AnError,[object Object]   RequestType[object Object] >[object Object] updateRequestTypeByIdAndProjectId([object Object]   Integer requestTypeId,[object Object]   Long projectId,[object Object]   RequestType requestType[object Object] );

RequestTypeService: updateRequestTypeByIdAndProjectId

Old javadoc:

#updateRequestType([object Object]   ApplicationUser,[object Object]   RequestTypeUpdateParameters[object Object] )

RequestTypeService: updateRequestType

FpKit

Callable Unit runnableToCallable([object Object]   Runnable runnable[object Object] )

Old javadoc:

This deprecated and Experimental API has been removed.

Rate this page: