webmoney/docs/API_REFERENCE.md

17 KiB

🔧 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
  2. Contas
  3. Transações
  4. Categorias
  5. Centros de Custo
  6. Importação
  7. Passivos
  8. Transações Recorrentes
  9. Detecção de Transferências
  10. Detecção de Reembolsos
  11. Dashboard

1. Autenticação

POST /register

Cria uma nova conta de usuário.

Request Body:

{
  "name": "string",
  "email": "string",
  "password": "string",
  "password_confirmation": "string"
}

Response: 201 Created

{
  "success": true,
  "data": {
    "user": { "id": 1, "name": "...", "email": "..." },
    "token": "1|abc123..."
  }
}

POST /login

Autentica um usuário existente.

Request Body:

{
  "email": "string",
  "password": "string"
}

Response: 200 OK

{
  "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

{
  "success": true,
  "message": "Logged out successfully"
}

GET /me

Retorna dados do usuário autenticado.

Headers: Authorization: Bearer {token}

Response: 200 OK

{
  "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

{
  "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:

{
  "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

{
  "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:

{
  "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

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "keywords": ["netflix", "spotify"]
}

DELETE /categories/{id}/keywords/{keywordId}

Remove palavra-chave.


POST /categories/match

Busca categoria por palavra-chave.

Request Body:

{
  "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:

{
  "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:

{
  "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:

{
  "success": true,
  "data": {
    "temp_file": "imports/temp/abc123.csv",
    "preview": {
      "headers": [...],
      "preview": [...]
    }
  }
}

POST /import/headers

Obtém cabeçalhos com configuração.

Request Body:

{
  "temp_file": "imports/temp/abc123.csv",
  "header_row": 0,
  "data_start_row": 1
}

POST /import/process

Executa a importação.

Request Body:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "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:

{
  "debit_id": 1,
  "credit_id": 2
}

POST /transfer-detection/confirm-batch

Confirma múltiplas transferências.

Request Body:

{
  "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:

{
  "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:

{
  "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:

{
  "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

{
  "success": false,
  "message": "Descrição do erro",
  "errors": {
    "campo": ["mensagem de validação"]
  }
}

Documentação gerada em Dezembro 2025