Plattform-Garantien
Diese Seite fasst die Verträge zusammen, auf die Sie sich beim Bauen gegen die API verlassen können. Sie sind über alle Module identisch.
1. Authentifizierung — opake Sessions
Codemeta OS verwendet keine JWTs. Sign-in erzeugt eine Session, die als HTTP-Only-Cookie ausgegeben wird. Die Session ist serverseitig gespeichert und kann jederzeit invalidiert werden (z. B. nach Passwort-Reset oder Sign-out).
- Sign-in:
POST /api/auth/sign-in/email - Sign-out:
POST /api/auth/sign-out - 2FA ist plattformweit verpflichtend.
2. Mandantenkontext — X-Tenant-Id
Jeder Aufruf gegen /api/v1/... braucht den Header. Mehr unter
Multi-Tenancy.
3. Idempotenz für POST — X-Idempotency-Key
POST-Requests, die das Anlegen einer Entity auslösen, akzeptieren einen
X-Idempotency-Key-Header. Wiederholte Requests mit demselben Key + Body
liefern dieselbe Antwort, ohne eine zweite Entity zu erzeugen. Empfehlung:
UUIDv4 pro logischem Vorgang.
4. Fehlerformat — RFC 7807
Alle Fehlerantworten folgen RFC 7807. Das Schema:
{
"type": "https://codemeta-os.de/probs/<slug>",
"title": "Kurzbeschreibung",
"status": 422,
"detail": "Optionaler längerer Text.",
"errors": [
{ "path": "/email", "message": "Pflichtfeld" }
]
}
type ist eine stabile URI – die richtige Stelle für Code-Switches in Ihrem
Client. title ist menschenlesbar und kann sich ändern. errors[] ist
optional und nur bei Validierungsfehlern (422) gesetzt.
5. Pagination
Listen-Endpoints liefern immer eine Seite, nie den kompletten Bestand. Die
Seite steht in data, die Blätter-Information in meta. Geblättert wird
wahlweise über offset oder cursor:
curl "https://os.codemeta.de/api/v1/tickets?limit=50&offset=100" \
-H "X-Tenant-Id: $TENANT" \
-b cookies.txt
Die Antwort:
{
"data": [ … ],
"meta": {
"nextCursor": "0192f2c0-…",
"hasMore": true,
"limit": 50
}
}
limit ist auf 200 begrenzt und wird darüber hinaus still gekappt. Eine
exakte Trefferzahl (meta.total) liefern wir nur auf Anfrage mit
?withTotal=true. Details, Fallstricke und ein vollständiger Durchlauf stehen
unter Pagination.
6. IDs — UUIDv7
Alle Entity-IDs sind UUIDv7. Sie sind chronologisch sortierbar und global eindeutig. Wir geben niemals ObjectIds heraus.
7. Audit — RFC 6902
Jede Mutation erzeugt einen JSON-Patch-Audit-Eintrag in derselben Transaktion wie die Datenänderung. Mehr unter Audit-Historie.
8. Soft-Deletion
DELETE löscht nicht physisch. Mehr unter Soft-Deletion.
9. Sprache & Lokalisierung
Die API antwortet in Deutsch (Default) oder Englisch (Fallback) – steuerbar
über den Accept-Language-Header. Validierungsfehler werden serverseitig
lokalisiert; Maschinen-Codes (type) bleiben sprachunabhängig.
Was die Plattform nicht verspricht
- Hard-Delete. Findet außer im DSGVO-Erase-Workflow nicht statt.
- Beliebige Reihenfolge bei Patches. Wer
versionignoriert, riskiert Lost-Updates – siehe Optimistic Locking. - Stabile
title/detail-Texte in Fehlern. Diese können sich ändern. - Synchron persistierte Webhook-Auslieferung. Webhooks werden asynchron zugestellt – mehr unter Webhooks.