Visão Geral
Explore nossa coleção de aplicações de demonstração e exemplos de código para acelerar sua integração com a API KillB.
Aplicações de Exemplo
Demo On-Ramp
Fluxo completo de on-ramp de fiat para cripto
Demo Off-Ramp
Converta cripto de volta para moeda fiat local
Painel de Poupança
Interface de conta poupança custodial
Ouvinte de Webhook
Lide com notificações de eventos em tempo real
Demo On-Ramp
Uma implementação completa do fluxo de on-ramp (COP/MXN → USDC).
Recursos
- Criação de usuário e KYC
- Exibição de cotação em tempo real
- Integração de pagamento PSE/SPEI
- Rastreamento de status da transação
- Tratamento de webhook
Exemplo 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();
// Redirecionar para URL de pagamento PSE
window.location.href = ramp.paymentInfo[0].url;
};
return (
<div>
<input
type="number"
value={amount}
onChange={(e) => setAmount(e.target.value)}
placeholder="Valor em COP"
/>
<button onClick={getQuote}>Obter Cotação</button>
{quote && (
<div>
<p>Você receberá: {quote.toAmount} USDC</p>
<p>Taxa: {quote.rate}</p>
<button onClick={createRamp}>Continuar para Pagamento</button>
</div>
)}
</div>
);
}
Demo Off-Ramp
Converta criptomoeda de volta para moeda fiat local.
Recursos
- Verificação de saldo da carteira
- Cálculo de cotação
- Validação de conta bancária
- Monitoramento de transação
- Geração de recibo
Exemplo de Código
export default function OffRampPage() {
const createOffRamp = async (formData) => {
// Passo 1: Obter cotação
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();
// Passo 2: Criar 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();
// Passo 3: Mostrar instruções de pagamento
return ramp;
};
return (
<form onSubmit={(e) => {
e.preventDefault();
createOffRamp(formData);
}}>
{/* Campos do formulário */}
</form>
);
}
Demo Poupança
Implemente uma interface de conta poupança custodial.
Exemplo de Código
// Criar conta poupança
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();
};
// Obter saldo
const getBalance = async (savingsAccountId) => {
const response = await fetch(
`/api/v2/savings/${savingsAccountId}/balance`,
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
return await response.json();
};
// Obter instruções 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 Ouvinte de Webhook
Lide com eventos de webhook em tempo real da KillB.
Exemplo 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 assinatura do 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: 'Assinatura inválida' });
}
// Processar 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);
Saiba Mais
Leia o guia completo de segurança de webhook
Trechos de Código
Gerenciamento de Usuários
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();
};
Criação de Conta
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: 'João',
lastName: 'Silva',
email: '[email protected]',
phone: '+5511987654321',
currency: 'USDC',
network: 'POLYGON',
address: walletAddress,
countryCode: 'BR',
document: {
type: 'PASSPORT',
number: 'AB123456',
issuedCountryCode: 'BR'
}
}
})
});
return await response.json();
};
Criação de Ramp
const executeRamp = async (userId, accountId, amount, direction) => {
try {
// 1. Criar cotação
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('Cotação:', quote);
// 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: accountId
})
}).then(r => r.json());
console.log('Ramp:', ramp);
return ramp;
} catch (error) {
console.error('Falha na criação do ramp:', error);
throw error;
}
};
Testando no Sandbox
Use estas funções auxiliares para testar sua integração:
Simular Cash-In
curl --request POST \
--url https://sandbox.killb.app/api/v2/faker/cash-in \
--header 'Authorization: Bearer SEU_TOKEN_DE_ACESSO' \
--header 'Content-Type: application/json' \
--data '{
"rampId": "ramp-id-aqui"
}'
Simular Conclusão de Cash-Out
curl --request POST \
--url https://sandbox.killb.app/api/v2/faker/cash-out \
--header 'Authorization: Bearer SEU_TOKEN_DE_ACESSO' \
--header 'Content-Type: application/json' \
--data '{
"rampId": "ramp-id-aqui"
}'
Endpoints Faker só funcionam no ambiente sandbox e são usados para fins de teste.
Lista de Verificação de Integração
Configurar Autenticação
Implementar lógica de login e atualização de token
Criar Gerenciamento de Usuários
Construir fluxos de criação de usuário e submissão de KYC
Implementar Criação de Conta
Adicionar gerenciamento de conta bancária e carteira
Construir UI de Cotação
Mostrar preços em tempo real para usuários
Lidar com Fluxo de Ramp
Criar e monitorar transações ramp
Configurar Webhooks
Receber atualizações de status em tempo real
Adicionar Tratamento de Erros
Implementar tratamento de erros adequado e lógica de retry
Testar Completamente
Usar ambiente sandbox para testes de ponta a ponta
Recursos Adicionais
Referência da API
Documentação completa da API
Guia de Webhooks
Configure notificações em tempo real
Tratamento de Erros
Melhores práticas para gerenciamento de erros
Melhores Práticas
Dicas para integração pronta para produção
Tem um app demo para compartilhar? Entre em contato conosco em [email protected] para ter destaque!