A fourth channel, host messages, changes a few of
the same values at runtime (language, time zone, theme) after the iframe has
already loaded.
Which layer to use
The rule. A session setting answers what is this customer entitled to. A
URL parameter answers what should this particular placement look like. An
account setting is the default behind both.
- Session settings are per-viewer, and the switches are tamper-proof. Your
backend decides them when it mints the session, and they are signed into the
session token, so a viewer cannot switch on something you withheld. (The two
value settings,
localeandtimezone, are deliberately softer: a URL parameter overrides them, because neither grants anything.) Everything that differs per customer — whether sharing exists, whether the AI agent may write to the workspace, whether raw member names may be revealed — is a session setting. Some of them are enforced on the server, not merely hidden in the UI (see What hiding does and does not do). - URL parameters are per-placement and cheap. The same session can be rendered in two places in your product that need different chrome — a full page with its own header, and a compact card in a sidebar. Changing a query string needs no new session, but the viewer can also edit it, so nothing that must hold against a determined viewer is expressed this way.
- Account settings are the default. Use them when the answer is the same for every customer you embed for.
- Private embedding has no session layer. A private embed carries no session token, so session settings do not exist there; only account settings and URL parameters apply, and the viewer’s own Cube permissions decide the rest.
- Outside an embed, none of this applies. On the Cube console itself every control is governed by the user’s role, not by these switches.
Session settings
Passsettings to the Generate Session API. Every key
inherits the layer below it when you omit it — the account setting where one
exists, otherwise the built-in default. The switches are tri-state: true /
false pins the behavior for every embed opened with that session. Two keys
(locale, timezone) carry a value instead, and an unusable one falls through
to the layer below rather than failing the session.
AI
All but the last inherit an account-wide default from Embed → Settings, so a session value there is an override of what the account already says;allowChatWorkspaceAuthoring has no account-wide counterpart.
Language and time zone
These two carry a value rather than a switch, and they are the answer for a viewer rather than for a placement: set them once when you mint the session and every iframe that session opens uses them. A runtime host message and the per-iframe?locale= / ?timezone=
parameters both still win where a host sends one, and the account-wide default
applies where none does. Neither setting grants anything, which is why a
viewer-editable URL parameter is allowed to override them.
Creator Mode controls
These have no account-wide counterpart: what they answer is a per-customer question, so the session is the only place to answer it. All default to shown.The Chat API’s own session exchange accepts
allowChatWorkspaceAuthoring as a top-level field of the request body rather
than inside a settings object. It means exactly the same thing.URL parameters
Add these to the iframesrc. They are read from the URL the host loaded the
embed with and stay pinned for the life of the embed, so they survive in-app
navigation — opening a dashboard from the home page, or publishing a draft — and
they are ignored outside /embed/*.
The dashboard header switches exist because a host that already frames the embed
in its own chrome otherwise ends up with two of everything — most visibly two
back buttons that navigate to different places. Each control is its own switch
because which of them duplicate yours is your decision;
showDashboardHeader=false
is the shortcut for all of them, and hiding the last remaining control collapses
the bar for you.
How values are parsed
Every parameter falls back to whatever the embed would have done without it, so a typo never buys something you did not ask for. Which direction that is depends on what the parameter does:- A parameter that grants (
allowExport) requires the exact literal stringtrue.allowExport=1,allowExport=TRUE, and a bare?allowExportall leave downloads hidden. - A parameter that hides (every
show…) requires the exact literal stringfalse.=0,=False,=FALSE, and a bare?showDashboardTitleall leave the control visible. - A parameter that selects a value (
locale,timezone) falls through to the next source in the ladder when the value is one Cube cannot use — the session setting first, then (fortimezone) a zone the dashboard’s author pinned, then the account default.
allowExport
must be turned on, show… must be turned off.
Account settings
Embed → Settings in the Cube console holds the account-wide defaults. They apply to every embed, including private embeds, and the AI ones are what a session’s own AI keys override.
The same page carries the account-wide Creator
Mode settings: the workspace header title (with
per-language overrides) and whether that header is shown at all, plus whether
embed users may see Semantic SQL (shown by default) and Generated SQL
(hidden by default, because it exposes physical table and schema names).
Analytics Chat parameters
The standalone Analytics Chat embed has three URL parameters of its own.
They follow the same rule as every other
show… parameter: only the literal
false hides. Each also has an older hide… spelling that still works — see
Analytics Chat → Customize the chat.
Whether the chat surface is available at all is a session question, not a URL
one: settings.allowAi: false withholds it.
What hiding does and does not do
Most of these switches take an entry point out of the UI. They are how you shape the product your users see; they are not a replacement for permissions.- Permissions still apply underneath. None of these switches widens what a
session may do.
showDashboardEditButtoncannot give edit rights;showWorkbookShare: truecannot share content the user may not share;allowChatWorkspaceAuthoring: truegrants nothing the user’s role withholds. - Two of them are enforced on the server, not merely hidden.
allowAi: falsestops the session obtaining AI credentials at all.allowChatWorkspaceAuthoring: falsechanges the tools and instructions the agent is given. - Two more reset state as well as hiding a control, in the browser rather
than on the server:
showMemberNames: falseandshowGroupByCube: falsepin the data pane so a user who had already switched cannot stay switched. That keeps the pane consistent for every viewer of the session; it is not a server-side guarantee about what the data model reveals. - URL parameters are visible to the viewer. They are chrome and layout decisions, made per placement. Anything a viewer must not be able to turn back on belongs in the session settings.
- Export is client-side. A widget’s CSV is serialized in the browser from
data the widget has already loaded, so
allowExportdecides whether the action is offered, not whether the viewer’s browser holds the rows. The account-wide Allow data downloads switch outranks it — see Restricting data downloads, which also notes that the per-user Download data role action is bypassed by anonymous embed viewers.