Skip to content

Set realm theme assignment

PATCH
/clusters/{cluster_id}/realms/{realm}/themes
curl --request PATCH \
  --url http://localhost:8000/clusters/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/realms/customer-portal/themes \
  --header 'API-Key: <API-Key>' \
  --header 'API-Version: 2026-06-01.beta' \
  --header 'Content-Type: application/json' \
  --data '{ "login": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "email": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "account": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "admin": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'

Assigns deployed custom themes to the realm for one or more Keycloak theme types. Setting a type to null resets it to Keycloak’s built-in default. Only themes with status: deployed can be assigned.

Required scope: themes:write

cluster_id
required
string format: uuid
realm
required

Keycloak realm name (not ID). Must start with a letter; allows letters, digits, and hyphens.

string
>= 1 characters <= 63 characters /^[a-zA-Z][a-zA-Z0-9-]*$/

Example

customer-portal
API-Version
required
string
Allowed values: 2026-06-01.beta
Media typeapplication/json
object
login

Theme to activate for the login page. Set to null to reset to Keycloak’s built-in default.

string format: uuid
email

Theme to activate for email templates. Set to null to reset to Keycloak’s built-in default.

string format: uuid
account

Theme to activate for the account console. Set to null to reset to Keycloak’s built-in default.

string format: uuid
admin

Theme to activate for the admin console. Set to null to reset to Keycloak’s built-in default.

string format: uuid

Example generated

{
  "login": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
  "email": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
  "account": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
  "admin": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}

The request has succeeded.

Media typeapplication/json

Which custom theme is active for each Keycloak theme type in the realm.

object
login
required

Active theme for the login page. null when using Keycloak’s built-in default.

string format: uuid
email
required

Active theme for email templates. null when using Keycloak’s built-in default.

string format: uuid
account
required

Active theme for the account console. null when using Keycloak’s built-in default.

string format: uuid
admin
required

Active theme for the admin console. null when using Keycloak’s built-in default.

string format: uuid

Example generated

{
  "login": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
  "email": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
  "account": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
  "admin": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}

The server could not understand the request due to invalid syntax.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Access is unauthorized.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Access is forbidden.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

The server cannot find the requested resource.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

The target cluster is temporarily unavailable because an update or maintenance operation is in progress. The request was not applied and can be retried once the cluster returns to the available state; the Retry-After header carries a suggested delay in seconds.

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}
Retry-After
integer

Client error

Media typeapplication/problem+json
object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri
errors
required
Array<object>
>= 1 items
object
field
required
string
detail
required
string
code
string
value

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com",
  "errors": [
    {
      "field": "example",
      "detail": "example",
      "code": "example",
      "value": "example"
    }
  ]
}

Client error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}
Retry-After
integer
RateLimit-Limit
integer
RateLimit-Remaining
integer
RateLimit-Reset
integer
X-RateLimit-Limit-Second
integer
X-RateLimit-Remaining-Second
integer
X-RateLimit-Limit-Minute
integer
X-RateLimit-Remaining-Minute
integer
X-RateLimit-Limit-Hour
integer
X-RateLimit-Remaining-Hour
integer
X-RateLimit-Limit-Day
integer
X-RateLimit-Remaining-Day
integer

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}

Server error

Media typeapplication/problem+json

RFC 9457 Problem Details object.

object
type
required
string format: uri
title
required
string
status
required
integer
detail
required
string
instance
string format: uri

Example generated

{
  "type": "https://example.com",
  "title": "example",
  "status": 1,
  "detail": "example",
  "instance": "https://example.com"
}