Sharing & Embedding
CalabiIQ provides multiple ways to share insights: direct links, embedded iframes for external portals, and scheduled email reports. This guide covers all sharing options and their access control implications.
Sharing a Dashboard via Link
The simplest way to share a dashboard is a permalink — a stable URL that preserves the current filter state.
- Open the dashboard you want to share.
- Apply any filters you want recipients to see by default.
- Click the Share button (top-right).
- Select Copy permalink.
- Paste the URL into Slack, email, or any other communication channel.
Recipients must have a valid Calabi account to open the link. The dashboard respects their individual data permissions — they see only data they are authorized to access.
Sharing a specific chart
- Open the chart from the Charts list.
- Click ··· → Share → Copy link.
Access Control for Shared Dashboards
CalabiIQ uses role-based access control (RBAC) to determine who can view a dashboard.
Making a dashboard visible to all users
- Open the dashboard in Edit mode.
- Click the Draft badge next to the title.
- It changes to Published — all Calabi users with access to the underlying datasets can now view it.
Restricting a dashboard to specific roles
- In Edit mode, click ··· → Edit dashboard.
- Under Roles, add the roles that should have access.
- Remove other roles as appropriate.
- Click Save.
Embedding Dashboards
Embed CalabiIQ dashboards inside external portals, internal tools, or customer-facing applications using an <iframe>.
Step 1 — Enable embedding for the dashboard
- Open the dashboard in Edit mode.
- Click ··· → Embed dashboard.
- In the Allowed Domains field, enter the domain(s) that will host the iframe (e.g.,
app.{yourdomain},portal.yourcompany.com). - Click Enable embedding.
- Copy the Embed ID (UUID).
Step 2 — Get an embed token (server-side)
Embedding requires a short-lived guest token generated from your backend using the CalabiIQ REST API. Never expose your API credentials in client-side code.
import requests
CALABI_BASE_URL = "https://calabi.yourdomain.com/bianalyst"
CALABI_API_KEY = "your-service-account-api-key" # keep secret
def get_guest_token(dashboard_id: str, user_email: str) -> str:
"""Generate a guest token for embedding dashboard_id."""
resp = requests.post(
f"{CALABI_BASE_URL}/api/v1/security/guest_token/",
json={
"resources": [{"type": "dashboard", "id": dashboard_id}],
"rls": [], # optional row-level security rules
"user": {
"username": user_email,
"first_name": "Embedded",
"last_name": "User",
},
},
headers={"Authorization": f"Bearer {CALABI_API_KEY}"},
)
resp.raise_for_status()
return resp.json()["token"]
Step 3 — Render the iframe
Pass the guest token to your frontend and mount the iframe:
<iframe
id="calabi-embed"
src="https://calabi.yourdomain.com/bianalyst/embedded/dashboard/<EMBED-UUID>?guest_token=<GUEST-TOKEN>"
width="100%"
height="800px"
frameborder="0"
allowfullscreen
></iframe>
Embedded SDK (JavaScript)
For more control — hiding the filter bar, listening to events — use the embedded SDK:
<script src="https://calabi.yourdomain.com/bianalyst/static/assets/embedded.js"></script>
<div id="calabi-container" style="height:600px;"></div>
<script>
const embed = calabi.embedDashboard({
id: "<EMBED-UUID>",
calabiiqDomain: "https://calabi.yourdomain.com/bianalyst",
mountPoint: document.getElementById("calabi-container"),
fetchGuestToken: () => fetchGuestTokenFromYourBackend(),
dashboardUiConfig: {
hideTitle: true,
hideChartControls: false,
filters: {
expanded: false,
visible: true,
},
},
});
</script>
Row-Level Security in embedded dashboards
Apply RLS rules so embedded viewers only see their own data:
# Server-side guest token with RLS
resp = requests.post(
f"{CALABI_BASE_URL}/api/v1/security/guest_token/",
json={
"resources": [{"type": "dashboard", "id": dashboard_id}],
"rls": [
{
"clause": f"tenant_id = '{viewer_tenant_id}'",
"dataset": 42, # dataset ID in CalabiIQ
}
],
"user": {"username": user_email, "first_name": "Guest", "last_name": "User"},
},
headers={"Authorization": f"Bearer {CALABI_API_KEY}"},
)
Embedding URL Parameters
Control the embedded dashboard's appearance with query parameters:
| Parameter | Values | Effect |
|---|---|---|
standalone | 1 | Hides top navigation bar |
standalone | 2 | Hides navigation and dashboard title |
standalone | 3 | Minimal view — charts only |
show_filters | 0 | Hides the filter bar |
expand_filters | 0 | Collapses the filter bar by default |
Full kiosk URL example:
https://calabi.yourdomain.com/bianalyst/embedded/dashboard/<UUID>?standalone=3&show_filters=0
Sharing Individual Charts
Charts can be shared independently of dashboards.
Share as link
- Go to Charts → find the chart.
- Click ··· → Share → Copy link.
Download as image
- Open the chart or hover over it on a dashboard.
- Click ··· → Download → Download as image (PNG).
Download as CSV
- On a dashboard, hover over any chart.
- Click ··· → Download → Download as CSV.
This downloads the chart's underlying query results, not the visual.
Scheduled Email Reports
Send dashboard or chart snapshots to a distribution list on a recurring schedule.
See Scheduled Reports for the full guide.
Permissions Reference
| Action | Starter | Professional |
|---|---|---|
| Share dashboard via permalink | Yes | Yes |
| Publish dashboard (make visible to all users) | Yes | Yes |
| Restrict dashboard to specific roles | Yes | Yes |
| Embed dashboard in external site | No | Yes |
| Row-level security in embedded views | No | Yes |
| Scheduled email reports | No | Yes |
| Slack report delivery | No | Yes |
| Download chart as PNG | Yes | Yes |
| Download chart data as CSV | Yes | Yes |