Visión General
Explora nuestra colección de aplicaciones de demostración y ejemplos de código para acelerar tu integración con la API de KillB.
Aplicaciones de Ejemplo
Demo On-Ramp
Flujo completo de on-ramp de fiat a cripto
Demo Off-Ramp
Convierte cripto de vuelta a moneda fiat local
Panel de Ahorros
Interfaz de cuenta de ahorros custodial
Escuchador de Webhook
Maneja notificaciones de eventos en tiempo real
Demo On-Ramp
Una implementación completa del flujo de on-ramp (COP/MXN → USDC).
Características
- Creación de usuario y KYC
- Visualización de cotización en tiempo real
- Integración de pago PSE/SPEI
- Seguimiento del estado de la transacción
- Manejo de webhook
Ejemplo de Código
import { useState } from 'react';
function OnRampWidget() {
const [quote, setQuote] = useState(null);
const [amount, setAmount] = useState('');
const getQuote = async () => {
const response = await fetch('/api/v2/quotations', {
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
fromCurrency: 'COP',
toCurrency: 'USDC',
amount: parseFloat(amount),
amountIsToCurrency: false,
cashInMethod: 'PSE',
cashOutMethod: 'POLYGON'
})
});
const data = await response.json();
setQuote(data);
};
const createRamp = async () => {
const response = await fetch('/api/v2/ramps', {
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
quotationId: quote.id,
userId: currentUser.id,
accountId: walletAccount.id
})
});
const ramp = await response.json();
// Redirigir a URL de pago PSE
window.location.href = ramp.paymentInfo[0].url;
};
return (
<div>
<input
type="number"
value={amount}
onChange={(e) => setAmount(e.target.value)}
placeholder="Monto en COP"
/>
<button onClick={getQuote}>Obtener Cotización</button>
{quote && (
<div>
<p>Recibirás: {quote.toAmount} USDC</p>
<p>Tasa: {quote.rate}</p>
<button onClick={createRamp}>Continuar al Pago</button>
</div>
)}
</div>
);
}
Demo Off-Ramp
Convierte criptomoneda de vuelta a moneda fiat local.
Características
- Verificación de saldo de billetera
- Cálculo de cotización
- Validación de cuenta bancaria
- Monitoreo de transacción
- Generación de recibo
Ejemplo de Código
export default function OffRampPage() {
const createOffRamp = async (formData) => {
// Paso 1: Obtener cotización
const quoteRes = await fetch('/api/v2/quotations', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
fromCurrency: 'USDC',
toCurrency: 'COP',
amount: formData.amount,
amountIsToCurrency: false,
cashInMethod: 'POLYGON',
cashOutMethod: 'PSE'
})
});
const quote = await quoteRes.json();
// Paso 2: Crear ramp
const rampRes = await fetch('/api/v2/ramps', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
quotationId: quote.id,
userId: formData.userId,
accountId: formData.bankAccountId
})
});
const ramp = await rampRes.json();
// Paso 3: Mostrar instrucciones de pago
return ramp;
};
return (
<form onSubmit={(e) => {
e.preventDefault();
createOffRamp(formData);
}}>
{/* Campos del formulario */}
</form>
);
}
Demo Ahorros
Implementa una interfaz de cuenta de ahorros custodial.
Ejemplo de Código
// Crear cuenta de ahorros
const createSavingsAccount = async (userId) => {
const response = await fetch('/api/v2/savings', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
userId: userId,
acceptedTermsAndConditions: true
})
});
return await response.json();
};
// Obtener saldo
const getBalance = async (savingsAccountId) => {
const response = await fetch(
`/api/v2/savings/${savingsAccountId}/balance`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
return await response.json();
};
// Obtener instrucciones de depósito
const getDepositInstructions = async (savingsAccountId, type) => {
const response = await fetch(
`/api/v2/savings/${savingsAccountId}/deposit-instructions/${type}`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
return await response.json();
};
Demo Escuchador de Webhook
Maneja eventos de webhook en tiempo real de KillB.
Ejemplo de Código
const express = require('express');
const crypto = require('crypto');
const app = express();
app.use(express.json());
app.post('/webhooks/killb', (req, res) => {
// Verificar firma del webhook
const signature = req.headers['x-signature-sha256'];
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(payload)
.digest('hex');
if (signature !== expectedSignature) {
return res.status(401).json({ error: 'Firma inválida' });
}
// Procesar evento webhook
const { event, data } = req.body;
switch(event) {
case 'ramp.completed':
handleRampCompleted(data);
break;
case 'ramp.failed':
handleRampFailed(data);
break;
case 'user.kyc_updated':
handleKYCUpdate(data);
break;
}
res.status(200).json({ received: true });
});
app.listen(3000);
Aprende Más
Lee la guía completa de seguridad de webhook
Fragmentos de Código
Gestión de Usuarios
const createUser = async (userData) => {
const response = await fetch('/api/v2/users', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'PERSON',
externalId: userData.externalId,
data: {
firstName: userData.firstName,
lastName: userData.lastName,
email: userData.email,
phone: userData.phone,
dateOfBirth: userData.dateOfBirth,
address: userData.address,
document: userData.document
}
})
});
return await response.json();
};
Creación de Cuenta
const createWalletAccount = async (userId, walletAddress) => {
const response = await fetch('/api/v2/accounts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
type: 'WALLET',
userId: userId,
externalId: `wallet-${userId}`,
data: {
firstName: 'Juan',
lastName: 'Pérez',
email: '[email protected]',
phone: '+573001234567',
currency: 'USDC',
network: 'POLYGON',
address: walletAddress,
countryCode: 'CO',
document: {
type: 'PASSPORT',
number: 'AB123456',
issuedCountryCode: 'CO'
}
}
})
});
return await response.json();
};
Creación de Ramp
const executeRamp = async (userId, accountId, amount, direction) => {
try {
// 1. Crear cotización
const quote = await fetch('/api/v2/quotations', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
fromCurrency: direction === 'ON' ? 'COP' : 'USDC',
toCurrency: direction === 'ON' ? 'USDC' : 'COP',
amount: amount,
amountIsToCurrency: false,
cashInMethod: direction === 'ON' ? 'PSE' : 'POLYGON',
cashOutMethod: direction === 'ON' ? 'POLYGON' : 'PSE'
})
}).then(r => r.json());
console.log('Cotización:', quote);
// 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: accountId
})
}).then(r => r.json());
console.log('Ramp:', ramp);
return ramp;
} catch (error) {
console.error('Fallo en la creación del ramp:', error);
throw error;
}
};
Probando en Sandbox
Usa estas funciones auxiliares para probar tu integración:
Simular Cash-In
curl --request POST \
--url https://sandbox.killb.app/api/v2/faker/cash-in \
--header 'Authorization: Bearer TU_TOKEN_DE_ACCESO' \
--header 'Content-Type: application/json' \
--data '{
"rampId": "ramp-id-aqui"
}'
Simular Finalización de Cash-Out
curl --request POST \
--url https://sandbox.killb.app/api/v2/faker/cash-out \
--header 'Authorization: Bearer TU_TOKEN_DE_ACCESO' \
--header 'Content-Type: application/json' \
--data '{
"rampId": "ramp-id-aqui"
}'
Los endpoints Faker solo funcionan en el ambiente sandbox y se usan con fines de prueba.
Lista de Verificación de Integración
Configurar Autenticación
Implementar lógica de inicio de sesión y actualización de token
Crear Gestión de Usuarios
Construir flujos de creación de usuario y envío de KYC
Implementar Creación de Cuenta
Agregar gestión de cuenta bancaria y billetera
Construir UI de Cotización
Mostrar precios en tiempo real a los usuarios
Manejar Flujo de Ramp
Crear y monitorear transacciones ramp
Configurar Webhooks
Recibir actualizaciones de estado en tiempo real
Agregar Manejo de Errores
Implementar manejo de errores adecuado y lógica de reintento
Probar Exhaustivamente
Usar ambiente sandbox para pruebas de extremo a extremo
Recursos Adicionales
Referencia API
Documentación completa de la API
Guía de Webhooks
Configura notificaciones en tiempo real
Manejo de Errores
Mejores prácticas para gestión de errores
Mejores Prácticas
Consejos para integración lista para producción
¿Tienes una app demo para compartir? Contáctanos en [email protected] para que sea destacada!