Referência da API COFRI v1.0 ← cofri.digital

Referência da API

A API COFRI fornece infraestrutura de custódia para L-BTC, USDt e DePix. Todas as requisições usam JSON sobre HTTPS.

Base URL https://api.cofri.digital
· Todos os valores monetários estão em satoshis (inteiros). 1 L-BTC = 100.000.000 sat.

Autenticação

Use Bearer Token no header Authorization de todas as requisições autenticadas.

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Tokens de acesso expiram em 1 hora. Use o endpoint /auth/refresh com o refresh token (válido por 7 dias) para renovar sem novo login.

Erros

Todos os erros seguem o mesmo envelope:

{ "status": false, "message": "...", "code": "ERROR_CODE", "timestamp": 1779900000 }
HTTPCódigoCausa
400VALIDATION_ERRORPayload inválido ou campos faltando
401UNAUTHORIZEDToken ausente, inválido ou expirado
403FORBIDDENSem permissão para o recurso
404NOT_FOUNDRecurso não encontrado
422VALIDATION_ERROREmail já registrado, saldo insuficiente
429RATE_LIMIT_EXCEEDEDMuitas requisições — aguarde
500INTERNAL_ERRORErro interno

Rate Limiting

EndpointLimiteJanela
POST /auth/login5 req5 min
POST /auth/register3 req1 hora
Demais100 req1 min

Login

POST /auth/login Retorna access + refresh token
CampoTipoDescrição
emailstringobrig.E-mail da conta
passwordstringobrig.Senha
POST /auth/login
Content-Type: application/json

{ "email": "eu@exemplo.com", "password": "minhasenha" }

// Resposta 200
{
  "status": true,
  "data": {
    "access_token": "eyJ...",
    "refresh_token": "eyJ...",
    "expires_in": 3600,
    "user": { "id": "uuid", "name": "...", "email": "..." }
  }
}

Registro

POST /auth/register Cria conta e provisiona carteira
CampoTipoDescrição
namestringobrig.Nome completo
emailstringobrig.E-mail único
passwordstringobrig.Mínimo 8 caracteres
company_namestringNome da empresa (opcional)
// Resposta 201
{
  "status": true,
  "message": "Account created successfully",
  "data": { "access_token": "eyJ...", "user": { ... } }
}

Refresh Token

POST /auth/refresh Renova o access token
CampoTipo
refresh_tokenstringobrig.

Perfil

GET /auth/me Dados do usuário autenticado
🔒Requer token
{ "status": true, "data": { "id": "uuid", "name": "...", "email": "...", "role": "user" } }

Saldos

GET /wallet/balances Saldo de todos os ativos
🔒Requer token
{
  "status": true,
  "data": {
    "balances": {
      "L-BTC":  { "available": 100000000, "locked": 0 },
      "USDt":   { "available": 10000000000, "locked": 0 },
      "DePix":  { "available": 50000000000, "locked": 0 }
    }
  }
}

Gerar Endereço

POST /wallet/address Endereço Liquid para depósito
🔒Requer token
CampoTipoDescrição
assetstringobrig.L-BTC, USDt ou DePix
{ "status": true, "data": { "address": "VJLCbLBTk...", "asset": "L-BTC" } }

Transações

GET /wallet/transactions Histórico paginado
🔒Requer token
Query paramPadrãoDescrição
page1Página
per_page20Itens por página (máx 100)
assetL-BTC, USDt ou DePix
typedeposit ou withdrawal

Saque

POST /wallet/withdraw Cria solicitação de saque on-chain
🔒Requer token
Saques são processados em fila. TXID retornado via webhook ao confirmar.
CampoTipoDescrição
assetstringobrig.L-BTC, USDt ou DePix
amountintegerobrig.Valor em satoshis
addressstringobrig.Endereço Liquid de destino
memostringReferência interna (máx 255 chars)
POST /wallet/withdraw
Authorization: Bearer <token>
Content-Type: application/json

{
  "asset": "L-BTC",
  "amount": 1000000,
  "address": "VJLCbLBTk...",
  "memo": "pagamento-123"
}

// Resposta
{ "status": true, "data": { "withdrawal_id": "uuid", "status": "queued", "fee": 500 } }

Pix — Criar Cobrança

POST /pix/create Gera QR Code Pix e converte para cripto
🔒Requer token
CampoTipoDescrição
amount_brlnumberobrig.Valor em reais (ex: 150.00)
assetstringobrig.DePix, USDt ou L-BTC
descriptionstringDescrição da cobrança
external_idstringID do seu sistema
{
  "status": true,
  "data": {
    "id": "uuid",
    "pix_copy_paste": "00020126580014BR.GOV.BCB.PIX...",
    "qr_code_base64": "data:image/png;base64,...",
    "amount_brl": 150.00,
    "asset": "DePix",
    "status": "pending",
    "expires_at": "2026-01-01T01:00:00Z"
  }
}

Pix — Status

GET /pix/status/{id} Status de um pagamento
🔒Requer token

Status: pendingconfirmeddepix_sentcredited

Casos especiais: after7d (retenção 7 dias), expired, failed

Pix — Taxas

GET /pix/fees Taxas atuais e cotação estimada
🔒Requer token

Webhooks

Eventos disparados: deposit.confirmed · withdrawal.completed · withdrawal.failed · pix.credited

Sempre valide o header X-COFRI-Signature (HMAC-SHA256) nos webhooks recebidos.
GET /webhooks Lista webhooks cadastrados
🔒Requer token
POST /webhooks Registra endpoint para eventos
🔒Requer token
CampoTipoDescrição
urlstringobrig.URL HTTPS de destino
eventsarrayobrig.Lista de eventos a assinar
secretstringSegredo HMAC (gerado se omitido)

Payload de exemplo

{
  "event": "deposit.confirmed",
  "data": {
    "deposit_id": "uuid", "user_id": "uuid",
    "asset": "L-BTC", "amount": 1000000,
    "txid": "abc123...", "confirmations": 2
  },
  "timestamp": 1779900000
}
DEL /webhooks/{id} Remove webhook
🔒Requer token

Ativos Suportados

SímboloNomeRedePrecisãoConfirmações
L-BTCLiquid BitcoinLiquid Network8 casas2 blocos (~2 min)
USDtTether USD (Liquid)Liquid Network8 casas2 blocos (~2 min)
DePixDePixLiquid Network8 casas2 blocos (~2 min)