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. image est 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 le syncedAt de la réponse précédente pour ne lire que les nouveautés.
  • ETag : renvoyez l'en-tête ETag reçu dans If-None-Match ; tant que rien n'a changé, la réponse est un 304 sans 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![…](…/images/osteopathe-reprise-sport-vienne-2.webp?v=91be0c4d7a)\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 publishedAt de 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 autre id. 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ête X-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.