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

# On-ramp y off-ramp

> Convierte moneda local a cripto y viceversa con payins, exchange y payouts estándar.

Billeteras, exchanges y redes de stablecoins necesitan dos movimientos:

* **On-ramp:** el usuario deposita moneda local y recibe cripto.
* **Off-ramp:** el usuario vende cripto y recibe moneda local en su banco.

La API cubre ambos escenarios con payins, exchange y payouts combinados.

## Flujo on-ramp

```mermaid theme={null}
sequenceDiagram
  participant User as Usuario
  participant App as Tu app
  participant Vita as Vita API

  User->>App: Quiere comprar cripto
  App->>Vita: POST /payment_orders
  User->>Vita: Paga en moneda local
  Vita-->>App: Webhook payment_order.paid
  App->>Vita: GET /crypto_prices
  Vita-->>App: Tasa + valid_until
  App->>Vita: POST /transactions (exchange)
  Vita-->>App: Saldo acreditado en cripto
```

## Flujo off-ramp

```mermaid theme={null}
sequenceDiagram
  participant User as Usuario
  participant App as Tu app
  participant Vita as Vita API
  participant Bank as Banco del usuario

  User->>App: Quiere retirar fiat
  App->>Vita: GET /crypto_prices
  App->>Vita: POST /transactions (exchange — cripto → fiat)
  App->>Vita: GET /withdrawal_rules (país del usuario)
  App->>Vita: POST /transactions (withdrawal)
  Vita-->>Bank: Acreditación local
```

## Paso a paso

**1. On-ramp: cobra en moneda local**

Crea la orden con `POST /payment_orders` o Direct Payment. El monto se acredita en la wallet de la moneda destino.

**2. Convierte**

`GET /crypto_prices` y luego `POST /transactions` con `transactions_type: "exchange"` dentro de la ventana `valid_until`. Convierte entre fiat y cripto, o entre criptos.

> [!WARNING]
>
> **Fiat → Fiat no está soportado**; eso se resuelve con un payout bancario. Al menos una de `currency_sent` / `currency_received` debe ser cripto.

**3. Off-ramp: paga a la cuenta del usuario**

Con la cripto ya convertida a saldo fiat, crea el payout con `POST /transactions` y `transactions_type: "withdrawal"` hacia su banco local.

**4. Retiro cripto a wallet externa**

Si el usuario prefiere retirar cripto: `GET /networks` para elegir la red, respeta `withdraw_min` y `withdraw_max`, suma `withdraw_fee` al `amount` y crea `transactions_type: "crypto_payout"`.

## Buenas prácticas

> [!TIP]
>
> **Pide el precio justo antes de cada conversión**: la tasa vence en `valid_until` (típicamente \~2 minutos).

> [!TIP]
>
> **Muestra al usuario el monto final antes de confirmar.** Las sorpresas de FX destruyen la confianza.

> [!TIP]
>
> Configura webhooks para enterarte del estado final sin tener que hacer polling.

## Endpoints clave

> [card] [Precios cripto](https://docs.vitawallet.io/api-reference/exchange/overview.md)
>
> `GET /crypto_prices`

> [card] [Crear exchange](https://docs.vitawallet.io/api-reference/exchange/overview.md)
>
> `POST /transactions` con `transactions_type: "exchange"`

> [card] [Crear payout bancario](https://docs.vitawallet.io/api-reference/bank-payouts/create-payout.md)
>
> `POST /transactions` con `transactions_type: "withdrawal"`

> [card] [Crear payout cripto](https://docs.vitawallet.io/api-reference/external-crypto-payouts/create-crypto-payout.md)
>
> `POST /transactions` con `transactions_type: "crypto_payout"`


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