Documentacao da API
Base local: [Link]
Autenticacao
POST /api/auth/register
Cria uma conta e inicia sessao.
Payload:
{
"name": "Joao Silva",
"email": "joao@[Link]",
"password": "senha1234"
}
Resposta 201:
{
"user": {
"id": "cm...",
"name": "Joao Silva",
"email": "joao@[Link]"
}
}
POST /api/auth/login
Autentica usuario existente.
Payload:
{
"email": "joao@[Link]",
"password": "senha1234"
}
Resposta 200:
{
"user": {
"id": "cm...",
"name": "Joao Silva",
"email": "joao@[Link]"
}
}
POST /api/auth/logout
Encerra a sessao atual.
Resposta 200:
{
"ok": true
}
Transacoes
GET /api/transactions
Lista as transacoes do usuario autenticado.
Resposta 200:
{
"transactions": [
{
"id": "cm...",
"description": "Mercado da semana",
"merchant": "Mercado Central",
"category": "Alimentacao",
"notes": null,
"amountInCents": 18990,
"type": "EXPENSE",
"source": "MANUAL",
"occurredAt": "2026-05-30T00:00:00.000Z",
"createdAt": "2026-05-30T12:00:00.000Z"
}
]
}
POST /api/transactions
Cria uma nova transacao.
Payload:
{
"description": "Freelance",
"merchant": "Cliente X",
"category": "Receitas",
"notes": "Pagamento do projeto",
"amount": 1200,
"type": "INCOME",
"occurredAt": "2026-05-30"
}
Resposta 201:
{
"transaction": {
"id": "cm...",
"description": "Freelance",
"merchant": "Cliente X",
"category": "Receitas",
"notes": "Pagamento do projeto",
"amountInCents": 120000,
"type": "INCOME",
"source": "MANUAL",
"occurredAt": "2026-05-30T00:00:00.000Z",
"createdAt": "2026-05-30T12:00:00.000Z"
}
}
PATCH /api/transactions/[id]
Atualiza uma transacao existente do usuario autenticado.
Payload: mesmo formato de criacao.
Resposta 200:
{
"transaction": {
"id": "cm...",
"description": "Mercado da semana",
"merchant": "Mercado Central",
"category": "Alimentacao",
"notes": "Compra revisada",
"amountInCents": 17500,
"type": "EXPENSE",
"source": "MANUAL",
"occurredAt": "2026-05-30T00:00:00.000Z",
"createdAt": "2026-05-30T12:00:00.000Z"
}
}
DELETE /api/transactions/[id]
Exclui uma transacao.
Resposta 200:
{
"ok": true
}
Upload e Analise
POST /api/uploads/analyze
Recebe um arquivo e retorna o resultado da analise.
Formato: multipart/form-data
Campos:
• file: arquivo PDF, JPG, PNG, WebP ou TXT
• declaredAmount: valor opcional
• categoryHint: categoria sugerida opcional
• note: observacao opcional
• occurredAt: data opcional da compra
Resposta 200:
{
"document": {
"id": "cm...",
"filename": "[Link]",
"mimeType": "application/pdf",
"status": "ANALYZED",
"declaredAmountInCents": 21990,
"categoryHint": "Alimentacao",
"note": "Compra semanal",
"aiSummary": "Comprovante registrado com valor estimado...",
"aiScore": 72,
"createdAt": "2026-05-30T12:00:00.000Z"
},
"transaction": {
"id": "cm...",
"description": "Compra semanal",
"merchant": "nota mercado",
"category": "Alimentacao",
"notes": null,
"amountInCents": 21990,
"type": "EXPENSE",
"source": "DOCUMENT",
"occurredAt": "2026-05-30T00:00:00.000Z",
"createdAt": "2026-05-30T12:00:00.000Z"
},
"analysis": {
"summary": "Comprovante registrado com valor estimado...",
"score": 72,
"inferredCategory": "Alimentacao"
}
}
Respostas de erro
• 400: payload invalido ou upload incorreto
• 401: sessao expirada ou ausente
• 404: recurso nao encontrado
• 409: conflito de cadastro
• 500: erro interno generico