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

# Widget integration

> Ripio's embeddable crypto widget: what your users can do inside it, what you configure, and what your backend still owns.

The widget is a native web component your users' cripto operations happen inside of — buying, selling, and tracking a portfolio — while your backend follows along through the webhooks you already receive.

You mint a session token from your server, mount the component with it, and Ripio handles the trading flow: quoting, execution, and settlement. There is no SDK to install beyond the component's own script tag.

### What your users can do inside

<CardGroup cols={2}>
  <Card title="See their portfolio" icon="wallet" href="/crypto-as-a-service/widget/flows/home">
    Total balance, holdings, recent activity and the market — all in one screen.
  </Card>

  <Card title="Buy crypto" icon="arrow-down" href="/crypto-as-a-service/widget/flows/buy-and-sell">
    A quote with a guaranteed rate for a short window, then a one-tap confirmation.
  </Card>

  <Card title="Sell crypto" icon="arrow-up" href="/crypto-as-a-service/widget/flows/buy-and-sell">
    The same quote-then-confirm flow, in the other direction.
  </Card>

  <Card title="Read it in their language" icon="language" href="/crypto-as-a-service/widget/get-started/embedding#language">
    Spanish, Portuguese or English, set by you at embed time.
  </Card>
</CardGroup>

### What depends on your configuration

Not every operation is on for every account. The session you mint reflects what your account has enabled:

| Operation                                         | Availability                                                       |
| ------------------------------------------------- | ------------------------------------------------------------------ |
| `buy`, `sell`                                     | Always enabled — there is no account-level flag for either.        |
| `deposit`, `withdrawal`, `swap`, `yields`, `loan` | Enabled per account. When one is off, the widget doesn't offer it. |

You can further narrow a single session with `requested_operations` on [`POST /auth`](/crypto-as-a-service/widget/get-started/authentication) — the effective set is always the **intersection** of what your account has enabled and what you requested, never the union. Asking for an operation your account doesn't have simply has no effect; it never grants something you haven't contracted.

<Note>
  Ask your Ripio contact to change what's enabled for your account.
</Note>

### What stays on your side

The widget owns the trading UI, not your integration. You are still responsible for:

* **Minting a session token** per user, per visit, from your server. See [Authentication](/crypto-as-a-service/widget/get-started/authentication).
* **Mapping `external_ref` to your own user.** It's the identifier every webhook comes back with.
* **Receiving webhooks.** Approving a purchase before it executes, and finding out how each operation resolved. See [Webhooks](/crypto-as-a-service/widget/webhooks).

### Get started

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/crypto-as-a-service/widget/get-started/authentication">
    Request credentials and mint a session token.
  </Card>

  <Card title="Embedding the widget" icon="code" href="/crypto-as-a-service/widget/get-started/embedding">
    The script tag, the element's attributes, and the events it emits.
  </Card>
</CardGroup>
