2024.3 General Availability
IDE Services Core
Rebranding from Toolbox Enterprise to JetBrains IDE Services
Introduced HELM charts for Kubernetes deployment.
Separated free functionality from IDE Provisioner. It is now possible to manage the Toolbox App settings and selected plugins with IDE Provisioner disabled.
IDE Provisioner
Added a New Settings Controller for better management of IDE settings.
AI Enterprise
Introduced AI Enterprise, a new product of the JetBrains IDE Services suite.
Web UI
Implemented usage limits for all IDE Services products (for the pay-as-you-go billing model.)
Implemented the functionality for enabling and disabling IDE Services products on the profile level.
API changes
GET /api/configs
:Breaking change! Removed the required property 'codeWithMe' from the response with the '200' status
PATCH /api/configs
: Breaking change! removed the endpoint.GET /api/constituents
:Breaking change! Removed the required property 'ai' from the response with the '200' status
Breaking change! Removed the required property 'cwm' from the response with the '200' status
Breaking change! Removed the required property 'idep' from the response with the '200' status
The response property 'items' became required for the status '200'
Added the required property 'items' to the response with the '200' status
GET /api/constituents/ai
:Breaking change! Removed the required property 'id' from the response with the '200' status
Breaking change! Removed the required property 'url' from the response with the '200' status
Added the optional property 'assignedUsersLimit' to the response with the '200' status
The response property 'activeIdeProfilesCount' became required for the status '200'
The response property 'activeUsersCount' became required for the status '200'
The response property 'disabledByLimitsUsersCount' became required for the status '200'
The response property 'provider' became required for the status '200'
Added the required property 'activeIdeProfilesCount' to the response with the '200' status
Added the required property 'activeUsersCount' to the response with the '200' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status
Added the required property 'provider' to the response with the '200' status
POST /api/constituents/ai
:Breaking change! Added the new required request property 'provider'
Breaking change! Removed the required property 'id' from the response with the '200' status
Breaking change! Removed the required property 'id' from the response with the '403' status
Breaking change! Removed the required property 'url' from the response with the '200' status
Breaking change! Removed the required property 'url' from the response with the '403' status
Breaking change! Removed the request property 'url'
Added the new optional request property 'assignedUsersLimit'
Added the optional property 'assignedUsersLimit' to the response with the '200' status
Added the optional property 'assignedUsersLimit' to the response with the '403' status
The response property 'activeIdeProfilesCount' became required for the status '200'
The response property 'activeIdeProfilesCount' became required for the status '403'
The response property 'activeUsersCount' became required for the status '200'
The response property 'activeUsersCount' became required for the status '403'
The response property 'disabledByLimitsUsersCount' became required for the status '200'
The response property 'disabledByLimitsUsersCount' became required for the status '403'
The response property 'provider' became required for the status '200'
The response property 'provider' became required for the status '403'
Added the required property 'activeIdeProfilesCount' to the response with the '200' status
Added the required property 'activeIdeProfilesCount' to the response with the '403' status
Added the required property 'activeUsersCount' to the response with the '200' status
Added the required property 'activeUsersCount' to the response with the '403' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '403' status
Added the required property 'provider' to the response with the '200' status
Added the required property 'provider' to the response with the '403' status
PUT /api/constituents/ai
:Breaking change! Added the new required request property 'provider'
Breaking change! Removed the required property 'id' from the response with the '200' status
Breaking change! Removed the required property 'url' from the response with the '200' status
Breaking change! Removed the request property 'url'
Added the new optional request property 'assignedUsersLimit'
Added the optional property 'assignedUsersLimit' to the response with the '200' status
The response property 'activeIdeProfilesCount' became required for the status '200'
The response property 'activeUsersCount' became required for the status '200'
The response property 'disabledByLimitsUsersCount' became required for the status '200'
The response property 'provider' became required for the status '200'
Added the required property 'activeIdeProfilesCount' to the response with the '200' status
Added the required property 'activeUsersCount' to the response with the '200' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status
Added the required property 'provider' to the response with the '200' status
POST /api/constituents/cwm
:The request property 'concurrentHostsLimit' became optional
PUT /api/constituents/cwm
:The request property 'concurrentHostsLimit' became optional
DELETE /api/constituents/idep
:Breaking change! Removed the media type 'application/json' for the response with the status '200'
Breaking change! Removed the media type 'application/json' for the response with the status '403'
GET /api/constituents/idep
:Breaking change! Removed the media type 'application/json' for the response with the status '403'
Breaking change! Removed the media type 'application/json' for the response with the status '404'
The response property 'activeUsersCount' became required for the status '200'
The response property 'disabledByLimitsUsersCount' became required for the status '200'
Added the required property 'activeUsersCount' to the response with the '200' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status
POST /api/constituents/idep
:Breaking change! Removed the media type '/' for the response with the status '403'
Breaking change! Removed the media type 'application/json' for the response with the status '400'
Breaking change! Removed the media type 'application/json' for the response with the status '409'
The request property 'assignedUsersLimit' became optional
The response property 'activeUsersCount' became required for the status '200'
The response property 'disabledByLimitsUsersCount' became required for the status '200'
Added the required property 'activeUsersCount' to the response with the '200' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status
PUT /api/constituents/idep
:Breaking change! Removed the media type 'application/json' for the response with the status '403'
Breaking change! Removed the media type 'application/json' for the response with the status '404'
The request property 'assignedUsersLimit' became optional
The response property 'activeUsersCount' became required for the status '200'
The response property 'disabledByLimitsUsersCount' became required for the status '200'
Added the required property 'activeUsersCount' to the response with the '200' status
Added the required property 'disabledByLimitsUsersCount' to the response with the '200' status
DELETE /api/constituents/lv
: added the endpoint.GET /api/constituents/lv
:Added the non-success response with the status '404'
POST /api/constituents/lv
: added the endpoint.GET /api/debug/stream
: added the endpoint.GET /api/feed-filters/products
: Breaking change! removed the endpoint.GET /api/feed-filters/{id}/products
: added the endpoint.POST /api/idp/sync-status
: added the endpoint.GET /api/ij-plugins
: Breaking change! This API has been deprecated.GET /api/ij-plugins-extras/all-channels
: Breaking change! This API has been deprecated.GET /api/ij-plugins-extras/audit-logs
: Breaking change! This API has been deprecated.DELETE /api/ij-plugins/{pluginId}
: Breaking change! This API has been deprecated.GET /api/ij-plugins/{pluginId}
: Breaking change! This API has been deprecated.PATCH /api/ij-plugins/{pluginId}
: Breaking change! This API has been deprecated.GET /api/license
:Breaking change! The response property 'isServerKeyValid' became optional for the status '200'
Breaking change! Removed the required property 'isLicenseExpiredButCorrect' from the response with the '200' status
Breaking change! Removed the required property 'isLicenseValid' from the response with the '200' status
Breaking change! Removed the required property 'licenseId' from the response with the '200' status
Breaking change! Removed the required property 'licenseKey' from the response with the '200' status
Added the optional property 'activatedBy' to the response with the '200' status
Added the optional property 'activationDate' to the response with the '200' status
Added the optional property 'expirationDate' to the response with the '200' status
Added the optional property 'id' to the response with the '200' status
Added the optional property 'key' to the response with the '200' status
Added the optional property 'lastRefreshedDate' to the response with the '200' status
Added the optional property 'plan' to the response with the '200' status
Added the optional property 'status' to the response with the '200' status
The response property 'isValid' became required for the status '200'
The response property 'jbaUrl' became required for the status '200'
Added the required property 'isValid' to the response with the '200' status
Added the required property 'jbaUrl' to the response with the '200' status
POST /api/license
:Breaking change! The response property 'isServerKeyValid' became optional for the status '200'
Breaking change! Removed the required property 'isLicenseExpiredButCorrect' from the response with the '200' status
Breaking change! Removed the required property 'isLicenseValid' from the response with the '200' status
Breaking change! Removed the required property 'licenseId' from the response with the '200' status
Breaking change! Removed the required property 'licenseKey' from the response with the '200' status
Added the optional property 'activatedBy' to the response with the '200' status
Added the optional property 'activationDate' to the response with the '200' status
Added the optional property 'expirationDate' to the response with the '200' status
Added the optional property 'id' to the response with the '200' status
Added the optional property 'key' to the response with the '200' status
Added the optional property 'lastRefreshedDate' to the response with the '200' status
Added the optional property 'plan' to the response with the '200' status
Added the optional property 'status' to the response with the '200' status
The response property 'isValid' became required for the status '200'
The response property 'jbaUrl' became required for the status '200'
Added the required property 'isValid' to the response with the '200' status
Added the required property 'jbaUrl' to the response with the '200' status
POST /api/license/sync
: added the endpoint.GET /api/login/authenticated
: added the endpoint.GET /api/machine-config
:The response property 'proxyRequired' became required for the status '200'
Added the required property 'proxyRequired' to the response with the '200' status
PATCH /api/machine-config
:The response property 'proxyRequired' became required for the status '200'
Added the required property 'proxyRequired' to the response with the '200' status
GET /api/metrics
: added the endpoint.GET /api/plugin-repository
:Added the new optional 'query' request parameter 'channel[]'
GET /api/plugins
:Breaking change! Deleted the 'query' request parameter 'private'
GET /api/profiles/schema.json
: Breaking change! removed the endpoint.GET /api/profiles/{profileId}/groups
:Added the new optional 'query' request parameter 'order'
Added the new optional 'query' request parameter 'sort'
GET /api/profiles/{profileId}/users
:Added the required property 'items/items/constituents' to the response with the '200' status
Added the required property 'items/items/isAssignedDirectly' to the response with the '200' status
DELETE /api/transparency/agreement
: added the endpoint.GET /api/transparency/agreement
:The response property 'isDefault' became required for the status '200'
Added the required property 'isDefault' to the response with the '200' status
POST /api/transparency/agreement
:The response property 'isDefault' became required for the status '200'
Added the required property 'isDefault' to the response with the '200' status
POST /api/transparency/agreement/upload
:The response property 'isDefault' became required for the status '200'
Added the required property 'isDefault' to the response with the '200' status
GET /api/usage-stats/events-stats-ai-last
:The response property 'value' became required for the status '200'
Added the required property 'value' to the response with the '200' status
GET /api/usage-stats/events-stats-cwm-last
:The response property 'value' became required for the status '200'
Added the required property 'value' to the response with the '200' status
GET /api/usage-stats/events-stats-ide
: Breaking change! removed the endpoint.GET /api/usage-stats/events-stats-ide-last
: Breaking change! removed the endpoint.GET /api/usage-stats/events-stats-idep
: added the endpoint.GET /api/usage-stats/events-stats-idep-last
: added the endpoint.GET /api/users
:Added the new optional 'query' request parameter 'filter-constituent'
Added the required property 'items/items/constituents' to the response with the '200' status
POST /api/users
:Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status
GET /api/users/{id}
:Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status
PATCH /api/users/{id}
:Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status
PUT /api/users/{id}
:Added the required property 'profiles/items/isAssignedDirectly' to the response with the '200' status
DELETE /api/users/{id}/tokens
: added the endpoint.GET /api/users/{userId}/profiles
:Added the required property 'items/items/isAssignedDirectly' to the response with the '200' status