> ## 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.

# Overview

> Accept deposits from any chain into your app with Rhinestone's cross-chain deposit infrastructure.

Rhinestone Deposits is a cross-chain deposit infrastructure that lets you accept tokens from users on any supported chain and deliver them to a target chain and token automatically. You don't need to build bridging logic, manage gas across chains, or handle token swaps — the service detects deposits, bridges them via [Warp](/home/introduction/rhinestone-intents), and notifies your app when funds arrive.

It's built for teams that need reliable deposit rails: neobanks, modern dapps, DeFi protocols, or any app that onboards users from multiple chains.

It supports a wide range of EVM chains and Solana — see [supported chains and tokens](#supported-chains-and-tokens) below.

## Two ways to integrate

<Tabs>
  <Tab title="Deposit API">
    A headless backend service for programmatic deposit handling. You register accounts, configure webhooks, and process deposits server-side. Full control over the deposit flow.

    <Frame caption="Example of an integration into a mobile app">
      <video src="https://mintcdn.com/rhinestone/HlXVyGMPtnAkQz8V/images/deposits_api_integration.mp4?fit=max&auto=format&n=HlXVyGMPtnAkQz8V&q=85&s=a72b94759fa6d87e1a00fa91cbef45b9" muted loop controls className="rounded-2xl" style={{ maxHeight: "500px", margin: "0 auto" }} data-path="images/deposits_api_integration.mp4" />
    </Frame>

    [Get started with the Deposit API →](/deposits/api/quickstart)
  </Tab>

  <Tab title="Deposit Widget">
    A drop-in React modal that handles wallet connection, chain selection, and deposit execution out of the box. Minimal frontend effort for a polished deposit experience. It can also [import balances from other apps](/deposits/widget/deposit-modal#import-from-other-apps) (e.g. Polymarket) so users fund a deposit without transferring first.

    <Frame caption="Widget UI">
      <video src="https://mintcdn.com/rhinestone/HlXVyGMPtnAkQz8V/images/deposits_widget_ui.mp4?fit=max&auto=format&n=HlXVyGMPtnAkQz8V&q=85&s=be550286d4317787e2a46ab51e8197d9" muted loop controls className="rounded-2xl" style={{ maxHeight: "500px", margin: "0 auto" }} data-path="images/deposits_widget_ui.mp4" />
    </Frame>

    [Get started with the Deposit Widget →](/deposits/widget/quickstart)
  </Tab>
</Tabs>

## How it works

```mermaid actions={false} theme={null}
sequenceDiagram
    participant App as Your app
    participant DS as Deposit Service
    participant Warp as Warp (Orchestrator)
    participant Dest as Target chain

    App->>DS: Register account with target chain/token
    Note over App: User sends tokens on any source chain
    DS->>DS: Detect deposit via webhook listener
    DS->>Warp: Create bridging intent
    Warp->>Dest: Route and settle funds
    DS->>App: Webhook notification (bridge-complete)
```

1. You register a smart account with a target chain and token
2. The user transfers tokens to their smart account on any supported source chain
3. The deposit service detects the transfer, creates a bridging intent via Warp, and routes the funds to the target chain
4. Your app receives a webhook notification when the deposit completes

The user makes a single transfer. Everything else — bridging, swaps, gas — is handled automatically.

## Why Deposits

Deposits are self-custodial by design — funds are held in the user's smart account at every step, and Rhinestone never takes custody. Stablecoin swaps settle at parity and fees can be fully sponsored. The result is a deposit rail that feels like a native single-chain transfer, without the trust trade-offs of a centralized bridge.

Under the hood, Rhinestone aggregates multiple bridging providers, solvers, and quoting services, routing each deposit through the best available path. If one provider is degraded or a route is unavailable, the service falls back automatically — giving you a single integration with the reliability of several.

## Key features

* **Automatic bridging** — deposits are detected and bridged to the target chain without any user interaction beyond the initial transfer
* **Multi-chain support** — accept deposits from Ethereum, Base, Arbitrum, Optimism, Polygon, and Solana, with more chains added regularly
* **1:1 stablecoin swaps** — USDC and USDT are swapped at parity
* **Swap routing** — route between tokens as part of the deposit
* **Fee sponsorship** — cover gas, bridging, and swap fees on a per-chain basis

## User experience

From the user's perspective, depositing is a simple token transfer — send tokens to an address on any supported chain. There's no bridging UI, no gas token management, and no chain switching.

With the **widget**, the experience is even more streamlined: the user connects their wallet, selects a chain and token, and confirms the deposit — all within a single modal. The widget also supports withdrawals.

With the **API**, you control the UX entirely. The user interacts with your app however you design it, and the deposit service handles everything behind the scenes.

## Supported chains and tokens

Rhinestone Deposits supports a wide range of EVM chains plus Solana. Each chain is enabled as a **source** (the user can send funds to it), a **destination** (funds can settle on it), or both.

* **Source** — users can transfer tokens on this chain and have them bridged to the target.
* **Destination** — accounts on this chain can be registered as the target where funds land.
* **Tokens** — `All` means any token routable through Warp; otherwise, only the listed tokens are accepted.

### Mainnet

| Name            | Source | Destination | Tokens                |
| :-------------- | :----: | :---------: | :-------------------- |
| Ethereum        |    ✓   |      ✓      | All                   |
| OP Mainnet      |    ✓   |      ✓      | All                   |
| BNB Smart Chain |    ✓   |      ✓      | All                   |
| Gnosis          |    ✓   |      ✓      | All                   |
| Polygon         |    ✓   |      ✓      | All                   |
| Sonic           |    ✓   |      ✓      | All                   |
| HyperEVM        |    ✓   |      ✓      | All                   |
| HyperCore       |    —   |      ✓      | USDC                  |
| Soneium         |    ✓   |      ✓      | ETH, USDC, USDT, WETH |
| Base            |    ✓   |      ✓      | All                   |
| Plasma          |    ✓   |      ✓      | All                   |
| Arbitrum One    |    ✓   |      ✓      | All                   |
| Unichain        |    ✓   |      ✓      | All                   |
| Monad           |    ✓   |      ✓      | All                   |
| Katana          |    —   |      ✓      | ETH, USDC, USDT, WETH |
| Solana          |    ✓   |      ✓      | USDC, USDT, SOL       |

### Testnet

| Name             | Source | Destination | Tokens                   |
| :--------------- | :----: | :---------: | :----------------------- |
| Sepolia          |    ✓   |      ✓      | ETH, USDC, WETH          |
| OP Sepolia       |    ✓   |      ✓      | ETH, USDC, WETH          |
| Base Sepolia     |    ✓   |      ✓      | ETH, USDC, WETH, MockUSD |
| Arbitrum Sepolia |    ✓   |      ✓      | ETH, USDC, WETH          |
| Plasma Testnet   |    —   |      ✓      | USDT0, USDC              |

<Info>
  This data is also available programmatically via the [List supported chains
  and tokens](/api-reference/deposit-service/info/list-supported-chains-and-tokens) endpoint.
</Info>

## Which should you use?

|                    | Deposit API                          | Deposit Widget                          |
| ------------------ | ------------------------------------ | --------------------------------------- |
| Integration effort | Moderate — backend + webhook handler | Low — drop in a React component         |
| UI control         | Full — build your own                | Themed modal with customization options |
| Deposit triggers   | Any transfer to the smart account    | User-initiated via the modal            |
| Withdrawal support | Manual                               | Built-in withdraw modal                 |
