API Content Intelligence
Rapports agrégés sur score, freshness, linking par projet — une seule API.
L'API Content Intelligence est l'endpoint d'agrégation pour tout ce qui mesure la qualité de contenu au niveau projet : score moyen, articles obsolètes, pages orphelines, couverture de profils de style et état courant du maillage interne. Au lieu de faire un appel distinct pour chaque sous-système, un seul GET te donne une image consolidée — parfait pour des dashboards et outils de reporting externes.
Contexte des modules : Content Freshness · Internal Linking · Storylines.
Endpoint Overview
| Méthode | Endpoint | Description | Crédits |
|---|---|---|---|
| GET | /v1/content-intelligence?project_id={id} |
Rapport agrégé sur tous les sous-systèmes content d'un projet | — |
| GET | /v1/content-freshness?project_id={id} |
Liste freshness sur tout le projet (quels articles sont obsolètes) | — |
curl "$BASE/content-intelligence?project_id=12" \
-H "Authorization: Bearer $TOKEN" | jq
Réponse (abrégée) :
{
"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
Les storylines regroupent des articles apparentés en cluster thématique avec un pillar content commun.
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /v1/projects/{project}/storylines |
Liste de toutes les storylines |
| POST | /v1/projects/{project}/storylines |
Créer une nouvelle storyline |
| GET | /v1/storylines/{id} |
Détail incl. articles associés |
| PUT | /v1/storylines/{id} |
Update |
| DELETE | /v1/storylines/{id} |
Suppression |
Style Profiles
Définissent la tonalité, la voix de marque et les règles d'écriture appliquées par Generate/Optimize.
| Méthode | Endpoint | Description | Crédits |
|---|---|---|---|
| GET | /v1/projects/{project}/style-profiles |
Liste (inclut en plus source_type, source_url, pending_review, scraped_pages, failure_reason, reviewed_at) |
— |
| POST | /v1/projects/{project}/style-profiles |
Créer manuellement | — |
| GET | /v1/style-profiles/{id} |
Détail (mêmes champs supplémentaires) | — |
| PUT | /v1/style-profiles/{id} |
Mettre à jour (si pending_review=true, implicitement mis à false, reviewed_at renseigné) |
— |
| DELETE | /v1/style-profiles/{id} |
Suppression | — |
| POST | /v1/projects/{project}/style-profiles/from-url |
Lancer une analyse de style par URL en arrière-plan. HTTP 202 → { data: { id, status: "pending", source_url, message } } |
25 |
| GET | /v1/style-profiles/{id}/scrape-status |
Statut du job → { status, source_url, scraped_pages, failure_reason, pending_review } |
— |
| POST | /v1/style-profiles/{id}/accept |
Accepter le profil (pending_review=false, reviewed_at=now()). Réponse : { data: <StyleProfile> } |
— |
| POST | /v1/style-profiles/{id}/discard |
Rejeter (soft-delete). Uniquement si pending_review=true, sinon 422. Réponse : { deleted: true } |
— |
Knowledge Base
Contexte additionnel (PDFs, textes, URLs) que la génération utilise comme source.
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /v1/projects/{project}/knowledge-base |
Toutes les entrées |
| POST | /v1/projects/{project}/knowledge-base |
Ajouter une entrée |
| DELETE | /v1/knowledge-base/{id} |
Supprimer |
Link Lists
Whitelists/blacklists pour la génération de liens internes.
| Méthode | Endpoint |
|---|---|
| GET | /v1/projects/{project}/link-lists |
| POST | /v1/projects/{project}/link-lists |
| DELETE | /v1/link-lists/{id} |
Orphan Scans
Trouve les articles sans liens internes entrants (problème SEO).
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /v1/projects/{project}/orphan-scans/discover |
Dispatcher un scan (async) |
| POST | /v1/orphan-scans/{id}/start |
Relancer |
| GET | /v1/orphan-scans/{id} |
Statut + résumé |
| GET | /v1/orphan-scans/{id}/pages |
Liste des pages orphelines |
| DELETE | /v1/orphan-scans/{id} |
Suppression |
SCAN=$(curl -s -X POST "$BASE/projects/12/orphan-scans/discover" \
-H "Authorization: Bearer $TOKEN" | jq -r .data.id)
# Poller jusqu'à 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'
Notes
- L'endpoint Overview cache en interne pendant 60 s — les rapports chargent vite, mais les valeurs peuvent avoir jusqu'à une minute de retard.
freshness.stalene compte que les articles avec un freshness check terminé. Les articles sans check jamais lancé n'apparaissent pas dans le quota stale — voir API Articles pourPOST /articles/{id}/freshness/check.- Les Orphan Scans sont async, mais peu coûteux (pas de coût en crédits) et idempotents par projet — les discovers parallèles sont dédupliqués côté serveur.
- Les Style Profiles n'agissent qu'à la prochaine exécution Generate/Optimize, pas rétroactivement sur le contenu existant.
Voir aussi : API Articles · Content Freshness · Internal Linking · Storylines.