Documentation des APIs Textfocus

Sommaire

Introduction

Les APIs Textfocus permettent d'effectuer diverses analyses SEO et sémantiques. Cette documentation explique comment les appeler, quels sont leurs paramètres et leur utilité. Les APIs sont disponibles pour les abonnés des packs "Classic" et "Confort".

Les appels aux APIs sont limités à 30 appels par jour dans le pack Classic, et 1 appel par minute dans le pack Agency.

Chaque requête consomme un crédit sur votre compte.

Vous pouvez retrouver votre clé d'API sur votre compte.

Le paramètre optionnel force_refetch (valeur 1) est accepté par toutes les APIs sauf tf_langs et tf_robotstxt. Lorsqu'il est activé, le cache est ignoré et tous les calculs sont relancés à la volée. À utiliser avec précaution : cela augmente le temps de réponse et consomme un crédit comme un appel normal.

Ces APIs sont publiques depuis mars 2025. Nous savons à quel point il est important que les APIs soient réactives et répondent sans erreur.
Si malgré notre vigilance, vous rencontrez des codes erreurs avec les APIs, veuillez nous contacter, nous ferons au mieux pour vous répondre dans les meilleurs délais.

Serveur MCP : utilisation avec les IA

Le protocole MCP (Model Context Protocol) permet à un assistant IA (Claude, Copilot, Cursor...) d'appeler directement les APIs Textfocus au cours d'une conversation, sans que vous ayez à copier-coller de données.

L'IA peut ainsi lancer une analyse SEO, obtenir des volumes de recherche ou comparer des concurrents, puis interpréter les résultats et formuler des recommandations, le tout en une seule interaction.

Textfocus propose un serveur MCP hébergé accessible à l'adresse :

Dans les deux cas, votre clé API doit être transmise à chaque connexion.

Claude Desktop (Windows / macOS)

Ouvrez le fichier de configuration :

Ajoutez l'entrée suivante dans la section mcpServers :

{
  "mcpServers": {
    "textfocus": {
      "type": "sse",
      "url": "https://textfocus.onrender.com/sse",
      "headers": {
        "X-API-Key": "Votre clé d'API"
      }
    }
  }
}

Redémarrez Claude Desktop. Les outils Textfocus (tf_seo, tf_keyword, tf_competition…) apparaissent alors dans la liste des outils disponibles (icône marteau).

Claude.ai (version web)

Dans Paramètres → Intégrations, ajoutez un nouveau serveur MCP avec l'URL :

https://textfocus.onrender.com/mcp?key=Votre clé d'API

Les champs OAuth sont facultatifs et peuvent rester vides. Votre clé est transmise directement dans l'URL.

Claude Code (CLI / extension IDE)

Dans le fichier de configuration Claude Code (~/.claude.json ou dans les paramètres du projet), ajoutez :

{
  "mcpServers": {
    "textfocus": {
      "type": "sse",
      "url": "https://textfocus.onrender.com/sse",
      "headers": {
        "X-API-Key": "Votre clé d'API"
      }
    }
  }
}

Cursor, Windsurf et autres IDEs compatibles MCP

Ces éditeurs supportent les serveurs MCP distants via SSE. Dans leurs paramètres MCP, renseignez :

Outils disponibles via MCP

Une fois connecté, l'IA dispose des outils suivants :

Chaque appel d'outil consomme un crédit, comme un appel API classique.

API tf_account

Description : Retourne les informations du compte associé à la clé API : profil, pack, codes AppSumo, crédits restants et crédits consommés sur les 30 derniers jours.

Endpoint : https://www.textfocus.net/apis/tf_account/

Méthode : POST

Paramètres :

Cet endpoint ne consomme pas de crédit.

Champs retournés

API tf_endpoints

Description : Liste tous les endpoints disponibles avec leurs paramètres, leur description et leur coût en crédits.

Endpoint : https://www.textfocus.net/apis/tf_endpoints/

Méthode : POST

Paramètres :

Cet endpoint ne consomme pas de crédit.

Liste des codes langues disponibles

Description : Fournit la liste des langues disponibles. Les identifiants retournés (champ id) correspondent aux codes langue+marché utilisables directement dans le paramètre lang de toutes les autres APIs (ex : fr-CA résout vers l'id du marché canadien francophone).

Endpoint : https://www.textfocus.net/apis/tf_langs/

Méthode : POST

Paramètres :

1. API tf_keyword

Description : Fournit des données sur un mot-clé donné (volume de recherche, coût par clic, etc.).

Endpoint : https://www.textfocus.net/apis/tf_keyword/

Méthode : POST

Paramètres :

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.3",
    "params": {
        "lang": "fr",
        "keyword": ["agence en référencement", "agence seo"],
        "key": "Votre clé d'API"
    },
    "result": {
        "agence en référencement": {
            "id": "agence en référencement",
            "lang": "fr",
            "cost": 13.06,
            "concurrency": 6.00,
            "volume": 27100,
            "difficulty": 87
        },
        {
            "id": "agence seo",
            "lang": "fr",
            "cost": 4.14,
            "concurrency": 28.00,
            "volume": 27100,
            "difficulty": 87
        }
    },
    "response": 200,
    "message": "ok",
    "timing": 0.020776,
    "creditUsed": 1,
    "method": "tf_keyword",
    "credits": 294
}

2. API tf_related

Description : Fournit des termes relatifs à un mot-clé donné.

Endpoint : https://www.textfocus.net/apis/tf_related/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.3",
    "params": {
        "lang": "fr",
        "keyword": "agence seo",
        "key": "Votre clé d'API"
    },
    "result": {
        "semantic": {
            "0": { 
                "id" : "agence seo",
                "keyword" : "meilleure agence seo",
                "lang" : "fr",
                "type" : "match",
                "ngram" : "3",
                "cost" : "0.00",
                "concurrency" : "2",
                "volume" : "22200",
                "intent" : "navigational",
                "difficulty" : "19"
		},
			"1": { 
                "id" : "agence seo",
                "keyword" : "agence seo lyon",
                "lang" : "fr",
                "type" : "match",
                "ngram" : "3",
                "cost" : "6.11",
                "concurrency" : "18",
                "volume" : "1600",
                "intent" : "commercial",
                "difficulty" : "56"
		},
		// Jusqu'à 100 termes peuvent être retournés    },
    "response": 200,
    "message": "ok",
    "timing": 0.3334009999999999,
    "creditUsed": 1,
    "method": "tf_related",
    "credits": 2947
}

3. API tf_seo

Description : Effectue une analyse SEO complète d'une page web.

Endpoint : https://www.textfocus.net/apis/tf_seo/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.3",
    "params": {
        "lang": "fr",
        "keyword": "agence seo",
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
    
    "packId": "14",
    "nbCompeteMax": "50",
    "url": "https://beweb.fr/seo/",
    "urlDecode": "https://beweb.fr/seo/",
    "nbH1": 1,
    "entitiesNotSupported": false,
    "typePage": "page",
    "jsonLdType": "WebPage",
    "firstWords": "vous cherchez [...] et une longue",
    "footerTxt": "On nous demande [...]",
    "host": "https://beweb.fr",
    "urlWords": " beweb  seo ",
    "contentBrut": "Skip to content . AGENCE SEO . Pilotez votre référencement naturel. [...].",
    "nbLinksOut": 16,
    "nbLinksOutExt": 5,
    "canon": "https://beweb.fr/seo/",
    "title": "Agence SEO France - Référencement Naturel Google | BEWEB",
    "description": "Besoin d'une agence SEO pour améliorer votre visibilité en ligne ? [...].",
    "robots": "index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1",
    "h1": "AGENCE SEO Pilotez votre référencement naturel",
    "h2": [
      "Les services de notre agence SEO Nos solutions pour développer votre référencement naturel",
      "Besoin d'une agence SEO ? Contactez nos consultants dès maintenant"
    ],
    "h3": [
      "Audit SEO Trouver les freins au référencement",
      "Recherche de mots clés Les bons mots pour être visible",
      "Accompagnement SEO Etre accompagné sur la durée",
      "Rédaction des balises Optimisation des balises SEO",
      "Refonte SEO Guide / cahier des charges SEO",
      "SEO Rennes Référencement en région rennaise",
      "Voici quelques avis de nos clients",
      "Ils font confiance à nos experts SEO",
      "Profitez de l'expérience d'une agence SEO Pour augmenter votre trafic naturel et vos conversions",
      "Référencement naturel de qualité Avec une agence proche de vous",
      "Améliorez la visibilité de vos sites dès maintenant !",
      "Nos dernières publications sur le SEO",
      "Stratégie SEO : les 14 méthodes de travail que nous utilisons le plus en 2024",
      "Stratégie SEO : les 14 méthodes de travail que nous utilisons le plus en 2024",
      "Utiliser Looker Studio pour analyser les performances de vos pages",
      "Utiliser Looker Studio pour analyser les performances de vos pages",
      "Quand faire un audit seo ?",
      "Quand faire un audit seo ?",
      "Pourquoi utiliser les services de notre agence SEO ?"
    ],
    "hn": [
      {
        "level": "1",
        "tag": "h1",
        "hn": " AGENCE SEO Pilotez votre référencement naturel"
      },
      {
        "level": "2",
        "tag": "h2",
        "hn": " Les services de notre agence SEO Nos solutions pour développer votre référencement naturel"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": "Audit SEOTrouver les freins au référencement"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": "Recherche de mots clés Les bons mots pour être visible"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": "Accompagnement SEO Etre accompagné sur la durée"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": "Rédaction des balises Optimisation des balises SEO"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": "Refonte SEO Guide / cahier des charges SEO"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": "Référencement en région rennaise"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": " Voici quelques avis de nos clients "
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": " Ils font confiance à nos experts SEO "
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": " Profitez de l'expérience d'une agence SEO Pour augmenter votre trafic naturel et vos conversions"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": " Référencement naturel de qualité Avec une agence proche de vous"
      },
      {
        "level": "3",
        "tag": "h3",
        "hn": " Améliorez la visibilité de vos sites dès maintenant ! "
      },
      {
        "level": "4",
        "tag": "h4",
        "hn": "Privacy Overview"
      }
    ],
    "anchors": [
      {
        "anchor": "consultant seo",
        "link": "https://beweb.fr/",
        "rel": "",
        "title": "Consultant SEO"
      },
      {
        "anchor": "services seo",
        "link": "https://beweb.fr/seo/",
        "rel": "",
        "title": "Services SEO"
      },
      {
        "anchor": "services web",
        "link": "https://beweb.fr/web/",
        "rel": "",
        "title": "Services Web"
      },
      {
        "anchor": "plan du site",
        "link": "https://beweb.fr/plan-du-site/",
        "rel": "",
        "title": ""
      },
      {
        "anchor": "contactez-nous",
        "link": "/contact/",
        "rel": "",
        "title": ""
      },
      {
        "anchor": "",
        "link": "#li-page-top",
        "rel": "",
        "title": ""
      },
      {
        "anchor": "",
        "link": "https://www.cookieyes.com/",
        "rel": "",
        "title": ""
      }
    ],
    "images": {
      "https://beweb.fr/wp-content/uploads/2020/09/beweb-logo-60.png": {
        "alt": "Consultant SEO : Expert référencement de site internet à Rennes",
        "title": "",
        "width": "",
        "height": ""
      },
      "https://beweb.fr/wp-content/uploads/2020/11/3249202edit.png": {
        "alt": "agence seo",
        "title": "",
        "width": "900",
        "height": "574"
      },
      "https://beweb.fr/wp-content/uploads/2020/11/ubiqus-logo.png": {
        "alt": "ubiqus logo",
        "title": "",
        "width": "261",
        "height": "100"
      },
      "https://beweb.fr/wp-content/uploads/2020/11/idaos-logo.png": {
        "alt": "idaos logo",
        "title": "",
        "width": "226",
        "height": "100"
      },
      "https://beweb.fr/wp-content/uploads/2016/07/orange_obs.jpg": {
        "alt": "",
        "title": "",
        "width": "194",
        "height": "100"
      },
      "https://beweb.fr/wp-content/uploads/2016/07/lylo_2015.png": {
        "alt": "",
        "title": "",
        "width": "121",
        "height": "100"
      },
      "https://beweb.fr/wp-content/uploads/2016/07/Creative-Ingenierie-logo_165X165.jpg": {
        "alt": "",
        "title": "",
        "width": "206",
        "height": "100"
      },
      "https://beweb.fr/wp-content/uploads/2020/11/augmentez-votre-trafic-naturel.png": {
        "alt": "Augmentez votre trafic naturel",
        "title": "",
        "width": "801",
        "height": "555"
      },
      "https://beweb.fr/wp-content/uploads/2020/11/3339159small.png": {
        "alt": "3339159small",
        "title": "",
        "width": "506",
        "height": "555"
      },
      "https://beweb.fr/wp-content/uploads/2023/01/strategie-seo-300x300.jpg": {
        "alt": "strategie seo",
        "title": "",
        "width": "",
        "height": ""
      },
      "https://beweb.fr/wp-content/uploads/2020/11/3497813-300x300.jpg": {
        "alt": "Utiliser Google Data Studio pour analyser les performances de vos pages",
        "title": "",
        "width": "",
        "height": ""
      },
      "https://beweb.fr/wp-content/uploads/2020/08/seo-793030_1280-300x199.jpg": {
        "alt": "Quand faire un audit seo",
        "title": "",
        "width": "",
        "height": ""
      },
      "https://beweb.fr/wp-content/plugins/cookie-law-info/legacy/public/images/logo-cookieyes.svg": {
        "alt": "CookieYes Logo",
        "title": "",
        "width": "",
        "height": ""
      }
    },
    "strong": [
      "agence en référencement",
      "stratégie de référencement",
      "expertise référencement naturel",
      "bons mots clés",
      "bonnes pratiques de Google",
      "mobile first",
      "Sites internet gérés, créés ou optimisés",
      "Sessions mensuelles cumulées sur nos sites",
      "Mots clés surveillés",
      "optimisation pour les moteurs de recherche",
      "stratégie de référencement sur mesure",
      "expérience",
      "savoir-faire",
      "équipe passionnée",
      "stratégies innovantes",
      "chaque entreprise est unique",
      "simple et accessible",
      "sur le long terme",
      "durables et évolutives,",
      "résultats qui durent"
    ],
    "em": "Jean-Joseph Lattuada, Ouest-France",
    "nbWords": 762,
    "nbWordsAll": 1414,
    "ratio": 6.91,
    "pertinence": 54,
    "nbWordsDistinct": 427,
    "beginWith": {
      "référencement": 19,
      "agence": 12,
      "seo": 8,
      "naturel": 5,
      "solutions": 5,
      "cookies": 5,
      "beweb": 5,
      "web": 5,
      "visibilité": 5,
      "optimisation": 4,
      "analyse": 4,
      "google": 4
    },
    "langs": {
      "country": "FR",
      "langOfPage": "fr",
      "headers-content-type": "text/html",
      "meta-charset": "utf-8",
      "headers-content-language": "non renseigné",
      "meta-content-language": "non renseigné",
      "meta-name-language": "non renseigné",
      "html-lang": "fr-FR"
    },
    "nbPhrases": 49,
    "nbPhrasesAll": 111,
    "entities": [
      {
        "id": 0,
        "type": [
          "Number"
        ],
        "matchingTokens": [
          2
        ],
        "entityId": "78",
        "confidenceScore": 0.5,
        "wikiLink": "",
        "matchedText": "78",
        "relevanceScore": 0,
        "entityEnglishId": "",
        "startingPos": 5,
        "endingPos": 7,
        "unit": "Number"
      },
      {
        "id": 1,
        "type": [
          "Number"
        ],
        "matchingTokens": [
          1
        ],
        "entityId": "6",
        "confidenceScore": 0.5,
        "wikiLink": "",
        "matchedText": "06",
        "relevanceScore": 0,
        "entityEnglishId": "",
        "startingPos": 2,
        "endingPos": 4,
        "unit": "Number"
      },
      {
        "id": 2,
        "matchingTokens": [
          792
        ],
        "entityId": "Algorithme",
        "freebaseTypes": [
          "/award/award_discipline",
          "/education/field_of_study",
          "/symbols/namesake",
          "/book/book_subject"
        ],
        "confidenceScore": 5.629,
        "wikiLink": "http://fr.wikipedia.org/wiki/Algorithme",
        "matchedText": "algorithmes",
        "freebaseId": "/m/0jpv",
        "relevanceScore": 0.2498,
        "entityEnglishId": "Algorithm",
        "startingPos": 5522,
        "endingPos": 5533,
        "wikidataId": "Q8366"
      },
      {
        "id": 3,
        "matchingTokens": [
          808
        ],
        "entityId": "Privacy",
        "freebaseTypes": [
          "/media_common/quotation_subject",
          "/film/film_subject",
          "/law/legal_subject",
          "/book/book_subject"
        ],
        "confidenceScore": 5.349,
        "wikiLink": "http://en.wikipedia.org/wiki/Privacy",
        "matchedText": "privacy",
        "freebaseId": "/m/06804",
        "relevanceScore": 0,
        "entityEnglishId": "Privacy",
        "startingPos": 5633,
        "endingPos": 5640,
        "wikidataId": "Q188728"
      },
      {
        "id": 4,
        "matchingTokens": [
          812
        ],
        "entityId": "Website",
        "freebaseTypes": [
          "/book/book_subject",
          "/business/industry",
          "/award/award_category",
          "/dataworld/information_source",
          "/fictional_universe/fictional_organization_type",
          "/organization/non_profit_organization",
          "/location/location",
          "/internet/website_category",
          "/award/award_discipline",
          "/organization/contact_category",
          "/business/business_location",
          "/education/school_category",
          "/organization/role",
          "/business/employer",
          "/organization/organization_sector"
        ],
        "confidenceScore": 10.45,
        "wikiLink": "http://en.wikipedia.org/wiki/Website",
        "matchedText": "website",
        "freebaseId": "/m/085n4",
        "relevanceScore": 0,
        "entityEnglishId": "Website",
        "startingPos": 5656,
        "endingPos": 5663,
        "wikidataId": "Q35127"
      },
      {
        "id": 5,
        "matchingTokens": [
          814
        ],
        "entityId": "Cookie (informatique)",
        "freebaseTypes": [
          "/book/book_subject"
        ],
        "confidenceScore": 3.079,
        "wikiLink": "http://fr.wikipedia.org/wiki/Cookie_(informatique)",
        "matchedText": "cookies",
        "freebaseId": "/m/0d18sk",
        "relevanceScore": 0.3457,
        "entityEnglishId": "HTTP cookie",
        "startingPos": 5669,
        "endingPos": 5676,
        "wikidataId": "Q178995"
      },
      {
        "id": 6,
        "matchingTokens": [
          892,
          893
        ],
        "entityId": "Option de retrait dans l'Union européenne",
        "confidenceScore": 1.016,
        "wikiLink": "http://fr.wikipedia.org/wiki/Option_de_retrait_dans_l'Union_européenne",
        "matchedText": "opt out",
        "freebaseId": "/m/03cfnlw",
        "relevanceScore": 0.1998,
        "entityEnglishId": "Opt-outs in the European Union",
        "startingPos": 6098,
        "endingPos": 6105,
        "wikidataId": "Q1349687"
      },
      {
        "id": 7,
        "matchingTokens": [
          899,
          900
        ],
        "entityId": "Opt-out (marketing)",
        "confidenceScore": 1.776,
        "wikiLink": "http://fr.wikipedia.org/wiki/Opt-out_(marketing)",
        "matchedText": "opting out",
        "freebaseId": "",
        "relevanceScore": 0.06177,
        "entityEnglishId": "Opt-out",
        "startingPos": 6128,
        "endingPos": 6138,
        "wikidataId": "Q1368455"
      },
      {
        "id": 8,
        "matchingTokens": [
          907
        ],
        "entityId": "Affect",
        "confidenceScore": 0.9559,
        "wikiLink": "http://fr.wikipedia.org/wiki/Affect",
        "matchedText": "affect",
        "freebaseId": "/m/09f7n8",
        "relevanceScore": 0.1276,
        "entityEnglishId": "Affect (psychology)",
        "startingPos": 6168,
        "endingPos": 6174,
        "wikidataId": "Q159904",
        "wikidataTypes": [
          "Q96634632/psychology term",
          "Q12812139/technical term"
        ]
      },
      {
        "id": 9,
        "matchingTokens": [
          928
        ],
        "entityId": "Analytics",
        "freebaseTypes": [
          "/organization/organization_sector",
          "/business/competitive_space",
          "/computer/software_genre",
          "/internet/website_category",
          "/book/book_subject",
          "/business/industry",
          "/media_common/quotation_subject"
        ],
        "confidenceScore": 2.001,
        "wikiLink": "http://en.wikipedia.org/wiki/Analytics",
        "matchedText": "analytics",
        "freebaseId": "/m/02gcn9",
        "relevanceScore": 0,
        "entityEnglishId": "Analytics",
        "startingPos": 6296,
        "endingPos": 6305,
        "wikidataId": "Q485396",
        "wikidataTypes": [
          "Q105948247/knowledge system",
          "Q1047113/specialty",
          "Q2198779/unit",
          "Q4671286/academic major",
          "Q26256810/matter",
          "Q11953984/linguistic unit",
          "Q11862829/academic discipline",
          "Q110403031/knowledge type",
          "Q115786086/linguistic form",
          "Q115372263/word or phrase",
          "Q1128340/subject heading"
        ]
      }
    ],
    "opengraph": {
      "og:locale": "fr_FR",
      "og:type": "article",
      "og:title": "Agence SEO France - Référencement Naturel Google | BEWEB",
      "og:description": "Besoin d",
      "og:url": "https://beweb.fr/seo/",
      "og:site_name": "Consultant SEO : Expert référencement de site internet à Rennes"
    },
    "twitter": [],
    "robotsTxtInfo": {
      "code": 200,
      "response": {},
      "content": "User-agent: *\r\nDisallow:\r\n\r\n#test o2"
    },
    "nbImg": 13,
    "nbImgNoAlt": 3,
    "firstPerson": {
      "notre": 10,
      "nos": 13,
      "nous": 31,
      "mes": 1,
      "me": 1,
      "je": 2,
      "ma": 1
    },
    "mykeyword": "",
    "verif_presence": 1,
    "words": {
      "agence": 18,
      "référencement": 27,
      "naturel": 9,
      "référencement naturel": 5,
      "google": 9,
      "beweb": 6,
      "france": 1,
      "besoin": 6,
      "solutions": 6,
      "accompagnement": 5,
      "rédaction": 4,
      "améliorer": 5,
      "visibilité": 7,
      "mesure": 3,
      "optimisation": 7,
      "audit": 7,
      "bonne": 3,
      "développer": 2,
      "optimisé": 2,
      "cherchez": 2,
      "croissance": 2,
      "saura": 1,
      "proposons": 2,
      "contact": 1,
      "contactez": 1,
      "rigueur": 1,
      "choisir": 1,
      "sérieux": 1,
      "confiez": 1,
      "large": 1,
      "laissons": 1,
      "proposé": 1,
      "panel": 1,
      "adaptées": 1,
      "temps": 1,
      "outils": 1,
      "tracking": 1,
      "paramétrage": 1,
      "longue": 1,
      "manager": 1,
      "contenu": 2,
      "client": 8,
      "stratégie": 8,
      "technique": 6,
      "recherche": 6,
      "analyse": 6,
      "experience": 6,
      "cookies": 6,
      "balises": 5,
      "travail": 5,
      "objectif": 4,
      "sites": 4,
      "place": 4,
      "these": 4,
      "performance": 4,
      "résultats": 4,
      "website": 4,
      "comprendre": 4,
      "aider": 4
    },
    "optimise": {
      "agence": 51,
      "référencement": 50,
      "naturel": 39,
      "google": 28,
      "beweb": 28,
      "france": 23,
      "besoin": 12,
      "solutions": 11,
      "audit": 7,
      "visibilité": 7
    },
    "wordsOptimiseFor": {
      "agence": 51,
      "référencement": 50,
      "naturel": 39,
      "google": 28,
      "beweb": 28,
      "france": 23,
      "besoin": 12,
      "solutions": 11,
      "audit": 7,
      "visibilité": 7,
      "améliorer": 7,
      "mesure": 7,
      "rédaction": 7,
      "optimisation": 7,
      "accompagnement": 7
    },
    "groupOptimiseFor": {
      "agence": 51,
      "référencement": 50,
      "naturel": 39,
      "google": 28,
      "beweb": 28,
      "france": 23,
      "besoin": 12,
      "solutions": 11,
      "audit": 7,
      "visibilité": 7,
      "améliorer": 7,
      "mesure": 7,
      "rédaction": 7,
      "optimisation": 7,
      "accompagnement": 7
    },
    "lexies": {
      "proposons": {
        "4": "proposition",
        "22": "viser",
        "24": "mesure",
        "26": "objectif",
        "33": "agence",
        "35": "contenu",
        "43": "sites",
        "47": "services",
        "53": "concurrence",
        "83": "option",
        "164": "projet",
        "197": "atteindre",
        "201": "client",
        "211": "découvrir",
        "214": "devis",
        "228": "gratuit",
        "277": "accompagnement"
      },
      "référencement": [
        "recherche",
        "optimisation",
        "visibilité",
        "contenu",
        "internet",
        "visible",
        "complexe",
        "optimisé"
      ],
      "solutions": [
        "optimisation",
        "analyse",
        "efficace",
        "simple",
        "optimiser",
        "amélioration",
        "performance",
        "référencement",
        "stratégie",
        "processus",
        "adaptées"
      ],
      "agence": {
        "14": "entreprise",
        "16": "client",
        "32": "objectif",
        "37": "secteur"
      },
      "naturel": {
        "38": "simple",
        "126": "migration",
        "187": "recherche",
        "195": "force"
      },
      "besoin": [
        "amélioration",
        "objectif",
        "qualité",
        "utile",
        "entreprise",
        "client",
        "disponible",
        "projet",
        "bonne",
        "adaptées"
      ],
      "développer": {
        "0": "croissance",
        "1": "secteur",
        "2": "trafic",
        "3": "processus",
        "4": "entreprise",
        "6": "améliorer"
      },
      "mesure": [
        "temps",
        "point",
        "secteur",
        "stade",
        "ligne",
        "force",
        "commun",
        "durée",
        "travail",
        "processus",
        "terme",
        "nouveau",
        "ensemble",
        "photographe",
        "studio",
        "performance",
        "ordinaire",
        "longue"
      ],
      "outils": {
        "8": "analyse",
        "75": "optimisation",
        "77": "ergonomie",
        "98": "guide",
        "111": "simple"
      },
      "confiez": {
        "7": "laisser",
        "8": "confiance",
        "24": "découvrir",
        "34": "choisir",
        "99": "enregistrer"
      },
      "rédaction": {
        "13": "projet",
        "14": "quotidien",
        "17": "cahier"
      },
      "contact": {
        "11": "direct"
      },
      "contactez": {
        "20": "aider",
        "54": "découvrir",
        "118": "proposer",
        "126": "rendre",
        "127": "répondre",
        "134": "savoir"
      },
      "sérieux": {
        "41": "confiance",
        "55": "gratuit"
      },
      "saura": {
        "51": "montre",
        "59": "commun",
        "64": "découvrir",
        "167": "disponibilité",
        "193": "force",
        "272": "point",
        "279": "processus"
      },
      "laissons": {
        "50": "cours",
        "69": "mettre",
        "88": "rendre",
        "97": "découvrir",
        "114": "maîtriser",
        "188": "place",
        "265": "aimons",
        "271": "appliquer"
      }
    },
    "listLexies": {
      "agence": {
        "ponderation": 51,
        "color": "264653"
      },
      "référencement": {
        "ponderation": 74,
        "color": "287271"
      },
      "naturel": {
        "ponderation": 39,
        "color": "2A9D8F"
      },
      "besoin": {
        "ponderation": 23,
        "color": "8AB17D"
      },
      "solutions": {
        "ponderation": 73,
        "color": "E9C46A"
      },
      "mesure": {
        "ponderation": 17,
        "color": "EFB366"
      },
      "rédaction": {
        "ponderation": 7,
        "color": "F4A261"
      },
      "développer": {
        "ponderation": 18,
        "color": "EE8959"
      },
      "contact": {
        "ponderation": 5,
        "color": "E76F51"
      },
      "contactez": {
        "ponderation": 5,
        "color": "E97C61"
      },
      "proposons": {
        "ponderation": 75,
        "color": "f45b5b"
      },
      "sérieux": {
        "ponderation": 5,
        "color": "e4d354"
      },
      "confiez": {
        "ponderation": 10,
        "color": "413775"
      },
      "saura": {
        "ponderation": 5,
        "color": "e91e63"
      },
      "laissons": {
        "ponderation": 5,
        "color": "9c27b0"
      },
      "outils": {
        "ponderation": 12,
        "color": "90ed7d"
      }
    },
    "lexiesOptimiseFor": {
      "proposons": 75,
      "référencement": 74,
      "solutions": 73,
      "agence": 51,
      "naturel": 39,
      "besoin": 23,
      "développer": 18,
      "mesure": 17,
      "outils": 12
    },
    "listPresence": {
      "title": {
        "référencement naturel": 1,
        "référencement": 1,
        "agence": 1,
        "google": 1,
        "naturel": 1,
        "beweb": 1,
        "france": 1
      },
      "h1": {
        "référencement naturel": 1,
        "référencement": 1,
        "agence": 1,
        "naturel": 1
      },
      "h2": {
        "référencement naturel": 1,
        "référencement": 1,
        "agence": 1,
        "naturel": 1,
        "solutions": 1,
        "services": 1,
        "développer": 1,
        "besoin": 1,
        "consultants": 1,
        "contact": 1,
        "contactez": 1
      },
      "strong": {
        "référencement naturel": 1,
        "référencement": 1,
        "agence": 1,
        "stratégie": 1,
        "naturel": 1,
        "google": 1,
        "pratiques": 1,
        "bonne": 1,
        "mobile": 1,
        "first": 1
      },
      "description": {
        "agence": 1,
        "stratégie": 1,
        "visibilité": 1,
        "besoin": 1,
        "améliorer": 1,
        "mesure": 1,
        "ligne": 1
      },
      "h3": {
        "référencement": 1,
        "audit": 1,
        "trouver": 1,
        "freins": 1,
        "recherche": 1,
        "visible": 1,
        "accompagnement": 1,
        "accompagné": 1,
        "durée": 1,
        "optimisation": 1,
        "balises": 1,
        "rédaction": 1,
        "charges": 1,
        "refonte": 1,
        "cahier": 1,
        "guide": 1,
        "rennes": 1,
        "région": 1,
        "rennaise": 1
      },
      "host": {
        "beweb": 1
      },
      "url": {
        "beweb": 1
      },
      "firstWords": {
        "référencement": 1,
        "agence": 1,
        "google": 1,
        "visibilité": 1,
        "audit": 1,
        "optimisation": 1,
        "besoin": 1,
        "beweb": 1,
        "solutions": 1,
        "accompagnement": 1,
        "améliorer": 1,
        "place": 1,
        "rédaction": 1,
        "bonne": 1,
        "mesure": 1,
        "proposer": 1,
        "concrètes": 1,
        "trafic": 1,
        "internet": 1,
        "cherchez": 1,
        "optimisé": 1,
        "contenu": 1,
        "hasard": 1,
        "proposons": 1,
        "croissance": 1,
        "rigueur": 1,
        "choisir": 1,
        "sérieux": 1,
        "confiez": 1,
        "saura": 1,
        "large": 1,
        "laissons": 1,
        "panel": 1,
        "adaptées": 1,
        "temps": 1,
        "outils": 1,
        "tracking": 1,
        "paramétrage": 1,
        "manager": 1,
        "proposé": 1,
        "longue": 1
      },
      "footerTxt": {
        "agence": 1,
        "besoin": 1,
        "beweb": 1,
        "experts": 1,
        "répondre": 1,
        "rennes": 1,
        "christophe": 1,
        "consultants": 1,
        "services": 1,
        "contact": 1,
        "contactez": 1,
        "répond": 1
      },
      "em": {
        "ouest": 1,
        "france": 1,
        "lattuada": 1,
        "joseph": 1
      }
    },
    "scoreSeo": 96.5,
    "hnInFooter": []
    },
    "response": 200,
    "message": "ok",
    "timing": 0.3334009999999999,
    "creditUsed": 1,
    "method": "tf_related",
    "credits": 2947
}

4. API tf_semantic

Description : Fournit une analyse sémantique et propose du vocabulaire sémantique.

Endpoint : https://www.textfocus.net/apis/tf_semantic/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.3",
    "params": {
        "lang": "fr",
        "keyword": "mini serre",
        "key": "Votre clé d'API"
    },
    "result": {
        
        "nbCompete": 34,
    "nbFound": 119,
    "nbWordsContentMoy": 904.6470588235294,
    "nbWordsTitleMoy": 6.0588235294117645,
    "semantic": {
      "0": {
        "id": "mini serre",
        "keyword": "semis",
        "kei": "100.00",
        "ngram": "1",
        "used": "82.35",
        "occ": "105",
        "omin": "1",
        "omax": "36",
        "omoy": "7.5",
        "osd": "8.1",
        "nbwmoy": "555",
        "intitle": "14.71",
        "inhn": "26.47",
        "frequency": "22.85",
        "tfidf": "0.0613",
        "context": "a:3:{i:0;s:16:\"mini serre semis\";i:1;s:21:\"fleurs légumes semis\";i:2;s:16:\"serre semis pots\";}"
      },
      "1": {
        "id": "mini serre",
        "keyword": "plantes",
        "kei": "99.11",
        "ngram": "1",
        "used": "73.53",
        "occ": "97",
        "omin": "1",
        "omax": "44",
        "omoy": "7.8",
        "osd": "11.1",
        "nbwmoy": "606",
        "intitle": "0.00",
        "inhn": "14.71",
        "frequency": "16.74",
        "tfidf": "0.0573",
        "context": "a:3:{i:0;s:23:\"plantes fleurs légumes\";i:1;s:23:\"serre hivernage plantes\";i:2;s:24:\"hivernage plantes fleurs\";}"
      },
      "2": {
        "id": "mini serre",
        "keyword": "jardin",
        "kei": "98.01",
        "ngram": "1",
        "used": "79.41",
        "occ": "140",
        "omin": "1",
        "omax": "54",
        "omoy": "12.0",
        "osd": "11.9",
        "nbwmoy": "605",
        "intitle": "20.59",
        "inhn": "38.24",
        "frequency": "30.33",
        "tfidf": "0.0694",
        "context": "a:3:{i:0;s:17:\"mini serre jardin\";i:1;s:19:\"petite serre jardin\";i:2;s:26:\"serre jardin polycarbonate\";}"
      },
      "3": {
        "id": "mini serre",
        "keyword": "culture",
        "kei": "95.93",
        "ngram": "1",
        "used": "76.47",
        "occ": 83,
        "omin": "1",
        "omax": "23",
        "omoy": "5.5",
        "osd": "5.2",
        "nbwmoy": "589",
        "intitle": "14.71",
        "inhn": "29.41",
        "frequency": "19.50",
        "tfidf": "0.0492",
        "context": "a:3:{i:0;s:18:\"mini serre culture\";i:1;s:23:\"serre culture plastique\";i:2;s:13:\"serre culture\";}"
      },
      "4": {
        "id": "mini serre",
        "keyword": "balcon",
        "kei": "77.62",
        "ngram": "1",
        "used": "47.06",
        "occ": "24",
        "omin": "1",
        "omax": "6",
        "omoy": "2.6",
        "osd": "1.6",
        "nbwmoy": "595",
        "intitle": "0.00",
        "inhn": "8.82",
        "frequency": "4.29",
        "tfidf": "0.0324",
        "context": "a:3:{i:0;s:15:\"balcon terrasse\";i:1;s:13:\"serres balcon\";i:2;s:12:\"serre balcon\";}"
      },
		// Jusqu'à 100 termes peuvent être retournés      
    }
        
        
    },
    "response": 200,
    "message": "ok",
    "timing": 0.020776,
    "creditUsed": 1,
    "method": "tf_keyword",
    "credits": 2948
}

5. API tf_robotstxt

Description : Analyse le fichier robots.txt d'un domaine : présence du sitemap XML, agents IA bloqués, Content Signals.

Endpoint : https://www.textfocus.net/apis/tf_robotstxt/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.4",
    "params": {
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
        "score": 75,
        "issues": [
            "Aucun Content Signal détecté dans le robots.txt"
        ],
        "details": {
            "sitemaps": [
                "https://beweb.fr/sitemap.xml"
            ],
            "blocked_bots": [],
            "content_signals": {}
        }
    },
    "response": 200,
    "message": "ok",
    "timing": 0.312,
    "creditUsed": 1,
    "method": "tf_robotstxt",
    "credits": 293
}

Champs de la réponse

6. API tf_geo

Description : Effectue une analyse complète d'optimisation GEO (Generative Engine Optimization) d'une page web : structure des titres, données structurées, lisibilité, cohérence sémantique, performances, accessibilité pour les agents IA, etc. Retourne un score global IA-Ready et des scores par axe.

Endpoint : https://www.textfocus.net/apis/tf_geo/

Méthode : POST

Réponse

Exemple de réponse JSON (condensé) :

{
    "version": "1.0.4",
    "params": {
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
        "ia_ready_score": 68.4,
        "geo_commentary": {
            "comment": "Cette page présente une optimisation correcte pour les IA, mais plusieurs points méritent attention.",
            "priority_text": "Les principaux axes d'amélioration sont la table des matières et les données structurées (Schema.org)."
        },
        "all_scores": {
            "structure_score": 80,
            "structured_data_score": 40,
            "segmentation_markup_score": 75,
            "readability_score": 70,
            "semantic_coherence_score": 65,
            "toc_score": 30,
            "concise_answer_score": 60,
            "images_score": 55,
            "loading_score": 85,
            "accessibility_score": 90,
            "robots_txt_score": 75
        },
        "structure_and_accessibility": {
            "structure": {
                "analysis": {
                    "score": 80,
                    "issues": [],
                    "details": {
                        "nb_h1": 1,
                        "nb_h2": 2,
                        "h1_matches_topic": true
                    }
                }
            },
            "structured_data": {
                "analysis": {
                    "score": 40,
                    "issues": ["Aucun type Schema.org pertinent détecté (Article, FAQ, HowTo…)"],
                    "types": ["WebPage"]
                }
            },
            "segmentation_markup": {
                "analysis": {
                    "score": 75,
                    "issues": []
                }
            }
        },
        "content_clarity": {
            "readability": {
                "analysis": {
                    "score": 70,
                    "issues": [],
                    "details": {
                        "flesch_kincaid": 33.7,
                        "avg_sentence_length": 18.4
                    }
                }
            },
            "concise_answer": {
                "analysis": {
                    "score": 60,
                    "issues": ["Aucune réponse concise détectée en début de page"]
                }
            },
            "semantic_coherence": {
                "analysis": {
                    "score": 65,
                    "issues": [],
                    "details": {
                        "title_to_content": 0.82,
                        "description_to_content": 0.74
                    }
                }
            }
        },
        "seo_ia_optimization": {
            "toc": {
                "analysis": {
                    "score": 30,
                    "issues": ["Aucune table des matières cliquable détectée"]
                }
            }
        },
        "multimodality": {
            "alt_tags": {
                "analysis": {
                    "score": 55,
                    "issues": ["3 image(s) sans attribut alt"],
                    "details": {
                        "nb_images": 13,
                        "nb_missing_alt": 3
                    }
                }
            }
        },
        "performance": {
            "fast_loading": {
                "analysis": {
                    "score": 85,
                    "issues": [],
                    "details": {
                        "lcp_ms": 1276,
                        "ttfb_ms": 15,
                        "tti_ms": 199
                    }
                }
            },
            "main_readability_accessibility": {
                "analysis": {
                    "score": 90,
                    "issues": []
                }
            },
            "robots_txt": {
                "analysis": {
                    "score": 75,
                    "issues": ["Aucun Content Signal détecté dans le robots.txt"],
                    "details": {
                        "sitemaps": ["https://beweb.fr/sitemap.xml"],
                        "blocked_bots": [],
                        "content_signals": {}
                    }
                }
            }
        },
        "res": {
            "url": "https://beweb.fr/seo/",
            "urlDecode": "https://beweb.fr/seo/",
            "title": "Agence SEO France - Référencement Naturel Google | BEWEB",
            "description": "Besoin d'une agence SEO pour améliorer votre visibilité en ligne ?",
            "h1": "AGENCE SEO Pilotez votre référencement naturel",
            "h2": ["Les services de notre agence SEO", "Besoin d'une agence SEO ?"],
            "nbWords": 762,
            "host": "https://beweb.fr",
            "whatIsAbout": ["référencement", "agence", "naturel", "google", "seo", "visibilité"]
        },
        "lang": "fr",
        "country": "fr",
        "resume_ia": "Cette page présente l'agence SEO Beweb, spécialisée dans le référencement naturel en France..."
    },
    "response": 200,
    "message": "ok",
    "timing": 4.21,
    "creditUsed": 1,
    "method": "tf_geo",
    "credits": 292
}

Champs principaux de la réponse

Note : Cette API effectue une analyse approfondie qui peut prendre entre 3 et 10 secondes selon la page analysée.

8. API tf_competition

Description : Analyse concurrentielle pour un mot-clé donné : récupère les pages en tête des résultats Google et calcule leurs métriques SEO (score SEO, score sémantique, nombre de mots, pertinence, type de page). L'analyse est complète : les pages non encore analysées sont récupérées et calculées à la volée.

Endpoint : https://www.textfocus.net/apis/tf_competition/

Méthode : POST

Paramètres :

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.4",
    "params": {
        "lang": "fr",
        "keyword": "agence seo",
        "key": "Votre clé d'API"
    },
    "result": {
        "keyword": "agence seo",
        "lang": "fr",
        "nbCompete": 10,
        "competitors": [
            {
                "url": "https://www.optimize360.fr/agence-seo/",
                "position": 1,
                "title": "Agence SEO - Optimize 360",
                "h1": "Agence SEO Optimize 360",
                "nbWords": 312,
                "nbWordsAll": 687,
                "pertinence": 45,
                "scoreSeo": 87.5,
                "scoreSemantic": 62.3,
                "typePage": "page"
            },
            {
                "url": "https://www.primelis.com/agence-seo/",
                "position": 2,
                "title": "Agence SEO - Primelis",
                "h1": "Votre agence SEO",
                "nbWords": 489,
                "nbWordsAll": 1102,
                "pertinence": 44,
                "scoreSeo": 91.0,
                "scoreSemantic": 71.8,
                "typePage": "page"
            }
            // Jusqu'à nbCompeteMax concurrents selon votre abonnement        ]
    },
    "response": 200,
    "message": "ok",
    "timing": 12.4,
    "creditUsed": 1,
    "method": "tf_competition",
    "credits": 291
}

Champs de la réponse

Note : Cette API peut prendre entre 5 et 30 secondes selon le nombre de pages à analyser. Les pages déjà analysées récemment sont servies depuis le cache.

9. API tf_structured_data

Description : Extrait et analyse les données structurées JSON-LD (Schema.org) d'une page web. Retourne les blocs JSON-LD bruts, les types Schema.org détectés et une analyse complète de la qualité des données structurées.

Endpoint : https://www.textfocus.net/apis/tf_structured_data/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.4",
    "params": {
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
        "jsonLd": [
            {
                "@context": "https://schema.org",
                "@type": "Article",
                "name": "Agence SEO Paris",
                "description": "Optimisation SEO pour votre site web"
            }
        ],
        "jsonLdType": ["Article"],
        "analysis": {
            "score": 60,
            "types_found": ["Article"],
            "issues": ["Missing recommended property: author"],
            "recommendations": ["Add author property to Article schema"]
        }
    },
    "response": 200,
    "message": "ok",
    "timing": 1.24,
    "creditUsed": 1,
    "method": "tf_structured_data",
    "credits": 292
}

Champs de la réponse

10. API tf_history

Description : Retourne l'historique des analyses SEO d'une URL précédemment analysée : score SEO, score de performance, score sémantique, score IA, nombre de mots et date de chaque enregistrement.

Endpoint : https://www.textfocus.net/apis/tf_history/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.4",
    "params": {
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
        "url": "https://beweb.fr/seo/",
        "keyword": "agence seo",
        "session": "a1b2c3d4e5f6",
        "snapshots": [
            {
                "date": "2024-09-01 10:15:00",
                "scoreSeo": 72.5,
                "scorePerf": 65.0,
                "scoreSem": 58.3,
                "scoreIa": 61.0,
                "nbwordsall": 1240
            },
            {
                "date": "2025-01-15 14:30:00",
                "scoreSeo": 78.2,
                "scorePerf": 70.1,
                "scoreSem": 63.5,
                "scoreIa": 67.4,
                "nbwordsall": 1350
            }
        ]
    },
    "response": 200,
    "message": "ok",
    "timing": 0.08,
    "creditUsed": 0,
    "method": "tf_history",
    "credits": 292
}

Champs de la réponse

Note : L'historique n'est disponible que si la page a été analysée au moins une fois depuis votre compte. Les données sont classées par date croissante.

11. API tf_perf

Description : Analyse les performances mobiles d'une page via Google Lighthouse / PageSpeed Insights. Retourne le score global de performance et les Core Web Vitals : FCP, LCP, TBT, CLS, Speed Index, TTI et TTFB.

Endpoint : https://www.textfocus.net/apis/tf_perf/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.4",
    "params": {
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
        "url": "https://beweb.fr/seo/",
        "scorePerf": 72.0,
        "strategy": "MOBILE",
        "metrics": {
            "first-contentful-paint":    { "value": 1820, "score": 75, "unit": "ms" },
            "largest-contentful-paint":  { "value": 3200, "score": 48, "unit": "ms" },
            "total-blocking-time":       { "value": 240,  "score": 62, "unit": "ms" },
            "cumulative-layout-shift":   { "value": 0.04, "score": 90, "unit": ""   },
            "speed-index":               { "value": 2900, "score": 71, "unit": "ms" },
            "interactive":               { "value": 4100, "score": 55, "unit": "ms" },
            "server-response-time":      { "value": 310,  "score": 85, "unit": "ms" }
        }
    },
    "response": 200,
    "message": "ok",
    "timing": 8.4,
    "creditUsed": 1,
    "method": "tf_perf",
    "credits": 291
}

Champs de la réponse

Note : Les résultats sont mis en cache 60 minutes. Utilisez force_refetch=1 pour forcer une nouvelle analyse.

12. API tf_links

Description : Extrait tous les liens sortants d'une page : texte de l'ancre, URL résolue (relative → absolue), attribut rel, emplacement dans la page (main, nav, footer, aside, header, breadcrumb) et type (interne ou externe).

Endpoint : https://www.textfocus.net/apis/tf_links/

Méthode : POST

Réponse

Exemple de réponse JSON :

{
    "version": "1.0.4",
    "params": {
        "url": "https://beweb.fr/seo/",
        "key": "Votre clé d'API"
    },
    "result": {
        "url": "https://beweb.fr/seo/",
        "total": 34,
        "internal": 22,
        "external": 12,
        "links": [
            {
                "url": "https://beweb.fr/audit-seo/",
                "anchor": "audit seo",
                "rel": null,
                "title": null,
                "location": "main",
                "type": "internal"
            },
            {
                "url": "https://www.google.fr/",
                "anchor": "google",
                "rel": "nofollow",
                "title": "Google",
                "location": "footer",
                "type": "external"
            }
        ]
    },
    "response": 200,
    "message": "ok",
    "timing": 1.8,
    "creditUsed": 1,
    "method": "tf_links",
    "credits": 290
}

Champs de la réponse

Note : Les codes HTTP de chaque lien ne sont pas testés (évite des dizaines de requêtes supplémentaires). Ancres de page (#...), liens mailto: et tel: sont exclus.

13. API tf_seo_bulk

Description : Audit SEO on-page en masse : analyse jusqu'à 50 URLs en séquentiel et envoie les résultats consolidés à une URL de callback. Les crédits sont consommés uniquement pour les pages analysées avec succès.

Endpoint : https://www.textfocus.net/apis/tf_seo_bulk/

Méthode : POST

Réponse immédiate (202)

{
    "response": 202,
    "message": "processing started",
    "urls_count": 5
}

Payload envoyé au callback

{
    "response": 200,
    "method": "tf_seo_bulk",
    "processed": 4,
    "errors": 1,
    "skipped": 0,
    "credits_consumed": 4,
    "timing": 38.2,
    "results": [
        {
            "url": "https://example.com/page-1",
            "status": "ok",
            "scoreSeo": 67.3,
            "scoreSem": 52.0,
            "title": "Titre de la page",
            "h1": "Titre H1",
            "description": "Meta description...",
            "nbMots": 842
        },
        {
            "url": "https://example.com/page-unreachable",
            "status": "error",
            "error": "analysis returned no result"
        }
    ]
}

Champs du payload callback

Note : Le délai entre chaque URL est de 1 seconde. Pour 50 URLs, le traitement peut durer plusieurs minutes. Assurez-vous que votre endpoint de callback accepte les requêtes POST avec un Content-Type: application/json.

7. Gestion des réponses asynchrones

Certaines APIs, comme tf_semantic, peuvent nécessiter un traitement asynchrone.
Dans ce cas, un callback peut être défini pour recevoir la réponse sur votre serveur.

<?php
	public function my_callback(){
    		log_message('error', 'Call of my_callback');
    		$payload = file_get_contents('php://input');
    		log_message('error', 'Content : '. $payload);
    		print_r($payload);
	}
?>