Zum Inhalt springen
Blume
Deutsch
Esc
navigierenöffnen⌘Jvorschau
Auf dieser Seite

JSON-API

Die schreibgeschützte JSON-API, die jede Blume-Site ausliefert — Seitenindex, Dokumente pro Seite, Navigation, Suche — und die OpenAPI-3.1-Beschreibung, mit der Function-Calling-Frameworks daraus Tools bauen können.

Jede Blume-Site liefert ihre Dokumentation zusätzlich als kleine, schreibgeschützte JSON-API aus — das REST-Pendant zu den Tools des MCP-Servers, über denselben Seiten-Snapshot, für Agents und Function-Calling-Frameworks, die schlichtes HTTP statt MCP sprechen. Sie ist standardmäßig aktiv und braucht keine Konfiguration:

Endpunkt Liefert
/api/docs/pages.json Jede Seite mit ihrer Route, ihrem Titel, ihrer Beschreibung, ihrem Inhaltstyp, ihrer Sprache, ihren Facetten und den URLs ihrer gerenderten, Markdown- und JSON-Form.
/api/docs/pages/{route}.json Eine Seite: ihr Indexeintrag plus das Agent-Markdown (derselbe Body, den get_page zurückgibt). {route} ist die Seitenroute ohne führenden Schrägstrich, index für die Startseite.
/api/docs/navigation.json Der Navigationsbaum — Header-Tabs und die Seitenleisten-Hierarchie.
/api/docs/search?q= Volltextsuche, mit derselben Eingrenzung über limit, contentTypes, locale, version und filters[key] wie bei search_docs. Nur bei Server-Output.
/openapi.json Die OpenAPI-3.1-Beschreibung der gesamten maschinenlesbaren Oberfläche.

Der Seitenindex, die Dokumente pro Seite und die Navigation werden vorgerendert, sodass eine statische Site sie von jedem Host als Dateien ausliefert. Die Suche ist ein Live-Endpunkt und existiert nur bei Server-Output, wo sie denselben Index nutzt wie search_docs.

Fehler

Fehler sind Problem Details nach RFC 9457 (application/problem+json) mit einem stabilen code, einem detail und einem resolution-Hinweis, der dem Agent sagt, wo es weitergeht — eine fehlende Seite, eine leere Suchanfrage oder, bei Server-Output, jede /api/…-URL, die kein Endpunkt beantwortet:

{
  "code": "API_ROUTE_NOT_FOUND",
  "detail": "No API route exists at /api/nope.",
  "instance": "/api/nope",
  "links": [
    {
      "href": "https://docs.example.com/openapi.json",
      "label": "OpenAPI description"
    },
    {
      "href": "https://docs.example.com/api/docs/pages.json",
      "label": "Page index"
    }
  ],
  "resolution": "Discover the available operations through the OpenAPI description at https://docs.example.com/openapi.json, or list every page at https://docs.example.com/api/docs/pages.json.",
  "status": 404,
  "title": "API route not found",
  "type": "about:blank"
}

OpenAPI-Beschreibung

Das OpenAPI-Dokument unter /openapi.json wird bei jedem Build aus deiner Konfiguration erzeugt und beschreibt daher nur das, was die deployte Site tatsächlich ausliefert: jeden JSON-Endpunkt mit einer eindeutigen operationId, typisierten Parametern und Response-Schemas, dazu die Text-Oberflächen daneben — die .md-Spiegel, llms.txt und llms-full.txt, agent-readability.json — sowie den MCP-Endpunkt, wenn er aktiviert ist. Frameworks, die aus einer OpenAPI-Beschreibung Tools bauen, erhalten dieselbe Reichweite wie ein MCP-Client. Das Dokument ist aus dem API-Katalog, dem Readability-Manifest, dem Link-Header der Startseite als rel="service-desc" und aus llms.txt verlinkt.

Nichts davon berührt deine eigene API-Referenz: Eine dokumentierte Spec wird in Seiten gerendert, niemals unter /openapi.json ausgeliefert, und der Katalog listet beides. Eine public/openapi.json, die du selbst ausspielst, übernimmt diese Route (die JSON-Endpunkte bleiben bestehen). Der /api/…-Catch-all tritt zurück, wenn ein Dokumentationsbereich aus dem /api-Namespace ausgeliefert wird (content/api/overview.md) oder eine eigene Seite eine Rest-Route unter /api/ besetzt — diese Seiten gewinnen also weiterhin.

Abschalten

Setze ai.api auf false, um nichts davon zu veröffentlichen:

ai: {
  api: false,
}

War diese Seite hilfreich?