> ## Documentation Index
> Fetch the complete documentation index at: https://seal-d2ca5bea.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom content

> Custom dashboards and views built with Seal's support.

Custom content lets you build tailored dashboards and views inside entity pages — charts, summaries, operational displays. These are developed with Seal's support team and deployed as part of your configuration.

If you need a custom view for your workflows, [contact us](mailto:support@seal.run) and we'll scope it with you.

## Static bundles

Most custom content receives a `window.SEAL_CONTEXT` object before the uploaded
HTML runs. That context includes the current entity, user details, and an API
token, so Seal serves those HTML documents with `no-store`.

For static launchers or homepages that do not need `window.SEAL_CONTEXT`, add a
`seal-custom-content.json` file at the root of the uploaded zip:

```json theme={null}
{
  "sealContext": "none"
}
```

Static bundles still require normal entity access, but their HTML can be cached
privately by the browser and Seal skips context injection work. Use this only
when the bundle does not read `window.SEAL_CONTEXT` or call authenticated Seal
APIs from inside the iframe.

## E-signature

Custom content iframes can request an e-signature from the user via the hosted helper script:

```html theme={null}
<script src="/api/esign.js"></script>
```

This exposes a single method:

```js theme={null}
const success = await Seal.requestESignature();
```

`requestESignature()` opens the Seal e-signature modal in the parent application. It returns a promise that:

* **Resolves to `true`** when the user successfully signs
* **Rejects with an `Error`** if the user cancels or the signature fails

The script must be loaded inside a custom content iframe served by Seal — it communicates with the parent application via `postMessage` and will reject if called outside an iframe.
