# 🔧 WebMoney - Documentação Técnica da API ## Referência Completa dos Endpoints **Versão:** 1.0 **Base URL:** `https://webmoney.cnxifly.com/api` **Autenticação:** Bearer Token (Laravel Sanctum) --- ## 📋 Índice 1. [Autenticação](#1-autenticação) 2. [Contas](#2-contas) 3. [Transações](#3-transações) 4. [Categorias](#4-categorias) 5. [Centros de Custo](#5-centros-de-custo) 6. [Importação](#6-importação) 7. [Passivos](#7-passivos) 8. [Transações Recorrentes](#8-transações-recorrentes) 9. [Detecção de Transferências](#9-detecção-de-transferências) 10. [Detecção de Reembolsos](#10-detecção-de-reembolsos) 11. [Dashboard](#11-dashboard) --- ## 1. Autenticação ### POST /register Cria uma nova conta de usuário. **Request Body:** ```json { "name": "string", "email": "string", "password": "string", "password_confirmation": "string" } ``` **Response:** `201 Created` ```json { "success": true, "data": { "user": { "id": 1, "name": "...", "email": "..." }, "token": "1|abc123..." } } ``` --- ### POST /login Autentica um usuário existente. **Request Body:** ```json { "email": "string", "password": "string" } ``` **Response:** `200 OK` ```json { "success": true, "data": { "user": { "id": 1, "name": "...", "email": "...", "role": "admin" }, "token": "2|xyz789..." } } ``` --- ### POST /logout Encerra a sessão do usuário autenticado. **Headers:** `Authorization: Bearer {token}` **Response:** `200 OK` ```json { "success": true, "message": "Logged out successfully" } ``` --- ### GET /me Retorna dados do usuário autenticado. **Headers:** `Authorization: Bearer {token}` **Response:** `200 OK` ```json { "success": true, "data": { "id": 1, "name": "Marco Leite", "email": "marco@cnxifly.com", "role": "admin" } } ``` --- ## 2. Contas ### GET /accounts Lista todas as contas do usuário. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | type | string | Filtrar por tipo (checking, savings, etc.) | | is_active | boolean | Filtrar por status | **Response:** `200 OK` ```json { "success": true, "data": [ { "id": 1, "name": "Nubank", "type": "checking", "bank_name": "Nu Pagamentos", "account_number": "1234567-8", "initial_balance": 0, "current_balance": 5420.50, "credit_limit": null, "currency": "BRL", "color": "#8B5CF6", "icon": "bi-bank", "is_active": true, "include_in_total": true } ] } ``` --- ### POST /accounts Cria uma nova conta. **Request Body:** ```json { "name": "string (required)", "type": "string (required)", "bank_name": "string", "account_number": "string", "initial_balance": "number", "credit_limit": "number", "currency": "string (default: BRL)", "color": "string (hex)", "icon": "string", "description": "string", "is_active": "boolean", "include_in_total": "boolean" } ``` --- ### GET /accounts/{id} Retorna detalhes de uma conta específica. --- ### PUT /accounts/{id} Atualiza uma conta existente. --- ### DELETE /accounts/{id} Remove uma conta (soft delete). --- ### POST /accounts/recalculate-balances Recalcula saldos de todas as contas. **Response:** `200 OK` ```json { "success": true, "message": "Balances recalculated", "data": { "updated_accounts": 5 } } ``` --- ### POST /accounts/{id}/adjust-balance Ajusta o saldo de uma conta criando transação de ajuste. **Request Body:** ```json { "target_balance": 5000.00 } ``` --- ## 3. Transações ### GET /transactions Lista transações com filtros. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | account_id | integer | Filtrar por conta | | category_id | integer | Filtrar por categoria | | cost_center_id | integer | Filtrar por centro de custo | | type | string | debit, credit | | status | string | pending, completed, cancelled | | search | string | Busca por descrição | | start_date | date | Data inicial | | end_date | date | Data final | | page | integer | Página | | per_page | integer | Itens por página | --- ### GET /transactions/by-week Retorna transações agrupadas por semana. **Query Parameters:** Mesmos do `/transactions` **Response:** `200 OK` ```json { "success": true, "data": { "weeks": [ { "week_start": "2025-12-09", "week_end": "2025-12-15", "total_income": 5000.00, "total_expense": 3200.00, "balance": 1800.00, "transactions": [...] } ], "pagination": {...} } } ``` --- ### GET /transactions/summary Retorna resumo financeiro do período. --- ### POST /transactions Cria nova transação. **Request Body:** ```json { "account_id": "integer (required)", "category_id": "integer", "cost_center_id": "integer", "type": "string (required: debit|credit)", "planned_amount": "number (required)", "amount": "number", "description": "string (required)", "notes": "string", "planned_date": "date (required)", "effective_date": "date", "status": "string (default: pending)", "reference": "string" } ``` --- ### PUT /transactions/{id} Atualiza uma transação. --- ### DELETE /transactions/{id} Remove uma transação. --- ### POST /transactions/{id}/complete Marca transação como concluída. **Request Body:** ```json { "amount": 150.00, "effective_date": "2025-12-13" } ``` --- ### POST /transactions/{id}/quick-complete Completa com valores planejados. --- ### POST /transactions/{id}/cancel Cancela uma transação. --- ### POST /transactions/{id}/revert Reverte transação concluída para pendente. --- ### POST /transactions/{id}/duplicate Cria cópia da transação. --- ### POST /transactions/{id}/split Divide transação em múltiplas. **Request Body:** ```json { "splits": [ { "category_id": 1, "amount": 100, "description": "Parte 1" }, { "category_id": 2, "amount": 50, "description": "Parte 2" } ] } ``` --- ### POST /transactions/{id}/unsplit Desfaz divisão de transação. --- ### GET /transactions/{id}/splits Lista divisões de uma transação. --- ### POST /transactions/transfer Cria transferência entre contas. **Request Body:** ```json { "from_account_id": 1, "to_account_id": 2, "amount": 500.00, "description": "Transferência", "date": "2025-12-13", "notes": "string" } ``` --- ### POST /transactions/{id}/unlink-transfer Desvincula transações de transferência. --- ### GET /transactions/{id}/liability-installments Busca parcelas de passivo compatíveis. --- ### POST /transactions/{id}/reconcile-liability Concilia transação com parcela de passivo. --- ## 4. Categorias ### GET /categories Lista categorias (hierárquicas). **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | type | string | expense, income, both | | flat | boolean | Lista plana (sem hierarquia) | --- ### POST /categories Cria nova categoria. **Request Body:** ```json { "name": "string (required)", "parent_id": "integer (para subcategoria)", "type": "string (expense|income|both)", "description": "string", "color": "string (hex)", "icon": "string", "is_active": "boolean", "keywords": ["uber", "99", "cabify"] } ``` --- ### PUT /categories/{id} Atualiza categoria. --- ### DELETE /categories/{id} Remove categoria. --- ### POST /categories/{id}/keywords Adiciona palavras-chave. **Request Body:** ```json { "keywords": ["netflix", "spotify"] } ``` --- ### DELETE /categories/{id}/keywords/{keywordId} Remove palavra-chave. --- ### POST /categories/match Busca categoria por palavra-chave. **Request Body:** ```json { "description": "UBER TRIP SAO PAULO" } ``` --- ### GET /categories/categorize-batch/preview Preview da categorização em lote. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | include_cost_centers | boolean | Incluir centros de custo | | limit | integer | Limite de transações | --- ### POST /categories/categorize-batch Executa categorização em lote automática. --- ### POST /categories/categorize-batch/manual Categorização em lote manual. **Request Body:** ```json { "category_id": 5, "cost_center_id": 2, "add_keyword": true, "filters": { "search": "UBER", "account_id": 1 } } ``` --- ### PUT /categories/reorder Reordena categorias. --- ## 5. Centros de Custo ### GET /cost-centers Lista centros de custo. --- ### POST /cost-centers Cria centro de custo. **Request Body:** ```json { "name": "string (required)", "code": "string", "description": "string", "color": "string (hex)", "icon": "string", "is_active": "boolean", "keywords": ["cliente-abc"] } ``` --- ### PUT /cost-centers/{id} Atualiza centro de custo. --- ### DELETE /cost-centers/{id} Remove centro de custo. --- ### POST /cost-centers/{id}/keywords Adiciona palavras-chave. --- ### DELETE /cost-centers/{id}/keywords/{keywordId} Remove palavra-chave. --- ### POST /cost-centers/match Busca centro de custo por palavra-chave. --- ## 6. Importação ### POST /import/upload Upload de arquivo para importação. **Request:** `multipart/form-data` - `file`: Arquivo (CSV, XLSX, XLS, OFX, PDF) **Response:** ```json { "success": true, "data": { "temp_file": "imports/temp/abc123.csv", "preview": { "headers": [...], "preview": [...] } } } ``` --- ### POST /import/headers Obtém cabeçalhos com configuração. **Request Body:** ```json { "temp_file": "imports/temp/abc123.csv", "header_row": 0, "data_start_row": 1 } ``` --- ### POST /import/process Executa a importação. **Request Body:** ```json { "temp_file": "string", "account_id": "integer (required)", "category_id": "integer", "cost_center_id": "integer", "column_mappings": { "date": 0, "description": 1, "amount": 2 }, "date_format": "d/m/Y", "decimal_separator": ",", "thousands_separator": ".", "save_mapping": true, "mapping_name": "Nubank CSV", "bank_name": "Nubank" } ``` **Response:** ```json { "success": true, "data": { "imported": 45, "duplicates": 3, "errors": 0 } } ``` --- ### GET /import/mappings Lista mapeamentos salvos. --- ### GET /import/mappings/{id} Detalhes de um mapeamento. --- ### PUT /import/mappings/{id} Atualiza mapeamento. --- ### DELETE /import/mappings/{id} Remove mapeamento. --- ### GET /import/presets Lista presets de bancos. --- ### POST /import/presets/create Cria mapeamento a partir de preset. --- ### GET /import/history Histórico de importações. --- ### GET /import/fields Definições de campos e formatos de data. --- ## 7. Passivos ### GET /liabilities Lista passivos/financiamentos. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | status | string | active, paid, cancelled | | is_active | boolean | Ativo | **Response:** ```json { "success": true, "data": [...], "summary": { "total_contracts": 2, "total_value": 150000, "total_paid": 45000, "total_pending": 105000 } } ``` --- ### POST /liabilities/import Importa passivo de PDF. **Request:** `multipart/form-data` - `file`: PDF do contrato/simulação - `name`: Nome do passivo - `creditor`: Nome do credor - `contract_number`: Número do contrato - `currency`: Moeda - `description`: Descrição --- ### GET /liabilities/{id} Detalhes do passivo com parcelas. --- ### PUT /liabilities/{id} Atualiza passivo. --- ### DELETE /liabilities/{id} Remove passivo. --- ### GET /liabilities/{id}/installments Lista parcelas do passivo. --- ### POST /liabilities/{id}/installments/{installmentId}/reconcile Concilia parcela com transação. **Request Body:** ```json { "transaction_id": 123, "mark_as_paid": true } ``` --- ## 8. Transações Recorrentes ### GET /recurring Lista templates de recorrência. --- ### POST /recurring Cria novo template. **Request Body:** ```json { "account_id": "integer (required)", "category_id": "integer", "type": "string (required: debit|credit)", "amount": "number (required)", "description": "string (required)", "frequency": "string (required)", "start_date": "date (required)", "end_date": "date", "is_active": "boolean" } ``` --- ### GET /recurring/{id} Detalhes do template. --- ### PUT /recurring/{id} Atualiza template. --- ### DELETE /recurring/{id} Remove template. --- ### POST /recurring/{id}/pause Pausa template. --- ### POST /recurring/{id}/resume Retoma template pausado. --- ### GET /recurring/{id}/instances Lista instâncias do template. --- ### GET /recurring/frequencies Lista frequências disponíveis. --- ### GET /recurring/pending Lista instâncias pendentes (todas). --- ### GET /recurring/overdue Lista instâncias vencidas. --- ### GET /recurring/due-soon Lista instâncias a vencer. --- ### POST /recurring/regenerate-all Regenera instâncias de todos os templates. --- ### POST /recurring/from-transaction Cria recorrência a partir de transação. **Request Body:** ```json { "transaction_id": 123, "frequency": "monthly", "end_date": "2026-12-31" } ``` --- ### POST /recurring-instances/{id}/pay Marca instância como paga (cria transação). --- ### POST /recurring-instances/{id}/reconcile Concilia com transação existente. **Request Body:** ```json { "transaction_id": 456 } ``` --- ### GET /recurring-instances/{id}/candidates Busca transações candidatas para conciliação. --- ### POST /recurring-instances/{id}/skip Pula instância. --- ### POST /recurring-instances/{id}/cancel Cancela instância. --- ### PUT /recurring-instances/{id} Edita instância específica. --- ## 9. Detecção de Transferências ### GET /transfer-detection Lista transferências detectadas. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | tolerance_days | integer | Tolerância em dias (default: 3) | **Response:** ```json { "success": true, "data": [ { "debit": { "id": 1, "amount": 500, "date": "2025-12-10", "account": {...} }, "credit": { "id": 2, "amount": 500, "date": "2025-12-11", "account": {...} }, "confidence": "high", "day_difference": 1 } ] } ``` --- ### GET /transfer-detection/stats Estatísticas de transferências detectadas. --- ### GET /transfer-detection/{id}/pairs Busca pares para uma transação. --- ### POST /transfer-detection/confirm Confirma uma transferência. **Request Body:** ```json { "debit_id": 1, "credit_id": 2 } ``` --- ### POST /transfer-detection/confirm-batch Confirma múltiplas transferências. **Request Body:** ```json { "transfers": [ { "debit_id": 1, "credit_id": 2 }, { "debit_id": 3, "credit_id": 4 } ] } ``` --- ### POST /transfer-detection/ignore Ignora par de transferência. --- ### POST /transfer-detection/delete-both Exclui ambas as transações. --- ## 10. Detecção de Reembolsos ### GET /refund-detection Lista reembolsos detectados. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | tolerance_days | integer | Tolerância em dias (default: 7) | --- ### POST /refund-detection/confirm Confirma reembolso. **Request Body:** ```json { "debit_id": 1, "credit_id": 2 } ``` --- ### POST /refund-detection/confirm-batch Confirma múltiplos reembolsos. --- ### POST /refund-detection/ignore Ignora par de reembolso. --- ### POST /refund-detection/undo Desfaz vinculação de reembolso. --- ## 11. Dashboard ### GET /dashboard/summary Resumo financeiro geral. **Response:** ```json { "success": true, "data": { "total_balance": 15420.50, "month_income": 8000.00, "month_expense": 5200.00, "month_balance": 2800.00, "pending_transactions": 12, "overdue_transactions": 3 } } ``` --- ### GET /dashboard/cashflow Fluxo de caixa por mês. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | months | integer | Número de meses (default: 12) | **Response:** ```json { "success": true, "data": [ { "month": "2025-12", "income": 8000, "expense": 5200, "balance": 2800 } ] } ``` --- ### GET /dashboard/expenses-by-category Despesas agrupadas por categoria. --- ### GET /dashboard/income-by-category Receitas agrupadas por categoria. --- ### GET /dashboard/payment-variances Análise de variações de pagamento. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | months | integer | Período de análise | --- ### GET /dashboard/calendar Dados para calendário financeiro. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | month | integer | Mês (1-12) | | year | integer | Ano | --- ### GET /dashboard/calendar-day Transações de um dia específico. **Query Parameters:** | Parâmetro | Tipo | Descrição | |-----------|------|-----------| | date | date | Data (YYYY-MM-DD) | --- ### GET /dashboard/upcoming Transações próximas (7 dias). --- ### GET /dashboard/overdue Transações vencidas. --- ## Códigos de Resposta | Código | Significado | |--------|-------------| | 200 | Sucesso | | 201 | Criado com sucesso | | 400 | Requisição inválida | | 401 | Não autenticado | | 403 | Não autorizado | | 404 | Não encontrado | | 422 | Validação falhou | | 500 | Erro interno | --- ## Formato de Erro ```json { "success": false, "message": "Descrição do erro", "errors": { "campo": ["mensagem de validação"] } } ``` --- *Documentação gerada em Dezembro 2025*