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

# Deposit addresses and QR codes

> Accept crypto transfers without connecting the sending wallet to your app.

The Transfer crypto flow shows a deposit address and QR code that the user can pay from any wallet, app, or exchange. It needs no wallet connection in your widget.

Complete the shared [widget quickstart](/deposits/overview/widget/quickstart) and [backend setup](/deposits/overview/widget/backend-setup) first.

## Enable transfer funding

`enableQrTransfer` defaults to `true`. Supply neither `walletClient` nor `reownAppId` to open without a wallet connection:

```tsx theme={null}
import { DepositModal } from "@rhinestone/deposit-modal";
import "@rhinestone/deposit-modal/styles.css";

<DepositModal
  isOpen={isOpen}
  onClose={() => setIsOpen(false)}
  targetChain={8453}
  targetToken="0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
  recipient="0xYOUR_RECIPIENT_ADDRESS"
  backendUrl={process.env.NEXT_PUBLIC_DEPOSIT_PROXY_URL}
  enableQrTransfer
  onLifecycle={(event) => event.type === "complete" && console.log(event)}
/>
```

The widget opens into the enabled funding methods. If Transfer crypto is the only enabled method, there is no chooser and it opens directly into the transfer flow.

```tsx theme={null}
<DepositModal
  // ...required props
  enableWallet={false}
  enableQrTransfer
/>
```

The deposit account is service-managed and derived from `recipient`, `targetChain`, and `targetToken`. It does not depend on the wallet or exchange that sends the funds. Changing the target changes the deposit address.

The source picker is governed by your project's deposit whitelist. Configure accepted chains and tokens in the project setup rather than filtering the widget; see [widget configuration](/deposits/overview/widget/widget-configuration#restrict-accepted-sources).

HyperCore can also be a transfer source. The widget uses the account's EVM address as the deposit address, and a native Hyperliquid L1 spot transfer lands there.

## Manual exchange withdrawals

For an exchange not handled by Connect exchange, the user can withdraw manually to the address shown here. Keep that instruction in this transfer flow: the widget is tracking an incoming crypto transfer, not a provider order.

## Track the deposit

QR and manual transfers have no amount input and do not emit a wallet `"connected"` event. Use [callbacks and error handling](/deposits/overview/widget/callbacks-and-error-handling) while the widget is open and [webhooks](/deposits/headless/processing-and-tracking/webhooks) for backend completion.
