Todo API – Dokumentation

Diese Dokumentation richtet sich an Nutzer, die die Todo-API in eigenen Anwendungen, Scripts oder Apps einbinden möchten. Jeder Nutzer hat einen persönlichen API-Key (Token), der nach dem Login verwendet wird.

Basis-URL: {BASE_URL}/api

Ersetze {BASE_URL} durch die URL deines Todo-Servers (z. B. https://deine-domain.de). Alle API-Anfragen gehen an {BASE_URL}/api/....

API-Key (Token): Jeder Nutzer erhält nach dem Login einen Token. Diesen verwendest du als API-Key für alle geschützten Endpoints.

Header: Authorization: Bearer <dein-token>

Token erhältst du im Response von POST /auth/login (Feld token). Gültigkeit: 7 Tage.

1. Übersicht

Die Todo-API ermöglicht Anmeldung, Verwaltung von Aufgaben, Unteraufgaben, Gruppen und (für Admins) Nutzerverwaltung. Alle Endpoints außer Health und öffentliche Stats erfordern Authentifizierung:

  • Web (Browser): Session-Cookie nach Login; Requests mit credentials: 'include'.
  • Externe Clients (Apps, Scripts, andere Dienste): API-Key im Header Authorization: Bearer <token>.

2. Authentifizierung

Session (Web)

Login/Register setzt ein Session-Cookie. Alle Requests mit credentials: 'include' senden.

API-Key / Bearer Token (Apps, Scripts, externe Nutzung)

Jeder Nutzer hat einen API-Key (Token). Login liefert token im Response. Für alle weiteren Requests: Header Authorization: Bearer <token>. Token gültig 7 Tage.

3. Auth-Endpoints

MethodPfadBeschreibung
POST/auth/registerRegistrieren
POST/auth/loginAnmelden
POST/auth/logoutAbmelden
GET/auth/meAktueller User
PATCH/auth/passwordPasswort ändern
PATCH/auth/emailE-Mail ändern
PATCH/auth/nameName ändern (max. alle 14 Tage)
GET/auth/login-historyLogin-Historie

POST /auth/register

// Body
{ "name": "Max", "email": "max@example.de", "password": "geheim123" }
// Response 201
{ "user": { "id": 1, "email": "max@example.de", "name": "Max", "role": "user" } }

POST /auth/login

// Body
{ "email": "max@example.de", "password": "geheim123" }
// Response 200
{ "user": { "id": 1, "email": "...", "name": "...", "role": "user" }, "token": "eyJ..." }
// token = dein API-Key für Authorization: Bearer <token>

GET /auth/me

Liefert den aktuell angemeldeten User. Auth erforderlich.

4. Todos

MethodPfadBeschreibung
GET/todos?group_id=1Todos laden (optional: Gruppe)
POST/todosTodo erstellen
PATCH/todos/:idTodo aktualisieren
DELETE/todos/:idTodo löschen

GET /todos – Ohne group_id: Persönliche Todos. Mit group_id: Gruppen-Todos (User muss Mitglied sein).

POST /todos

{
  "text": "Aufgabe",
  "description": "Optional",
  "due_date": "2025-12-31",
  "group_id": 1,
  "subtasks": [{ "text": "Teil 1" }]
}

PATCH /todos/:id

{ "done": true, "due_date": "2025-12-31", "text": "Neuer Titel", "description": "Neu" }

5. Unteraufgaben

MethodPfadBeschreibung
POST/todos/:todoId/subtasksUnteraufgabe hinzufügen
PATCH/todos/:todoId/subtasks/:idUnteraufgabe umschalten
DELETE/todos/:todoId/subtasks/:idUnteraufgabe löschen

Body für POST: { "text": "Unteraufgabe" }

6. Gruppen

MethodPfadBeschreibung
GET/groupsMeine Gruppen
POST/groupsGruppe erstellen
PATCH/groups/:idGruppe bearbeiten (nur Besitzer)
DELETE/groups/:idGruppe löschen (nur Besitzer)
GET/groups/:id/membersMitglieder
POST/groups/:id/membersMitglied per E-Mail hinzufügen
PATCH/groups/:id/members/:userIdBerechtigungen
DELETE/groups/:id/members/:userIdMitglied entfernen
POST/groups/:id/leaveGruppe verlassen

POST /groups Body: { "name": "Team", "description": "Optional" }

7. Admin-API

Nur für Nutzer mit role: "admin".

MethodPfadBeschreibung
GET/admin/statsStatistiken
GET/admin/usersAlle Nutzer
GET/admin/groupsAlle Gruppen
PATCH/admin/users/:id/roleRolle ändern
PATCH/admin/users/:id/banSperren/Entsperren
GET/admin/users/:id/groupsNutzer-Gruppen bearbeiten
PATCH/admin/users/:id/groupsNutzer-Gruppen speichern
GET/admin/help-requestsHilfe-Anfragen
PATCH/admin/help-requests/:idStatus setzen
GET/admin/help-knowledgeKI-Wissensdatenbank
POST/admin/help-knowledgeEintrag hinzufügen
DELETE/admin/help-knowledge/:idEintrag löschen
GET/admin/settingsEinstellungen
PATCH/admin/settingsEinstellungen speichern

8. Hilfe (KI)

MethodPfadBeschreibung
POST/help/chatKI-Anfrage stellen
POST/help/forwardAn Support weiterleiten

9. Fehlerformat

Alle Fehler: { "error": "Nachricht" }

StatusBedeutung
400Ungültige Anfrage
401Nicht angemeldet
403Keine Berechtigung
404Nicht gefunden
409Konflikt (z.B. E-Mail existiert)
500Serverfehler

Health: GET /api/health (ohne Auth) → { "ok": true, "version": "1.0.0" }

Todo API – Documentation

This documentation is for users who want to use or integrate the Todo API in their own applications, scripts, or apps. Each user has a personal API key (token) that is used after login.

Base URL: {BASE_URL}/api

Replace {BASE_URL} with your Todo server URL (e.g. https://your-domain.com). All API requests go to {BASE_URL}/api/....

API Key (Token): Each user receives a token after login. Use it as your API key for all protected endpoints.

Header: Authorization: Bearer <your-token>

You get the token in the response of POST /auth/login (field token). Valid for 7 days.

1. Overview

The Todo API provides authentication, tasks, subtasks, groups, and (for admins) user management. All endpoints except health and public stats require authentication:

  • Web (browser): Session cookie after login; send requests with credentials: 'include'.
  • External clients (apps, scripts, other services): API key in header Authorization: Bearer <token>.

2. Authentication

Session (Web)

Login/register sets a session cookie. Send all requests with credentials: 'include'.

API Key / Bearer Token (Apps, scripts, external use)

Each user has an API key (token). Login returns token in the response. For all subsequent requests: header Authorization: Bearer <token>. Token valid for 7 days.

3. Auth Endpoints

MethodPathDescription
POST/auth/registerRegister
POST/auth/loginLog in
POST/auth/logoutLog out
GET/auth/meCurrent user
PATCH/auth/passwordChange password
PATCH/auth/emailChange email
PATCH/auth/nameChange name (max every 14 days)
GET/auth/login-historyLogin history

POST /auth/register

// Body
{ "name": "Max", "email": "max@example.com", "password": "secret123" }
// Response 201
{ "user": { "id": 1, "email": "max@example.com", "name": "Max", "role": "user" } }

POST /auth/login

// Body
{ "email": "max@example.com", "password": "secret123" }
// Response 200
{ "user": { "id": 1, "email": "...", "name": "...", "role": "user" }, "token": "eyJ..." }
// token = your API key for Authorization: Bearer <token>

GET /auth/me

Returns the currently logged-in user. Auth required.

4. Todos

MethodPathDescription
GET/todos?group_id=1List todos (optional: group)
POST/todosCreate todo
PATCH/todos/:idUpdate todo
DELETE/todos/:idDelete todo

GET /todos – Without group_id: personal todos. With group_id: group todos (user must be member).

POST /todos

{
  "text": "Task",
  "description": "Optional",
  "due_date": "2025-12-31",
  "group_id": 1,
  "subtasks": [{ "text": "Step 1" }]
}

PATCH /todos/:id

{ "done": true, "due_date": "2025-12-31", "text": "New title", "description": "New" }

5. Subtasks

MethodPathDescription
POST/todos/:todoId/subtasksAdd subtask
PATCH/todos/:todoId/subtasks/:idToggle subtask
DELETE/todos/:todoId/subtasks/:idDelete subtask

Body for POST: { "text": "Subtask" }

6. Groups

MethodPathDescription
GET/groupsMy groups
POST/groupsCreate group
PATCH/groups/:idEdit group (owner only)
DELETE/groups/:idDelete group (owner only)
GET/groups/:id/membersMembers
POST/groups/:id/membersAdd member by email
PATCH/groups/:id/members/:userIdPermissions
DELETE/groups/:id/members/:userIdRemove member
POST/groups/:id/leaveLeave group

POST /groups body: { "name": "Team", "description": "Optional" }

7. Admin API

Only for users with role: "admin".

MethodPathDescription
GET/admin/statsStatistics
GET/admin/usersAll users
GET/admin/groupsAll groups
PATCH/admin/users/:id/roleChange role
PATCH/admin/users/:id/banBan/Unban
GET/admin/users/:id/groupsEdit user groups
PATCH/admin/users/:id/groupsSave user groups
GET/admin/help-requestsHelp requests
PATCH/admin/help-requests/:idSet status
GET/admin/help-knowledgeAI knowledge base
POST/admin/help-knowledgeAdd entry
DELETE/admin/help-knowledge/:idDelete entry
GET/admin/settingsSettings
PATCH/admin/settingsSave settings

8. Help (AI)

MethodPathDescription
POST/help/chatSend AI request
POST/help/forwardForward to support

9. Error Format

All errors: { "error": "message" }

StatusMeaning
400Bad request
401Not authenticated
403Forbidden
404Not found
409Conflict (e.g. email exists)
500Server error

Health: GET /api/health (no auth) → { "ok": true, "version": "1.0.0" }