Skip to main content
Iframe embedding is available on Premium and Enterprise plans.
Embed any dashboard into your application using an iframe. Dashboards can be embedded with either authentication mode:
  • Private embedding — for internal users with Cube accounts (e.g., embedding in Notion, Salesforce, internal tools)
  • Signed embedding — for external/customer-facing applications using server-generated sessions

Embed with private embedding

To embed a dashboard for internal users:
  1. Open your dashboard in Cube
  2. Click ShareEmbed
  3. Copy the generated iframe code
Share embed dialog Then paste the iframe code into your application:
Users will be prompted to sign in with their Cube credentials when accessing the embedded dashboard. See Private embedding for details on the auth model and integration examples (Notion, Salesforce).

Embed with signed embedding

Signed embedding must be allowed on the dashboard first: open the dashboard, click ShareEmbed, and turn on Allow signed embedding. You can also toggle it without opening the UI using the Cube CLI:
To embed a dashboard for external/customer-facing applications, generate a session on your backend and pass the session ID into the iframe:
See Signed embedding for the full session generation flow, API key setup, and a complete working example.

Pre-set dashboard filters and granularities via URL

You can pre-set the values of a dashboard’s controls by adding URL parameters: The semantic view and member must match the internal names (not display titles) configured on the widget — as must the member on the right-hand side of ms_, which is a measure rather than a dimension when the field switcher’s Field Type is Measure. For filters, an omitted filter type defaults to equals. Granularities are lowercase and must be one of the switcher’s allowed granularitiesday, week, month, quarter, year, plus second, minute, and hour for time dimensions that expose them. Example:
The filter’s JSON value is shown unencoded for readability. Percent-encode it before the URL goes anywhere real — pasted as-is into the src="…" of the iframe snippet above, its raw " closes the attribute and truncates the URL. This works on both regular and published (embedded) dashboards. A parameter is applied only if a matching control for that member already exists on the dashboard; a granularity outside the switcher’s allowed list is ignored, as is a member the field switcher doesn’t offer — its Alternatives, plus the member it replaces. The reverse direction works on published dashboards: when a viewer changes a control there, the new value is written back into the dashboard’s own URL, so the state a link carries and the state a viewer reaches by clicking are the same format. Reading the parameters works anywhere; it’s the writing that is published-only. See Controls → Sharing the current selection.

Allow chart and dashboard export

By default, embedded dashboards do not expose a download action on individual widgets or on the dashboard as a whole. To let viewers download a chart widget as a CSV, PNG, or PDF file, and download the whole dashboard as a PNG or PDF, add the allowExport=true query parameter to the embed URL:
When enabled, each chart widget’s ⋮ menu shows Download as CSV, Download as PNG, and Download as PDF actions, and a dashboard-level ⋮ appears — docked in the header in Creator Mode, floating over the dashboard in the published-dashboard embed — with Download as PNG and Download as PDF for the whole dashboard. allowExport is the single switch for all of these — there is no way to allow one format while blocking another, or to allow chart-level export without dashboard-level export. Only the exact literal string true opts in: allowExport=1, allowExport=TRUE, a bare ?allowExport, and omitting the parameter (the default) all leave every download action hidden. The CSV is generated client-side from the data already loaded into the widget, so no additional query is issued. Inside an embed, allowExport — not the viewer’s own Cube role — is the authority on whether the download actions appear. The account-wide Allow data downloads switch outranks it — see Restricting data downloads. To turn on per-widget downloads without the whole-dashboard ⋮ menu — for a host that surfaces its own dashboard-level export, for example — add showDashboardExportMenu=false:
Like the header controls below, only the exact literal string false hides the menu; it has no effect unless allowExport=true is also set.

Show or hide the AI chat

Embedded dashboards show an AI chat (the agent panel and its launcher bubble) by default. You can control it in two ways:
  • Globally, in the UI. Toggle Show AI chat on embedded dashboards under Embed → Settings in the Cube console. This switch is account-wide — it turns the AI chat on or off for the entire embedded surface, i.e. every embedded dashboard.
  • Per session, via the API. Pass settings.showDashboardChat when you generate the session. A per-session value takes precedence over the global toggle — false hides the chat for that session even when it is enabled account-wide, and true shows it even when it is disabled:
This applies to embedded published dashboards; it does not affect the standalone Analytics Chat surface, where embedding the chat is itself the opt-in. To withhold AI from a session entirely — every surface, enforced on the server — use settings.allowAi instead. See Show and hide features.

Show or hide header controls

By default, an embedded dashboard’s header shows its title, back button, and — when the viewer has permission — the Edit and Duplicate actions. Hide any of them individually with URL parameters on the embed iframe src:
Every one of these defaults to shown. Only the exact literal string false hides a control — =0, =False, =FALSE, and a bare ?showDashboardTitle (no value) all leave it visible. Note this is the inverse of allowExport above, where only the literal string true opts in.
These parameters are URL-only — they aren’t accepted in the Generate Session settings object, unlike showDashboardChat, and they have no account-wide default under Embed → Settings.
These parameters apply to the dashboard header only. Setting showDashboardHeader=false overrides the other four: the whole bar disappears regardless of their values. showDashboardEditButton can only hide the Edit action; it can never show one to a viewer who lacks edit permission.

Creator Mode workbook header

The Creator Mode workbook header — which carries the workbook name, tabs, Publish changes, and Share — is a separate surface with its own back-button switch: showWorkbookBackButton is independent of showDashboardBackButton above — the two headers are separate surfaces, so a host that wants neither back button sets both. The rest of the workbook header (name, tabs, Publish changes, Share) has no equivalent switch, since those actions are part of the authoring flow. The workbook actions menu still offers View all, so hiding the back button never removes a way back to the workspace. It follows the same rules as the parameters above: only the exact literal string false hides it, and it is URL-only — not accepted in the Generate Session settings object, and with no account-wide default under Embed → Settings. These parameters are read from the URL the host loaded the iframe with and stay pinned for the life of the embed, so they survive in-app navigation (for example, from the home-page dashboard card, or after publishing a draft).

Set the language

Embedded dashboards render their UI in the account’s default language, which you can override per embed by adding the ?locale= query parameter:
See Localization for the list of supported languages and the other ways to set the language.

Customize appearance

You can style an embedded dashboard — background, padding, widget borders, titles, and fonts — from the Styling panel in the Dashboard Builder. See Dashboards → Styling for the full list of options.