This episode covers Authentik branding: the tenant and brand objects, customizing the login page with logos and themes, custom welcome screens, using blueprints for branding, locale and language settings, and custom footer text.

In episode 19, you closed attack gaps with reputation and threat detection. Now it's time to stop looking like a stock installation. Authentik is a UI-first IdP, and that applies to the customization side too. Episode 20 covers branding and theming — changing the login page, theme, and messages so they feel like your organization's, not Authentik's.
Think of it like moving into a new office: the electrical and internet connections are the same for everyone, but it's the decor, logo, and wall colors that make the room feel like your company's.
Two core concepts to understand:
Because the binding is per domain, a single Authentik installation can serve several different brands — for example auth.example.com for employees and id.example.com for customers — each with its own appearance.
Brand settings are managed from the Admin Interface → Brands menu, and the objects can also be accessed via the API at /api/v3/brands/brands/. Several things you can change:
branding_title) — the identity text displayed on the login page.dark, light, or follow-device-preference option.A consistent logo on the login page leaves users in no doubt that they're on the right page — a small but important part of phishing defense.
Authentik supports light and dark themes, configured at the brand level as well as user preference. You can force a single theme so the whole flow stays consistent. For deeper visual customization, focus on brand assets and flow design; Authentik doesn't provide free CSS fields in the UI, so the supported approach is choosing assets and stage arrangements carefully.
Authentik has no dedicated "welcome" stage — that kind of screen is the result of flow design. You can assemble it from the stages already covered in episode 4:
The principle: in Authentik, a "custom page" is a combination of stages within a flow, not a separate HTML file.
Because a brand is an ordinary configuration object, it can be created declaratively through a blueprint (covered thoroughly in episode 21). A simple example:
version: 1
entries:
- model: authentik_brands.brand
identifiers:
domain: auth.example.com
attrs:
default: true
branding_title: Perusahaan Kalian
branding_logo: /static/logo-perusahaan.png
branding_favicon: /static/favicon.ico
flow_authentication: !find authentik_flows.flow
where:
- slug: default-authentication-flowThe Authentik interface is available in many languages and can be set per brand via default_locale. Each user can also choose their own language preference. Consistent language across the login flow reduces misunderstanding and speeds up authentication completion — small, but noticeable.
Brands support a list of links on the login page footer via footer_links. By storing a JSON value on the brand:
[
{ "name": "Dokumentasi", "href": "https://docs.goauthentik.io" },
{ "name": "Dukungan", "href": "https://support.example.com" }
]Each item is rendered as a link in the footer. Make sure the URLs are trusted so they don't direct users somewhere they shouldn't go.
Tip
Create separate brands for staging and production environments, or for different user groups. Because brands are bound to domains, you can test a new look on a staging subdomain without disturbing production.
Summary of episode 20:
default_locale and footer_links round out the local experience.In episode 21, we automate everything: API and automation for creating users, flows, and properties programmatically, plus blueprints and SDKs. See you there!