---
title: "Breaking: #107578 - Prepare EXT:adminpanel DataProviderInterface change"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-107578-1759326054"
source: "Changelog/14.0/Breaking-107578-PrepareExtadminpanelDataProviderInterfaceChange.rst"
typo3-version: "14.0"
typo3-major: 14
type: "breaking"
issue: 107578
forge: "https://forge.typo3.org/issues/107578"
tags: ["PHP-API", "NotScanned", "ext:adminpanel"]
rendered: "2026-09-20T18:31:11+00:00"
---

# Breaking: #107578 - Prepare EXT:adminpanel DataProviderInterface change {#breaking-107578-1759326054}

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

## Description {#description}

The [`typo3/cms-adminpanel`](https://packagist.org/packages/typo3/cms-adminpanel) system extension provides the interface
`\TYPO3\CMS\Adminpanel\ModuleApi\DataProviderInterface`. It can be used by
extensions that extend the Admin Panel with custom modules and allows storing
additional request-related data in the Admin Panel–specific data store.

The signature of the interface method `getDataToStore()` has changed.

## Impact {#impact}

Extension authors may benefit from the additional argument passed with TYPO3
v14, but implementations must be adjusted accordingly.

## Affected installations {#affected-installations}

Most installations are not affected, as few extensions extend the Admin Panel.
Instances with classes implementing
`DataProviderInterface` are affected.

## Migration {#migration}

**Interface until TYPO3 v13:**

```php
namespace TYPO3\CMS\Adminpanel\ModuleApi;

use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Adminpanel\ModuleApi\ModuleData;

interface DataProviderInterface
{
    public function getDataToStore(
        ServerRequestInterface $request
    ): ModuleData;
}
```

The `getDataToStore()` method is called by the Admin Panel after the
`Response` has been created by the TYPO3 Core.
Starting with TYPO3 v14, the method receives the `ResponseInterface`
as an additional argument:

```php
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Adminpanel\ModuleApi\ModuleData;

public function getDataToStore(
    ServerRequestInterface $request,
    ResponseInterface $response
): ModuleData;
```

**Compatibility example for TYPO3 v13 and v14:**

```php
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Adminpanel\ModuleApi\ModuleData;

public function getDataToStore(
    ServerRequestInterface $request,
    ?ResponseInterface $response = null
): ModuleData {
    // TYPO3 v13: $response is null
    // TYPO3 v14: $response is an instance of ResponseInterface
}
```

TYPO3 v13 does not pass the second argument, so it must be nullable, and
extensions should not expect to receive an instance of
`ResponseInterface`.

TYPO3 v14, however, provides the response instance automatically.
