Início Rápido

1

Crie sua conta

Acesse o painel DentPeg e crie sua conta. Seu cadastro será aprovado em instantes.

2

Gere uma API Key

No painel, acesse "Desenvolvedores" e crie uma nova API key com as permissões desejadas.

Ir para Desenvolvedores
3

Faça sua primeira requisição

Use sua API key para criar seu primeiro depósito PIX.

Base URL
https://api.dentpeg.com/api/v1

Autenticação

Todas as requisições à API devem incluir sua API key. Você pode enviar a chave de duas formas:

Header X-API-Key (Recomendado)
X-API-Key: dpx_sua_api_key_aqui
Header Authorization (Bearer)
Authorization: Bearer dpx_sua_api_key_aqui
Importante

Mantenha sua API key em segredo. Nunca a exponha em código client-side ou repositórios públicos.

Exemplos de Código

cURL
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}'
JavaScript / TypeScript
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);
Python
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"])
Node.js (Axios)
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.

Request Body
{
  "amountInCents": 10000
}
Response
{
  "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

pendingunder_reviewdepix_sent

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

pending
Aguardando pagamento
O QR Code foi gerado e está aguardando o pagamento PIX.
pending_pix2fa
Aguardando 2FA
O pagador precisa confirmar a autenticação de dois fatores no banco.
under_review
Em análise
O pagamento está sendo processado e verificado pelo provedor.
depix_sent
Concluído
Pagamento confirmado! Os tokens foram enviados para sua carteira.
expired
Expirado
O QR Code expirou sem receber pagamento.
canceled
Cancelado
O depósito foi cancelado pelo provedor.
refunded
Estornado
O valor foi devolvido ao pagador.
error
Erro
Ocorreu um erro no processamento do depósito.

Como Monitorar o Status

Polling (Recomendado)

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);
Dica de Performance

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.

Vantagem

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.

Request Body
{
  "url": "https://seusite.com/webhook",
  "events": ["deposit.confirmed", "deposit.expired"]
}
Response
{
  "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.confirmed
Depósito Confirmado
Disparado quando o pagamento PIX é confirmado e os tokens são enviados.
deposit.expired
Depósito Expirado
Disparado quando o QR Code expira sem receber pagamento.
deposit.error
Erro no Depósito
Disparado quando ocorre um erro no processamento do depósito.
deposit.refunded
Depósito Estornado
Disparado quando o valor é devolvido ao pagador.

Formato 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 });
});
Importante

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.

Extrato

Consulte seu histórico de transações

Retorna o extrato consolidado de depósitos e saques com suporte a filtros.

Query Parameters
pageNúmero da página (default: 1)
limitItens por página (default: 20, max: 100)
typesTipos: DEPOSIT, WITHDRAWAL (separados por vírgula)
Response
{
  "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.

Request Body
{
  "slug": "minha-loja"
}
Response
{
  "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.

Response
{
  "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

Fluxo Automático — Sem TXID

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.

REQUESTEDenvia DePix ao liquidUriDEPIX_RECEIVEDPROCESSINGPAID

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.

Request Body
{
  "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)
Response
{
  "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

REQUESTED
Aguardando DePix
Saque criado. Envie DePix para o liquidUri retornado.
DEPIX_RECEIVED
DePix detectado
Pagamento on-chain detectado automaticamente.
PROCESSING
Enviando PIX
PIX sendo enviado para a chave de destino.
PAID
Pago
PIX enviado com sucesso. Saque concluído.
REJECTED
Rejeitado
Saque rejeitado. Verifique adminNote para o motivo.
ERROR
Erro
Erro no processamento. O suporte será notificado.
REFUNDED
Reembolsado
DePix devolvido ao remetente.

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

payoutTypeRedeEndereço
DEPIXLiquid NetworkConfigurado no perfil
USDT_BSCBSC BEP-20Endereço EVM (0x...)
USDT_ETHEthereum ERC-20Endereço EVM (0x...)
USDC_BSCBSC BEP-20Endereço EVM (0x...)
USDC_ETHEthereum ERC-20Endereço EVM (0x...)
USDT_SOLANASolana SPLEndereço Solana (base58, 32–44 chars)
USDC_SOLANASolana SPLEndereç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.

Response
{
  "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

200
OK
Requisição processada com sucesso
201
Created
Recurso criado com sucesso
400
Bad Request
Erro de validação nos dados enviados
401
Unauthorized
API key inválida ou ausente
403
Forbidden
Permissão insuficiente para esta operação
404
Not Found
Recurso não encontrado
429
Too Many Requests
Limite de requisições excedido — ex: 10 saques/hora ou 30 consultas/min
500
Internal Error
Erro interno do servidor
503
Service Unavailable
Sistema temporariamente indisponível — tente novamente em instantes

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:read

Ler e listar depósitos

deposits:write

Criar novos depósitos PIX

payment-links:read

Ler e listar links de pagamento

payment-links:write

Criar e cancelar links de pagamento

statement:read

Consultar extrato de transações

profile:read

Ler informações do perfil

profile:write

Editar perfil e configurar Chave PIX Fixa

withdrawals:read

Ler e listar saques

withdrawals:write

Criar saques de DePix para PIX via API

webhooks:read

Listar webhooks configurados

webhooks:write

Criar, editar e remover webhooks

payout:read

Consultar modo de recebimento atual

payout:write

Alterar tipo e endereço de recebimento

Pronto para começar?

Crie sua conta e comece a integrar pagamentos PIX em sua aplicação.