BankBot-AI / docs /API_DOCUMENTATION.md
mohsin-devs's picture
Deploy to HF
a282d4b
# BankBot AI — Complete API Documentation
Base URL: `http://localhost:8000`
WebSocket: `ws://localhost:8000`
API Docs (interactive): `http://localhost:8000/docs`
---
## Authentication
All protected endpoints require:
```
Authorization: Bearer <access_token>
```
### POST /api/auth/register
Create a new user account.
**Request:**
```json
{
"email": "user@example.com",
"password": "SecurePass123!",
"name": "Alex Doe"
}
```
**Response 201:**
```json
{
"access_token": "eyJhbGci...",
"refresh_token": "eyJhbGci...",
"token_type": "bearer",
"user_id": "uuid",
"name": "Alex Doe",
"email": "user@example.com"
}
```
**Errors:** `409` email already registered
---
### POST /api/auth/login
Login with email and password (form-encoded).
**Request:** `application/x-www-form-urlencoded`
```
username=alex@bankbot.dev&password=BankBot2026!
```
**Response 200:** Same as register response
**Errors:** `401` incorrect credentials
---
### POST /api/auth/refresh
Exchange a refresh token for a new access token.
**Request:**
```json
{ "refresh_token": "eyJhbGci..." }
```
**Response:**
```json
{ "access_token": "eyJhbGci...", "token_type": "bearer" }
```
---
### GET /api/auth/me
Get current authenticated user profile.
**Response:**
```json
{
"user_id": "uuid",
"email": "alex@bankbot.dev",
"name": "Alex Doe",
"financial_personality": "Balanced Investor"
}
```
---
### POST /api/auth/logout
Logout (client should discard tokens).
**Response:** `{ "message": "Logged out successfully" }`
---
## Dashboard
### GET /api/dashboard/overview
Full dashboard data in a single request. Cached 2 minutes.
**Query params:** `user_id` (optional, defaults to first user)
**Response:**
```json
{
"total_balance": 59637.82,
"accounts": [
{ "id": "uuid", "type": "checking", "balance": 12847.32, "currency": "USD" }
],
"monthly_income": 5100.00,
"monthly_expenses": 3240.50,
"savings_rate": 36.5,
"spending_by_category": [
{ "name": "Housing", "value": 1950.00 },
{ "name": "Food", "value": 487.30 }
],
"recent_transactions": [
{
"id": "uuid",
"merchant": "Whole Foods",
"category": "Groceries",
"amount": -87.43,
"type": "debit",
"timestamp": "2026-05-24T14:32:00"
}
],
"cash_flow": [
{ "month": "Dec", "income": 5100, "expenses": 3200, "savings": 1900 }
],
"health_score": 82.0,
"fraud_alert_count": 1,
"ai_briefing": {
"summary": "Your financial health looks strong...",
"briefing": null
}
}
```
**Performance:** ~65ms cold, ~10ms cached
---
## AI Intelligence
### GET /api/ai/coaching/score
Financial health score (0-100) across 6 dimensions. Cached 10 minutes.
**Response:**
```json
{
"overall_score": 82.0,
"categories": {
"savings_consistency": { "score": 15, "max": 20 },
"debt_ratio": { "score": 20, "max": 20 },
"spending_discipline": { "score": 16, "max": 20 },
"emergency_funds": { "score": 15, "max": 20 },
"investments": { "score": 10, "max": 10 },
"subscription_management": { "score": 6, "max": 10 }
},
"explanation": "Your portfolio demonstrates strong debt management...",
"actionable_improvements": [
"Set up automated transfers to your Savings account right after payday."
]
}
```
---
### GET /api/ai/coaching/briefing
AI-generated daily financial briefing. Cached 1 hour.
**Response:**
```json
{
"date": "2026-05-24",
"user_name": "Alex Doe",
"briefing": "DAILY BRIEFING:\n\nYour liquid capital stands at $59,637...",
"metrics": {
"total_liquid_capital": 59637.82,
"monthly_income_projection": 5100.00,
"monthly_burn_rate": 3240.50
}
}
```
---
### GET /api/ai/behavior/insights
Spending behavior analysis. Cached 10 minutes.
**Response:**
```json
{
"insights": [
"Weekend spending is 34% higher than weekday average",
"Late-night transactions detected 3 times this month"
],
"metrics": {
"weekend_pct": 34.2,
"late_night_count": 3,
"avg_transaction_amount": 67.40
}
}
```
---
### GET /api/ai/twin/predict
Balance forecast for next 30 days. Cached 5 minutes.
**Response:**
```json
{
"current_balance": 59637.82,
"predicted_balance_30d": 61200.00,
"monthly_projections": [
{ "month": 1, "balance": 61200, "savings": 1562 }
],
"confidence": "high"
}
```
---
### GET /api/ai/twin/future
Long-term balance projection.
**Query params:** `months` (1-60, default 12)
---
### GET /api/ai/twin/scenarios
Conservative / expected / optimistic scenarios.
**Query params:** `months` (1-24, default 6)
**Response:**
```json
{
"scenarios": {
"conservative": [58000, 58500, 59000],
"expected": [60000, 61500, 63000],
"optimistic": [62000, 64500, 67000]
}
}
```
---
### GET /api/ai/fraud/analysis
All fraud alerts for the user.
**Response:**
```json
{
"total_alerts": 1,
"pending_reviews": 1,
"alerts": [
{
"fraud_log_id": "uuid",
"transaction_id": "uuid",
"amount": 847.00,
"merchant": "Tech Store NYC",
"risk_score": 78.0,
"details": "Amount 3.2x above average. Late-night transaction.",
"status": "pending"
}
]
}
```
---
### POST /api/ai/chat
HTTP chat endpoint (fallback when WebSocket unavailable).
**Request:**
```json
{ "message": "Analyze my spending this month" }
```
**Response:**
```json
{ "response": "Your spending this month totals $3,240..." }
```
---
### POST /api/ai/simulate/purchase
Simulate the impact of a purchase on your finances.
**Request:**
```json
{
"amount": 1200.00,
"merchant": "Apple Store",
"category": "Tech"
}
```
---
## WebSocket Chat
### WS /api/ai/chat/ws
Connect: `ws://localhost:8000/api/ai/chat/ws?user_id={id}`
**Client → Server:**
```json
{ "type": "chat", "message": "What is my savings rate?" }
{ "type": "ping" }
```
**Server → Client:**
```json
{ "type": "chat_start" }
{ "type": "chat_chunk", "content": "Your " }
{ "type": "chat_chunk", "content": "savings " }
{ "type": "chat_chunk", "content": "rate is 36.5%..." }
{ "type": "chat_end" }
{ "type": "pong" }
{ "type": "error", "message": "..." }
```
**Connection lifecycle:**
- Heartbeat: client sends `ping` every 25s
- Reconnect: exponential backoff (1s, 2s, 4s, 8s, 16s, 30s max)
- HTTP fallback: if WS unavailable, falls back to POST /api/ai/chat
---
## Transactions
### GET /api/transactions/
Paginated transaction history.
**Query params:**
- `page` (default 1)
- `limit` (default 20, max 100)
- `category` (filter by category)
- `type` (credit or debit)
- `user_id` (optional)
**Response:**
```json
{
"transactions": [
{
"id": "uuid",
"merchant": "Whole Foods",
"category": "Groceries",
"amount": -87.43,
"type": "debit",
"timestamp": "2026-05-24T14:32:00",
"tags": ["groceries"]
}
],
"total": 301,
"page": 1,
"pages": 16
}
```
---
## Notifications
### GET /api/notifications/
List user notifications.
**Query params:** `limit` (default 20), `user_id`
**Response:**
```json
{
"notifications": [
{
"id": "uuid",
"title": "Unusual Transaction Detected",
"message": "A charge of $847.00 at Tech Store NYC was flagged...",
"type": "alert",
"read": false,
"created_at": "2026-05-24T22:00:00"
}
],
"unread_count": 3
}
```
### PATCH /api/notifications/{id}/read
Mark a notification as read. Returns `{ "success": true }`
### PATCH /api/notifications/read-all
Mark all notifications as read. Returns `{ "success": true }`
### DELETE /api/notifications/{id}
Dismiss a notification. Returns `{ "success": true }`
---
## Observability
### GET /health
```json
{
"status": "healthy",
"timestamp": 1748131200.0,
"db": "sqlite",
"cache": "memory",
"uptime_s": 771.0
}
```
### GET /api/status
```json
{
"ai_backend": "groq",
"ai_available": true,
"db_type": "sqlite",
"cache_type": "memory",
"version": "2.0.0"
}
```
### GET /api/metrics
Live observability dashboard:
```json
{
"uptime_seconds": 771.0,
"requests": {
"total": 20,
"errors": 0,
"auth_failures": 0,
"error_rate_pct": 0.0
},
"websocket": { "total_connects": 0, "reconnects": 0 },
"ai": {
"fallbacks": 0,
"by_provider": {
"groq": { "calls": 2, "errors": 0, "avg_latency_ms": 1840.5, "p95_latency_ms": null }
}
},
"cache": { "hits": 12, "misses": 8, "hit_ratio_pct": 60.0 },
"route_timings": {
"/api/dashboard/overview": { "calls": 4, "avg_ms": 17.3, "max_ms": 50.0 }
},
"recent_errors": []
}
```