Skip to main content
Developers

Öffentlicher API-Vertrag

Der bereinigte öffentliche OpenAPI-Vertrag für Ottili ONE — was veröffentlicht wird, was ausgeschlossen ist, wie Authentifizierung, Fehler und Ratelimits dokumentiert sind und wie der Vertrag mit der Quelle synchron gehalten wird.

Der öffentliche API-Vertrag* ist der einzige dokumentierte externe Einstiegspunkt und AI-Agent-Einstiegspunkt für Ottili ONE. Er ist eine bereinigte Teilmenge der internen Unified API: Jeder enthaltene Endpunkt ist für die öffentliche Nutzung freigegeben, interne, nur-admin, Debug-, Rohdatenbank-, lokale und private Service-Routen sind entfernt.

Das kanonische, versionierte Artefakt wird im Repository unter docs/api/openapi.public.json (sowie als YAML-Pendant docs/api/openapi.public.yaml) veröffentlicht. Die öffentliche Produktions-Basis-URL lautet https://api.ottili.one.

Was der Vertrag enthält

  • Nur freigegebene öffentliche Routen* — Developer-API, öffentliche Inhalte, Plattform-, Business-, Modul- und Integrationsflächen, die für externe Entwickler gedacht sind.
  • Schemas und Beispiele*, die von diesen Routen referenziert werden. Interne Schema-Definitionen, die von keiner öffentlichen Route referenziert werden, werden entfernt, damit sie nicht nach außen gelangen.
  • Authentifizierung* über den securitySchemes-Block (BearerAuth für JWT/OAuth2, ApiKeyAuth für Developer-API-Schlüssel). Den vollständigen Ablauf findest du unter [Öffentliche API-Authentifizierung](/docs/public-api-authentication).
  • Fehler* mit einem strukturierten Envelope (ok, error, code, request_id) und Standard-HTTP-Statuscodes (4xx Client-Fehler, 5xx Server-Fehler).
  • Ratelimits*, dokumentiert in der Vertragsbeschreibung, über adaptive Limits erzwungen und über die Header X-RateLimit-Limit, X-RateLimit-Remaining und Retry-After kommuniziert.

Was der Vertrag entfernt

Der Vertrag wird erzeugt, indem die folgenden Kategorien aus der vollständigen Unified-API-Spezifikation entfernt werden. Damit wird das Audit-Finding P0.2* der öffentlichen Website direkt adressiert (die öffentliche API-Referenz stellte zuvor interne Unified-API-Strukturen bloß).

Entfernte KategorieBeispiele
Interne Admin-Routen/api/v1/admin/*, /api/v1/platform/admin/*
Rohdatenbank-Routen/api/v1/database/*, Datenbank-Pool-Endpunkte
Duplikat-Präfix-Routen (fehlerhaft)/api/v1/api/v1/...
Debug- / Developer-Debug-Routen/api/v1/developer/debug/*, /debugging/*
Lokale Dateisystem- / Dev-Artefakte/playwright, /fsevents, /sales_manager, /Ottili_ONE/...
Interne Service-Flächeninternal, ssh-surface, micro-evolution, stack-manager, simulation, wall-mode, dev-orchestrator, codehelm
Veraltete unversionierte Routen/api/company/*, /api/dashboard/*, /api/apps/*, /api/analytics/*
Migration- / Backfill-Routenbackfill, migration, /migrate, rollback
Spezifikations-Freigabe / Index-Verwaltung/api/v1/docs/openapi/*, /docs/index/rebuild, /docs/index/stats

Vertrag neu erzeugen

Der veröffentlichte Vertrag wird erzeugt, nicht von Hand bearbeitet. Nach jeder Änderung an den Unified-API-Routen wird er aus der vollständigen Spezifikation neu erzeugt:

python3 scripts/build_public_openapi.py

Ein Contract-Test (tests/unit/test_public_openapi_contract.py) bereinigt die vollständige Spezifikation erneut und prüft, dass das veröffentlichte Artefakt bytegenau reproduzierbar ist, keine ausgeschlossenen Routen enthält, einen Produktions-Server (ohne localhost) deklariert und Authentifizierung, Fehler und Ratelimits dokumentiert. Wenn sich die Quelle ändert und der Vertrag nicht neu erzeugt wird, schlägt dieser Test fehl.

Status und Folgeschritte

Das bereinigte, validierte Vertrags-Artefakt ist vollständig und eingecheckt. Dass das öffentliche API-Gateway (api.ottili.one) nur* diesen Vertrag ausliefert — statt der vollständigen internen Unified API — ist eine separate Deployment-Aufgabe, damit sich externe Entwickler und Agenten auf die veröffentlichte Fläche verlassen können.

War dieser Artikel hilfreich?