
# API Plan for Mobile App (Fermenty) — Focused Flow

## 1. Splash & Onboarding
- No API endpoint (static content in app or fetched from info page if needed)

## 2. Authentication
- Login: POST /api/auth/login { email, password }
- Register: POST /api/auth/register { name, email, password }
- Google: POST /api/auth/google { token }
- Password reset: POST /api/auth/password/email { email }
- Notes: Public, returns tokens

## 3. Dashboard (Main Home)
- GET /api/dashboard
  - Response: { user, batches, unread_notifications, system_messages }
- Notes: Auth required

## 4. Create New Batch
- GET /api/fermentos (for batch types)
- POST /api/batches { name, type_id, ... }
- Notes: Auth required

## 5. Batches, Logs, Events
- List batches: GET /api/batches
- Batch detail: GET /api/batches/{id}
- Update batch: PUT /api/batches/{id}
- Delete batch: DELETE /api/batches/{id}
- Advance/skip/pause/resume/discard: POST /api/batches/{id}/advance, etc.
- Logs: GET/POST/PUT/DELETE /api/batches/{id}/logs
- Events: POST /api/batches/{id}/events
- Review: POST/GET /api/batches/{id}/review
- Notes: Auth required

## 6. Notifications
- List: GET /api/notifications
- Mark as read: POST /api/notifications/{id}/read
- Mark all as read: POST /api/notifications/read-all
- Notes: Auth required

## 7. Profile
- View: GET /api/profile
- Update: PUT /api/profile { ... }
- Upload avatar: POST /api/profile/avatar { file }
- Request deletion: POST /api/profile/deletion/request
- Confirm deletion: GET /api/profile/deletion/confirm/{user_id}
- Delete: DELETE /api/profile
- Notes: Auth required

---

## Deferred/External (V2 or as links)
- Community: All endpoints (leave for v2)
- Static pages (FAQ, Terms, Privacy, Newsletter): Use web links in-app

---

This plan will be expanded with request/response JSON examples and further details for each endpoint.

---

# Endpoint Details and JSON Examples

## 1. Home / Welcome
### GET /api/welcome
- Response:
{
  "message": "Welcome to Fermenty API!",
  "info": "This is the mobile API entry point."
}

## 2. Fermentos (Ferment Types)
### GET /api/fermentos
- Response:
[
  {
    "id": 1,
    "name": "Kombucha",
    "description": "Fermented tea beverage...",
    "image_url": "https://.../kombucha.jpg"
  }
]

### GET /api/fermentos/{id}
- Response:
{
  "id": 1,
  "name": "Kombucha",
  "description": "Fermented tea beverage...",
  "image_url": "https://.../kombucha.jpg",
  "guides": [
    { "id": 10, "title": "Basic Guide", "steps": [ ... ] }
  ],
  "related_batches": [
    { "id": 101, "name": "My First Batch", "status": "active" }
  ]
}

## 3. FAQ, Privacy, Terms, Premium
### GET /api/pages/{slug}
- Response:
{
  "title": "FAQ",
  "content": "...HTML or Markdown..."
}

## 4. Newsletter
### POST /api/newsletter
- Request:
{ "email": "user@example.com" }
- Response:
{ "status": "subscribed" }

### POST /api/newsletter/unsubscribe
- Request:
{ "token": "..." }
- Response:
{ "status": "unsubscribed" }

### GET /api/newsletter/confirm/{token}
- Response:
{ "status": "confirmed" }

## 5. Authentication
### POST /api/auth/login
- Request:
{ "email": "user@example.com", "password": "..." }
- Response:
{ "token": "...", "user": { "id": 1, "name": "User", "email": "user@example.com" } }

### POST /api/auth/register
- Request:
{ "name": "User", "email": "user@example.com", "password": "..." }
- Response:
{ "token": "...", "user": { "id": 1, "name": "User", "email": "user@example.com" } }

### POST /api/auth/google
- Request:
{ "token": "google_id_token" }
- Response: (same as login)

### POST /api/auth/password/email
- Request:
{ "email": "user@example.com" }
- Response:
{ "status": "email_sent" }

## 6. Dashboard (User Home)
### GET /api/dashboard
- Response:
{
  "user": { "id": 1, "name": "User", "premium": true },
  "active_batches": [ ... ],
  "recent_activity": [ ... ],
  "notifications": [ ... ],
  "premium_status": true
}

## 7. Batches
### GET /api/batches
- Response:
[
  { "id": 101, "name": "Batch 1", "type": "Kombucha", "status": "active", "progress": 60 }
]

### POST /api/batches
- Request:
{ "name": "Batch 1", "type_id": 1 }
- Response:
{ "id": 101, "name": "Batch 1" }

### GET /api/batches/{id}
- Response:
{ "id": 101, "name": "Batch 1", "type": "Kombucha", "status": "active", "logs": [ ... ], "events": [ ... ] }

### PUT /api/batches/{id}
- Request: (fields to update)
- Response: (updated batch)

### DELETE /api/batches/{id}
- Response:
{ "status": "deleted" }

### POST /api/batches/{id}/advance (and similar actions)
- Response:
{ "status": "advanced", "batch": { ... } }

## 8. Batch Logs
### GET /api/batches/{id}/logs
- Response:
[
  { "id": 1, "date": "2026-04-20", "note": "Checked pH", "image_url": null }
]

### POST /api/batches/{id}/logs
- Request:
{ "date": "2026-04-20", "note": "Checked pH", "image": "...base64..." }
- Response: (created log)

### GET /api/batches/{id}/logs/{log_id}
- Response: (log detail)

### PUT /api/batches/{id}/logs/{log_id}
- Request: (fields to update)
- Response: (updated log)

### DELETE /api/batches/{id}/logs/{log_id}
- Response:
{ "status": "deleted" }

## 9. Batch Events
### POST /api/batches/{id}/events
- Request:
{ "type": "step_completed", "data": { } }
- Response:
{ "status": "event_recorded" }

## 10. Batch Review
### POST /api/batches/{id}/review
- Request:
{ "rating": 5, "notes": "Great batch!" }
- Response:
{ "status": "reviewed" }

### GET /api/batches/{id}/review
- Response:
{ "rating": 5, "notes": "Great batch!" }

## 11. Community
### GET /api/community
- Response:
[
  { "id": 1, "user": { }, "content": "My recipe...", "likes": 3, "comments": [ ] }
]

### POST /api/community
- Request:
{ "content": "My recipe...", "image": "...base64..." }
- Response: (created post)

### GET /api/community/{post_id}
- Response: (post detail)

### DELETE /api/community/{post_id}
- Response:
{ "status": "deleted" }

### POST /api/community/{post_id}/like
- Response:
{ "status": "liked" }

### POST /api/community/{post_id}/comments
- Request:
{ "comment": "Nice!" }
- Response: (created comment)

### DELETE /api/community/{post_id}/comments/{comment_id}
- Response:
{ "status": "deleted" }

## 12. Profile
### GET /api/profile
- Response:
{ "id": 1, "name": "User", "email": "user@example.com", "avatar_url": "..." }

### PUT /api/profile
- Request: (fields to update)
- Response: (updated profile)

### POST /api/profile/avatar
- Request: multipart/form-data (file)
- Response:
{ "avatar_url": "..." }

### POST /api/profile/deletion/request
- Response:
{ "status": "requested" }

### GET /api/profile/deletion/confirm/{user_id}
- Response:
{ "status": "confirmed" }

### DELETE /api/profile
- Response:
{ "status": "deleted" }

## 13. Notifications
### GET /api/notifications
- Response:
[
  { "id": 1, "type": "reminder", "message": "Check your batch!", "read": false, "created_at": "2026-04-20T10:00:00Z" }
]

### POST /api/notifications/{id}/read
- Response:
{ "status": "read" }

### POST /api/notifications/read-all
- Response:
{ "status": "all_read" }
