Offramp - Vender Cripto

Convertir criptomoneda a fiat

Offramp - Vender Criptomoneda

Convierte criptomoneda a moneda fiat en tu cuenta virtual.

¿Qué es OFFRAMP?

OFFRAMP te permite vender criptomoneda y recibir fondos fiat en tu cuenta virtual.

Casos de uso:

  • Convertir tenencias cripto a fiat
  • Realizar ganancias cripto
  • Preparar fiat para operaciones
  • Aceptar pagos cripto y convertir a fiat

Ejemplo Rápido

Node.js
1// Vender 10 USDC por COP
2
3// 1. Obtener cotización
4const quote = await axios.post(
5 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/quotes`,
6 {
7 type: 'OFFRAMP',
8 originCurrencySymbol: 'USDC',
9 destinationCurrencySymbol: 'COP',
10 amountIn: 10, // 10 USDC
11 network: 'ETHEREUM' // Requerido para cotizaciones cripto
12 },
13 { headers: { 'Authorization': `Bearer ${token}` } }
14);
15
16console.log('Recibirás:', quote.data.amountOut, 'COP'); // ej., 39,500 COP
17console.log('Cotización válida por:', quote.data.validFor || '10-15', 'segundos');
18
19// 2. Crear deal (¡no orden!)
20const deal = await axios.post(
21 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/deals`,
22 {
23 type: 'OFFRAMP',
24 destinationAccountId: 'va_cop_12345', // Tu cuenta virtual COP
25 quoteId: quote.data.id
26 },
27 { headers: { 'Authorization': `Bearer ${token}` } }
28);
29
30console.log('Deal OFFRAMP creado:', deal.id);
31console.log('El deal debe pagarse completamente');
32// Los fondos se acreditarán a la cuenta virtual COP después de confirmación

Integración Paso a Paso

Paso 1: Obtener Cotización

Obtener Cotización
1const quote = await axios.post(
2 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/quotes`,
3 {
4 type: 'OFFRAMP',
5 originCurrencySymbol: 'USDC',
6 destinationCurrencySymbol: 'COP',
7 amountIn: 10,
8 network: 'ETHEREUM' // Requerido para cotizaciones cripto
9 },
10 { headers: { 'Authorization': `Bearer ${token}` } }
11);
12
13// Mostrar al usuario
14console.log('Vendiendo:', quote.data.amountIn, 'USDC');
15console.log('Recibirás:', quote.data.amountOut, 'COP');
16console.log('Tasa de cambio:', quote.data.exchangeRate);
17console.log('Comisión:', quote.data.koyweFee, 'COP');
18console.log('Cotización válida por:', quote.data.validFor || '10-15', 'segundos');

Paso 2: Crear Deal OFFRAMP

Pago Completo Requerido: A diferencia de ONRAMP, los deals OFFRAMP deben financiarse completamente. No se soportan pagos parciales.

Crear Deal
1const deal = await axios.post(
2 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/deals`,
3 {
4 type: 'OFFRAMP',
5 destinationAccountId: 'va_cop_12345', // Solo necesitas cuenta de destino
6 quoteId: quote.data.id,
7 externalId: `offramp-${Date.now()}`
8 },
9 { headers: { 'Authorization': `Bearer ${token}` } }
10);
11
12console.log('Deal creado:', deal.data.id);
13console.log('Estado:', deal.data.status); // "PENDING"
14console.log('Dirección de depósito:', deal.data.depositAddress); // Dónde enviar cripto

Paso 3: Enviar Criptomoneda

Después de crear la orden, envía la criptomoneda a la dirección de depósito proporcionada:

Obtener Info de Depósito
1const orderDetails = await axios.get(
2 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/orders/${order.data.id}`,
3 { headers: { 'Authorization': `Bearer ${token}` } }
4);
5
6console.log('Enviar cripto a:', orderDetails.data.depositAddress);
7console.log('Monto a enviar:', orderDetails.data.amountIn, orderDetails.data.originCurrencySymbol);
8console.log('Red:', orderDetails.data.network);

Paso 4: Esperar Confirmación

Monitorear vía Webhooks
1app.post('/webhooks/koywe', (req, res) => {
2 const event = JSON.parse(req.body);
3
4 if (event.type === 'order.paid' && event.data.type === 'OFFRAMP') {
5 console.log('¡Cripto recibida y confirmada!');
6 }
7
8 if (event.type === 'order.completed' && event.data.type === 'OFFRAMP') {
9 console.log('¡Fiat acreditado a cuenta virtual!');
10 console.log('Monto:', event.data.amountOut, event.data.destinationCurrencySymbol);
11 }
12
13 res.status(200).send('OK');
14});

Flujo de Orden


Ejemplo Completo

Vender USDC
1async function sellUSDC(amount) {
2 try {
3 const token = await authenticate();
4
5 // 1. Obtener cotización
6 const quote = await axios.post(
7 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/quotes`,
8 {
9 type: 'OFFRAMP',
10 originCurrencySymbol: 'USDC',
11 destinationCurrencySymbol: 'COP',
12 amountIn: amount,
13 network: 'ETHEREUM' // Requerido para cotizaciones cripto
14 },
15 { headers: { 'Authorization': `Bearer ${token}` } }
16 );
17
18 console.log(`Vendiendo ${amount} USDC por ${quote.data.amountOut} COP`);
19 console.log(`Tasa: 1 USDC = ${quote.data.exchangeRate} COP`);
20 console.log('Cotización válida por:', quote.data.validFor || '10-15', 'segundos');
21
22 // 2. Crear deal (¡no orden!)
23 const deal = await axios.post(
24 `https://api-sandbox.koywe.com/api/v1/organizations/${orgId}/merchants/${merchantId}/deals`,
25 {
26 type: 'OFFRAMP',
27 destinationAccountId: 'va_cop_12345', // Solo necesitas cuenta de destino
28 quoteId: quote.data.id
29 },
30 { headers: { 'Authorization': `Bearer ${token}` } }
31 );
32
33 console.log('✓ Deal OFFRAMP creado:', deal.data.id);
34 console.log('📍 Enviar USDC a:', deal.data.depositAddress);
35 console.log('💰 Monto:', deal.data.amountIn, 'USDC');
36 console.log('🌐 Red:', deal.data.network || 'Ethereum');
37 console.log('⚠️ Debe pagarse completamente - sin pagos parciales');
38
39 return {
40 dealId: deal.data.id,
41 depositAddress: deal.data.depositAddress,
42 amount: deal.data.amountIn,
43 currency: deal.data.originCurrencySymbol
44 };
45
46 } catch (error) {
47 console.error('Error:', error.response?.data || error.message);
48 throw error;
49 }
50}
51
52// Uso
53const offramp = await sellUSDC(10);
54console.log('Envía tu USDC a la dirección de depósito arriba');

Notas Importantes

Confirmaciones Blockchain: Las órdenes OFFRAMP requieren confirmaciones blockchain. El tiempo de liquidación varía por red:

  • Ethereum: 12-15 minutos (12 confirmaciones)
  • Polygon: 2-5 minutos (128 confirmaciones)
  • BSC: 3-5 minutos (15 confirmaciones)
  • Bitcoin: 30-60 minutos (3 confirmaciones)

Dirección de Uso Único: Cada orden OFFRAMP genera una dirección de depósito única. No reutilices direcciones de órdenes anteriores.


Próximos Pasos