Início Rápido
Crie sua conta
Acesse o painel DentPeg e crie sua conta. Seu cadastro será aprovado em instantes.
Gere uma API Key
No painel, acesse "Desenvolvedores" e crie uma nova API key com as permissões desejadas.
Ir para DesenvolvedoresFaça sua primeira requisição
Use sua API key para criar seu primeiro depósito PIX.
https://api.dentpeg.com/api/v1Autenticação
Todas as requisições à API devem incluir sua API key. Você pode enviar a chave de duas formas:
X-API-Key: dpx_sua_api_key_aqui
Authorization: Bearer dpx_sua_api_key_aqui
Mantenha sua API key em segredo. Nunca a exponha em código client-side ou repositórios públicos.
Exemplos de Código
curl -X POST "https://api.dentpeg.com/api/v1/deposits" \
-H "Content-Type: application/json" \
-H "X-API-Key: dpx_sua_api_key_aqui" \
-d '{"amountInCents": 10000}'const response = await fetch("https://api.dentpeg.com/api/v1/deposits", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": "dpx_sua_api_key_aqui"
},
body: JSON.stringify({ amountInCents: 10000 })
});
const data = await response.json();
console.log(data.deposit.qrCode);import requests
response = requests.post(
"https://api.dentpeg.com/api/v1/deposits",
headers={
"Content-Type": "application/json",
"X-API-Key": "dpx_sua_api_key_aqui"
},
json={"amountInCents": 10000}
)
data = response.json()
print(data["deposit"]["qrCode"])const axios = require('axios');
const response = await axios.post(
'https://api.dentpeg.com/api/v1/deposits',
{ amountInCents: 10000 },
{
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'dpx_sua_api_key_aqui'
}
}
);
console.log(response.data.deposit.qrCode);Depósitos (PIX)
Crie e gerencie cobranças PIX
Cria um novo depósito PIX e retorna o QR Code para pagamento. O valor é em centavos.
{
"amountInCents": 10000
}{
"ok": true,
"deposit": {
"id": "dep_abc123xyz",
"status": "pending",
"amountInCents": 10000,
"feeCents": 199,
"netCents": 9801,
"feePercent": 0.0199,
"qrCode": "00020101021226890014br.gov.bcb.pix...",
"qrImageUrl": "https://api.qrserver.com/v1/create-qr-code/?data=...",
"expiration": "2024-01-15T12:00:00.000Z",
"createdAt": "2024-01-15T11:00:00.000Z"
}
}Status do Depósito
Monitore o ciclo de vida dos seus depósitos
Fluxo de Status
Esse é o fluxo normal de um depósito bem-sucedido. O status depix_sent indica que o pagamento foi confirmado e os tokens foram enviados.
Todos os Status Possíveis
pendingpending_pix2faunder_reviewdepix_sentexpiredcanceledrefundederrorComo Monitorar o Status
Use o endpoint GET /deposits/:id para consultar o status em tempo real. Quando o depósito está pending, o backend consulta automaticamente o provedor para retornar o status mais atualizado.
// Polling a cada 5 segundos
const checkStatus = async (depositId) => {
const response = await fetch(
"https://api.dentpeg.com/api/v1/deposits/" + depositId,
{ headers: { "X-API-Key": "dpx_sua_api_key" } }
);
const data = await response.json();
if (data.deposit.status === "depix_sent") {
console.log("Pagamento confirmado!");
return true;
}
if (["expired", "canceled", "error"].includes(data.deposit.status)) {
console.log("Depósito finalizado:", data.deposit.status);
return true;
}
return false; // Continua polling
};
// Inicia polling
const pollInterval = setInterval(async () => {
const finished = await checkStatus("dep_abc123");
if (finished) clearInterval(pollInterval);
}, 5000);Inicie o polling assim que criar o depósito. Use intervalos de 3-5 segundos para depósitos pendentes. Pare o polling quando o status for final (depix_sent, expired, canceled, error ou refunded).
Webhooks
Receba notificações em tempo real sobre seus depósitos
Como Funcionam
Webhooks permitem que sua aplicação receba notificações automáticas quando eventos importantes acontecem, como a confirmação de um depósito. Em vez de fazer polling, você registra uma URL e recebe uma requisição POST sempre que um evento ocorre.
Com webhooks você não precisa ficar consultando a API repetidamente. Sua aplicação é notificada instantaneamente quando o status muda.
Registra uma nova URL de webhook. Você pode ter até 5 webhooks ativos. Guarde o secret retornado - ele não será exibido novamente.
{
"url": "https://seusite.com/webhook",
"events": ["deposit.confirmed", "deposit.expired"]
}{
"ok": true,
"webhook": {
"id": "wh_abc123xyz",
"url": "https://seusite.com/webhook",
"events": ["deposit.confirmed", "deposit.expired"],
"secret": "whsec_a1b2c3d4e5f6...",
"isActive": true,
"createdAt": "2024-01-15T11:00:00.000Z"
},
"message": "Webhook criado. Guarde o secret, ele não será exibido novamente."
}Eventos Disponíveis
deposit.confirmeddeposit.expireddeposit.errordeposit.refundedFormato do Payload
Quando um evento ocorre, enviamos uma requisição POST para sua URL com o seguinte formato:
// Headers
X-Webhook-Signature: <hmac_sha256_signature>
X-Webhook-Timestamp: 2024-01-15T12:30:00.000Z
Content-Type: application/json
// Body
{
"event": "deposit.confirmed",
"data": {
"depositId": "dep_abc123xyz",
"status": "depix_sent",
"amountInCents": 10000,
"feeCents": 199,
"netCents": 9801,
"payerName": "João Silva",
"createdAt": "2024-01-15T11:00:00.000Z",
"updatedAt": "2024-01-15T12:30:00.000Z"
},
"timestamp": "2024-01-15T12:30:00.000Z"
}Validando a Assinatura
Para garantir que a requisição veio do DentPeg, valide a assinatura HMAC SHA256 usando seu secret:
const crypto = require('crypto');
function validateWebhookSignature(payload, signature, secret) {
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
// No seu endpoint de webhook
app.post('/webhook', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const payload = req.body;
if (!validateWebhookSignature(payload, signature, 'whsec_seu_secret')) {
return res.status(401).json({ error: 'Invalid signature' });
}
// Processar o evento
if (payload.event === 'deposit.confirmed') {
console.log('Depósito confirmado:', payload.data.depositId);
}
res.status(200).json({ received: true });
});Sempre valide a assinatura antes de processar o webhook. Responda com status 200 em até 10 segundos para evitar retries. Após 10 falhas consecutivas, o webhook é desativado automaticamente.
Links de Pagamento
Crie links reutilizáveis para receber pagamentos
Cria um novo link de pagamento com valor fixo. O link pode receber múltiplos pagamentos.
{
"amountInCents": 15000,
"maxPayments": 10,
"description": "Produto XYZ - Pedido #456"
}{
"ok": true,
"paymentLink": {
"id": "pl_abc123xyz",
"code": "EYSGUDNPYG",
"status": "ACTIVE",
"amountInCents": 15000,
"maxPayments": 10,
"paidCount": 0,
"description": "Produto XYZ - Pedido #456",
"expiresAt": "2024-01-15T23:00:00.000Z",
"createdAt": "2024-01-15T11:00:00.000Z"
},
"publicUrl": "/pay/EYSGUDNPYG"
}Extrato
Consulte seu histórico de transações
Retorna o extrato consolidado de depósitos e saques com suporte a filtros.
pageNúmero da página (default: 1)limitItens por página (default: 20, max: 100)typesTipos: DEPOSIT, WITHDRAWAL (separados por vírgula){
"ok": true,
"items": [
{
"id": "dep_abc123",
"type": "DEPOSIT",
"amountInCents": 10000,
"feeCents": 199,
"netCents": 9801,
"status": "depix_sent",
"createdAt": "2024-01-15T11:00:00.000Z"
},
{
"id": "wd_xyz789",
"type": "WITHDRAWAL",
"amountInCents": 5000,
"feeCents": 50,
"netCents": 4950,
"status": "CONFIRMED",
"createdAt": "2024-01-14T15:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 156,
"totalPages": 8
}
}Chave PIX Fixa (Slug)
Configure um link permanente para receber pagamentos
Define ou atualiza sua Chave PIX Fixa. O slug deve ser único e conter apenas letras minúsculas, números e hífens.
{
"slug": "minha-loja"
}{
"ok": true,
"user": {
"id": "user_abc123",
"name": "João Silva",
"pixSlug": "minha-loja"
},
"checkoutUrl": "/checkout/minha-loja",
"message": "Chave PIX Fixa configurada com sucesso."
}Perfil
Consulte informações da sua conta
Retorna as informações do seu perfil incluindo status da conta e configurações.
{
"ok": true,
"user": {
"id": "user_abc123",
"name": "João Silva",
"email": "joao@email.com",
"status": "APPROVED",
"pixSlug": "joao-silva",
"liquidAddress": "lq1qqw8nw...",
"createdAt": "2024-01-01T10:00:00.000Z"
}
}Saques
Converta DePix em PIX automaticamente
Ao criar um saque você recebe um liquidUri com o endereço e valor exato em DePix. Após enviar o DePix para esse endereço, o sistema detecta o pagamento automaticamente na blockchain Liquid e envia o PIX — sem necessidade de submeter TXID manualmente.
Rate limit: máximo de 10 saques por hora via API por usuário.
Cria um saque de DePix para PIX. Retorna o liquidUri com o endereço e valor exato a enviar. O processamento é totalmente automático após o envio.
{
"pixKeyType": "CPF",
"pixKey": "12345678901",
"netCents": 5000
}
// pixKeyType aceita: "CPF" | "CNPJ" | "EMAIL" | "PHONE" | "EVP"
// Formatos:
// CPF → 11 dígitos (ex: "12345678901")
// CNPJ → 14 dígitos (ex: "12345678000195")
// EMAIL → email válido (ex: "joao@email.com")
// PHONE → +55 + DDD + número (ex: "+5511912345678")
// EVP → UUID v4 (ex: "550e8400-e29b-41d4-a716-446655440000")
// netCents: valor líquido em centavos (mín: 1000 = R$10, máx: 100000000 = R$1.000.000){
"ok": true,
"withdrawal": {
"id": "wd_abc123xyz",
"status": "REQUESTED",
"pixKeyType": "CPF",
"pixKey": "12345678901",
"netCents": 5000,
"grossCents": 5200,
"feeCents": 200,
"liquidUri": "liquidnetwork:ex1qxxx...?amount=0.00005200&assetid=02f22f8d...",
"eulenWithdrawalId": "eulen_abc123",
"createdAt": "2026-01-01T00:00:00.000Z"
},
"message": "Saque criado. Envie o DePix para o liquidUri e o sistema processará automaticamente."
}Status dos Saques
REQUESTEDDEPIX_RECEIVEDPROCESSINGPAIDREJECTEDERRORREFUNDEDModo de Recebimento
Configure como seus depósitos são recebidos
Por padrão, você recebe DePix na rede Liquid. É possível configurar para receber diretamente em USDT ou USDC nas redes BSC (BEP-20), Ethereum (ERC-20) ou Solana (SPL). O sistema converte automaticamente após cada depósito.
| payoutType | Rede | Endereço |
|---|---|---|
DEPIX | Liquid Network | Configurado no perfil |
USDT_BSC | BSC BEP-20 | Endereço EVM (0x...) |
USDT_ETH | Ethereum ERC-20 | Endereço EVM (0x...) |
USDC_BSC | BSC BEP-20 | Endereço EVM (0x...) |
USDC_ETH | Ethereum ERC-20 | Endereço EVM (0x...) |
USDT_SOLANA | Solana SPL | Endereço Solana (base58, 32–44 chars) |
USDC_SOLANA | Solana SPL | Endereço Solana (base58, 32–44 chars) |
Retorna a configuração de recebimento atual: modo ativo, endereços salvos por rede e se USDT/USDC payout está habilitado.
{
"ok": true,
"payoutType": "USDT_BSC",
"usdtAddress": "0xabcdef1234567890abcdef1234567890abcdef12",
"isActive": true,
"usdtPayoutEnabled": true,
"savedAddresses": {
"USDT_LIQUID": null,
"USDT_BSC": "0xabcdef1234567890abcdef1234567890abcdef12",
"USDT_ETH": null,
"USDT_POLYGON": null,
"USDT_SOLANA": null,
"USDC_BSC": null,
"USDC_ETH": null,
"USDC_POLYGON": null,
"USDC_SOLANA": null
}
}Status Codes
Permissões
Ao criar uma API key, você pode selecionar quais permissões ela terá. Use apenas as permissões necessárias para cada integração.
deposits:readLer e listar depósitos
deposits:writeCriar novos depósitos PIX
payment-links:readLer e listar links de pagamento
payment-links:writeCriar e cancelar links de pagamento
statement:readConsultar extrato de transações
profile:readLer informações do perfil
profile:writeEditar perfil e configurar Chave PIX Fixa
withdrawals:readLer e listar saques
withdrawals:writeCriar saques de DePix para PIX via API
webhooks:readListar webhooks configurados
webhooks:writeCriar, editar e remover webhooks
payout:readConsultar modo de recebimento atual
payout:writeAlterar tipo e endereço de recebimento
Pronto para começar?
Crie sua conta e comece a integrar pagamentos PIX em sua aplicação.