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.