---
url: https://docs.ridgedata.ai/reference/embed-api/TypeAlias.HostToEmbedMessage.md
---
# Type Alias: HostToEmbedMessage

```ts
type HostToEmbedMessage = 
  | {
  silent?: boolean;
  state: StateValues;
  type: typeof setState;
}
  | {
  requestId: string;
  type: typeof getState;
}
  | {
  requestId: string;
  type: typeof getStateSchema;
};
```

Messages your app sends to an iframe with `frame.contentWindow.postMessage(message, ridgeOrigin)`.
Wait for `ridge:ready` before sending requests. Use the iframe's exact origin as the target.
The iframe addresses its replies and events to the origin of your first message, so send
one command after `ridge:ready` even if your app only listens.

| Message `type` | Fields | Behavior |
| --- | --- | --- |
| `ridge:setState` | `state`, optional `silent` | Merge values by component id and state key. `null` clears a key. Omitted values remain unchanged. |
| `ridge:getState` | `requestId` | Request the current dashboard state. The reply is `ridge:state`. |
| `ridge:getStateSchema` | `requestId` | Request the available state keys, schemas, and write permissions. The reply is `ridge:stateSchema`. |

Choose a unique `requestId` for each read and match it to the reply. `ridge:setState` has
no direct reply. Rejected updates produce `ridge:error` messages; other updates in the
same batch may succeed. Set `silent: true` to suppress the resulting `ridge:stateChange`
notification. Validation and error reporting still apply.

## Example

```ts
const message: HostToEmbedMessage = {
  type: "ridge:setState",
  state: { "region-menu": { filter: "EMEA" } },
  silent: true
};
```
