Votre site n'est pas hébergé chez takotak, et vous avez l'option Articles et posts. Les articles sont rédigés et validés dans votre espace client ; votre site les lit par une API, avec une clé d'accès, et peut être prévenu à chaque changement par une requête signée. Cette page et les suivantes décrivent exactement l'un et l'autre, pour votre développeur.
Trois façons de brancher votre site
- Site rendu à la demande avec cache (Next.js sur Vercel, et tout cadre qui sait invalider une page sans reconstruire) : vos pages lisent l'API au moment du rendu et gardent la réponse en cache. L'adresse à prévenir est une route de votre site qui vérifie la signature puis invalide ce cache : l'article paraît en quelques secondes, sans build. C'est la voie que nous recommandons, et celle qu'utilise notre propre site.
- Site entièrement statique (Astro, Hugo, Eleventy, export statique) : le build lit tous les articles en un appel (
?include=content). Pour qu'un article validé paraisse sans attendre, réglez comme adresse à prévenir le « build hook » de votre hébergeur : chaque validation relance le build. - Site dynamique (WordPress, CMS) : réglez comme adresse à prévenir une route de votre site. À chaque notification, elle lit l'article par l'API et le crée, le met à jour ou le dépublie chez vous.
Le code de chacune est dans Exemples d'intégration.
L'adresse de l'API est la même pour tous les sites : c'est la clé d'accès qui désigne le vôtre.
https://app.takotak.ai/api/v1/articles
La clé, l'adresse à prévenir et sa clé de signature se règlent dans l'espace client, page « Réglages des articles », onglet « Publication ».
Authentification
Chaque appel porte la clé d'accès du site dans l'en-tête Authorization: Bearer tkr_…. Gardez-la côté serveur (variable d'environnement du build, wp-config.php), jamais dans une page publique.
| Réponse | Cas |
|---|---|
400 |
since qui n'est pas une date ISO 8601. |
401 |
Clé absente ou fausse. |
404 |
Article inconnu, ou d'un autre site, ou mise à jour d'un article déjà en ligne qui n'est plus validée ou qu'une mise à jour plus récente de la même page a remplacée (voir plus bas). |
410 |
Article retiré depuis (voir plus bas). |
Régénérer la clé dans l'espace client invalide l'ancienne aussitôt.
Lister les articles
GET https://app.takotak.ai/api/v1/articles
Authorization: Bearer tkr_…
{
"site": "mon-site.fr",
"version": "2026-09-19",
"syncedAt": "2026-09-22T07:12:41.000Z",
"since": null,
"articles": [
{
"id": "17704761-f25c-40a0-a8d3-02d4e5808a8a",
"slug": "osteopathe-reprise-sport-vienne",
"status": "published",
"title": "Ostéopathe reprise sport Vienne : prévenir les blessures",
"description": "Pourquoi un bilan en début de saison évite les blessures des premiers entraînements.",
"keyword": "ostéopathe reprise sport vienne",
"publishedAt": "2026-09-14T15:57:50.628Z",
"updatedAt": "2026-09-15T09:02:11.410Z",
"url": "https://app.takotak.ai/api/v1/articles/17704761-f25c-40a0-a8d3-02d4e5808a8a",
"image": { "url": "…/images/osteopathe-reprise-sport-vienne.webp?v=3f9a1c02de", "width": 1376, "height": 768, "alt": "…", "srcset": "… 400w, … 640w, … 1376w" },
"replaces": null
}
]
}
- Sans paramètre : les articles en ligne, résumés, du plus récent au plus ancien.
imageest l'image d'en-tête, de quoi construire une liste. ?include=content: les mêmes articles, complets. Un seul appel pour tout un build.?since=<date ISO>: tout ce qui a changé depuis cette date (incluse), y compris les articles retirés, avec"status": "removed". Repassez lesyncedAtde la réponse précédente pour ne lire que les nouveautés.- ETag : renvoyez l'en-tête
ETagreçu dansIf-None-Match; tant que rien n'a changé, la réponse est un304sans corps.
Lire un article
GET https://app.takotak.ai/api/v1/articles/<id> renvoie { site, version, article }, l'article complet dans son dernier état. Un article retiré depuis répond 410 avec son id et son slug : dépubliez-le, ne l'effacez pas, il peut revenir. Un article supprimé par le client répond de la même façon, et figure lui aussi en "status": "removed" dans la liste ?since= : rien à traiter à part, il ne reviendra simplement pas.
{
"id": "17704761-f25c-40a0-a8d3-02d4e5808a8a",
"slug": "osteopathe-reprise-sport-vienne",
"status": "published",
"title": "…", "description": "…", "keyword": "…",
"publishedAt": "2026-09-14T15:57:50.628Z",
"updatedAt": "2026-09-15T09:02:11.410Z",
"author": "Morgane Ribon, ostéopathe",
"city": "Vienne",
"keyTakeaways": ["…", "…"],
"faq": [{ "question": "…", "answer": "…" }],
"sources": [{ "url": "https://…", "claim": "…" }],
"cta": [{ "label": "Prendre rendez-vous", "url": "https://www.mon-site.fr/rendez-vous", "title": "Une douleur qui ne passe pas ?", "text": "Une séance pour trouver l'origine de la douleur et repartir sur de bonnes bases." }],
"html": "<article class=\"tk-article\">…<img src=\"…/images/osteopathe-reprise-sport-vienne.webp?v=3f9a1c02de\" srcset=\"…\" sizes=\"…\" alt=\"…\">…</article>",
"markdown": "## Avant la reprise\n\n…\n\n\n\nCTA : [Prendre rendez-vous](https://www.mon-site.fr/rendez-vous)",
"images": [
{ "file": "osteopathe-reprise-sport-vienne.webp", "role": "hero", "url": "…/images/osteopathe-reprise-sport-vienne.webp?v=3f9a1c02de", "width": 1376, "height": 768, "alt": "…",
"contentType": "image/webp", "srcset": "…", "variants": [{ "width": 400, "url": "…&w=400" }, { "width": 640, "url": "…&w=640" }] }
],
"jsonLd": [{ "@context": "https://schema.org", "@type": "BlogPosting", "headline": "…", "datePublished": "…", "dateModified": "…" }, { "@type": "FAQPage" }]
}
| Champ | |
|---|---|
html |
Le fragment complet (titre h1, points clés, corps, appels à l'action, FAQ, sources), liens absolus, images avec srcset. Les classes tk-article… sont à vous : stylez-les ou retirez-les, takotak n'impose aucune feuille de style. |
markdown |
Le corps seul, pour le rendre vous-même. Les appels à l'action y sont des lignes CTA : [libellé](adresse), aussi listés dans cta. Points clés, FAQ et sources sont à part. |
cta |
Les appels à l'action du corps, dans l'ordre, tels que vous les avez rédigés dans les réglages des articles : label et url du bouton, title (accroche) et text, vides pour un bouton seul. Dans html, un bloc complet est un div.tk-article__cta-box qui contient p.tk-article__cta-title, p.tk-article__cta-text puis le bouton p.tk-article__cta > a.tk-article__btn. |
images[].role |
hero pour l'image d'en-tête (une au plus), inline pour celles du corps. |
publishedAt |
La date de première mise en ligne, à conserver lors d'une mise à jour. Pour la mise à jour d'une page déjà en ligne (replaces), c'est la date de sa validation : gardez celle de votre page. |
updatedAt |
Le dernier changement. |
jsonLd |
Les données structurées (BlogPosting avec ses dates, FAQPage), à poser dans une balise script type="application/ld+json". |
replaces |
null pour un nouvel article. Pour la mise à jour d'une page déjà en ligne : { "url": "…" }, l'adresse de cette page (voir ci-dessous). |
Mise à jour d'un article déjà en ligne
takotak propose aussi de remettre à jour un article de votre blog qui n'a pas été écrit par takotak. Une fois validée, la mise à jour arrive comme un article : même forme, même webhook, avec replaces.url = l'adresse de la page à remplacer, et slug = le dernier segment de cette adresse.
- Retrouvez la page par son slug et remplacez son contenu (titre, description, corps, images, données structurées) ; ne créez pas une seconde page. Gardez son adresse et sa date de première publication (le
publishedAtde la mise à jour est la date de sa validation). - Le slug, jamais l'
id: une même page peut être remise à jour plus tard, par un nouvel article au même slug et avec un autreid. L'API ne sert alors que la plus récente. - Une mise à jour n'a pas de page à elle : ne la montrez ni dans la liste de vos articles ni à une adresse à part.
- Une mise à jour n'est jamais annoncée retirée : ni
article.removed, ni"status": "removed". Si elle est réécrite ou supprimée dans takotak, elle disparaît simplement de l'API, et votre page garde son contenu. - Sans branchement, la mise à jour se copie depuis l'espace client (aperçu), comme un article.
Les images
Les adresses d'images ne demandent pas de clé : un générateur de site les télécharge comme des images publiques. Chacune porte l'empreinte du fichier (?v=) et reste en cache un an : une image inchangée n'est jamais retéléchargée, une image modifiée change d'adresse. variants propose des largeurs en WebP plus petites que l'original (400, 640, 800 et 1 024 px pour une image d'article ordinaire), déjà prêtes dans le srcset.
Deux façons de les utiliser, à choisir en connaissance de cause :
- Les copier chez vous au moment de publier (build, WordPress) : elles vivent sous votre domaine, comptent pour votre référencement dans Google Images, et restent en place même si l'article est retiré.
- Les afficher depuis leur adresse : indispensable si vos pages se refont sans build, puisqu'il n'y a alors aucun moment pour les copier. Les appels depuis n'importe quel site sont autorisés (
Access-Control-Allow-Origin: *). En contrepartie, ces adresses portent l'en-têteX-Robots-Tag: noindex: les images ne sont pas indexées dans Google Images. Et elles cessent de répondre dès que l'article est retiré, ce qui est voulu : la page qui les affichait doit être dépubliée aussi.
Conseil
Sur Next.js, déclarez l'hôte app.takotak.ai dans images.remotePatterns de next.config : le composant Image l'exige, même sans optimisation.
Sécurité
- Clé d'accès et clé de signature se régénèrent à tout moment depuis l'espace client ; les anciennes cessent aussitôt de fonctionner.
- L'adresse à prévenir doit être en
https, publique, sans identifiants dans l'URL. - Les notifications partent des serveurs takotak : ne filtrez pas par adresse IP, vérifiez la signature.