---
title: "List extensions"
method: GET
path: "/extensions"
tags: ["Extensions"]
---

# List extensions

`GET /extensions`

## Request

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

Returns all platform extensions and the workspace's custom extensions.

Required scope: `extensions:read`

## Headers

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

## Response `200`

The request has succeeded.

- Extension[]
  - `id` string, uuid, required
  - `name` string, required
  - `display_name` string, nullable: Friendly name shown in place of `name` when set. `name` never changes once an extension is catalogued; `display_name` lets the shown label change independently. Absent or null when the extension has none, in which case clients should fall back to `name`.
  - `description` string, nullable, required
  - `source` 'platform' | 'custom', required
  - `visibility` 'public' | 'private'
  - `version` string, required: Active version of the extension.
  - `previous_versions` ExtensionVersionInfo[], required: Previously published versions, ordered from oldest to newest.
    - `version` string, required
    - `created_at` string, date-time, required
  - `keycloak_versions` string[], required: Supported Keycloak major versions (e.g. `["25", "26"]`).
  - `parameter_type` 'env' | 'cli' | 'realm_attributes', required
  - `parameters` ExtensionParameter[], required
    - `key` string, required: Unique parameter identifier within the extension.
    - `label` string, required
    - `type` 'text' | 'dropdown' | 'checkbox' | 'number' | 'password', required
    - `required` boolean, required
    - `default_value` string, nullable, required
    - `options` ExtensionParameterOption[], required: Available choices. Only applicable when `type` is `dropdown`.
      - `value` string, required
      - `label` string, required
    - `is_sensitive` boolean, required: When `true`, the parameter value is write-only and omitted from read responses.
  - `repository_url` string, uri, nullable, required
  - `icon_url` string, uri, nullable, required
  - `documentation_url` string, uri, nullable, required
  - `quick_start_steps` string, nullable, required
  - `usage_notes` string, nullable, required
  - `scan_status` 'scanning' | 'ready' | 'rejected' | 'failed', required
  - `scan_message` string, nullable, required: Human-readable scan result. Present when `scan_status` is `rejected` (names the detected signature) or `failed` (says the scan could not complete).
  - `original_jar_name` string, nullable, required: Original JAR filename provided at upload time. Only set for `custom` extensions.
  - `file_size_bytes` integer, nullable, required: JAR file size in bytes. Only set for `custom` extensions.
  - `uploaded_at` string, date-time, nullable, required: When the extension was first uploaded. Only set for `custom` extensions.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `401`: Access is unauthorized.
- `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)
