> ## Documentation Index
> Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Hosted wallet connector on the web

> Link to the hosted connect page and read the connected wallet address off your redirect URL. Connect-only on web.

> [!NOTE]
>
> This is an enterprise-only feature. Please [contact us](https://www.dynamic.xyz/book-a-call) to enable.

On the web, you link users to the [hosted connect page](https://www.dynamic.xyz/docs/connections/overview.md) and read the result off the redirect URL you control. There is no SDK to install.

The web redirect path is connect-only: it returns the wallet's public address. It does not request a signature or transaction, so it proves the user can present an address, not that they control it. For proof of ownership, add a sign-in step.

## 1. Link to the connect page

Open it in the user's browser (or a web view) with a `redirect_uri` you control, and an optional `nonce`.

```ts link to open theme={"system"}
"https://connect.dynamicauth.com/" +
  "?redirect_uri=https://your-app.com/wallet/callback" +
  "&nonce=a1b2c3d4e5" +
  "&environmentId=b1e3aca9-0646-411a-b4ab-c31ce49935b3"
```

| Parameter | Required | Description |
| - | - | - |
| `redirect_uri` | Yes | Where to send the user back after they connect. An `http(s)` URL you control, or your app's custom scheme (e.g. `myapp://wallet-callback`) for native integrations. Alias: `redirect_url`. Schemes that can address another app or component are refused (`intent:`, `android-app:`, `market:`, `content:`, `javascript:`, `data:`, and similar). A refused value falls back to `VITE_REDIRECT_BASE_URL` and logs a warning. |
| `nonce` | No | An opaque value echoed back unchanged so you can correlate the response to the request. If you don't send one, none is returned. |
| `environmentId` | No | Dynamic environment ID to use instead of the page's build-time default. Must be a UUID. Invalid values are ignored with a console warning, and the page falls back to its build-time default. |
| `theme` | No | UI theme: `light` or `dark`. Defaults to `light` when absent or invalid. |
| `locale` | No | UI locale: `en_US`, `es_LA`, `es_CO`, or `tl_PH`. Defaults to `en_US`. |
| `networks` | No | Comma-separated networks the user may connect on, as [CAIP-2](https://www.dynamic.xyz/docs/connections/caip-2.md) ids (e.g. `networks=eip155:137,solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp`). Only wallets that can connect on those chains are offered, and manual entry is limited to them. Console network keys (e.g. `polygon`) are still accepted but deprecated. Entries resolve against the environment's enabled networks, or a built-in list when the environment does not enable them; unrecognized entries are ignored, and with none recognized there is no restriction. A convenience filter, not enforcement. |

## 2. Receive the result

After a successful connection, the redirect sends the browser to your `redirect_uri` with the result appended as query parameters.

```ts redirect we send theme={"system"}
"https://your-app.com/wallet/callback" +
  "?address=0x1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b" +
  "&chain=evm" +
  "&walletName=MetaMask" +
  "&walletImage=https://.../metamask.svg" +
  "&nonce=a1b2c3d4e5"
```

| Parameter | Description |
| - | - |
| `address` | The connected wallet's public address. |
| `chain` | The chain family: `evm`, `solana`, or `bitcoin`. |
| `walletName` | Display name of the wallet (e.g. `MetaMask`). Empty for a manually-entered address. |
| `walletImage` | Icon URL for the wallet. Empty for a manually-entered address. |
| `networkId` | The [CAIP-2](https://www.dynamic.xyz/docs/connections/caip-2.md) id of the network the wallet is on (e.g. `eip155:137`), or the network picked for a manually entered address. EVM wallets report one. Solana wallets do only through WalletConnect and MetaMask, and Bitcoin wallets never do. Omitted when the wallet reports none (embedded wallets and Phantom's redirect never send one) or when the network has no CAIP-2 id. |
| `nonce` | The exact nonce you passed in, present only if you sent one. |

`networkId` is the CAIP-2 id of the network the wallet is on. It is not `network`, the Phantom Solana session cluster. See [Network fields](https://www.dynamic.xyz/docs/connections/overview.md#network-fields).

## 3. Read it on your callback

On your `redirect_uri`, read the parameters off the URL.

```ts callback.ts theme={"system"}
const params = new URLSearchParams(location.search);

const address = params.get("address"); // "0x1a2b…9a0b"
const chain = params.get("chain");     // "evm" | "solana" | "bitcoin"
const networkId = params.get("networkId"); // "eip155:137", or null
const nonce = params.get("nonce");     // echoed back, or null

// Verify `nonce` matches the one you issued, then continue.
```

> [!WARNING]
>
> The web redirect path proves the user can present an address, not that they control it. For proof of ownership, add a sign-in step. Because `redirect_uri` is caller-supplied, allow-list the hosts you accept. See [Securing the redirect](https://www.dynamic.xyz/docs/connections/overview.md#securing-the-redirect).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.