---
title: "Breaking: #69916 - Registered AJAX handlers replaced by routes"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-69916-1668719184"
source: "Changelog/7.6/Breaking-69916-RegisteredAJAXHandlersReplacedByRoutes.rst"
modified: "2026-09-15T10:46:36+00:00"
---

# Breaking: #69916 - Registered AJAX handlers replaced by routes

See [forge#69916](https://forge.typo3.org/issues/69916)

## Description

AJAX handlers registered in the core by `ExtensionManagementUtility::registerAjaxHandler()` have been replaced
by AJAX routes, which are registered inside any extension under Configuration/Backend/AjaxRoutes.php.

The routes registered in AjaxRoutes.php are available via JavaScript via `TYPO3.settings.ajaxUrls[routeIdentifier]`.

## Impact

Calling removed AJAX identifiers will result in an error. Please see the table below for migration.

## Affected Installations

All 3rd party extensions using one of the removed handlers is affected.

## Migration

Please see the table to get the new AJAX identifier.

### EXT:backend

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| SC_alt_db_navframe::expandCollapse | sc_alt_db_navframe_expandtoggle | /ajax/sc-alt-db-navframe/expandtoggle |
| SC_alt_file_navframe::expandCollapse | sc_alt_file_navframe_expandtoggle | /ajax/sc-alt-file-navframe/expandtoggle |
| TYPO3_tcefile::process | file_process | /ajax/file/process |
| TYPO3_tcefile::fileExists | file_exists | /ajax/file/exists |
| t3lib_TCEforms_inline::createNewRecord | record_inline_create | /ajax/inline/create |
| t3lib_TCEforms_inline::getRecordDetails | record_inline_details | /ajax/inline/record-details |
| t3lib_TCEforms_inline::synchronizeLocalizeRecords | record_inline_synchronizelocalize | /ajax/inline/synchronizelocalize |
| t3lib_TCEforms_inline::setExpandedCollapsedState | record_inline_expandcollapse | /ajax/inline/expandcollapse |
| t3lib_TCEforms_suggest::searchRecord | record_suggest | /ajax/wizard/suggest/search |
| ShortcutMenu::getShortcutEditForm | shortcut_editform | /ajax/shortcut/editform |
| ShortcutMenu::saveShortcut | shortcut_saveform | /ajax/shortcut/saveform |
| ShortcutMenu::render | shortcut_list | /ajax/shortcut/list |
| ShortcutMenu::delete | shortcut_remove | /ajax/shortcut/remove |
| ShortcutMenu::create | shortcut_create | /ajax/shortcut/create |
| SystemInformationMenu::load | systeminformation_render | /ajax/system-information/render |
| ModuleMenu::reload | modulemenu | /ajax/module-menu |
| BackendLogin::login | login | /ajax/login |
| BackendLogin::logout | logout | /ajax/logout |
| BackendLogin::refreshLogin | login_refresh | /ajax/login/refresh |
| BackendLogin::isTimedOut | login_timedout | /ajax/login/timedout |
| ExtDirect::getAPI | ext_direct_api | /ajax/ext-direct/api |
| ExtDirect::route | ext_direct_route | /ajax/ext-direct/route |
| DocumentTemplate::getFlashMessages | flashmessages_render | /ajax/flashmessages/render |
| ContextMenu::load | contextmenu | /ajax/context-menu |
| DataHandler::process | record_process | /ajax/record/process |
| UserSettings::process | usersettings_process | /ajax/user-settings/process |
| ImageManipulationWizard::getHtmlForImageManipulationWizard | wizard_image_manipulation | /ajax/wizard/image-manipulation |
| LiveSearch | livesearch | /ajax/livesearch |
| OnlineMedia::add | online_media_create | /ajax/online-media/create |

### EXT:beuser

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| PermissionAjaxController::dispatch | user_access_permissions | /users/access/permissions |

### EXT:context_help

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| ContextHelpAjaxController::dispatch | context_help | /context-help |

### EXT:opendocs

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| TxOpendocs::renderMenu | opendocs_menu | /opendocs/menu |
| TxOpendocs::closeDocument | opendocs_close | /opendocs/close |

### EXT:recycler

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| RecyclerAjaxController::dispatch | recycler | /recycler |

### EXT:rsaauth

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| BackendLogin::getRsaPublicKey | rsa_publickey | /rsa/publickey |
| RsaEncryption::getRsaPublicKey | rsa_publickey | /rsa/publickey |

### EXT:rtehtmlarea

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| rtehtmlarea::spellchecker | rtehtmlarea_spellchecker | /rte/spellchecker |

### EXT:t3editor

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| T3Editor::saveCode | t3editor_save | /t3editor/save |
| T3Editor::getPlugins | t3editor_get_plugins | /t3editor/get-plugins |
| T3Editor_TSrefLoader::getTypes | t3editor_tsref | /t3editor/tsref |
| T3Editor_TSrefLoader::getDescription | t3editor_tsref | /t3editor/tsref |
| CodeCompletion::loadTemplates | t3editor_codecompletion_loadtemplates | /t3editor/codecompletion/load-templates |

-   T3Editor_TSrefLoader::getTypes and T3Editor_TSrefLoader::getDescription have been combined. The separation is done by
    the new parameter `fetch` being either "types" or "description".

### EXT:taskcenter

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| Taskcenter::saveCollapseState | taskcenter_collapse | /taskcenter/collapse |
| Taskcenter::saveSortingState | taskcenter_sort | /taskcenter/sort |

### EXT:workspaces

| Old identifier | New identifier | New AJAX ID |
| --- | --- | --- |
| Workspaces::setWorkspace | workspace_switch | /workspaces/switch |
