Content-Intelligence-API
Aggregierte Reports über Score, Freshness, Linking pro Projekt — eine API.
Die Content-Intelligence-API ist der Sammel-Endpoint für alles, was Inhalts-Qualität auf Projekt-Ebene misst: Durchschnitts-Score, veraltete Artikel, Orphan-Pages, Style-Profile-Coverage und der aktuelle Internal-Linking-Stand. Statt für jedes Sub-System einen eigenen Call abzusetzen, gibt dir ein einziger GET ein konsolidiertes Bild — perfekt für Dashboards und externe Reporting-Tools.
Modul-Kontext: Content Freshness · Internal Linking · Storylines.
Overview-Endpoint
| Method | Endpoint | Beschreibung | Credits |
|---|---|---|---|
| GET | /v1/content-intelligence?project_id={id} |
Aggregierter Report über alle Content-Subsysteme eines Projekts | — |
| GET | /v1/content-freshness?project_id={id} |
Freshness-Liste projekt-weit (welche Artikel sind veraltet) | — |
curl "$BASE/content-intelligence?project_id=12" \
-H "Authorization: Bearer $TOKEN" | jq
Response (gekürzt):
{
"data": {
"project_id": 12,
"articles": {"total": 142, "avg_score": 78, "below_60": 9},
"freshness": {"checked": 120, "stale": 14, "last_run_at": "2026-04-29T09:00:00Z"},
"linking": {"orphans": 3, "suggestions_open": 27},
"style_profiles": {"active": 2, "coverage_pct": 91}
}
}
Storylines
Storylines bündeln verwandte Artikel zu einem Topic-Cluster mit gemeinsamem Pillar-Content.
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /v1/projects/{project}/storylines |
Liste aller Storylines |
| POST | /v1/projects/{project}/storylines |
Neue Storyline anlegen |
| GET | /v1/storylines/{id} |
Detail inkl. zugehöriger Artikel |
| PUT | /v1/storylines/{id} |
Update |
| DELETE | /v1/storylines/{id} |
Löschen |
Style Profiles
Definieren Tonalität, Marken-Stimme und Schreibregeln, die Generate/Optimize anwenden.
| Method | Endpoint | Beschreibung | Credits |
|---|---|---|---|
| GET | /v1/projects/{project}/style-profiles |
Liste (enthält zusätzlich source_type, source_url, pending_review, scraped_pages, failure_reason, reviewed_at) |
— |
| POST | /v1/projects/{project}/style-profiles |
Manuell erstellen | — |
| GET | /v1/style-profiles/{id} |
Detail (gleiche Zusatzfelder) | — |
| PUT | /v1/style-profiles/{id} |
Aktualisieren (bei pending_review=true implizit auf false gesetzt, reviewed_at belegt) |
— |
| DELETE | /v1/style-profiles/{id} |
Löschen | — |
| POST | /v1/projects/{project}/style-profiles/from-url |
URL-basierte Stilanalyse als Background-Job starten. HTTP 202 → { data: { id, status: "pending", source_url, message } } |
25 |
| GET | /v1/style-profiles/{id}/scrape-status |
Job-Status abrufen → { status, source_url, scraped_pages, failure_reason, pending_review } |
— |
| POST | /v1/style-profiles/{id}/accept |
Profil akzeptieren (pending_review=false, reviewed_at=now()). Response: { data: <StyleProfile> } |
— |
| POST | /v1/style-profiles/{id}/discard |
Profil verwerfen (Soft-Delete). Nur wenn pending_review=true, sonst 422. Response: { deleted: true } |
— |
Knowledge Base
Zusätzlicher Kontext (PDFs, Texte, URLs), den die Generation als Source zieht.
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /v1/projects/{project}/knowledge-base |
Alle Einträge |
| POST | /v1/projects/{project}/knowledge-base |
Eintrag hinzufügen |
| DELETE | /v1/knowledge-base/{id} |
Entfernen |
Link Lists
Whitelists/Blacklists für Internal-Link-Generation.
| Method | Endpoint |
|---|---|
| GET | /v1/projects/{project}/link-lists |
| POST | /v1/projects/{project}/link-lists |
| DELETE | /v1/link-lists/{id} |
Orphan Scans
Findet Artikel ohne eingehende interne Links (SEO-Problem).
| Method | Endpoint | Beschreibung |
|---|---|---|
| POST | /v1/projects/{project}/orphan-scans/discover |
Scan dispatchen (async) |
| POST | /v1/orphan-scans/{id}/start |
Erneut starten |
| GET | /v1/orphan-scans/{id} |
Status + Summary |
| GET | /v1/orphan-scans/{id}/pages |
Liste verwaister Seiten |
| DELETE | /v1/orphan-scans/{id} |
Löschen |
SCAN=$(curl -s -X POST "$BASE/projects/12/orphan-scans/discover" \
-H "Authorization: Bearer $TOKEN" | jq -r .data.id)
# Pollen bis status == "completed"
curl -s "$BASE/orphan-scans/$SCAN" -H "Authorization: Bearer $TOKEN" \
| jq '{status, orphans_found}'
curl -s "$BASE/orphan-scans/$SCAN/pages" \
-H "Authorization: Bearer $TOKEN" | jq '.data[].url'
Hinweise
- Der Overview-Endpoint cacht intern für 60 s — Reports laden schnell, aber Werte hinken bis zu einer Minute hinterher.
freshness.stalezählt nur Artikel mit abgeschlossenem Freshness-Check. Artikel ohne jemals gelaufenen Check tauchen nicht in der Stale-Quote auf — siehe Artikel-API fürPOST /articles/{id}/freshness/check.- Orphan-Scans sind async, aber günstig (kein Credit-Cost) und idempotent pro Projekt — parallele Discovers werden serverseitig dedupliziert.
- Style-Profiles wirken erst beim nächsten Generate/Optimize-Lauf, nicht rückwirkend auf bestehenden Content.
Verwandt: Artikel-API · Content Freshness · Internal Linking · Storylines.