docs-mintlify/embedding/iframe/time-zones.mdx
Embedded Cube surfaces — dashboards, Analytics Chat, and the full app in Creator Mode — bucket time in a zone you control. You can set a default for the whole account, override it per embed with a URL parameter, or switch it at runtime from the host page.
This matters most when your end users are not in your deployment's zone: without it, "today" in an embedded dashboard means today in the deployment's default time zone, not in your customer's.
<Note>Available on Premium and above plans.
</Note> <Info> Embedded time zones require **user time zones** to be enabled for the account. See [Time zones](/admin/time-zones) for the account-wide policy, what a zone changes, and the console-side behavior. </Info>The time zone of an embedded surface is resolved from the following sources, highest priority first:
cube:action:set-timezone
message sent from the host page (see At runtime).?timezone= query parameter on the embed URL (see
Per embed via URL).?timezone= if you want each end user's own zone.A host override outranks a dashboard's pinned zone by design: the integrator is speaking for the whole frame, and you know your user's zone better than the dashboard's author does.
<Note> If the account policy is disabled, none of this applies — Cube sends no zone and the deployment's default time zone is used, exactly as before. </Note>Set a default time zone for all embedded surfaces:
The selected zone applies to every embedded surface across the account, unless a specific embed overrides it. Re-selecting the account-wide zone clears the embed-specific value, so embeds follow the account-wide zone again.
The picker is inert while user time zones are off for the account — a zone stored there would be one nothing applies.
Override the account default for an individual embed by adding the ?timezone= query
parameter to the embed URL:
https://your-tenant.cubecloud.dev/embed/dashboard/YOUR_DASHBOARD_PUBLIC_ID?session=YOUR_SESSION_ID&timezone=America/New_York
The parameter is read once when the embed loads and pinned for the session, so in-app navigation won't drop it.
Values must be IANA time zone names. An
unusable value — including a bare UTC offset like +05:30 — is ignored, and the embed
falls back to the account default rather than quietly shifting every number.
Switch the zone after the embed has loaded by sending a
cube:action:set-timezone message
from the host page. This takes precedence over both the URL parameter and the account
default — use it when your own user changes their zone:
sendAction("cube:action:set-timezone", { timezone: "Asia/Tokyo" });
See Events and actions for the full host ↔ embed messaging contract.