API Reference

A depix.casa fornece uma API REST para conversão PIX → DEPIX (depósito) e DEPIX → PIX (saque). Todas as respostas são JSON. Valores monetários são sempre em centavos (inteiros).

🔗 Base URL: https://depix.casa

Convenções

CampoRegra
Content-TypeSempre application/json em requisições com body
Valores monetáriosInteiros em centavos — R$ 100,00 → 10000
DocumentosSomente dígitos, sem pontuação — CPF: 12345678901
DatasISO 8601 UTC — ex: 2026-06-16T21:00:00.000Z

Rate Limiting

Limite padrão: 100 req/min por IP. Ao exceder, a API retorna 429. O header Retry-After indica quando tentar novamente.

Autenticação

Todas as rotas exigem uma API Key no header de autorização Bearer.

Header
Authorization: Bearer SEU_API_KEY

⚠️ Nunca exponha sua API Key no frontend ou em repositórios públicos. Armazene em variáveis de ambiente no servidor.

Para obter uma API Key, solicite acesso. O administrador gerará uma chave específica para sua integração.

Criar depósito

Gera um QR Code PIX que, ao ser pago, converte os reais para DEPIX. A taxa de 1,5% é deduzida automaticamente do valor recebido.

POST /v1/deposits

Body

CampoTipoDescrição
amountInCentsobrigatóriointegerValor em centavos. Mínimo: 100 (R$ 1,00)
customerDocumentobrigatóriostringCPF (11 dígitos) ou CNPJ (14 dígitos) do pagador, somente números
externalRefopcionalstringID do seu sistema para rastreamento. Máx. 200 caracteres
depixAddressopcionalstringEndereço Liquid/DEPIX para recebimento. Se omitido, usa o endereço padrão da conta

Exemplo — cURL

cURL
curl -X POST https://depix.casa/v1/deposits \
  -H "Authorization: Bearer SEU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amountInCents": 10000,
    "customerDocument": "12345678901",
    "externalRef": "pedido-42",
    "depixAddress": "ex1q..."
  }'

Exemplo — Node.js

Node.js
const res = await fetch('https://depix.casa/v1/deposits', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer SEU_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    amountInCents: 10000,
    customerDocument: '12345678901',
    externalRef: 'pedido-42',
    depixAddress: 'ex1q...', // opcional
  }),
});
const deposit = await res.json();
// exibir deposit.qrCopyPaste ou deposit.qrImageUrl

Resposta 201 Created

JSON
{
  "id": "d3e4f5a6-b1c2-4d3e-8f9a-0b1c2d3e4f5a",
  "providerTxid": "txid_abc123def456",
  "grossAmount": 10000,
  "feeAmount": 150,
  "netAmount": 9850,
  "status": "PENDING",
  "qrCopyPaste": "00020126580014br.gov.bcb.pix0136...",
  "qrImageUrl": "https://api.eulen.io/qr/txid_abc123def456.png",
  "externalRef": "pedido-42",
  "createdAt": "2026-06-16T21:00:00.000Z"
}

💡 Apresente qrCopyPaste (Pix Copia e Cola) ou qrImageUrl ao usuário. O depósito é confirmado via webhook DEPOSIT_COMPLETED — não faça polling.

Buscar depósito

Retorna os dados de um depósito pelo providerTxid recebido na criação.

GET /v1/deposits/:providerTxid
cURL
curl https://depix.casa/v1/deposits/txid_abc123def456 \
  -H "Authorization: Bearer SEU_API_KEY"

Resposta 200 OK

JSON
{
  "id": "d3e4f5a6-b1c2-4d3e-8f9a-0b1c2d3e4f5a",
  "providerTxid": "txid_abc123def456",
  "grossAmount": 10000,
  "feeAmount": 150,
  "netAmount": 9850,
  "status": "COMPLETED",
  "payerName": "João Silva",
  "payerTaxNumber": "12345678901",
  "externalRef": "pedido-42",
  "createdAt": "2026-06-16T21:00:00.000Z",
  "updatedAt": "2026-06-16T21:04:00.000Z"
}

Status possíveis

StatusSignificado
PENDINGQR Code gerado, aguardando pagamento
CONFIRMEDPagamento recebido, conversão em andamento
COMPLETEDDEPIX creditado com sucesso
FAILEDFalha no processamento
EXPIREDQR Code expirado sem pagamento

Listar depósitos

Retorna lista paginada dos depósitos da sua conta, com filtros opcionais.

GET /v1/deposits

Query params

CampoTipoDescrição
statusopcionalstringPENDING | CONFIRMED | COMPLETED | FAILED | EXPIRED
startDateopcionalstringData inicial ISO 8601. Ex: 2026-06-01T00:00:00.000Z
endDateopcionalstringData final ISO 8601
pageopcionalintegerPágina. Default: 1
limitopcionalintegerItens por página, máx. 100. Default: 20
cURL
curl "https://depix.casa/v1/deposits?status=COMPLETED&page=1&limit=20" \
  -H "Authorization: Bearer SEU_API_KEY"

Resposta 200 OK

JSON
{
  "deposits": [
    {
      "id": "d3e4f5a6-...",
      "providerTxid": "txid_abc123def456",
      "grossAmount": 10000,
      "feeAmount": 150,
      "netAmount": 9850,
      "status": "COMPLETED",
      "externalRef": "pedido-42",
      "createdAt": "2026-06-16T21:00:00.000Z"
    }
  ],
  "total": 42,
  "page": 1,
  "limit": 20
}

Criar saque

Converte DEPIX para PIX, enviando reais para uma chave Pix do beneficiário. Prazo de liquidação: até D+2 (48h).

POST /v1/withdrawals

Body

CampoTipoDescrição
pixKeyobrigatóriostringChave Pix do beneficiário (CPF, e-mail, telefone, chave aleatória)
amountInCentsobrigatóriointegerValor em centavos de DEPIX a converter. Mínimo: 100
taxNumberobrigatóriostringCPF ou CNPJ do beneficiário (somente dígitos)
externalRefopcionalstringID do seu sistema. Máx. 200 caracteres

Exemplo — cURL

cURL
curl -X POST https://depix.casa/v1/withdrawals \
  -H "Authorization: Bearer SEU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "pixKey": "joao@email.com",
    "amountInCents": 5000,
    "taxNumber": "12345678901",
    "externalRef": "saque-10"
  }'

Exemplo — Node.js

Node.js
const res = await fetch('https://depix.casa/v1/withdrawals', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer SEU_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    pixKey: 'joao@email.com',
    amountInCents: 5000,
    taxNumber: '12345678901',
    externalRef: 'saque-10',
  }),
});
const saque = await res.json();

Resposta 201 Created

JSON
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "PENDING",
  "pixKey": "joao@email.com",
  "depositAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "depositAmountInCents": 5000,
  "payoutAmountInCents": 4925,
  "feeAmount": 75,
  "externalRef": "saque-10",
  "createdAt": "2026-06-16T21:00:00.000Z"
}

💡 depositAddress é o endereço DEPIX que deve receber o valor. O pagamento em reais é processado em até D+2. Acompanhe via webhook WITHDRAW_COMPLETED.

Buscar saque

Retorna os dados de um saque pelo seu id.

GET /v1/withdrawals/:id
cURL
curl https://depix.casa/v1/withdrawals/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer SEU_API_KEY"

Status possíveis

StatusSignificado
PENDINGAguardando início do processamento
PROCESSINGEm processamento pelo provedor
COMPLETEDPix enviado ao beneficiário
FAILEDFalha — verifique a chave Pix informada

Listar saques

GET /v1/withdrawals

Query params

CampoTipoDescrição
statusopcionalstringPENDING | PROCESSING | COMPLETED | FAILED
startDateopcionalstringData inicial ISO 8601
endDateopcionalstringData final ISO 8601
pageopcionalintegerDefault: 1
limitopcionalintegerMáx. 100. Default: 20
cURL
curl "https://depix.casa/v1/withdrawals?status=COMPLETED&limit=10" \
  -H "Authorization: Bearer SEU_API_KEY"

Eventos de Webhook

Configure uma webhookUrl ao se cadastrar. A API enviará um POST para essa URL sempre que houver atualização de status.

Eventos disponíveis

EventoQuando ocorre
DEPOSIT_CONFIRMEDPagamento PIX recebido pelo provedor
DEPOSIT_COMPLETEDDEPIX creditado com sucesso
DEPOSIT_FAILEDFalha no processamento do depósito
WITHDRAW_CREATEDSaque criado e aceito
WITHDRAW_COMPLETEDPix enviado ao beneficiário
WITHDRAW_FAILEDFalha no envio do Pix

Payload

JSON
{
  "event": "DEPOSIT_COMPLETED",
  "timestamp": "2026-06-16T21:05:00.000Z",
  "data": {
    "id": "d3e4f5a6-b1c2-4d3e-8f9a-0b1c2d3e4f5a",
    "providerTxid": "txid_abc123def456",
    "grossAmount": 10000,
    "feeAmount": 150,
    "netAmount": 9850,
    "status": "COMPLETED",
    "externalRef": "pedido-42"
  }
}

Verificação HMAC

Cada webhook inclui o header X-Depix-Signature: sha256=<hex> gerado com HMAC-SHA256 do body raw usando seu webhookSecret. Sempre valide a assinatura antes de processar.

Node.js
import crypto from 'crypto';

function verifyWebhook(rawBody: Buffer, signature: string, secret: string): boolean {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  // timingSafeEqual previne timing attacks
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}

// Fastify — raw body
fastify.addContentTypeParser('application/json', { parseAs: 'buffer' }, (req, body, done) => {
  done(null, body);
});

fastify.post('/webhook', async (request, reply) => {
  const sig = request.headers['x-depix-signature'] as string;
  if (!verifyWebhook(request.body as Buffer, sig, process.env.WEBHOOK_SECRET!)) {
    return reply.code(401).send({ error: 'Invalid signature' });
  }
  const event = JSON.parse((request.body as Buffer).toString());
  // processar event.event e event.data
  return reply.send({ received: true });
});

Retry Policy

Em caso de timeout ou resposta HTTP fora do range 2xx, a API realiza novas tentativas com backoff exponencial:

TentativaDelay após falha
1 minuto
5 minutos
15 minutos
1 hora
6 horas

Após 5 falhas consecutivas o evento é marcado como FAILED. Seu endpoint deve responder em até 30 segundos. Retorne qualquer status 2xx para confirmar o recebimento.

Erros

A API usa códigos HTTP padrão. Todas as respostas de erro seguem o formato:

JSON
{
  "error": "Validation error",
  "details": [
    { "path": ["amountInCents"], "message": "Number must be greater than or equal to 100" }
  ]
}
CódigoSignificado
400Dados inválidos — veja details para o campo específico
401API Key ausente, expirada ou inválida
404Recurso não encontrado (providerTxid ou id incorreto)
429Rate limit excedido — aguarde e tente novamente
500Erro interno — contate suporte se persistir