{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"AppController_getRoot","summary":"Página inicial do sistema","parameters":[],"responses":{"200":{"description":"Página inicial ou informações da API"}},"tags":["Sistema"]}},"/health":{"get":{"operationId":"AppController_getHealth","summary":"Verificação de saúde do sistema","parameters":[],"responses":{"200":{"description":"Sistema funcionando corretamente","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"timestamp":{"type":"string","example":"2024-01-01T00:00:00.000Z"},"service":{"type":"string","example":"Subadquirente API"},"version":{"type":"string","example":"1.0.0"}}}}}}},"tags":["Sistema"]}},"/auth/login":{"post":{"operationId":"AuthController_login","summary":"Login do usuário","parameters":[{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":"Login realizado com sucesso ou requer 2FA"}},"tags":["Autenticação"]}},"/auth/login/2fa":{"post":{"operationId":"AuthController_complete2FALogin","summary":"Completar login com código 2FA","parameters":[{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Complete2FALoginDto"}}}},"responses":{"200":{"description":"Login completado com sucesso"}},"tags":["Autenticação"]}},"/auth/register":{"post":{"operationId":"AuthController_register","summary":"Registro de novo usuário com verificação de email","description":"Cria uma nova conta e envia código de verificação por email. O usuário deve confirmar o email antes de fazer login.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDto"}}}},"responses":{"201":{"description":"Usuário criado com sucesso. Código de verificação enviado por email.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Usuário criado com sucesso! Verifique seu email e digite o código de 6 dígitos para ativar sua conta."},"email_sent":{"type":"boolean","example":true},"verification_required":{"type":"boolean","example":true},"code_expires_in":{"type":"string","example":"15 minutos"},"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"tipo":{"type":"string"},"email_verificado":{"type":"boolean","example":false},"status":{"type":"string","example":"pendente_verificacao"}}}}}}}}},"tags":["Autenticação"]}},"/auth/confirm-email":{"post":{"operationId":"AuthController_confirmEmail","summary":"Confirmar email com código de verificação","description":"Confirma o email do usuário usando o código de 6 dígitos enviado por email. Após confirmação, a conta é ativada e o usuário pode fazer login.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmEmailDto"}}}},"responses":{"200":{"description":"Email confirmado com sucesso. Conta ativada e token de acesso gerado.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Email confirmado com sucesso! Sua conta foi ativada."},"email_verified":{"type":"boolean","example":true},"account_activated":{"type":"boolean","example":true},"access_token":{"type":"string","example":"jwt_token_here"},"user":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"tipo":{"type":"string"},"email_verificado":{"type":"boolean","example":true},"status":{"type":"string","example":"ativo"}}},"next_steps":{"type":"array","items":{"type":"string"},"example":["Sua conta foi ativada com sucesso!","Agora você pode fazer login no sistema","Complete seu cadastro de lojista para começar a processar pagamentos"]}}}}}}},"tags":["Autenticação"]}},"/auth/resend-code":{"post":{"operationId":"AuthController_resendCode","summary":"Reenviar código de verificação de email","description":"Reenvia o código de verificação para o email especificado. Só funciona para contas pendentes de verificação. Limite: 1 código a cada 2 minutos.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendCodeDto"}}}},"responses":{"200":{"description":"Novo código de verificação enviado com sucesso.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Novo código de verificação enviado com sucesso!"},"email_sent":{"type":"boolean","example":true},"code_expires_in":{"type":"string","example":"15 minutos"},"next_step":{"type":"string","example":"Verifique seu email e digite o novo código de 6 dígitos"}}}}}}},"tags":["Autenticação"]}},"/auth/2fa/status":{"get":{"operationId":"AuthController_get2FAStatus","summary":"Verificar status do 2FA do usuário","parameters":[],"responses":{"200":{"description":""}},"tags":["Autenticação"],"security":[{"bearer":[]}]}},"/auth/2fa/setup":{"post":{"operationId":"AuthController_setup2FA","summary":"Configurar 2FA para o usuário","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Setup2FADto"}}}},"responses":{"200":{"description":"Configuração 2FA iniciada. Retorna QR Code e códigos de backup."}},"tags":["Autenticação"],"security":[{"bearer":[]}]}},"/auth/2fa/enable":{"post":{"operationId":"AuthController_enable2FA","summary":"Habilitar 2FA após configuração","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Verify2FADto"}}}},"responses":{"200":{"description":"2FA habilitado com sucesso"}},"tags":["Autenticação"],"security":[{"bearer":[]}]}},"/auth/2fa/disable":{"post":{"operationId":"AuthController_disable2FA","summary":"Desabilitar 2FA","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Disable2FADto"}}}},"responses":{"200":{"description":"2FA desabilitado com sucesso"}},"tags":["Autenticação"],"security":[{"bearer":[]}]}},"/auth/2fa/logs":{"get":{"operationId":"AuthController_get2FALogs","summary":"Histórico de atividades 2FA","parameters":[],"responses":{"200":{"description":""}},"tags":["Autenticação"],"security":[{"bearer":[]}]}},"/auth/2fa/verify":{"post":{"operationId":"AuthController_verify2FA","summary":"Verificar código 2FA (para operações sensíveis)","parameters":[{"name":"user-agent","required":true,"in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Verify2FADto"}}}},"responses":{"201":{"description":""}},"tags":["Autenticação"],"security":[{"bearer":[]}]}},"/users/profile":{"get":{"operationId":"UsersController_getProfile","summary":"Obter perfil do usuário logado","parameters":[],"responses":{"200":{"description":""}},"tags":["Usuários"],"security":[{"bearer":[]}]}},"/users/security":{"get":{"operationId":"UsersController_getSecurityInfo","summary":"Obter informações de segurança da conta","parameters":[],"responses":{"200":{"description":""}},"tags":["Usuários"],"security":[{"bearer":[]}]}},"/merchants/api/balances":{"get":{"operationId":"MerchantsController_getBalancesApi","summary":"Obter saldos por adquirente (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password. Retorna saldos consolidados de todas as adquirentes do lojista.","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"basic":[]}]}},"/merchants/api/balances/{acquirerId}/movements":{"get":{"operationId":"MerchantsController_getMovementsApi","summary":"Obter movimentações de uma adquirente específica (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password","parameters":[{"name":"acquirerId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"basic":[]}]}},"/merchants/api/withdraw":{"post":{"operationId":"MerchantsController_requestWithdrawApi","summary":"Solicitar saque PIX via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Cria uma solicitação de saque PIX com fracionamento automático de recebíveis.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawRequestDto"}}}},"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"basic":[]}]}},"/merchants/api/withdrawals":{"get":{"operationId":"MerchantsController_getWithdrawalsApi","summary":"Listar solicitações de saque PIX (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","processando","concluido","cancelado"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"basic":[]}]}},"/merchants/api/rates":{"get":{"operationId":"MerchantsController_getRatesApi","summary":"Obter taxas efetivas do lojista (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password. Retorna as taxas de transação e saque aplicáveis ao lojista.","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"basic":[]}]}},"/merchants/api/summary":{"get":{"operationId":"MerchantsController_getSummaryApi","summary":"Resumo consolidado da conta (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password. Retorna um resumo com saldos totais, transações do dia e estatísticas básicas.","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"basic":[]}]}},"/merchants/dashboard":{"get":{"operationId":"MerchantsController_getDashboard","summary":"Dashboard completo do lojista","description":"Retorna todos os dados necessários para a página inicial: saldos, transações do dia, overview mensal, saques recentes, atividade semanal e métodos de pagamento","parameters":[{"name":"periodo","required":false,"in":"query","description":"Período para filtrar dados do dashboard","schema":{"enum":["hoje","semana","mes","trimestre","ano"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","description":"Data inicial personalizada (sobrescreve período)","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","description":"Data final personalizada (sobrescreve período)","schema":{"example":"2024-12-31","type":"string"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/profile":{"get":{"operationId":"MerchantsController_getProfile","summary":"Obter dados do lojista logado","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants":{"post":{"operationId":"MerchantsController_create","summary":"Criar cadastro de lojista","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMerchantDto"}}}},"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"put":{"operationId":"MerchantsController_update","summary":"Atualizar dados do lojista","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMerchantDto"}}}},"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/test-upload":{"post":{"operationId":"MerchantsController_testUpload","summary":"Testar upload de documentos","description":"Endpoint para testar se os documentos base64 estão sendo recebidos corretamente sem salvar no banco","parameters":[],"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/regenerate-api-key":{"post":{"operationId":"MerchantsController_regenerateApiKey","summary":"Regenerar API Key do lojista","parameters":[],"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/rates":{"get":{"operationId":"MerchantsController_getRates","summary":"Obter taxas efetivas do lojista","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"put":{"operationId":"MerchantsController_setMerchantRates","summary":"Definir taxas personalizadas do lojista (apenas contas principais)","description":"Define taxas personalizadas para transações e saques do lojista principal.\n    \n    **Importante:** Este endpoint é apenas para contas principais (tipo_conta = 'principal').\n    Subcontas não têm taxas próprias, apenas margens da conta mãe.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetMerchantRatesDto"}}}},"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"delete":{"operationId":"MerchantsController_removeMerchantRates","summary":"Remover todas as taxas personalizadas (apenas contas principais)","description":"Remove todas as taxas personalizadas do lojista principal, fazendo com que ele volte a usar as taxas padrão do sistema","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/rates/calculator":{"get":{"operationId":"MerchantsController_calculateFee","summary":"Calculadora de taxas","description":"Calcula o valor da taxa e valor líquido para uma transação ou saque simulado.","parameters":[{"name":"tipo","required":true,"in":"query","schema":{"enum":["transacao","saque"],"type":"string"}},{"name":"valor","required":true,"in":"query","description":"Valor para simulação","schema":{"example":100,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/balances":{"get":{"operationId":"MerchantsController_getBalances","summary":"Obter saldos por adquirente","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/balances/{acquirerId}/movements":{"get":{"operationId":"MerchantsController_getMovements","summary":"Obter movimentações de uma adquirente específica","parameters":[{"name":"acquirerId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/withdraw":{"post":{"operationId":"MerchantsController_requestWithdraw","summary":"Solicitar saque PIX automático","description":"Solicita um saque PIX com processo totalmente automatizado:\n    \n    - Sistema seleciona automaticamente a InfoPago como adquirente\n    - Processamento sempre automático (sem necessidade de aprovação)\n    - Detecção automática do tipo de chave PIX\n    - Fracionamento automático de recebíveis\n    \n    **Payload simplificado:**\n    ```json\n    {\n      \"valor\": 100.50,\n      \"pixKey\": \"a15e9de7-ae1c-4c95-aee4-4a8557827e38\"\n    }\n    ```","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawRequestDto"}}}},"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/withdrawals":{"get":{"operationId":"MerchantsController_getWithdrawals","summary":"Listar solicitações de saque","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","processando","concluido","cancelado"],"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/withdrawal-rates":{"get":{"operationId":"MerchantsController_getWithdrawalRates","summary":"Obter taxas de saque efetivas do lojista","description":"Retorna as taxas de saque que se aplicam ao lojista.","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"put":{"operationId":"MerchantsController_requestWithdrawalRatesChange","summary":"Solicitar alteração de taxas de saque personalizadas","description":"Permite ao lojista solicitar taxas de saque personalizadas.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantWithdrawalRatesDto"}}}},"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/withdrawal-rates/calculator":{"get":{"operationId":"MerchantsController_calculateWithdrawalFee","summary":"Calculadora de taxas de saque","description":"Calcula o valor da taxa e valor líquido para um saque simulado.","parameters":[{"name":"tipo_saque","required":true,"in":"query","schema":{"enum":["manual","automatico"],"type":"string"}},{"name":"valor","required":true,"in":"query","description":"Valor do saque para simulação","schema":{"example":100,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/consolidated-dashboard":{"get":{"operationId":"MerchantsController_getConsolidatedSubAccountsDashboard","summary":"Dashboard consolidado de todas as subcontas","description":"Retorna um dashboard consolidado com dados de todas as subcontas da conta mãe: saldos totais, transações, performance, etc.","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts":{"get":{"operationId":"MerchantsController_getSubAccounts","summary":"Listar contas filhas (para contas mãe)","parameters":[],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"post":{"operationId":"MerchantsController_createSubAccount","summary":"Criar nova conta filha","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubAccountDto"}}}},"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/balances":{"get":{"operationId":"MerchantsController_getSubAccountBalances","summary":"Obter saldos detalhados de uma conta filha específica","description":"Permite à conta mãe visualizar os saldos consolidados de uma conta filha por adquirente","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/margins":{"get":{"operationId":"MerchantsController_getSubAccountMargins","summary":"Obter margens efetivas de uma conta filha","description":"Retorna as margens da conta mãe que se aplicam a uma conta filha específica. Cartões usam margem padrão do sistema.","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"put":{"operationId":"MerchantsController_setSubAccountMargins","summary":"Definir margens da conta mãe para subconta","description":"Define as margens que a conta mãe receberá das transações da subconta.\n    \n    **Como funciona:**\n    - Subcontas não têm taxas próprias, apenas as margens da conta mãe\n    - As margens são armazenadas diretamente na subconta (tabela lojistas)\n    - Cartões sempre usam margem padrão do sistema\n    - PIX e Boleto podem ter margens personalizadas (fixa ou percentual)\n    - A subconta paga as taxas normais + a margem da conta mãe","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetSubAccountMarginsDto"}}}},"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]},"delete":{"operationId":"MerchantsController_removeSubAccountMargins","summary":"Remover margens personalizadas da subconta","description":"Remove as margens personalizadas da subconta, fazendo com que ela volte a usar as margens padrão (zero)","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/transfer-balance":{"post":{"operationId":"MerchantsController_transferBalanceFromSubAccount","summary":"Transferir saldo da conta filha para a conta mãe","description":"Permite à conta mãe transferir saldo disponível de uma conta filha para si mesma. Operação irreversível com registro completo de auditoria.","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferBalanceDto"}}}},"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/status":{"put":{"operationId":"MerchantsController_updateSubAccountStatus","summary":"Alterar status de uma conta filha","description":"Permite à conta mãe alterar o status de uma conta filha (ativo, suspenso, inativo). Contas suspensas/inativas não podem processar transações.","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubAccountStatusDto"}}}},"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/transactions":{"get":{"operationId":"MerchantsController_getSubAccountTransactions","summary":"Visualizar transações de uma conta filha","description":"Permite à conta mãe visualizar as transações de uma conta filha específica com filtros e paginação","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01"}},{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","processando","aprovada","negada","cancelada"],"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"example":50}},{"name":"page","required":false,"in":"query","schema":{"example":1}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/api-key":{"delete":{"operationId":"MerchantsController_removeSubAccountApiKey","summary":"Remover API Key de uma conta filha","description":"Remove a API Key de uma conta filha, impedindo que ela processe transações via API. A conta filha precisará solicitar uma nova API Key.","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/merchants/sub-accounts/{childId}/regenerate-api-key":{"post":{"operationId":"MerchantsController_regenerateSubAccountApiKey","summary":"Regenerar API Key de uma conta filha","description":"Gera uma nova API Key para uma conta filha. A API Key anterior será invalidada imediatamente.","parameters":[{"name":"childId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegenerateApiKeyDto"}}}},"responses":{"201":{"description":""}},"tags":["Lojistas"],"security":[{"bearer":[]}]}},"/transactions/receivables":{"get":{"operationId":"TransactionsController_getReceivables","summary":"Listar recebíveis do lojista","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["agendado","disponivel","antecipado","pago","cancelado"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"example":100,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Transações e Recebíveis"],"security":[{"bearer":[]}]}},"/transactions":{"get":{"operationId":"TransactionsController_listTransactions","summary":"Listar transações do lojista","parameters":[{"name":"start_date","required":false,"in":"query","schema":{"example":"2025-06-01T00:00:00.000Z","type":"string"}},{"name":"end_date","required":false,"in":"query","schema":{"example":"2025-06-30T23:59:59.999Z","type":"string"}}],"responses":{"200":{"description":""}},"tags":["Transações e Recebíveis"],"security":[{"bearer":[]},{"bearer":[]}]}},"/transactions/financial-report":{"get":{"operationId":"TransactionsController_getFinancialReport","summary":"Relatório financeiro por período","parameters":[{"name":"start_date","required":true,"in":"query","schema":{"type":"string"}},{"name":"end_date","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Transações e Recebíveis"],"security":[{"bearer":[]}]}},"/transactions/advancement":{"post":{"operationId":"TransactionsController_requestAdvancement","summary":"Solicitar antecipação de recebíveis","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdvancementRequestDto"}}}},"responses":{"201":{"description":""}},"tags":["Transações e Recebíveis"],"security":[{"bearer":[]}]}},"/payments/transactions":{"post":{"operationId":"PaymentsController_createTransaction","summary":"Criar nova transação (API Key) - Processamento Automático com Webhooks","description":"Use Basic Auth com API Key como username e \"x\" como password. \n    \n    **Sistema de Webhooks Automáticos:**\n    - ✅ **transaction.created**: Enviado imediatamente após criar a transação\n    - ✅ **transaction.status_changed**: Enviado quando status muda (ex: pendente → processando)\n    - ✅ **transaction.confirmed**: Enviado quando pagamento é aprovado\n    - ✅ **transaction.failed**: Enviado quando pagamento é negado\n    - ✅ **transaction.cancelled**: Enviado quando transação é cancelada\n    \n    **Processamento Automático:**\n    - A transação é processada automaticamente pelo Supabase\n    - Cálculo de taxas, criação de recebíveis e ledger são automáticos\n    - Webhooks são enviados em tempo real para todas as mudanças\n    \n    **Configuração do Webhook:**\n    - Forneça uma URL válida no campo `postbackUrl`\n    - Sua URL receberá POST requests com dados da transação\n    - Headers incluem informações sobre o evento e timestamp","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTransactionDto"}}}},"responses":{"201":{"description":"Transação criada com sucesso. Webhook de criação enviado automaticamente.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true},"transacao":{"type":"object","properties":{"id":{"type":"string","example":"uuid-da-transacao"},"status":{"type":"string","example":"pendente"},"webhook":{"type":"object","properties":{"status":{"type":"string","example":"configurado"},"eventos_enviados":{"type":"array","items":{"type":"string"},"example":["transaction.created"]},"proximos_eventos":{"type":"array","items":{"type":"string"},"example":["transaction.status_changed","transaction.confirmed"]}}}}}}}}}}},"tags":["Pagamentos"],"security":[{"basic":[]}]},"get":{"operationId":"PaymentsController_listTransactions","summary":"Listar transações do lojista com paginação e filtros","description":"Retorna uma lista limpa e organizada das transações com informações essenciais. Todas as transações são processadas automaticamente pelo Supabase com webhooks em tempo real.","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","processando","aprovada","negada","cancelada"],"type":"string"}},{"name":"metodo_pagamento","required":false,"in":"query","schema":{"enum":["cartao_credito","cartao_debito","pix","boleto"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"search","required":false,"in":"query","description":"Busca por ID externo, nome ou email do cliente","schema":{"example":"TXN-123","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (máximo 100)","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"bearer":[]}]}},"/payments/transactions/{id}":{"get":{"operationId":"PaymentsController_getTransaction","summary":"Obter detalhes de uma transação","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"bearer":[]}]}},"/payments/transactions/{id}/api":{"get":{"operationId":"PaymentsController_getTransactionApi","summary":"Obter detalhes de uma transação (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password. Inclui informações sobre webhooks enviados.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"basic":[]}]}},"/payments/transactions/{id}/webhook-logs":{"get":{"operationId":"PaymentsController_getTransactionWebhookLogs","summary":"Obter logs de webhooks de uma transação","description":"Retorna histórico completo de webhooks enviados para uma transação específica, incluindo status de entrega e erros.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"bearer":[]}]}},"/payments/transactions/{id}/webhook-logs/api":{"get":{"operationId":"PaymentsController_getTransactionWebhookLogsApi","summary":"Obter logs de webhooks de uma transação (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"basic":[]}]}},"/payments/transactions/api":{"get":{"operationId":"PaymentsController_listTransactionsApi","summary":"Listar transações com paginação (API Key)","description":"Use Basic Auth com API Key como username e \"x\" como password. Suporta os mesmos filtros da versão JWT. Inclui informações sobre webhooks configurados.","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","processando","aprovada","negada","cancelada"],"type":"string"}},{"name":"metodo_pagamento","required":false,"in":"query","schema":{"enum":["cartao_credito","cartao_debito","pix","boleto"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"search","required":false,"in":"query","description":"Busca por ID externo, nome ou email do cliente","schema":{"example":"TXN-123","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (máximo 100)","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"basic":[]}]}},"/payments/transactions/{id}/reprocess":{"post":{"operationId":"PaymentsController_reprocessTransaction","summary":"Reprocessar transação (Admin apenas)","description":"Reprocessa uma transação recalculando taxas e recebíveis. Útil para correções ou atualizações de configuração. Webhooks serão reenviados se configurados.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Pagamentos"],"security":[{"bearer":[]}]}},"/payments/webhook-stats":{"get":{"operationId":"PaymentsController_getWebhookStats","summary":"Estatísticas de webhooks do lojista","description":"Retorna estatísticas consolidadas sobre webhooks enviados: total, sucessos, falhas, eventos mais comuns, etc.","parameters":[],"responses":{"200":{"description":""}},"tags":["Pagamentos"],"security":[{"bearer":[]}]}},"/webhooks/medius":{"post":{"operationId":"MediusController_handleWebhook","summary":"Webhook da Medius (URL fixa)","description":"Endpoint para receber notificações de status da adquirente Medius. A transação é identificada pelo externalRef no corpo da requisição.","parameters":[],"responses":{"200":{"description":"Webhook processado com sucesso"}},"tags":["Integração Medius"]}},"/webhooks/medius/{transactionId}":{"post":{"operationId":"MediusController_handleWebhookLegacy","summary":"Webhook da Medius (DEPRECATED - usar URL fixa)","description":"Endpoint legado para receber notificações. Use o endpoint POST /webhooks/medius sem parâmetros.","parameters":[{"name":"transactionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Webhook processado com sucesso"}},"tags":["Integração Medius"]}},"/webhooks/medius/test/{transactionId}":{"get":{"operationId":"MediusController_testStatusCheck","summary":"Testar consulta de status na Medius","description":"Endpoint para testar a consulta de status de uma transação na Medius","parameters":[{"name":"transactionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Integração Medius"]}},"/webhooks/infopago":{"post":{"operationId":"InfopagoController_handleWebhook","summary":"Webhook Geral da InfoPago (PIX IN e PIX OUT)","description":"Endpoint unificado para receber todas as notificações da InfoPago:\n    \n    **PIX IN (Transações):**\n    - Pagamentos PIX confirmados\n    - Cobranças expiradas ou canceladas\n    \n    **PIX OUT (Saques):**\n    - Saques PIX processados\n    - Saques PIX concluídos\n    - Saques PIX rejeitados\n    \n    **URL do Webhook:** `https://api.pelegrinn.com/webhooks/infopago`\n    \n    **Formatos aceitos:**\n    \n    Para PIX IN (Transações):\n    ```json\n    {\n      \"txid\": \"string\",\n      \"endToEndId\": \"string\", \n      \"valor\": \"100.50\",\n      \"status\": \"CONCLUIDA\",\n      \"horario\": \"2024-01-01T10:00:00Z\"\n    }\n    ```\n    \n    Para PIX OUT (Saques):\n    ```json\n    {\n      \"id\": \"string\",\n      \"externalId\": \"string\",\n      \"status\": \"COMPLETED\",\n      \"endToEndId\": \"string\",\n      \"processedAt\": \"2024-01-01T10:00:00Z\"\n    }\n    ```\n    \n    O sistema identifica automaticamente se é PIX IN ou PIX OUT baseado nos campos do payload.","parameters":[],"responses":{"200":{"description":"Webhook processado com sucesso"}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/pix":{"post":{"operationId":"InfopagoController_handlePixWebhook","summary":"Webhook PIX da InfoPago (endpoint alternativo)","description":"Endpoint alternativo específico para notificações PIX da InfoPago.\n    \n    **URL do Webhook:** `POST /webhooks/infopago/pix`\n    \n    Use este endpoint se a InfoPago exigir uma URL específica para PIX.","parameters":[],"responses":{"200":{"description":"Webhook PIX processado com sucesso"}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/notification":{"post":{"operationId":"InfopagoController_handleNotification","summary":"Webhook de notificação da InfoPago (endpoint genérico)","description":"Endpoint genérico para qualquer tipo de notificação da InfoPago.\n    \n    **URL do Webhook:** `POST /webhooks/infopago/notification`","parameters":[],"responses":{"200":{"description":"Notificação processada com sucesso"}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/test/{txid}":{"get":{"operationId":"InfopagoController_testStatusCheck","summary":"Testar consulta de status na InfoPago","description":"Endpoint para testar a consulta de status de uma transação na InfoPago usando o txid","parameters":[{"name":"txid","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/test-auth":{"post":{"operationId":"InfopagoController_testAuthentication","summary":"Testar autenticação com InfoPago","description":"Endpoint para testar se a autenticação com certificado está funcionando","parameters":[],"responses":{"201":{"description":""}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/webhook-info":{"get":{"operationId":"InfopagoController_getWebhookInfo","summary":"Informações sobre os webhooks da InfoPago","description":"Retorna informações sobre como configurar os webhooks da InfoPago","parameters":[],"responses":{"200":{"description":""}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/cashout":{"post":{"operationId":"InfopagoController_handleCashoutWebhook","summary":"Webhook de Cash Out da InfoPago","description":"Endpoint para receber notificações de saque PIX da InfoPago Cash Out.\n    \n    **URL do Webhook:** `POST /webhooks/infopago/cashout`\n    \n    **Formato esperado do payload:**\n    ```json\n    {\n      \"id\": \"string\",\n      \"externalId\": \"string\",\n      \"status\": \"COMPLETED\",\n      \"endToEndId\": \"string\",\n      \"processedAt\": \"2024-01-01T10:00:00Z\"\n    }\n    ```\n    \n    O saque é identificado pelo `externalId` (nosso withdrawal ID) no corpo da requisição.","parameters":[],"responses":{"200":{"description":"Webhook de cash out processado com sucesso"}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/cashout/test/{infopagoId}":{"get":{"operationId":"InfopagoController_testCashoutStatusCheck","summary":"Testar consulta de status de cash out na InfoPago","description":"Endpoint para testar a consulta de status de um saque na InfoPago usando o ID da InfoPago","parameters":[{"name":"infopagoId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Integração InfoPago"]}},"/webhooks/infopago/cashout/test-auth":{"post":{"operationId":"InfopagoController_testCashoutAuthentication","summary":"Testar autenticação com InfoPago Cash Out","description":"Endpoint para testar se a autenticação com a API de Cash Out está funcionando","parameters":[],"responses":{"201":{"description":""}},"tags":["Integração InfoPago"]}},"/admin/merchants":{"get":{"operationId":"AdminController_getAllMerchants","summary":"Listar todos os lojistas","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","em_analise","aprovado","rejeitado","suspenso"],"type":"string"}},{"name":"tipo_conta","required":false,"in":"query","schema":{"enum":["principal","subconta","marketplace"],"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"example":100,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/merchants/{id}/approve":{"put":{"operationId":"AdminController_approveMerchant","summary":"Aprovar lojista com configuração de taxas","description":"Aprova o lojista e opcionalmente define taxas específicas (PIX e Boleto). Taxas de cartão usam valores padrão do sistema.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveMerchantDto"}}}},"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/merchants/{id}/reject":{"put":{"operationId":"AdminController_rejectMerchant","summary":"Rejeitar lojista","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectMerchantDto"}}}},"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/system-rates":{"put":{"operationId":"AdminController_updateSystemRates","summary":"Atualizar taxas base do sistema","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSystemRatesDto"}}}},"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]},"post":{"operationId":"AdminController_createSystemRates","summary":"Criar novas taxas base do sistema (alternativa)","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSystemRatesDto"}}}},"responses":{"201":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]},"get":{"operationId":"AdminController_getCurrentSystemRates","summary":"Obter taxas base atuais do sistema","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/stats":{"get":{"operationId":"AdminController_getSystemStats","summary":"Estatísticas do sistema","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/audit-logs":{"get":{"operationId":"AdminController_getAuditLogs","summary":"Logs de auditoria com paginação","description":"Lista logs de auditoria do sistema com filtros avançados e paginação para evitar sobrecarga","parameters":[{"name":"usuario_id","required":false,"in":"query","description":"Filtrar por usuário específico","schema":{"type":"string"}},{"name":"acao","required":false,"in":"query","description":"Filtrar por tipo de ação","schema":{"type":"string"}},{"name":"recurso","required":false,"in":"query","description":"Filtrar por tipo de recurso","schema":{"type":"string"}},{"name":"data_inicio","required":false,"in":"query","description":"Data inicial","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","description":"Data final","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (máximo 200)","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/users":{"post":{"operationId":"AdminController_createUser","summary":"Criar usuário (admin/operador)","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]},"get":{"operationId":"AdminController_getUsers","summary":"Listar usuários do sistema","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/ledger/entries":{"get":{"operationId":"AdminController_getAllLedgerEntries","summary":"Visualizar todas as entradas do ledger (Admin)","description":"Lista todas as entradas do ledger contábil de todos os lojistas com filtros avançados e paginação","parameters":[{"name":"lojista_id","required":false,"in":"query","description":"Filtrar por lojista específico","schema":{"example":"uuid-lojista","type":"string"}},{"name":"conta_codigo","required":false,"in":"query","description":"Filtrar por código da conta","schema":{"example":"1.1.001","type":"string"}},{"name":"tipo_entrada","required":false,"in":"query","description":"Tipo de entrada","schema":{"enum":["debito","credito"],"type":"string"}},{"name":"referencia_tipo","required":false,"in":"query","description":"Tipo de referência","schema":{"enum":["transacao","taxa","saque","antecipacao","ajuste"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","description":"Data inicial","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","description":"Data final","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (máximo 500)","schema":{"example":100,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/ledger/balances":{"get":{"operationId":"AdminController_getAllMerchantBalances","summary":"Visualizar saldos consolidados de todos os lojistas (Admin)","description":"Mostra saldos consolidados por lojista com totais gerais do sistema","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/ledger/balances/{merchantId}":{"get":{"operationId":"AdminController_getMerchantLedgerBalance","summary":"Visualizar saldo detalhado de um lojista específico (Admin)","description":"Mostra saldo detalhado e histórico de um lojista específico","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/transactions":{"get":{"operationId":"AdminController_getAllTransactions","summary":"Visualizar todas as transações do sistema (Admin)","description":"Lista todas as transações de todos os lojistas com filtros avançados e paginação","parameters":[{"name":"lojista_id","required":false,"in":"query","description":"Filtrar por lojista específico","schema":{"example":"uuid-lojista","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["pendente","processando","aprovada","negada","cancelada"],"type":"string"}},{"name":"metodo_pagamento","required":false,"in":"query","schema":{"enum":["cartao_credito","cartao_debito","pix","boleto"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"search","required":false,"in":"query","description":"Busca por ID externo, nome ou email do cliente","schema":{"example":"TXN-123","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (máximo 200)","schema":{"example":50,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/transactions/summary":{"get":{"operationId":"AdminController_getTransactionsSummary","summary":"Resumo consolidado de transações por lojista (Admin)","description":"Mostra resumo de transações agrupado por lojista com totais e estatísticas","parameters":[{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/financial-overview":{"get":{"operationId":"AdminController_getFinancialOverview","summary":"Visão geral financeira do sistema (Admin)","description":"Dashboard financeiro completo com métricas consolidadas de todos os lojistas","parameters":[{"name":"periodo","required":false,"in":"query","schema":{"enum":["hoje","semana","mes","trimestre","ano"],"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/withdrawals":{"get":{"operationId":"AdminController_getAllWithdrawals","summary":"Listar todos os saques (Admin)","description":"Lista todas as solicitações de saque de todos os lojistas","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/withdrawals/pending":{"get":{"operationId":"AdminController_getPendingWithdrawals","summary":"Listar saques pendentes de aprovação (Admin)","description":"Lista apenas os saques manuais que estão aguardando aprovação","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/withdrawals/{id}/approve":{"put":{"operationId":"AdminController_approveWithdrawal","summary":"Aprovar saque manual (Admin)","description":"Aprova um saque manual e inicia o processamento","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/withdrawals/{id}/reject":{"put":{"operationId":"AdminController_rejectWithdrawal","summary":"Rejeitar saque (Admin)","description":"Rejeita um saque manual com motivo","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/withdrawal-rates/system":{"put":{"operationId":"AdminController_updateSystemWithdrawalRates","summary":"Atualizar taxas padrão de saque do sistema (Admin)","description":"Define as taxas padrão de saque que serão aplicadas quando lojistas não tiverem taxas personalizadas.\n    \n    **Taxas Padrão Atuais:**\n    - Saques Manuais: R$ 0,50 (taxa fixa)\n    - Saques Automáticos: 1% (taxa percentual)\n    \n    **Importante:** Estas taxas só se aplicam quando o lojista não possui taxas personalizadas configuradas.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemWithdrawalRatesDto"}}}},"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]},"get":{"operationId":"AdminController_getSystemWithdrawalRates","summary":"Obter taxas padrão de saque do sistema (Admin)","description":"Retorna as taxas padrão atuais do sistema para saques manuais e automáticos","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/merchants/{merchantId}/withdrawal-rates":{"put":{"operationId":"AdminController_setMerchantWithdrawalRates","summary":"Definir taxas personalizadas de saque para lojista (Admin)","description":"Define taxas personalizadas de saque para um lojista específico.\n    \n    **Como funciona:**\n    - Se definidas, estas taxas sobrescrevem as taxas padrão do sistema\n    - Lojista pode ter taxas diferentes para saques manuais e automáticos\n    - Taxas podem ser fixas (valor em reais) ou percentuais\n    - Se não definidas, lojista usará as taxas padrão do sistema\n    \n    **Exemplo de uso:**\n    - Cliente VIP: taxa reduzida\n    - Alto volume: taxa percentual menor\n    - Conta premium: taxa fixa menor","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantWithdrawalRatesDto"}}}},"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]},"get":{"operationId":"AdminController_getMerchantWithdrawalRates","summary":"Obter taxas de saque de um lojista específico (Admin)","description":"Retorna as taxas efetivas de saque do lojista (personalizadas ou padrão do sistema)","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]},"delete":{"operationId":"AdminController_removeMerchantWithdrawalRates","summary":"Remover taxas personalizadas de saque do lojista (Admin)","description":"Remove as taxas personalizadas do lojista, fazendo com que ele volte a usar as taxas padrão do sistema","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/merchants/{merchantId}/documents":{"get":{"operationId":"AdminController_getMerchantDocuments","summary":"Visualizar documentos de um lojista (Admin)","description":"Retorna os documentos em base64 de um lojista específico para análise administrativa.\n    \n    **Documentos incluídos:**\n    - Contrato social (se pessoa jurídica)\n    - Documento pessoal (RG, CNH, CPF)\n    - Foto segurando documento\n    \n    **Importante:** Os documentos são retornados em formato base64 completo para visualização no frontend.","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/merchants/{merchantId}/documents/verify":{"put":{"operationId":"AdminController_verifyMerchantDocuments","summary":"Marcar documentos como verificados (Admin)","description":"Permite ao admin marcar os documentos de um lojista como verificados ou não verificados, com observações.","parameters":[{"name":"merchantId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/admin/withdrawal-rates/stats":{"get":{"operationId":"AdminController_getWithdrawalRatesStats","summary":"Estatísticas de taxas de saque do sistema (Admin)","description":"Retorna estatísticas consolidadas sobre as taxas de saque:\n    - Quantos lojistas usam taxas personalizadas vs padrão\n    - Média de taxas aplicadas\n    - Receita total gerada com taxas de saque\n    - Comparativo entre saques manuais e automáticos","parameters":[],"responses":{"200":{"description":""}},"tags":["Administração"],"security":[{"bearer":[]}]}},"/withdrawals":{"post":{"operationId":"WithdrawalsController_createWithdrawal","summary":"Solicitar saque PIX com fracionamento automático","description":"Cria uma solicitação de saque via PIX com seleção automática da adquirente e fracionamento automático de recebíveis. \n    \n    **Como funciona o fracionamento:**\n    - O sistema seleciona automaticamente os recebíveis disponíveis da adquirente\n    - A adquirente é selecionada automaticamente (prioriza InfoPago para PIX)\n    - O tipo de saque é sempre automático (processamento instantâneo)\n    - O tipo de chave PIX é detectado automaticamente\n    - Os recebíveis são ordenados por data de vencimento (mais próximos primeiro)\n    - Se necessário, os recebíveis são fracionados para atingir o valor exato do saque\n    - Recebíveis totalmente utilizados ficam com status 'pago'\n    - Recebíveis parcialmente utilizados ficam com status 'parcialmente_pago' e geram um novo recebível com o valor restante\n    - Todas as movimentações são registradas no ledger para rastreabilidade\n    \n    **Simplificação:**\n    - Apenas informe o valor e a chave PIX\n    - Sistema seleciona automaticamente a melhor adquirente\n    - Processamento sempre automático via InfoPago\n    - Detecção automática do tipo de chave PIX\n    \n    **Payload esperado pela adquirente:**\n    ```json\n    {\n      \"pixKey\": \"a15e9de7-ae1c-4c95-aee4-4a8557827e38\",\n      \"payment\": {\n        \"currency\": \"BRL\",\n        \"amount\": \"100.50\"\n      }\n    }\n    ```\n    \n    Valor mínimo: R$ 5,00","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWithdrawalDto"}}}},"responses":{"201":{"description":"Saque criado com sucesso com seleção automática da adquirente e fracionamento de recebíveis"}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]},"get":{"operationId":"WithdrawalsController_getWithdrawals","summary":"Listar saques PIX do lojista","description":"Lista todas as solicitações de saque PIX do lojista com filtros e paginação. Inclui informações sobre o fracionamento de recebíveis utilizados. Padrão: 6 itens por página.","parameters":[{"name":"status","required":false,"in":"query","description":"Status do saque","schema":{"enum":["pendente","aprovado","processando","concluido","rejeitado","cancelado"],"type":"string"}},{"name":"tipo_saque","required":false,"in":"query","description":"Tipo de saque","schema":{"enum":["manual","automatico"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (padrão: 6, máximo: 100)","schema":{"example":6,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/{id}":{"get":{"operationId":"WithdrawalsController_getWithdrawal","summary":"Obter detalhes de um saque PIX específico","description":"Retorna detalhes completos do saque incluindo informações detalhadas sobre o fracionamento de recebíveis utilizados.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Detalhes do saque incluindo fracionamento de recebíveis","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WithdrawalFractioningDetailsDto"}}}}}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/{id}/cancel":{"put":{"operationId":"WithdrawalsController_cancelWithdrawal","summary":"Cancelar saque PIX","description":"Cancela um saque PIX pendente e reverte automaticamente o fracionamento de recebíveis.\n    \n    **O que acontece no cancelamento:**\n    - Apenas saques com status \"pendente\" podem ser cancelados\n    - Recebíveis utilizados são revertidos ao status \"disponível\"\n    - Recebíveis fracionados são removidos e o valor é restaurado ao recebível original\n    - Todas as movimentações de reversão são registradas no ledger","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/api":{"post":{"operationId":"WithdrawalsController_createWithdrawalApi","summary":"Solicitar saque PIX via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Processo totalmente automatizado.\n    \n    **Processo automatizado:**\n    - Sistema seleciona automaticamente a InfoPago como adquirente\n    - Tipo de saque sempre automático (processamento instantâneo)\n    - Detecção automática do tipo de chave PIX\n    - Fracionamento automático de recebíveis\n    \n    **Payload simplificado:**\n    ```json\n    {\n      \"valor\": 100.50,\n      \"pixKey\": \"a15e9de7-ae1c-4c95-aee4-4a8557827e38\",\n      \"observacoes\": \"Saque para fornecedores\"\n    }\n    ```\n    \n    Valor mínimo: R$ 5,00","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWithdrawalApiDto"}}}},"responses":{"201":{"description":"Saque criado com sucesso via API Key"}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"basic":[]}]},"get":{"operationId":"WithdrawalsController_getWithdrawalsApi","summary":"Listar saques PIX via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Lista saques com filtros e paginação.","parameters":[{"name":"status","required":false,"in":"query","description":"Status do saque","schema":{"enum":["pendente","aprovado","processando","concluido","rejeitado","cancelado"],"type":"string"}},{"name":"tipo_saque","required":false,"in":"query","description":"Tipo de saque","schema":{"enum":["manual","automatico"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (padrão: 20, máximo: 100)","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"basic":[]}]}},"/withdrawals/api/{id}":{"get":{"operationId":"WithdrawalsController_getWithdrawalApi","summary":"Obter detalhes de um saque PIX específico via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Retorna detalhes completos incluindo fracionamento.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"basic":[]}]}},"/withdrawals/api/{id}/cancel":{"put":{"operationId":"WithdrawalsController_cancelWithdrawalApi","summary":"Cancelar saque PIX via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Cancela saque pendente e reverte fracionamento.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"basic":[]}]}},"/withdrawals/api/rates/current":{"get":{"operationId":"WithdrawalsController_getCurrentRatesApi","summary":"Obter taxas de saque PIX atuais via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Retorna taxas atuais para saques PIX.","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"basic":[]}]}},"/withdrawals/api/summary":{"get":{"operationId":"WithdrawalsController_getWithdrawalSummaryApi","summary":"Resumo de saques PIX via API Key","description":"Use Basic Auth com API Key como username e \"x\" como password. Retorna estatísticas resumidas dos saques.","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"basic":[]}]}},"/withdrawals/rates/current":{"get":{"operationId":"WithdrawalsController_getCurrentRates","summary":"Obter taxas de saque PIX atuais","description":"Retorna as taxas atuais para saques PIX, incluindo valor mínimo de R$ 5,00, tipos de chave aceitos e informações sobre o fracionamento automático","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/summary/dashboard":{"get":{"operationId":"WithdrawalsController_getWithdrawalSummary","summary":"Resumo de saques PIX para dashboard","description":"Retorna estatísticas resumidas dos saques PIX incluindo informações sobre fracionamento de recebíveis, tipos de chave mais utilizados e eficiência do sistema","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/all":{"get":{"operationId":"WithdrawalsController_getAllWithdrawals","summary":"Listar todos os saques PIX (Admin)","description":"Lista todas as solicitações de saque PIX de todos os lojistas com filtros avançados, incluindo informações sobre fracionamento de recebíveis","parameters":[{"name":"status","required":false,"in":"query","description":"Status do saque","schema":{"enum":["pendente","aprovado","processando","concluido","rejeitado","cancelado"],"type":"string"}},{"name":"tipo_saque","required":false,"in":"query","description":"Tipo de saque","schema":{"enum":["manual","automatico"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (padrão: 6, máximo: 100)","schema":{"example":6,"type":"number"}},{"name":"lojista_id","required":false,"in":"query","description":"Filtrar por lojista específico","schema":{"example":"uuid-lojista","type":"string"}},{"name":"adquirente_id","required":false,"in":"query","description":"Filtrar por adquirente específica","schema":{"example":"uuid-adquirente","type":"string"}}],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/pending":{"get":{"operationId":"WithdrawalsController_getPendingWithdrawals","summary":"Listar saques PIX pendentes de aprovação (Admin)","description":"Lista apenas os saques PIX manuais que estão aguardando aprovação. Recebíveis já foram selecionados e fracionados, aguardando apenas a aprovação final.","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/{id}/approve":{"put":{"operationId":"WithdrawalsController_approveWithdrawal","summary":"Aprovar saque PIX manual (Admin)","description":"Aprova um saque PIX manual e inicia o processamento instantâneo.\n    \n    **Importante:** Os recebíveis já foram selecionados e fracionados quando o saque foi criado. \n    A aprovação apenas libera o processamento PIX final.","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveWithdrawalDto"}}}},"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/{id}/reject":{"put":{"operationId":"WithdrawalsController_rejectWithdrawal","summary":"Rejeitar saque PIX (Admin)","description":"Rejeita um saque PIX manual com motivo e reverte automaticamente o fracionamento de recebíveis.\n    \n    **O que acontece na rejeição:**\n    - Recebíveis utilizados são revertidos ao status \"disponível\"\n    - Recebíveis fracionados são removidos\n    - Todas as movimentações de reversão são registradas no ledger\n    - Lojista é notificado sobre o motivo da rejeição","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectWithdrawalDto"}}}},"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/rates":{"put":{"operationId":"WithdrawalsController_updateWithdrawalRates","summary":"Atualizar taxas de saque PIX do sistema (Admin)","description":"Define as taxas padrão de saque PIX que serão aplicadas a todos os lojistas. Valor mínimo obrigatório: R$ 5,00. O sistema de fracionamento funciona independente das taxas.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WithdrawalRatesDto"}}}},"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/rates/current":{"get":{"operationId":"WithdrawalsController_getCurrentSystemRates","summary":"Obter taxas de saque PIX atuais do sistema (Admin)","description":"Retorna as taxas atuais do sistema incluindo informações sobre o fracionamento automático","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/withdrawals/admin/stats":{"get":{"operationId":"WithdrawalsController_getWithdrawalStats","summary":"Estatísticas de saques PIX do sistema (Admin)","description":"Retorna estatísticas consolidadas de todos os saques PIX do sistema, incluindo:\n    - Análise por tipo de chave PIX\n    - Estatísticas de fracionamento de recebíveis\n    - Eficiência do sistema de fracionamento\n    - Média de recebíveis utilizados por saque\n    - Volume total de recebíveis processados","parameters":[],"responses":{"200":{"description":""}},"tags":["Saques PIX com Fracionamento de Recebíveis"],"security":[{"bearer":[]}]}},"/ledger/balance":{"get":{"operationId":"LedgerController_getLedgerBalance","summary":"Obter saldos do ledger do lojista","parameters":[],"responses":{"200":{"description":""}},"tags":["Ledger Contábil"],"security":[{"bearer":[]}]}},"/ledger/entries":{"get":{"operationId":"LedgerController_getLedgerEntries","summary":"Obter extrato do ledger com paginação e filtros","description":"Lista as entradas do ledger contábil do lojista com suporte a filtros e paginação","parameters":[{"name":"conta_codigo","required":false,"in":"query","description":"Filtrar por código da conta","schema":{"example":"1.1.001","type":"string"}},{"name":"tipo_entrada","required":false,"in":"query","description":"Filtrar por tipo de entrada","schema":{"enum":["debito","credito"],"type":"string"}},{"name":"data_inicio","required":false,"in":"query","description":"Data inicial","schema":{"example":"2024-01-01","type":"string"}},{"name":"data_fim","required":false,"in":"query","description":"Data final","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página (começa em 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Itens por página (máximo 500)","schema":{"example":100,"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Ledger Contábil"],"security":[{"bearer":[]}]}},"/ledger/chart-of-accounts":{"get":{"operationId":"LedgerController_getChartOfAccounts","summary":"Obter plano de contas","parameters":[],"responses":{"200":{"description":""}},"tags":["Ledger Contábil"],"security":[{"bearer":[]}]}},"/ledger/reconcile":{"post":{"operationId":"LedgerController_reconcileLedger","summary":"Reconciliar ledger (Admin apenas)","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconciliationDto"}}}},"responses":{"201":{"description":""}},"tags":["Ledger Contábil"],"security":[{"bearer":[]}]}},"/ledger/reconciliation-history":{"get":{"operationId":"LedgerController_getReconciliationHistory","summary":"Histórico de reconciliações (Admin apenas)","parameters":[],"responses":{"200":{"description":""}},"tags":["Ledger Contábil"],"security":[{"bearer":[]}]}}},"info":{"title":"Pelegrinn API","description":"\n      API completa do sistema Pelegrinn para gestão de pagamentos e lojistas.\n      \n      ## Autenticação\n      - **JWT Bearer Token**: Para endpoints da interface web\n      - **API Key (Basic Auth)**: Para endpoints de integração (username: api_key, password: x)\n      \n      ## Upload de Documentos\n      - Suporte a documentos até 100MB\n      - Formatos aceitos: PDF, JPG, PNG\n      - Envio em base64 com prefixo MIME\n      \n      ## Limites de Rate\n      - 1000 requests por minuto por IP\n      - 10000 requests por hora por usuário autenticado\n    ","version":"2.0.0","contact":{}},"tags":[{"name":"Autenticação","description":"Endpoints para login e registro"},{"name":"Lojistas","description":"Gestão de lojistas e subcontas"},{"name":"Transações","description":"Processamento e consulta de transações"},{"name":"Saques","description":"Solicitações e gestão de saques"},{"name":"Relatórios","description":"Relatórios e dashboards"},{"name":"Administração","description":"Endpoints administrativos"}],"servers":[],"components":{"securitySchemes":{"JWT":{"scheme":"bearer","bearerFormat":"JWT","type":"http","name":"JWT","description":"Token JWT para autenticação da interface web","in":"header"},"ApiKey":{"type":"http","scheme":"basic","name":"API Key","description":"Use sua API Key como username e \"x\" como password","in":"header"}},"schemas":{"LoginDto":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"password":{"type":"string","example":"password123"}},"required":["email","password"]},"Complete2FALoginDto":{"type":"object","properties":{"token_temporario":{"type":"string","example":"temp_token_here"},"codigo_2fa":{"type":"string","example":"123456"}},"required":["token_temporario","codigo_2fa"]},"RegisterDto":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"password":{"type":"string","example":"password123"},"tipo":{"type":"string","example":"lojista","enum":["lojista"],"description":"Tipo de usuário (apenas lojista permitido no registro público)"}},"required":["email","password","tipo"]},"ConfirmEmailDto":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"},"codigo":{"type":"string","example":"123456","description":"Código de 6 dígitos enviado por email"}},"required":["email","codigo"]},"ResendCodeDto":{"type":"object","properties":{"email":{"type":"string","example":"user@example.com"}},"required":["email"]},"Setup2FADto":{"type":"object","properties":{"nome_dispositivo":{"type":"string","example":"Meu iPhone"}}},"Verify2FADto":{"type":"object","properties":{"codigo":{"type":"string","example":"123456"}},"required":["codigo"]},"Disable2FADto":{"type":"object","properties":{"codigo_verificacao":{"type":"string","example":"123456"}},"required":["codigo_verificacao"]},"WithdrawRequestDto":{"type":"object","properties":{"valor":{"type":"number","example":100.5,"description":"Valor a ser sacado"},"pixKey":{"type":"string","example":"a15e9de7-ae1c-4c95-aee4-4a8557827e38","description":"Chave PIX para recebimento (UUID, CPF, CNPJ, email, telefone)"},"observacoes":{"type":"string","example":"Saque para fornecedores"}},"required":["valor","pixKey"]},"CreateMerchantDto":{"type":"object","properties":{"nome":{"type":"string","example":"Loja Exemplo LTDA"},"nome_fantasia":{"type":"string","example":"Loja Exemplo"},"documento":{"type":"string","example":"12345678000195"},"tipo_pessoa":{"type":"string","example":"juridica","enum":["fisica","juridica"]},"email":{"type":"string","example":"contato@loja.com"},"telefone":{"type":"string","example":"11999999999"},"endereco_logradouro":{"type":"string","example":"Rua das Flores, 123"},"endereco_numero":{"type":"string","example":"123"},"endereco_complemento":{"type":"string","example":"Sala 1"},"endereco_bairro":{"type":"string","example":"Centro"},"endereco_cidade":{"type":"string","example":"São Paulo"},"endereco_uf":{"type":"string","example":"SP"},"endereco_cep":{"type":"string","example":"01234567"},"contrato_social_base64":{"type":"string","example":"data:application/pdf;base64,JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKPj4KZW5kb2JqCg==","description":"Contrato social em base64 (PDF, JPG, PNG). Obrigatório para pessoa jurídica."},"documento_pessoal_base64":{"type":"string","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=","description":"Documento pessoal (RG, CNH ou CPF) em base64 (JPG, PNG, PDF)"},"foto_documento_base64":{"type":"string","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=","description":"Foto da pessoa segurando o documento pessoal em base64 (JPG, PNG)"}},"required":["nome","nome_fantasia","documento","tipo_pessoa","email","telefone","endereco_logradouro","endereco_numero","endereco_complemento","endereco_bairro","endereco_cidade","endereco_uf","endereco_cep"]},"UpdateMerchantDto":{"type":"object","properties":{"nome":{"type":"string","example":"Loja Exemplo LTDA"},"nome_fantasia":{"type":"string","example":"Loja Exemplo"},"email":{"type":"string","example":"contato@loja.com"},"telefone":{"type":"string","example":"11999999999"},"endereco_logradouro":{"type":"string","example":"Rua das Flores, 123"},"endereco_numero":{"type":"string","example":"123"},"endereco_complemento":{"type":"string","example":"Sala 1"},"endereco_bairro":{"type":"string","example":"Centro"},"endereco_cidade":{"type":"string","example":"São Paulo"},"endereco_uf":{"type":"string","example":"SP"},"endereco_cep":{"type":"string","example":"01234567"},"contrato_social_base64":{"type":"string","example":"data:application/pdf;base64,JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKPj4KZW5kb2JqCg==","description":"Atualizar contrato social em base64 (PDF, JPG, PNG)"},"documento_pessoal_base64":{"type":"string","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=","description":"Atualizar documento pessoal em base64 (JPG, PNG, PDF)"},"foto_documento_base64":{"type":"string","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=","description":"Atualizar foto segurando documento em base64 (JPG, PNG)"}},"required":["nome","nome_fantasia","email","telefone","endereco_logradouro","endereco_numero","endereco_complemento","endereco_bairro","endereco_cidade","endereco_uf","endereco_cep"]},"SetMerchantRatesDto":{"type":"object","properties":{"taxa_transacao_valor":{"type":"number","example":2.5,"description":"Taxa personalizada para transações (valor depende do tipo)","minimum":0},"taxa_transacao_tipo":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa de transação: fixa (valor em reais) ou percentual (% do valor)"},"taxa_saque_valor":{"type":"number","example":1,"description":"Taxa personalizada para saques (valor depende do tipo)","minimum":0},"taxa_saque_tipo":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa de saque: fixa (valor em reais) ou percentual (% do valor)"},"observacoes":{"type":"string","example":"Taxas diferenciadas para cliente VIP","description":"Observações sobre a configuração de taxas"}}},"MerchantWithdrawalRatesDto":{"type":"object","properties":{"taxa_saque_manual":{"type":"number","example":0.3,"description":"Taxa personalizada para saques manuais (valor depende do tipo)","minimum":0},"tipo_taxa_manual":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa para saques manuais"},"taxa_saque_automatico":{"type":"number","example":0.008,"description":"Taxa personalizada para saques automáticos (valor depende do tipo)","minimum":0},"tipo_taxa_automatico":{"type":"string","example":"percentual","enum":["fixa","percentual"],"description":"Tipo da taxa para saques automáticos"},"observacoes":{"type":"string","example":"Taxa diferenciada para cliente VIP","description":"Observações sobre a configuração de taxas"}},"required":["taxa_saque_manual","tipo_taxa_manual","taxa_saque_automatico","tipo_taxa_automatico","observacoes"]},"CreateSubAccountDto":{"type":"object","properties":{"nome":{"type":"string","example":"Loja Filha LTDA"},"nome_fantasia":{"type":"string","example":"Loja Filha"},"documento":{"type":"string","example":"98765432000123"},"tipo_pessoa":{"type":"string","example":"juridica","enum":["fisica","juridica"]},"email":{"type":"string","example":"filha@loja.com"},"telefone":{"type":"string","example":"11888888888"},"contrato_social_base64":{"type":"string","example":"data:application/pdf;base64,JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKPj4KZW5kb2JqCg==","description":"Contrato social em base64 (PDF, JPG, PNG). Obrigatório para pessoa jurídica."},"documento_pessoal_base64":{"type":"string","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=","description":"Documento pessoal (RG, CNH ou CPF) em base64 (JPG, PNG, PDF)"},"foto_documento_base64":{"type":"string","example":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAv/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCdABmX/9k=","description":"Foto da pessoa segurando o documento pessoal em base64 (JPG, PNG)"}},"required":["nome","nome_fantasia","documento","tipo_pessoa","email","telefone"]},"TransferBalanceDto":{"type":"object","properties":{"conta_filha_id":{"type":"string","example":"uuid-da-conta-filha","description":"ID da conta filha de origem (será sobrescrito pelo parâmetro da URL)"},"adquirente_id":{"type":"string","example":"uuid-da-adquirente","description":"ID da adquirente específica"},"valor":{"type":"number","example":500,"description":"Valor a ser transferido da conta filha para a conta mãe","minimum":0.01},"motivo":{"type":"string","example":"Transferência de saldo para conta mãe","description":"Motivo da transferência"}},"required":["adquirente_id","valor","motivo"]},"SubAccountStatusDto":{"type":"object","properties":{"status":{"type":"string","example":"suspenso","enum":["ativo","suspenso","inativo"],"description":"Novo status da subconta"},"motivo":{"type":"string","example":"Subconta suspensa por violação de termos","description":"Motivo da alteração de status"}},"required":["status","motivo"]},"SetSubAccountMarginsDto":{"type":"object","properties":{"margem_pix":{"type":"number","example":0.5,"description":"Margem da conta mãe sobre PIX (valor depende do tipo)","minimum":0},"tipo_margem_pix":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da margem PIX: fixa (valor em reais) ou percentual (% do valor)"},"margem_boleto":{"type":"number","example":1,"description":"Margem da conta mãe sobre Boleto (valor depende do tipo)","minimum":0},"tipo_margem_boleto":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da margem Boleto: fixa (valor em reais) ou percentual (% do valor)"},"observacoes":{"type":"string","example":"Margens diferenciadas para subconta especializada","description":"Observações sobre a configuração de margens"}}},"RegenerateApiKeyDto":{"type":"object","properties":{"motivo":{"type":"string","example":"Chave comprometida - regeneração solicitada","description":"Motivo da regeneração da API Key"}},"required":["motivo"]},"AdvancementRequestDto":{"type":"object","properties":{"receivable_ids":{"example":["uuid1","uuid2"],"description":"IDs dos recebíveis para antecipação","type":"array","items":{"type":"string"}},"advancement_rate":{"type":"number","example":0.025,"description":"Taxa de antecipação (2.5% = 0.025)"}},"required":["receivable_ids","advancement_rate"]},"CreateTransactionDto":{"type":"object","properties":{"id_externo":{"type":"string","example":"TXN-123456"},"valor":{"type":"number","example":100.5},"metodo_pagamento":{"type":"string","example":"cartao_credito","enum":["cartao_credito","cartao_debito","pix","boleto"]},"nome_cliente":{"type":"string","example":"João Silva"},"email_cliente":{"type":"string","example":"joao@email.com"},"documento_cliente":{"type":"string","example":"12345678901"},"telefone_cliente":{"type":"string","example":"11999999999"},"bandeira_cartao":{"type":"string","example":"visa"},"ultimos_digitos_cartao":{"type":"string","example":"1234"},"chave_pix":{"type":"string","example":"joao@email.com"},"postbackUrl":{"type":"string","example":"https://webhook.site/fe250113-4272-4864-ae67-650dae171272","description":"URL para receber notificações automáticas de mudança de status da transação. Webhooks serão enviados para: criação, mudança de status, confirmação e falhas."}},"required":["id_externo","valor","metodo_pagamento","nome_cliente","email_cliente","documento_cliente","telefone_cliente","bandeira_cartao","ultimos_digitos_cartao","chave_pix"]},"ApproveMerchantDto":{"type":"object","properties":{"observacoes":{"type":"string","example":"Documentação aprovada"},"taxa_pix":{"type":"number","example":1.99,"description":"Taxa PIX (valor depende do tipo)"},"tipo_taxa_pix":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa PIX"},"taxa_boleto":{"type":"number","example":3.49,"description":"Taxa Boleto (valor depende do tipo)"},"tipo_taxa_boleto":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa Boleto"},"valor_maximo_transacao":{"type":"number","example":50000,"description":"Valor máximo por transação"},"limite_diario":{"type":"number","example":100000,"description":"Limite diário de transações"},"pix_habilitado":{"type":"boolean","example":true,"description":"Habilitar PIX"},"boleto_habilitado":{"type":"boolean","example":false,"description":"Habilitar Boleto"},"permite_antecipacao":{"type":"boolean","example":false,"description":"Permitir antecipação"}}},"RejectMerchantDto":{"type":"object","properties":{"reason":{"type":"string","example":"Documentação incompleta"}},"required":["reason"]},"UpdateSystemRatesDto":{"type":"object","properties":{"taxa_cartao_credito":{"type":"number","example":0.0349,"description":"Taxa de cartão de crédito (sempre percentual)"},"taxa_cartao_debito":{"type":"number","example":0.0199,"description":"Taxa de cartão de débito (sempre percentual)"},"taxa_pix":{"type":"number","example":0.99,"description":"Taxa PIX (valor depende do tipo)"},"tipo_taxa_pix":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa PIX"},"taxa_boleto":{"type":"number","example":2.49,"description":"Taxa Boleto (valor depende do tipo)"},"tipo_taxa_boleto":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa Boleto"}},"required":["taxa_cartao_credito","taxa_cartao_debito","taxa_pix","tipo_taxa_pix","taxa_boleto","tipo_taxa_boleto"]},"CreateUserDto":{"type":"object","properties":{"email":{"type":"string","example":"admin@empresa.com"},"password":{"type":"string","example":"password123"},"tipo":{"type":"string","example":"admin","enum":["admin","operador"]}},"required":["email","password","tipo"]},"SystemWithdrawalRatesDto":{"type":"object","properties":{"taxa_saque_manual":{"type":"number","example":0.5,"description":"Taxa padrão para saques manuais (valor depende do tipo)","minimum":0},"tipo_taxa_manual":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa para saques manuais"},"taxa_saque_automatico":{"type":"number","example":0.01,"description":"Taxa padrão para saques automáticos (valor depende do tipo)","minimum":0},"tipo_taxa_automatico":{"type":"string","example":"percentual","enum":["fixa","percentual"],"description":"Tipo da taxa para saques automáticos"},"valor_minimo_saque":{"type":"number","example":5,"description":"Valor mínimo para saques PIX","minimum":5},"valor_maximo_saque":{"type":"number","example":50000,"description":"Valor máximo para saques PIX","minimum":5.01},"limite_diario_saque":{"type":"number","example":100000,"description":"Limite diário de saques PIX","minimum":5.01}},"required":["taxa_saque_manual","tipo_taxa_manual","taxa_saque_automatico","tipo_taxa_automatico","valor_minimo_saque","valor_maximo_saque","limite_diario_saque"]},"CreateWithdrawalDto":{"type":"object","properties":{"valor":{"type":"number","example":100.5,"description":"Valor a ser sacado (mínimo R$ 5,00) - Recebíveis serão automaticamente selecionados e fracionados"},"pixKey":{"type":"string","example":"a15e9de7-ae1c-4c95-aee4-4a8557827e38","description":"Chave PIX para recebimento (UUID, CPF, CNPJ, email, telefone)"},"observacoes":{"type":"string","example":"Saque para pagamento de fornecedores"}},"required":["valor","pixKey"]},"WithdrawalFractioningDetailsDto":{"type":"object","properties":{"recebivel_id":{"type":"string","example":"uuid-recebivel","description":"ID do recebível utilizado"},"valor_original":{"type":"number","example":150,"description":"Valor original do recebível"},"valor_utilizado":{"type":"number","example":100,"description":"Valor utilizado do recebível para o saque"},"valor_restante":{"type":"number","example":50,"description":"Valor restante do recebível após o saque"},"percentual_utilizado":{"type":"string","example":"66.67","description":"Percentual do recebível utilizado"},"status_resultante":{"type":"string","example":"parcialmente_pago","enum":["pago","parcialmente_pago"],"description":"Status resultante do recebível"},"data_vencimento":{"type":"string","example":"2024-12-31","description":"Data de vencimento do recebível"}},"required":["recebivel_id","valor_original","valor_utilizado","valor_restante","percentual_utilizado","status_resultante","data_vencimento"]},"CreateWithdrawalApiDto":{"type":"object","properties":{"valor":{"type":"number","example":100.5,"description":"Valor a ser sacado (mínimo R$ 5,00)"},"pixKey":{"type":"string","example":"a15e9de7-ae1c-4c95-aee4-4a8557827e38","description":"Chave PIX para recebimento (UUID, CPF, CNPJ, email, telefone)"},"observacoes":{"type":"string","example":"Saque para pagamento de fornecedores"}},"required":["valor","pixKey"]},"ApproveWithdrawalDto":{"type":"object","properties":{"observacoes_aprovacao":{"type":"string","example":"Saque aprovado após verificação da chave PIX - Recebíveis já foram processados"}},"required":["observacoes_aprovacao"]},"RejectWithdrawalDto":{"type":"object","properties":{"motivo_rejeicao":{"type":"string","example":"Chave PIX inválida ou não pertence ao titular informado - Recebíveis serão revertidos"}},"required":["motivo_rejeicao"]},"WithdrawalRatesDto":{"type":"object","properties":{"taxa_saque":{"type":"number","example":1.5,"description":"Taxa de saque PIX (valor depende do tipo)"},"tipo_taxa":{"type":"string","example":"fixa","enum":["fixa","percentual"],"description":"Tipo da taxa: fixa (valor em reais) ou percentual (% do valor)"},"valor_minimo_saque":{"type":"number","example":5,"description":"Valor mínimo para saque PIX (recebíveis são fracionados automaticamente)"},"valor_maximo_saque":{"type":"number","example":50000,"description":"Valor máximo para saque PIX"},"limite_diario_saque":{"type":"number","example":100000,"description":"Limite diário de saques PIX"}},"required":["taxa_saque","tipo_taxa","valor_minimo_saque","valor_maximo_saque","limite_diario_saque"]},"ReconciliationDto":{"type":"object","properties":{"start_date":{"type":"string","example":"2024-01-01"},"end_date":{"type":"string","example":"2024-01-31"}},"required":["start_date","end_date"]}}}}