API de diffusion headless
Ceci est une référence développeur. Si vous configurez un espace headless pour la première fois, commencez par Créer un espace headless.
Chaque espace headless sert ses articles publiés depuis une API de lecture publique, compatible CDN et sans cache. Il n’y a ni authentification ni clé API — l’API retourne uniquement les articles publiés (les brouillons et les articles planifiés n’apparaissent jamais), et un blog est public par définition.
L’URL de base de votre espace — incluant les identifiants de votre espace de travail et de votre site — est affichée sur la page Delivery API de votre site dans le portail client, ainsi que des URL de flux prêts à l’emploi par langue. Tous les chemins ci-dessous sont relatifs à cette base.
Endpoints
| Route | Retourne |
|---|---|
GET /posts | Articles publiés, du plus récent au plus ancien (champs résumés uniquement) |
GET /posts/{slug} | Un article publié, contrat complet (voir ci-dessous) |
GET /terms | Catégories et tags avec le nombre d’articles |
Paramètres de requête (/posts)
| Paramètre | Description |
|---|---|
language | Articles dans une langue (ex. de). Chaque langue est un blog distinct — une campagne par langue. |
category | Filtrer par slug de catégorie. Exclusif avec tag. |
tag | Filtrer par slug de tag. Exclusif avec category. |
cursor | Page suivante (plus ancienne) — passez le nextCursor de la réponse précédente. |
before | Page précédente (plus récente) — passez le prevCursor de la réponse. |
limit | Éléments par page ; valeur par défaut et maximum : 50. |
language se cumule avec category ou tag :
/posts?language=de&category=news correspond aux archives « News » du blog
en allemand. /terms?language=de applique la même portée à la taxonomie.
Pagination
Les réponses de liste sont bidirectionnelles : chacune retourne nextCursor
(vers les articles plus anciens) et prevCursor (vers les articles plus
récents). Un curseur null signifie qu’il n’y a plus de pages dans cette
direction — affichez chaque page uniquement à partir de son jeton d’URL,
sans avoir besoin de conserver un historique de curseurs.
Contrat de réponse pour un article individuel
GET /posts/{slug} retourne { post } avec :
id,slug,title,excerpt— identité et texte de résumé.html— le contenu rendu et assaini. Les liens relatifs à la racine sont absolutisés par rapport à l’URL publique de votre site. Peut être injecté tel quel : liste d’autorisation stricte de balises, pas d’attributs<script>/<style>/on*.blocks— le tableau de blocs structurés, si vous préférez le rendu à l’injection dehtml.metaTitle,metaDescription,keyphrase,categories,tags.featuredImage,bodyImage—{ url, width, height, alt?, caption? }.og—{ title, description, image }, prêt pour les balises Open Graph.schema— un tableau d’objets schema.org JSON-LD (HowTo,FAQPage) lorsque l’article contient ces sections ;[]dans le cas contraire. Fourni hors bande car l’assainisseur de contenu supprime<script>— émettez un<script type="application/ld+json">par entrée dans le<head>de votre page pour l’éligibilité aux résultats enrichis. Les sections correspondantes du contenu portent les classesstructura-howto/structura-faqpour la mise en forme.publishedAt,updatedAt— ISO 8601.updatedAtest votre signal de revalidation.
La réponse de liste retourne uniquement le sous-ensemble résumé — sans
html, blocks ni schema.
Consommation depuis un framework
Effectuez la requête au moment du build ou de la revalidation et traitez l’API comme votre CMS :