Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
It’s the 4th of July, so while real fireworks fill the sky, I’m flipping my tenant into a star-spangled skin, and I'll switch it back to default first thing Monday.
The holiday example is just a demo, what matters is that this is a repeatable pattern you can reuse for product launches, partner take-overs, dark-mode roll-outs or any scheduled swap.
How it works:
|
|
What it controls |
Think of it as… |
|
Brands API |
Logo, favicon, browser titles |
Signage |
|
Themes API |
Colors, fonts, object styling |
Paint |
|
Qlik Automate (Platform Ops connector) |
Timed / event-driven swaps |
Light switch |
1. Brands API refresher:
Key endpoints (all under /api/v1/brands) qlik.dev
POST /brands
POST /brands/{id}/actions/activate
POST /brands/{id}/actions/deactivate
GET /brands/active
2. Themes API at a glance:
3. The Automation glue:
Multiple connectors including the Platform Operations connector ship ready-made blocks, so anyone with Automate access can schedule branding swaps.
P.S (Not Tested): To switch an app's theme using Automate may require an externally hosted piece of code that uses the Engine API to swap the theme, as I was not able to do this via the existing blocks in Automate (yet).
Fourth-of-July Demo:
1/ Build the theme
patriotic-theme.qext
{
"type": "theme",
"name": "Patriotic-July-4",
"description": "Red-white-blue palette for Independence Day"
}
theme.json
Simple theme to get started:
{
"type": "theme",
"name": "Patriotic-July-4",
"properties": {
"color": {
"primary" : "#3C3B6E",
"accent" : "#B22234",
"background": "#FFFFFF"
},
"palettes": {
"data": [
{
"name": "Stars-and-Stripes",
"colors": ["#B22234", "#3C3B6E", "#FFFFFF"]
}
]
},
"object": {
"title": { "color": "@accent", "fontSize": "18px" },
"axis" : { "color": "@primary" }
}
}
}
- Zip the theme files into patriotic-theme.zip
- Then you can upload it to your tenant, or simply use qlik-cli to do that:
qlik theme create \
--file patriotic-theme.zip \
--name "Patriotic-July-4" \
--description "Red-white-blue holiday palette"
More on Qlik CLI here.
2/ Create & activate the brand
Docs/Tutorial: https://qlik.dev/manage/platform-operations/brand-a-tenant/
2.1/ Create a new brand
qlik brand create \
--name "Holiday Brand" \
--description "Independence-Day wrapper" \
--file-logo ./assets/logo-july4.png \
--file-favIcon ./assets/favicon-july4.ico
Response:
{
"active": false,
"createdAt": "2025-07-03T20:30:36.000Z",
"createdBy": "HdEcP-DYgrNwhQ6x2kw6CfidciVcoyz4",
"description": "Independence-Day wrapper",
"files": [
{
"contentType": "image/x-icon",
"eTag": "\"9feeaa2531d7ba38bef8e3198017188b\"",
"id": "favIcon",
"path": "/api/v1/brands/6866e86ca2aba070cf814c5f/files/favIcon"
},
{
"contentType": "image/png",
"eTag": "\"848074eaa51cb8997aacaa6b04d01a9a\"",
"id": "logo",
"path": "/api/v1/brands/6866e86ca2aba070cf814c5f/files/logo"
}
],
"id": "6866e86ca2aba070cf814c5f",
"name": "Holiday Brand",
"updatedAt": "2025-07-03T20:30:36.000Z",
"updatedBy": "HdEcP-DYgrNwhQ6x2kw6CfidciVcoyz4"
}
2.2/ Activate the brand
export BRAND_ID=6866e86ca2aba070cf814c5f
qlik brand activate $BRAND_ID
Response:
{
"active": true,
"createdAt": "2025-07-03T20:30:36.000Z",
"createdBy": "HdEcP-DYgrNwhQ6x2kw6CfidciVcoyz4",
"description": "Independence-Day wrapper",
"files": [
{
"contentType": "image/x-icon",
"eTag": "\"9feeaa2531d7ba38bef8e3198017188b\"",
"id": "favIcon",
"path": "/api/v1/brands/6866e86ca2aba070cf814c5f/files/favIcon"
},
{
"contentType": "image/png",
"eTag": "\"848074eaa51cb8997aacaa6b04d01a9a\"",
"id": "logo",
"path": "/api/v1/brands/6866e86ca2aba070cf814c5f/files/logo"
}
],
"id": "6866e86ca2aba070cf814c5f",
"name": "Holiday Brand",
"updatedAt": "2025-07-03T20:32:10.203Z",
"updatedBy": "HdEcP-DYgrNwhQ6x2kw6CfidciVcoyz4"
}
(Under the hood: POST /brands, then …/actions/activate.) qlik.dev
3/ Schedule with Qlik Automate
|
Block |
Settings |
|
Start (Scheduled run mode) |
2025-07-04 00:00 tenant time |
|
Activate Brand (Qlik Platform Operations) |
Brand = Holiday Brand |
|
List Items (Qlik Platform Operations) |
with Filter List condition: meta.tags's name equals "holiday-mode" |
|
(Not Tested) For Each Item → Call externally hosted EngineAPI code using Call URL block |
Your endpoint that receives appID and themeID and swaps the theme |
|
Send Slack Message |
“Patriotic Mode ON” |
To revert back:
Duplicate the flow → change trigger to 2025-07-06 00:00 → swap to "Deactivate Brand"→ patch apps back to "Sense Classic" (or default theme).
Some use cases beyond the Holiday:
|
|
Brands API |
Themes API |
Automate trigger |
|
Quarterly refresh |
Same brand |
Four seasonal themes |
Calendar |
|
Partner co-branding |
One brand per partner |
Partner-specific palette |
Tenant-creation webhook |
|
Dark-mode toggle |
Two brands (light/dark logo) |
Light & dark themes |
User button |
|
A/B color testing |
One brand |
Theme A vs Theme B |
Hourly schedule + metric logging |
Keep logo & favicon changes in brand, color tweaks in theme, and let Automate decide when it happens. Also, remember that the brands affect the whole tenant, so make sure to preview in a sandbox tenant.
Happy Independence Day .. and happy theming!
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.