> ## Documentation Index
> Fetch the complete documentation index at: https://docs.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.
</Note>

On the web, you link users to the [hosted connect page](/docs/connections/overview) 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`. |

## 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. |
| `nonce` | The exact nonce you passed in, present only if you sent one. |

## 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"
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](/docs/connections/overview#securing-the-redirect).
</Warning>


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