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

# Implementación Off-Ramp

> Convierte criptomoneda a moneda fiat

## Visión General

Un off-ramp convierte criptomoneda (USDC, USDT) en moneda fiat (COP, MXN, USD). Los usuarios envían cripto y reciben moneda local en su cuenta bancaria.

## Flujo Completo de Off-Ramp

<Steps>
  <Step title="Crear Usuario y Cuenta Bancaria">
    Configura perfil de usuario y cuenta bancaria de destino
  </Step>

  <Step title="Obtener Cotización">
    Solicita cotización de precio para conversión cripto→fiat
  </Step>

  <Step title="Crear Ramp">
    Ejecuta ramp con ID de cotización
  </Step>

  <Step title="Usuario Envía Cripto">
    Usuario transfiere USDC/USDT a dirección proporcionada
  </Step>

  <Step title="Conversión">
    KillB convierte cripto a fiat
  </Step>

  <Step title="Fiat Entregado">
    Moneda local enviada al banco del usuario
  </Step>
</Steps>

## Ejemplo de Implementación

```javascript theme={null}
const executeOffRamp = async (userId, bankAccountId, amount) => {
  try {
    // 1. Obtener cotización
    const quote = await fetch('/api/v2/quotations', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        fromCurrency: 'USDC',
        toCurrency: 'COP',
        amount: amount,
        amountIsToCurrency: false,
        cashInMethod: 'POLYGON',
        cashOutMethod: 'PSE'
      })
    }).then(r => r.json());
    
    console.log(`Recibirás: ${quote.toAmount} COP`);
    
    // 2. Crear ramp
    const ramp = await fetch('/api/v2/ramps', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        quotationId: quote.id,
        userId: userId,
        accountId: bankAccountId,
        externalId: `offramp-${Date.now()}`
      })
    }).then(r => r.json());
    
    // 3. Mostrar dirección de depósito al usuario
    const depositAddress = ramp.paymentInfo[0].address;
    const depositNetwork = ramp.paymentInfo[0].network;
    
    return {
      rampId: ramp.id,
      depositAddress: depositAddress,
      depositNetwork: depositNetwork,
      amountToSend: quote.fromAmount,
      willReceive: quote.toAmount
    };
    
  } catch (error) {
    console.error('Off-ramp falló:', error);
    throw error;
  }
};
```

## Instrucciones de Reembolso

Proporciona dirección de respaldo en caso de problemas:

```json theme={null}
{
  "quotationId": "quote-id",
  "userId": "user-id",
  "accountId": "bank-id",
  "refundInstructions": {
    "network": "POLYGON",
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "asset": "USDC"
  }
}
```

<Info>
  Si el off-ramp falla, el cripto será reembolsado a esta dirección.
</Info>

## Próximos Pasos

<CardGroup cols={2}>
  <Card title="Guía On-Ramp" icon="arrow-up" href="/es/guides/ramps/on-ramp">
    Implementa conversión fiat a cripto
  </Card>

  <Card title="Seguimiento de Estado" icon="chart-line" href="/es/guides/ramps/ramp-status">
    Monitorea el progreso del ramp
  </Card>
</CardGroup>
