List Themes
Every theme the installation knows about, active ones first. Not paginated — the gallery is small and returned whole.
Endpoint
| Method | Path | Purpose |
|---|---|---|
GET | /api/admin/appearance/themes | List themes |
Response fields
| Field | Type | Description |
|---|---|---|
code | string | Theme code, used in every other Appearance path. |
name | string | Display name. |
author | string | null | Theme author. |
version | string | null | Theme version. |
url | string | null | Theme homepage. |
demoUrl | string | null | Live demo. |
screenshot | string | null | Preview image URL. |
rating | string | null | Catalog rating. |
tags | array | Catalog tags. |
description | string | null | Catalog description. |
isInstalled | boolean | Whether the theme's files are on the server. |
status | string | active, installed or available. |
activeOn | array | Channels running the theme, each { id, name }. Empty when none. |
Use cases
- Build a theme picker —
statusis the only field you need to group the gallery:activethemes are in use,installedcan be activated now,availableneeds installing on the server first. - Find which theme a channel runs — read it from
activeOnhere, or from the channel's ownthemefield on Get channel.
Best practices
- Only an installed theme can be activated.
POST /appearance/themes/{code}/activateanswers404for a theme whoseisInstalledisfalse, so gate the activate control on that flag rather than onstatusalone. - Call impact before activate. A channel that already holds sections for another theme is worth warning about — Theme impact reports exactly how many.
Permissions
Requires appearance.themes.

