> ## Documentation Index
> Fetch the complete documentation index at: https://docs.conduktor.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Removed APIs

> Gateway REST APIs removed in recent versions. For users running older Gateway versions.

<Warning>
  The APIs on this page have been removed from Gateway. They are no longer available in the versions listed below.
  If you are running an older version of Gateway, this page preserves the reference that was previously available.
</Warning>

This page gathers Gateway REST APIs that have been removed from the Gateway codebase. Each section notes the Gateway version in which the API was removed.

For the current API, see the [Gateway v2 API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v2). Running an older Gateway version? The full v1 reference is still available — open the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1), then select your Gateway version and **API version: v1**.

## Auth tokens (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Issued a short-lived `SASL/PLAIN` token for a cluster account, used by Kafka clients to authenticate through Gateway.

**Replaced by** the v2 token API: `POST /gateway/v2/token`.

### Endpoints

| Method | Path                         | Description                                                |
| ------ | ---------------------------- | ---------------------------------------------------------- |
| `POST` | `/admin/username/{username}` | Create a token for a passthrough (default cluster) account |

For a virtual-cluster-scoped token, see the **Virtual clusters** section — its `POST /admin/vclusters/v1/vcluster/{vcluster}/username/{username}` endpoint creates the user and returns a token.

### Request body

| Field             | Type            | Required | Description                                    |
| ----------------- | --------------- | -------- | ---------------------------------------------- |
| `lifeTimeSeconds` | integer (int64) | Yes      | Token lifetime in seconds (example: `7776000`) |

### Response `200`

| Field   | Type   | Description                          |
| ------- | ------ | ------------------------------------ |
| `token` | string | The generated SASL/PLAIN token (JWT) |

### Example request

```bash theme={null}
curl \
  --request POST \
  --url 'http://localhost:8888/admin/username/alice' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{ "lifeTimeSeconds": 3600 }'
```

## Virtual clusters (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Listed virtual clusters and created a virtual cluster together with a user to connect to it.

**Replaced by** `/gateway/v2/virtual-cluster`.

### Endpoints

| Method | Path                                                          | Description                                               |
| ------ | ------------------------------------------------------------- | --------------------------------------------------------- |
| `GET`  | `/admin/vclusters/v1`                                         | List virtual clusters                                     |
| `POST` | `/admin/vclusters/v1/vcluster/{vcluster}/username/{username}` | Create a virtual cluster with a username to connect to it |

### Request body (create)

| Field             | Type            | Required | Description                                                |
| ----------------- | --------------- | -------- | ---------------------------------------------------------- |
| `lifeTimeSeconds` | integer (int64) | Yes      | Lifetime in seconds of the token returned for the new user |

### Responses

* `GET /admin/vclusters/v1` → `200` with `{ "vclusters": ["vcluster1", "vcluster2"] }` (string array).
* `POST .../username/{username}` → `200` with `{ "token": "<SASL/PLAIN token>" }`.

### Example request

```bash theme={null}
curl \
  --request POST \
  --url 'http://localhost:8888/admin/vclusters/v1/vcluster/team-a/username/alice' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{ "lifeTimeSeconds": 3600 }'
```

## User mappings (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Mapped an external principal to a Gateway user and its groups, per virtual cluster (with passthrough variants).

**Replaced by** the v2 service account and group APIs: `/gateway/v2/service-account` and `/gateway/v2/group`.

### Endpoints

| Method         | Path                                                                 | Description                              |
| -------------- | -------------------------------------------------------------------- | ---------------------------------------- |
| `GET`          | `/admin/userMappings/v1`                                             | List user mappings                       |
| `GET`          | `/admin/userMappings/v1/vcluster/{vcluster}`                         | List user mappings for a virtual cluster |
| `GET`          | `/admin/userMappings/v1[/vcluster/{vcluster}]/username/{username}`   | Get a user mapping                       |
| `POST` / `PUT` | `/admin/userMappings/v1[/vcluster/{vcluster}][/username/{username}]` | Create or update a user mapping          |
| `DELETE`       | `/admin/userMappings/v1[/vcluster/{vcluster}]/username/{username}`   | Delete a user mapping                    |

### Request body

| Field       | Type      | Required | Description                                                                    |
| ----------- | --------- | -------- | ------------------------------------------------------------------------------ |
| `username`  | string    | Yes      | Username for the user                                                          |
| `principal` | string    | No       | Authentication principal to map the user from (uses `username` if not defined) |
| `groups`    | string\[] | No       | Groups the user belongs to (example: `["groupA", "groupB"]`)                   |

### Response `200`

Returns the user mapping:

| Field       | Type      | Description                         |
| ----------- | --------- | ----------------------------------- |
| `vcluster`  | string    | The virtual cluster id              |
| `username`  | string    | Username for the user               |
| `principal` | string    | The mapped authentication principal |
| `groups`    | string\[] | Groups the user belongs to          |

### Example request

```bash theme={null}
curl \
  --request PUT \
  --url 'http://localhost:8888/admin/userMappings/v1/vcluster/team-a/username/alice' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "username": "alice",
  "principal": "59fccdbd-9212-4aac-92be-5f3f59f2e8db",
  "groups": ["applicationA", "operation"]
}'
```

## Interceptors (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Created, updated, retrieved, and deleted Interceptors at **global**, **virtual-cluster**, **group**, and **account** scope, and resolved which Interceptors applied to a given context.

**Replaced by** the v2 interceptor API — `PUT` / `GET` / `DELETE /gateway/v2/interceptor` (the scope is carried in the request body) and `POST /gateway/v2/interceptor/resolve`.

### Endpoints

Each scope supported `POST` (create), `PUT` (upsert), `GET`, and `DELETE` on `.../interceptor/{interceptorName}`:

| Scope           | Path pattern                                                                                     |
| --------------- | ------------------------------------------------------------------------------------------------ |
| Global          | `/admin/interceptors/v1/global/interceptor/{interceptorName}`                                    |
| Virtual cluster | `/admin/interceptors/v1/vcluster/{vcluster}/interceptor/{interceptorName}`                       |
| Group           | `/admin/interceptors/v1[/vcluster/{vcluster}]/group/{group}/interceptor/{interceptorName}`       |
| Account         | `/admin/interceptors/v1[/vcluster/{vcluster}]/username/{username}/interceptor/{interceptorName}` |

Plus listing and targeting:

| Method | Path                                              | Description                                   |
| ------ | ------------------------------------------------- | --------------------------------------------- |
| `GET`  | `/admin/interceptors/v1`, `/all`, `/interceptors` | List interceptors                             |
| `POST` | `/admin/interceptors/v1/resolve`                  | Resolve which interceptors apply to a context |

### Request body (create / upsert)

| Field         | Type    | Required | Description                                                                                          |
| ------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `pluginClass` | string  | Yes      | Fully-qualified interceptor plugin class (example: `io.conduktor.gateway.interceptor.EncryptPlugin`) |
| `priority`    | integer | Yes      | Execution priority (example: `50`)                                                                   |
| `config`      | object  | Yes      | Plugin-specific configuration                                                                        |

### Request body (`/resolve`)

| Field      | Type      | Required | Description                    |
| ---------- | --------- | -------- | ------------------------------ |
| `vcluster` | string    | No       | Virtual cluster to resolve for |
| `username` | string    | No       | Account to resolve for         |
| `groups`   | string\[] | No       | Groups to resolve for          |

### Response `200`

| Field         | Type    | Description              |
| ------------- | ------- | ------------------------ |
| `name`        | string  | Interceptor name         |
| `pluginClass` | string  | Interceptor plugin class |
| `priority`    | integer | Execution priority       |
| `config`      | object  | Plugin configuration     |

List endpoints return an `interceptors` array of the above.

### Example request

```bash theme={null}
curl \
  --request PUT \
  --url 'http://localhost:8888/admin/interceptors/v1/vcluster/team-a/interceptor/my-encrypt' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "pluginClass": "io.conduktor.gateway.interceptor.EncryptPlugin",
  "priority": 50,
  "config": { "topic": "topicName" }
}'
```

## Plugins (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Listed the Interceptor plugins available on Gateway, optionally with extended metadata.

**Replaced by** `GET /gateway/v2/plugin`.

### Endpoints

| Method | Path                         | Description                                          |
| ------ | ---------------------------- | ---------------------------------------------------- |
| `GET`  | `/admin/plugins/v1`          | List all available plugins                           |
| `GET`  | `/admin/plugins/v1/extended` | List all available plugins with extended information |

### Response `200`

* `/admin/plugins/v1` → an array of available plugin class names.
* `/admin/plugins/v1/extended` → the same list enriched with per-plugin metadata (such as the plugin's `readme` and version information).

Neither endpoint takes a request body.

### Example request

```bash theme={null}
curl \
  --request GET \
  --url 'http://localhost:8888/admin/plugins/v1' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json'
```

## Concentration rules (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Created, listed, and deleted topic concentration rules for a virtual cluster.

**Replaced by** `/gateway/v2/concentration-rule`.

### Endpoints

| Method   | Path                                                                            | Description                                      |
| -------- | ------------------------------------------------------------------------------- | ------------------------------------------------ |
| `GET`    | `/admin/vclusters/v1/vcluster/{vcluster}/concentration-rules`                   | Get concentration rules                          |
| `POST`   | `/admin/vclusters/v1/vcluster/{vcluster}/concentration-rules`                   | Create a concentration rule                      |
| `DELETE` | `/admin/vclusters/v1/vcluster/{vcluster}/concentration-rules?pattern={pattern}` | Delete the concentration rule matching `pattern` |

### Request body (create)

| Field                               | Type    | Required | Description                                                                                      |
| ----------------------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------ |
| `pattern`                           | string  | Yes      | Logical topic name/pattern to apply concentration for (example: `topic.*`)                       |
| `physicalTopicName`                 | string  | Yes      | Physical topic to store the concentrated topic                                                   |
| `clusterId`                         | string  | No       | Kafka cluster for the merge cluster (default `main`)                                             |
| `physicalTopicCompactedName`        | string  | No       | Physical topic to concentrate on for a logical topic with a compacted cleanup policy             |
| `physicalTopicCompactedDeletedName` | string  | No       | Physical topic to concentrate on for a logical topic with a compacted-and-deleted cleanup policy |
| `autoManaged`                       | boolean | No       | Let Gateway auto-manage the backend topic                                                        |

### Example request

```bash theme={null}
curl \
  --request POST \
  --url 'http://localhost:8888/admin/vclusters/v1/vcluster/team-a/concentration-rules' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "pattern": "topic.*",
  "physicalTopicName": "concentrated",
  "autoManaged": false
}'
```

## Cluster switching (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Replaced a physical cluster's connection properties with those of another cluster — used to switch the backend that a Gateway virtual cluster points at.

**Replaced by** `/gateway/v2/cluster-switching`.

### Endpoints

| Method | Path                                             | Description                                               |
| ------ | ------------------------------------------------ | --------------------------------------------------------- |
| `POST` | `/admin/pclusters/v1/pcluster/{pcluster}/switch` | Switch a physical cluster to another cluster's connection |

### Parameters

| Name       | In    | Required | Description                                                   |
| ---------- | ----- | -------- | ------------------------------------------------------------- |
| `pcluster` | path  | Yes      | The physical cluster to switch                                |
| `to`       | query | Yes      | The physical cluster whose connection properties to switch to |

No request body. Returns `200` when the switch is applied.

### Example request

```bash theme={null}
curl \
  --request POST \
  --url 'http://localhost:8888/admin/pclusters/v1/pcluster/main/switch?to=backup' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json'
```

## Topic mappings (v1)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.15.0. The full v1 reference for older Gateway versions is available in the [Gateway API reference](https://developers.conduktor.io/?product=gateway\&gatewayApiVersion=v1).</Note>

Managed logical topic mappings — alias and concentrated topics — for a virtual cluster, through the admin API and the internal API.

**Replaced by** `/gateway/v2/alias-topic`, `/gateway/v2/concentrated-topic`, and topic views.

### Endpoints

| Method           | Path                                                                  | Description                                 |
| ---------------- | --------------------------------------------------------------------- | ------------------------------------------- |
| `GET`            | `/admin/vclusters/v1/vcluster/{vcluster}/topics`                      | List topic mappings for a virtual cluster   |
| `POST`           | `/admin/vclusters/v1/vcluster/{vcluster}/topics/{logicalTopicName}`   | Create a topic mapping                      |
| `DELETE`         | `/admin/vclusters/v1/vcluster/{vcluster}/topics[/{logicalTopicName}]` | Delete one or all topic mappings            |
| `GET` / `DELETE` | `/internal/topicMappings/{vcluster}`                                  | Get or delete topic mappings (internal)     |
| `POST`           | `/internal/alias-topic/{vcluster}/{logicalTopicName}`                 | Add an alias topic mapping (internal)       |
| `POST`           | `/internal/concentrated-topic/{vcluster}/{logicalTopicName}`          | Add a concentrated topic mapping (internal) |

### Request body

| Field               | Type    | Required | Description                                                     |
| ------------------- | ------- | -------- | --------------------------------------------------------------- |
| `physicalTopicName` | string  | Yes      | The backing physical topic (example: `physicalTopic`)           |
| `type`              | string  | Yes      | Mapping type (case-insensitive), e.g. `ALIAS` or `CONCENTRATED` |
| `readOnly`          | boolean | Yes      | Whether the mapping is read-only                                |
| `autoManaged`       | boolean | No       | Whether the mapping is managed automatically                    |

### Response `200`

| Field               | Type    | Description                                  |
| ------------------- | ------- | -------------------------------------------- |
| `logicalTopicName`  | string  | The logical (client-facing) topic name       |
| `physicalTopicName` | string  | The backing physical topic                   |
| `type`              | string  | Mapping type (`alias` / `concentrated`)      |
| `readOnly`          | boolean | Whether the mapping is read-only             |
| `autoManaged`       | boolean | Whether the mapping is managed automatically |

### Example request

```bash theme={null}
curl \
  --request POST \
  --url 'http://localhost:8888/admin/vclusters/v1/vcluster/team-a/topics/orders' \
  --header 'Authorization: Basic YWRtaW46Y29uZHVrdG9y' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "physicalTopicName": "team-a-orders",
  "type": "ALIAS",
  "readOnly": false
}'
```

## Health endpoint (legacy)

<Note>Removed in Gateway v3.21.0. Deprecated since Gateway v3.12.0.</Note>

The gateway's legacy aggregate health endpoint — returned HTTP 200 once the gateway's HTTP server was up. It was not part of the v1 admin API, but was removed in the same release.

**Replaced by** the dedicated probes: `/health/live` (liveness) and `/health/ready` (readiness). See [Monitoring setup](/guide/conduktor-in-production/monitor).

### Endpoints

| Method | Path      | Description                |
| ------ | --------- | -------------------------- |
| `GET`  | `/health` | Aggregate health/up status |

### Example request

```bash theme={null}
curl http://localhost:8888/health
```
