Documentação da API - DrawPayments
Base URL: https://api.drawpayments.online (ou http://localhost:3000 em dev)
Autenticação:
Cliente final: usa Authorization: Bearer (token gerado pelo sistema na criação do usuário/admin).
Admin: login via POST /api/v1/auth/login para obter JWT; acesso a rotas admin restrito por whitelist de IPs (variável ADMIN_IP_WHITELIST).
Endpoints principais
1. Registro de usuário
POST /api/v1/auth/register
- Body: { "username": "user1", "password": "pass", "confirmPassword": "pass" }
- Resposta: { ok: true, message: 'Account created and pending admin approval' }
- Usuário fica com status = pending até aprovação do admin.
2. Login (gera JWT)
POST /api/v1/auth/login
- Body: { "username": "admin", "password": "..." }
- Resposta: { token: "JWT_TOKEN" }
- Protegido por rate limiting e bloqueio após tentativas falhas.
3. Criar pagamento (cliente usa token da plataforma)
POST /api/v1/payments/create
- Headers: Authorization: Bearer
- Body: { "amount": 100.00 }
- Fluxo: valida token, escolhe gateway (ElitePay para normal, BusinessGateway para business), envia requisição simulada, cria transação, aplica taxa e credita saldo líquido.
- Resposta: { ok: true, gateway: "ElitePay", external_id: "...", amount: 100, fee: 2.5, net: 97.5 }
4. Webhooks (gateway → nossa app)
POST /api/v1/webhooks/:gateway
- Body: payload enviado pela gateway (ex.: { external_id: "elite_...", status: "success" })
- Cabeçalho: X-Signature: (HMAC-SHA256 do JSON usando chave da gateway configurada em variáveis de ambiente)
- A rota valida assinatura, registra em webhook_logs e atualiza transactions e users.balance quando aplicável.
5. Solicitar saque (cliente)
POST /api/v1/withdraws/request
- Headers: Authorization: Bearer
- Body: { "amount": 50.00 }
- Para normal: saque automático via ElitePay (debita saldo e cria transaction).
- Para business: cria withdraw_requests com status pending para aprovação do admin.
6. Rotas Admin (exigem IP na whitelist)
GET /api/v1/admin/users/pending → lista usuários pendentes.
POST /api/v1/admin/users/:id/approve → aprova usuário, define tipo e taxas. Body: { account_type, deposit_fee_percent, withdraw_fee_percent, createToken }
POST /api/v1/admin/users/:id/token → gera token da API para o usuário.
GET /api/v1/admin/users/:id/tokens → lista tokens do usuário.
POST /api/v1/admin/tokens/:token/revoke → revoga token.
POST /api/v1/admin/users/:id/adjust-balance → ajusta saldo manualmente. Body: { amount, reason }
GET /api/v1/admin/webhooks → lista logs de webhooks.
GET /api/v1/admin/withdraws → lista pedidos de saque.
POST /api/v1/admin/withdraws/:id/approve → aprova saque business (debita saldo, cria transaction).
POST /api/v1/admin/withdraws/:id/reject → rejeita pedido de saque.
Modelos de dados (resumido)
users: id, username, password_hash, account_type, status, deposit_fee_percent, withdraw_fee_percent, balance
api_tokens: id, user_id, token, created_at, revoked_at
transactions: id, user_id, gateway, external_id, type, amount, fee_amount, net_amount, status
withdraw_requests: id, user_id, amount, fee_amount, net_amount, status
webhook_logs, admin_logs, platform_stats
Observações de segurança
Não exponha ELITEPAY_API_KEY ou BUSINESS_GATEWAY_API_KEY no frontend.
Assine webhooks com HMAC-SHA256 e verifique X-Signature.
Use HTTPS em produção.
Exemplos curl
Criar pagamento (cliente):
``bash
curl -X POST https://api.drawpayments.online/api/v1/payments/create \
-H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{"amount": 120.00}'
`
Enviar webhook (simulado):
`bash
PAYLOAD='{"external_id":"elite_xxx","status":"success"}'
SIG=$(printf "%s" "$PAYLOAD" | openssl dgst -sha256 -hmac "$ELITEPAY_API_KEY" | sed 's/^.*= //')
curl -X POST http://localhost:3000/api/v1/webhooks/elite -H "X-Signature: $SIG" -H "Content-Type: application/json" -d "$PAYLOAD"
``
---
Documentação completa e exemplos podem ser expandidos para OpenAPI/Swagger se desejar.