Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Qlik and ServiceNow Partner to Bring Trusted Enterprise Context into AI-Powered Workflows. Learn More!
Ouadie
Employee
Employee

Brands API, Themes API & Qlik Automate: swap logos, palettes, and app themes on schedule.

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:

  • GA for all customers since 4 Oct 2024 (the OEM-only limit is gone). qlik.dev 
  • Only one brand can be active per tenant. qlik.dev
  • Three assets: logo, favIcon, optional styles.css.

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:

  • JSON + QEXT zip controls palettes, fonts, object defaults.
  • Upload once, reference by name in any app.
  • Theme changes are per-app, but brands are tenant-wide.

 

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

Screenshot 2025-07-04 085055.png

 

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
example: https://yourfunction.run/paint?app=1234theme=5678

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).

 

Screenshot 2025-07-04 090515.png

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!