---
title: "Save a board's embed settings"
method: PUT
path: "/dashboards/{dashboard_id}/embed/config"
tags: ["Dashboards v3 · embed"]
---

# Save a board's embed settings

`PUT /dashboards/{dashboard_id}/embed/config`

## Request

- Base URL: `https://app.mammoth.io/api/v2`
- URL: `https://app.mammoth.io/api/v2/dashboards/{dashboard_id}/embed/config`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-KEY` and API key in header `X-API-SECRET` and API key in header `X-WORKSPACE-ID`

Every published board embeds; `mode` is the tier a board without a public link is on (key: the board's embed key; signed: a host-signed token). Framing is open unless `allow_any_origin` is false, and only then does `allowed_origins` restrict it; origins are validated as origin patterns (https, optional port, one leading `*.` label), normalised and capped. Appearance and snippet keys are whitelisted; a saved `appearance.tile` makes the board's embed a tile embed. A field left out of `params` keeps its saved value, so a save that sends only `allowed_origins` never moves a Signed board back to Key.

## Path parameters

- `dashboard_id` integer, required

## Request body

- EmbedConfigSpec: Embed settings for one board
  - `params` EmbedConfigParams, required
    - `mode` 'key' | 'signed': The tier a board WITHOUT a public link is on. key: a page presents the board's embed key (every row). signed: every viewer needs a host-signed token. A public board embeds over its link whatever is saved here; every published board embeds.
    - `allow_any_origin` boolean: Any site may frame the board. The default; set it false to restrict framing to `allowed_origins`.
    - `allowed_origins` string[]: The sites that may frame the board while `allow_any_origin` is false. Origin patterns (`https://host[:port]`, one leading `*.` label allowed). Normalised and de-duplicated; at most 20.
    - `appearance` object: The board's saved look, applied when the page loads: theme/accent/filters/title/kpis/insights/tabs/page/branding, and `tile` to embed one chart instead of the board.
    - `snippet` object: How the snippet is shaped: `height` is 'auto' (the SDK grows the frame), 'aspect' (16:9) or a pixel count from 240 to 2400.

## Response `200`

The board's embed settings plus the URLs a snippet needs

- EmbedConfigResponse
  - `mode` string, required
  - `tier` string
  - `allow_any_origin` boolean
  - `allowed_origins` string[], required
  - `appearance` object, required
  - `snippet` object
  - `embed_url` string, required
  - `sdk_url` string, required
  - `published` boolean, required
  - `public` boolean, required
  - `access_key` string, nullable
  - `key_rotated_at` string, date-time, nullable
  - `has_signing_secret` boolean
  - `signing_secret_rotated_at` string, date-time, nullable
  - `token_ttl` integer
  - `rls_enabled` boolean
  - `rls_column` string, nullable
  - `fallback` EmbedSnippetFallback
    - `title` string, required
    - `link_url` string, required
    - `image_url` string, nullable
    - `headlines` EmbedHeadlineFigure[]
      - `label` string, required
      - `value` string, required
    - `as_of` string, date-time, nullable

## Other responses

- `400`: Bad request syntax or unsupported method
- `403`: Request forbidden -- authorization will not help

---

[API](https://skmtc.dev/mammoth/apis/mammoth-analytics.md) · [All operations](https://skmtc.dev/mammoth/apis/mammoth-analytics/llms.txt) · [OpenAPI document](https://skmtc.dev/mammoth/apis/mammoth-analytics/revisions/5dfd1c296ded?raw)
