---
title: "List installed extensions"
method: GET
path: "/clusters/{cluster_id}/extensions"
tags: ["Cluster Extensions"]
---

# List installed extensions

`GET /clusters/{cluster_id}/extensions`

## Request

- Base URL: `http://localhost:8000`
- URL: `http://localhost:8000/clusters/{cluster_id}/extensions`
- Auth: API key in header `API-Key`

Returns all extensions installed on the cluster.

Required scope: `clusters:extensions:read`

## Path parameters

- `cluster_id` string, uuid, required

## Headers

- `API-Version` '2026-06-01.beta', required

## Response `200`

The request has succeeded.

- ClusterExtension[]
  - `extension_id` string, uuid, required
  - `extension_name` string, required
  - `extension_source` 'platform' | 'custom', required
  - `status` 'installing' | 'active' | 'failed' | 'removing', required
  - `installed_version` string, required: Version currently running on the cluster. For `platform` extensions this is the upstream release string of the installed build (not necessarily semver, for example `1.4.1-SNAPSHOT`), or `unknown` when it cannot be determined. For `custom` extensions it is the uploader-supplied version.
  - `available_version` string, nullable, required: Version the cluster would get by upgrading now. For `platform` extensions it is the build published for the cluster's Keycloak version (`unknown` when that build states no version), and `null` when no build supports the cluster's Keycloak version. For `custom` extensions it is the latest uploaded version.
  - `upgrade_available` boolean, required: Whether upgrading would install a different build. For `platform` extensions it compares the installed build with the one published for the cluster's Keycloak version, so republishing an unchanged catalog never sets it. For `custom` extensions it is set when a version was published after the install. Always `false` when the install is not `active` or is pinned by Skycloak support.
  - `parameters` object, required: Current parameter values. Values for sensitive parameters are omitted (`null`).
  - `installed_at` string, date-time, required
  - `last_status_change_at` string, date-time, nullable, required: When the installation status last changed.

## Other responses

- `401`: Access is unauthorized.
- `403`: Access is forbidden.
- `404`: The server cannot find the requested resource.
- `429`: Client error
- `500`: Server error
- `501`: Server error

---

[API](https://skmtc.dev/skycloak/apis/skycloak-public-api.md) · [All operations](https://skmtc.dev/skycloak/apis/skycloak-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/skycloak/apis/skycloak-public-api/revisions/33a69e2ce35f?raw)
