API documentation

Non-custodial PIX ⇄ DePix gateway on the Liquid Network. Base URL: https://flipdepix.net

Authentication

Use an API Key as Bearer token. create an account and generate a key with the required scopes. The token is shown only once.

Authorization: Bearer fdpx_xxxxxxxxxxxxxxxxxxxxxxxx
ScopePermits
deposit:createCreate PIX charges (deposits)
withdrawal:createCreate withdrawals (DePix → PIX)
read:transactionsRead deposit/withdrawal status
read:balanceRead balances
wallets:read / wallets:writeRead / manage Liquid wallets
links:manageManage payment links
webhook:manageManage webhook endpoints

Missing scope returns 403 insufficient_scope. POST endpoints that move money require an Idempotency-Key header (unique string per request).

Create deposit (PIX → DePix)

POST/v1/api/deposit

Escopo deposit:create. Não-custodial: o DePix vai direto para o seu endereço Liquid; a taxa da plataforma é recolhida via split da Eulen.

// request  (Idempotency-Key: <único>)
{
  "amountCents": 5000,        // R$50,00 que o recebedor quer
  "taxId": "12345678900",     // CPF/CNPJ do pagador (obrigatório)
  "walletId": "…",            // opcional; usa a carteira padrão
  "passFeesToPayer": true     // padrão: pagador cobre a taxa
}

// 201 response
{
  "id": "ckv…",
  "status": "PENDING",
  "amountCents": 5000,
  "feeCents": 199,            // sua taxa configurada (ex.)
  "totalCents": 5199,         // o que o pagador paga
  "pixQrCode": "0002…",       // copia e cola (EMV)
  "pixQrImage": "https://…png"
}
GET/v1/api/deposit/{id}/status

Escopo read:transactions. Status: PENDINGCONFIRMED. Falha: FAILED. REFUNDED = MED (estorno PIX), pode ocorrer mesmo após confirmado.

Create withdrawal (DePix → PIX)

POST/v1/api/withdraw

Escopo withdrawal:create.

// request  (Idempotency-Key: <único>)
{
  "amountCents": 10000,        // R$100,00 recebidos via PIX
  "pixKey": "[email protected]",
  "pixKeyType": "EMAIL",       // CPF | CNPJ | EMAIL | PHONE | EVP
  "taxId": "12345678900"
}

// response — envie DePix para depositAddress
{
  "id": "ckv…",
  "status": "PENDING",
  "amountCents": 10000,
  "feeCents": 100,
  "depositAddress": "lq1…",    // envie DePix aqui
  "depositAmountCents": 10123  // este tanto de DePix (inclui taxa do provedor)
}
GET/v1/api/withdraw/{id}/status

Status: PENDINGPROCESSINGCOMPLETED. Falha: FAILED / EXPIRED.

Webhooks (outbound)

Assine endpoints em sign up. Em cada evento terminal enviamos um POST assinado:

// body
{ "event": "deposit.confirmed", "data": { "id": "ckv…", … } }

// headers
X-Webhook-Event: deposit.confirmed
X-Webhook-Signature: sha256=<HMAC-SHA256 do corpo, com o secret do endpoint>

Eventos: deposit.confirmed, deposit.refunded, deposit.failed, withdrawal.completed, withdrawal.failed. Verifique recomputando o HMAC sobre o corpo cru. Entregas são registradas em Webhook logs; trate os eventos de forma idempotente (dedupe por data.id + evento).

Register webhook (API)

Escopo webhook:manage. Registre a URL que receberá os eventos — o secret retornado assina cada entrega (guarde-o).

POST/v1/api/webhook-endpoints
// request
{ "url": "https://seu-servidor.com/webhooks/flipdepix" }

// 201 response
{ "id": "ckv…", "url": "https://…", "secret": "whsec_…" }  // secret exibido só aqui
GET/v1/api/webhook-endpoints
PATCH/v1/api/webhook-endpoints/{id}
DELETE/v1/api/webhook-endpoints/{id}
GET/v1/api/webhook-deliveries

Wallets + balance

O DePix cai na sua carteira Liquid — cadastre ao menos uma (padrão) antes de criar depósitos.

GET/v1/api/wallets
POST/v1/api/wallets
DELETE/v1/api/wallets/{id}
GET/v1/api/balance
GET/v1/api/transactions
GET/v1/api/fees
// POST /v1/api/wallets  (wallets:write)
{ "liquidAddress": "lq1…", "label": "Principal", "makeDefault": true }

MEDs / Chargebacks

Lista os estornos (depósitos revertidos) da sua conta. Cada item traz tipo: estorno (pago por CPF/CNPJ diferente do informado — titularidade divergente) ou med (pago com o CPF informado e ainda revertido — possível contestação, o caso de risco). Cruze pelo depositId com a sua ordem.

GET/v1/api/meds
// GET /v1/api/meds  (read:transactions)
{ "alerts": [
  { "id": "…", "depositId": "cmr…", "providerRef": "019f…", "blockchainTxId": "…",
    "tipo": "estorno" | "med", "cpfDivergente": true,
    "amountCents": 2599, "payerName": "FULANO",
    "cpfReal": "12345678900", "cpfRequisitado": "99999999999",
    "status": "PENDING", "deadline": "…", "createdAt": "…" } ] }

Checkout — Payment links

Crie links de cobrança PIX por API. A página pública de pagamento fica em https://flipdepix.net/pay/{slug}. A taxa é absorvida por você (recebedor) — o pagador paga o valor cheio. amountCents entre R$ 2,00 e R$ 6.000,00; omita para valor aberto (o pagador escolhe). Requer o escopo links:manage.

POST/v1/api/payment-links
GET/v1/api/payment-links
PATCH/v1/api/payment-links/{id}
DELETE/v1/api/payment-links/{id}
// POST /v1/api/payment-links  (links:manage)
{ "title": "Mensal", "description": "Plano mensal", "amountCents": 2599 }
// → 201 { "id", "slug": "ab12cd34", "amountCents": 2599, "active": true, ... }
// Link público: https://flipdepix.net/pay/ab12cd34

// PATCH /v1/api/payment-links/{id}  → ativar / desativar
{ "active": false }

Fees

Default platform fees (your account may have custom values — query GET /v1/api/fees):

Deposit2% + R$ 0,99
WithdrawalGrátis

The feeCents returned in each response reflects this fee schedule.

Per-transaction limits (deposit and withdrawal): R$ 2,00R$ 6.000,00. Out-of-range amounts return 400 invalid_amount.

Errors

HTTPCódigos
400invalid_amount · invalid_tax_id · invalid_pix_key · invalid_pix_key_type · missing_idempotency_key · no_liquid_address
401unauthorized
403insufficient_scope · deposits_disabled · withdrawals_disabled
409previous_error · idempotency_mismatch · in_progress
422payer_declined
429rate_limited
502provider_error
503not_configured

Toda resposta de erro tem o formato { "error": "<código>", "message": "<texto>" }. Trate por error (estável); o message pode ser exibido ao usuário.

invalid_pix_keyHTTP 400

A chave PIX do saque é inválida (não bate com o pixKeyType: CPF=11 díg., CNPJ=14, EMAIL, PHONE=+55…, EVP=aleatória). Corrija a chave e reenvie com uma Idempotency-Key NOVA.

previous_errorHTTP 409

Você reenviou uma requisição com uma Idempotency-Key que JÁ falhou antes. A idempotência não reprocessa a mesma key — gere uma Idempotency-Key nova para cada nova tentativa (após corrigir a causa do erro anterior).

payer_declinedHTTP 422

O pagador foi recusado pela análise de conformidade do provedor. NÃO adianta repetir com o mesmo CPF/CNPJ — solicite o pagamento com outro pagador ou contate o suporte. A mensagem em `message` pode ser exibida ao usuário.

provider_errorHTTP 502

Falha temporária no provedor (ex.: indisponibilidade). Pode tentar novamente em alguns instantes com a mesma Idempotency-Key.

invalid_amountHTTP 400

Valor fora dos limites permitidos por transação. Ajuste o valor e reenvie.

invalid_tax_idHTTP 400

CPF/CNPJ do pagador em formato inválido (11 ou 14 dígitos, só números). Corrija antes de reenviar.