# Embed overview

Source: https://www.solscanner.app/docs/embed/overview

> Put Scanner's interactive token map on your website.

The Embed API lets you show Solana and Robinhood Chain bubble maps on your own site via iframe. Both use the same embed key and allowed-domain settings. See [Plans and access](/docs/access) to get set up.

For token, wallet, transaction, and block detail pages, see [Explorer views](/docs/embed/explorer).

Quick start [#quick-start]

```html
<iframe
  src="https://www.scanner.net/sol/scanner/TOKEN_MINT/map?embed=1&key=YOUR_API_KEY"
  width="100%"
  height="600"
  sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"
  allow="clipboard-write"
  style="border: none; border-radius: 12px;"
></iframe>
```

Replace `TOKEN_MINT` with any Solana token mint or wallet address, and `YOUR_API_KEY` with your `emb_` key.

URL format [#url-format]

| Chain           | Iframe URL                                                                |
| --------------- | ------------------------------------------------------------------------- |
| Solana          | `https://www.scanner.net/sol/scanner/{ADDRESS}/map?embed=1&key={API_KEY}` |
| Robinhood Chain | `https://www.scanner.net/rh/scanner/{ADDRESS}/map?embed=1&key={API_KEY}`  |

For Robinhood Chain, use a `0x` token contract or wallet address. Existing Solana URLs under `/scanner/{ADDRESS}/map` still redirect to `/sol/scanner/{ADDRESS}/map`.

| Parameter | Where | Required | What it does                                                                     |
| --------- | ----- | -------- | -------------------------------------------------------------------------------- |
| `ADDRESS` | path  | Yes      | Solana mint/wallet or Robinhood Chain contract/wallet address                    |
| `embed`   | query | Yes      | Turns on embed mode. `?embed=1` is canonical; the bare flag `?embed` also works. |
| `key`     | query | Yes      | Your `emb_` API key                                                              |

The canonical host is `https://www.scanner.net`. The apex `scanner.net` redirects to `www`, so use `www` directly to avoid an extra hop inside the iframe.

Scan modes [#scan-modes]

Scan mode is optional. If omitted, the address is auto-detected (token → `holders`, wallet → `quick`).

**Token modes** (use with a mint or token contract):

| Parameter | What you get                                      |
| --------- | ------------------------------------------------- |
| `holders` | Top holders with bundle detection, on both chains |
| `traders` | Top traders by realized PnL, Solana only          |

Robinhood Chain does not support trader maps. Requesting `traders` shows an explanation and a **View holders** link; it does not run a different scan silently. Modes can also be passed as `mode=holders`, `mode=quick`, and so on.

**Wallet modes** (use with a wallet address):

| Parameter | Speed  | What you get      |
| --------- | ------ | ----------------- |
| `quick`   | Fast   | Basic connections |
| `deep`    | Medium | Full graph        |
| `max`     | Slow   | Maximum depth     |

```
/sol/scanner/{MINT}/map?embed=1&key={KEY}&traders
```

What users see [#what-users-see]

Both maps render without Scanner navigation or login prompts, with zoom, pan, filters, and node details. In a Robinhood embed, **Scan this wallet** opens the selected wallet's map inside the iframe, retaining the embed key and wallet scan depth. Personal wallet-saving controls are hidden.

The Solana map also includes a "Powered by Scanner" link, cluster sidebar, and rescan controls. A rescan of the same address inside 20 seconds is refused by the server cooldown. These controls are not yet shared with the Robinhood map.

Error rendering [#error-rendering]

Scan failures render a visible error inside the iframe. A missing, invalid, or disabled key shows an error page inside the iframe instead of the map. The Robinhood map also explains unsupported trader mode rather than showing an empty graph. A successful scan with no connections shows an empty-state message.

Because `frame-ancestors` and cross-origin boundaries prevent the host page from reading the iframe's DOM or JSON responses, surface these states by watching for empty/stalled embed renders on your side (e.g. request timeout on `/embeds/validate` before mounting the iframe). See [Authentication](/docs/embed/authentication) for the validate endpoint.

Usage [#usage]

Results under 1 hour old are served from cache, so they run no new scan. Every embed request still counts one unit against your org's daily and monthly limits, cached or not. Once you are over the limit, requests that need a fresh scan return `429`.

Limits are set per org. Raise them in your [Telegram channel](/docs/access#support) or email [payments@scanner.net](mailto:payments@scanner.net).

Troubleshooting [#troubleshooting]

If you see a blank frame or error:

* Check your domain is in the allowed list (see [Authentication](/docs/embed/authentication))
* A missing or invalid key shows an error page inside the iframe. Verify the key is present in the iframe URL and correct (pre-flight with [validate](/docs/embed/authentication#validate-a-key))
* Confirm you haven't exceeded your usage limits
