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

# Rheon SDK

> The Rheon widget - one embeddable flow for stablecoin deposits and bank transfers, in your product or standalone.

The SDK is the Rheon flow your users see, dropped into your product. One embed
covers both ways money comes in: a stablecoin from a wallet on any supported chain,
or fiat from a bank. You choose which paths are offered and where the money lands.

The flow runs at [widget.rheon.io](https://widget.rheon.io). Embedding it into your
own page - signed session URLs, theming, lifecycle events - is described on this
page and on [Integration options](/integration/options).

## Which products it covers

| Product | In the SDK |
| - | - |
| [Crypto deposits](/products/crypto-deposits) | The user connects a wallet, picks a stablecoin on any supported network, and it is routed and settled to your destination |
| [On/off ramps with cards](/products/cards) | Priced, started, and followed to settlement inside the same flow |
| [Bank transfers](/products/ramps/on-ramp) | The user verifies once, gets bank details, and pays from their own bank; the transfer converts and settles on-chain |
| [Virtual accounts](/products/virtual-accounts) | Permanent details issued to the user, reused for every later payment |
| [Apple Pay](/products/apple-pay) | Offered on the hosted card page inside the flow. Native Apple Pay is an API-side thing, not an SDK one |

Card issuing is not part of the SDK - see [Card issuing](/products/card-issuing).

**Fixed amounts work in either direction** across these: pin what the payer spends,
or pin what has to land and let the payer's side flex to cover it.

## Three ways to run it

| Mode | What it is |
| - | - |
| **Hosted iframe** | The full flow inside your page. Fastest to ship. |
| **SDK component** | The flow as a component with lifecycle events and theming. |
| **Standalone link** | You send the user to a hosted Rheon page and they return after. Useful where you cannot embed. |

## Embedding

```html theme={null}
<iframe
  src="https://widget.rheon.io/"
  allow="camera; microphone; geolocation; payment"
  style="height:100%;width:100%;border:none">
</iframe>
```

Two things about that `allow` list, both easy to miss:

* The bank path runs identity verification inside the frame. It needs the **camera**,
  and by default it needs **geolocation** for address verification. If the host page
  does not pass those through, verification fails for most users - see
  [Rheon ID](/concepts/customers-and-identity).
* The host page has to be served over HTTPS, or the browser refuses the permissions
  regardless of the `allow` attribute.

In production the URL is signed by your backend - single-use and short-lived - so the
amount, destination, and branding cannot be changed from the browser. The flow at
widget.rheon.io takes plain parameters.

## Configuring it

Filtering (which chains and tokens a user sees), pre-filling (wallet, amount,
destination, email), and locking fields so a user cannot change what you fixed are
covered on [Integration options](/integration/options).

## Theming

White-label theming so the flow matches your brand: primary color, dark mode, logo,
and corner radius, applied through the widget configuration so the deposit flow
looks native inside your product.

## Lifecycle events

Embedded through the SDK, or by `postMessage` from the iframe, the flow emits
events so your page reacts without polling:

* `DepositStarted` - the user confirmed, routing began
* `Routing` - settling cross-chain
* `SourceConfirmed` - source payment confirmed
* `Completed` - the destination asset landed
* `Failed` - the deposit failed

<Warning>
  **Never credit a user on a browser event.** Lifecycle events are for in-page UX only

  * anything your backend must trust, such as crediting an account or releasing an
    order, goes through the API or [webhooks](/webhooks).
</Warning>

## Standalone

The same flow runs as a hosted page with no host product around it. Use it for a
payment link, a support-assisted deposit, or a market where you have no app surface
yet.
