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
- Autenticação
- Contas
- Transações
- Categorias
- Centros de Custo
- Importação
- Passivos
- Transações Recorrentes
- Detecção de Transferências
- Detecção de Reembolsos
- 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çãoname: Nome do passivocreditor: Nome do credorcontract_number: Número do contratocurrency: Moedadescription: 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