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

# Implementação Off-Ramp

> Converta criptomoeda para moeda fiat

## Visão Geral

Um off-ramp converte criptomoeda (USDC, USDT) em moeda fiat (COP, MXN, USD). Os usuários enviam cripto e recebem moeda local em sua conta bancária.

## Fluxo Completo de Off-Ramp

<Steps>
  <Step title="Criar Usuário e Conta Bancária">
    Configure perfil do usuário e conta bancária de destino
  </Step>

  <Step title="Obter Cotação">
    Solicite cotação de preço para conversão cripto→fiat
  </Step>

  <Step title="Criar Ramp">
    Execute ramp com ID da cotação
  </Step>

  <Step title="Usuário Envia Cripto">
    Usuário transfere USDC/USDT para endereço fornecido
  </Step>

  <Step title="Conversão">
    KillB converte cripto para fiat
  </Step>

  <Step title="Fiat Entregue">
    Moeda local enviada para banco do usuário
  </Step>
</Steps>

## Exemplo de Implementação

```javascript theme={null}
const executeOffRamp = async (userId, bankAccountId, amount) => {
  try {
    // 1. Obter cotação
    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(`Você receberá: ${quote.toAmount} COP`);
    
    // 2. Criar 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 endereço de depósito ao usuário
    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 falhou:', error);
    throw error;
  }
};
```

## Instruções de Reembolso

Forneça endereço de fallback em caso de problemas:

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

<Info>
  Se o off-ramp falhar, o cripto será reembolsado para este endereço.
</Info>

## Próximos Passos

<CardGroup cols={2}>
  <Card title="Guia On-Ramp" icon="arrow-up" href="/pt/guides/ramps/on-ramp">
    Implemente conversão fiat para cripto
  </Card>

  <Card title="Rastreamento de Status" icon="chart-line" href="/pt/guides/ramps/ramp-status">
    Monitore o progresso do ramp
  </Card>
</CardGroup>
