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
| Method | Pfad | Beschreibung |
|---|---|---|
| POST | /auth/register | Registrieren |
| POST | /auth/login | Anmelden |
| POST | /auth/logout | Abmelden |
| GET | /auth/me | Aktueller User |
| PATCH | /auth/password | Passwort ändern |
| PATCH | /auth/email | E-Mail ändern |
| PATCH | /auth/name | Name ändern (max. alle 14 Tage) |
| GET | /auth/login-history | Login-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
| Method | Pfad | Beschreibung |
|---|---|---|
| GET | /todos?group_id=1 | Todos laden (optional: Gruppe) |
| POST | /todos | Todo erstellen |
| PATCH | /todos/:id | Todo aktualisieren |
| DELETE | /todos/:id | Todo 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
| Method | Pfad | Beschreibung |
|---|---|---|
| POST | /todos/:todoId/subtasks | Unteraufgabe hinzufügen |
| PATCH | /todos/:todoId/subtasks/:id | Unteraufgabe umschalten |
| DELETE | /todos/:todoId/subtasks/:id | Unteraufgabe löschen |
Body für POST: { "text": "Unteraufgabe" }
6. Gruppen
| Method | Pfad | Beschreibung |
|---|---|---|
| GET | /groups | Meine Gruppen |
| POST | /groups | Gruppe erstellen |
| PATCH | /groups/:id | Gruppe bearbeiten (nur Besitzer) |
| DELETE | /groups/:id | Gruppe löschen (nur Besitzer) |
| GET | /groups/:id/members | Mitglieder |
| POST | /groups/:id/members | Mitglied per E-Mail hinzufügen |
| PATCH | /groups/:id/members/:userId | Berechtigungen |
| DELETE | /groups/:id/members/:userId | Mitglied entfernen |
| POST | /groups/:id/leave | Gruppe verlassen |
POST /groups Body: { "name": "Team", "description": "Optional" }
7. Admin-API
Nur für Nutzer mit role: "admin".
| Method | Pfad | Beschreibung |
|---|---|---|
| GET | /admin/stats | Statistiken |
| GET | /admin/users | Alle Nutzer |
| GET | /admin/groups | Alle Gruppen |
| PATCH | /admin/users/:id/role | Rolle ändern |
| PATCH | /admin/users/:id/ban | Sperren/Entsperren |
| GET | /admin/users/:id/groups | Nutzer-Gruppen bearbeiten |
| PATCH | /admin/users/:id/groups | Nutzer-Gruppen speichern |
| GET | /admin/help-requests | Hilfe-Anfragen |
| PATCH | /admin/help-requests/:id | Status setzen |
| GET | /admin/help-knowledge | KI-Wissensdatenbank |
| POST | /admin/help-knowledge | Eintrag hinzufügen |
| DELETE | /admin/help-knowledge/:id | Eintrag löschen |
| GET | /admin/settings | Einstellungen |
| PATCH | /admin/settings | Einstellungen speichern |
8. Hilfe (KI)
| Method | Pfad | Beschreibung |
|---|---|---|
| POST | /help/chat | KI-Anfrage stellen |
| POST | /help/forward | An Support weiterleiten |
9. Fehlerformat
Alle Fehler: { "error": "Nachricht" }
| Status | Bedeutung |
|---|---|
| 400 | Ungültige Anfrage |
| 401 | Nicht angemeldet |
| 403 | Keine Berechtigung |
| 404 | Nicht gefunden |
| 409 | Konflikt (z.B. E-Mail existiert) |
| 500 | Serverfehler |
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
| Method | Path | Description |
|---|---|---|
| POST | /auth/register | Register |
| POST | /auth/login | Log in |
| POST | /auth/logout | Log out |
| GET | /auth/me | Current user |
| PATCH | /auth/password | Change password |
| PATCH | /auth/email | Change email |
| PATCH | /auth/name | Change name (max every 14 days) |
| GET | /auth/login-history | Login 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
| Method | Path | Description |
|---|---|---|
| GET | /todos?group_id=1 | List todos (optional: group) |
| POST | /todos | Create todo |
| PATCH | /todos/:id | Update todo |
| DELETE | /todos/:id | Delete 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
| Method | Path | Description |
|---|---|---|
| POST | /todos/:todoId/subtasks | Add subtask |
| PATCH | /todos/:todoId/subtasks/:id | Toggle subtask |
| DELETE | /todos/:todoId/subtasks/:id | Delete subtask |
Body for POST: { "text": "Subtask" }
6. Groups
| Method | Path | Description |
|---|---|---|
| GET | /groups | My groups |
| POST | /groups | Create group |
| PATCH | /groups/:id | Edit group (owner only) |
| DELETE | /groups/:id | Delete group (owner only) |
| GET | /groups/:id/members | Members |
| POST | /groups/:id/members | Add member by email |
| PATCH | /groups/:id/members/:userId | Permissions |
| DELETE | /groups/:id/members/:userId | Remove member |
| POST | /groups/:id/leave | Leave group |
POST /groups body: { "name": "Team", "description": "Optional" }
7. Admin API
Only for users with role: "admin".
| Method | Path | Description |
|---|---|---|
| GET | /admin/stats | Statistics |
| GET | /admin/users | All users |
| GET | /admin/groups | All groups |
| PATCH | /admin/users/:id/role | Change role |
| PATCH | /admin/users/:id/ban | Ban/Unban |
| GET | /admin/users/:id/groups | Edit user groups |
| PATCH | /admin/users/:id/groups | Save user groups |
| GET | /admin/help-requests | Help requests |
| PATCH | /admin/help-requests/:id | Set status |
| GET | /admin/help-knowledge | AI knowledge base |
| POST | /admin/help-knowledge | Add entry |
| DELETE | /admin/help-knowledge/:id | Delete entry |
| GET | /admin/settings | Settings |
| PATCH | /admin/settings | Save settings |
8. Help (AI)
| Method | Path | Description |
|---|---|---|
| POST | /help/chat | Send AI request |
| POST | /help/forward | Forward to support |
9. Error Format
All errors: { "error": "message" }
| Status | Meaning |
|---|---|
| 400 | Bad request |
| 401 | Not authenticated |
| 403 | Forbidden |
| 404 | Not found |
| 409 | Conflict (e.g. email exists) |
| 500 | Server error |
Health: GET /api/health (no auth) → { "ok": true, "version": "1.0.0" }