SignalSumo

Référence API

Intégrez les données SEO de SignalSumo directement dans vos propres outils, tableaux de bord et flux de travail.

Pro Agence L’accès API est disponible sur les offres Pro et Agency

Démarrage rapide

Trois étapes pour votre première réponse.

1. Créez une clé API

Sur une offre Pro ou Agency, générez une clé sur Clés API et copiez‑la — elle n’est affichée qu’une fois.

2. Vérifiez la connexion

curl -H "Authorization: Bearer ss_live_your_key_here" \
     "https://signalsumo.com/api/v1/usage"

A 200 réponse avec votre forfait et les appels restants signifie que vous êtes connecté.

3. Effectuez votre premier appel de données

curl -X POST \
     -H "Authorization: Bearer ss_live_your_key_here" \
     -H "Content-Type: application/json" \
     -d '{"keyword":"seo audit tool","limit":5}' \
     "https://signalsumo.com/api/v1/keyword-research"
C’est tout. Chaque point d’accès utilise le même Authorization: Bearer en-tête et renvoie le même enveloppe JSON — parcourez les points d'accès ci-dessous pour les paramètres et les champs de réponse.

Vue d'ensemble

Tous les points de terminaison API sont accessibles sous :

https://signalsumo.com/api/v1/

Les requêtes et réponses utilisent JSON. Chaque réponse suit la même enveloppe :

{
  "success": true,
  "data":    { ... },
  "meta":    { "timestamp": "2026-06-26T10:00:00+00:00" }
}

Les erreurs suivent la même structure avec success: false et un error objet au lieu de data.

Les points de terminaison se répartissent en deux groupes, et la différence réside dans leur coût :

  • Points d'accès de recherche — /backlinks, /keyword-research, /site-audit — fetch fresh data from outside SignalSumo. They draw feature quota or credits. See Offres & Facturation.
  • Points d'accès de vos données — everything under /rank, /gsc et /ai-visibility — read what your account has already collected. They are plain database reads: they cost pas de crédits et pas de quota de fonctionnalité, et ils ne sont jamais refusés eux‑mêmes pour dépassement du plafond mensuel.
Les points de terminaison de vos données sont exempts de crédits et de quota de fonctionnalités, mais chaque appel reste enregistré dans votre total d'appels API mensuels — and that total is what gates the research endpoints. A long exploratory session can therefore use up the allowance your billed calls need. This applies equally to the Connecteur MCP, qui fonctionne sur le même compteur.

Authentification

Passez votre clé API dans le Authorization en-tête sur chaque requête :

Authorization: Bearer ss_live_your_key_here

Vous pouvez également le transmettre comme paramètre de requête (non recommandé en production) :

GET /api/v1/usage?api_key=ss_live_your_key_here
Générez et gérez vos clés API sur signalsumo.com/api-keys. Each key is shown une seule fois au moment de la création — stockez-le en toute sécurité.

Le Authorization: Bearer l'en-tête est la méthode recommandée. L'API envoie également des en-têtes CORS permissifs, de sorte qu'elle peut être appelée directement depuis des outils basés sur le navigateur. Conservez les clés secrètes côté serveur en production.

Offres & Facturation

L'accès API est disponible sur le Pro et Agence plans. Deux compteurs indépendants régissent l'utilisation — un appel n'est servi que lorsque les deux l'autoriser.

1. Appels API mensuels

Chaque requête (y compris les hits de cache et les erreurs qui atteignent un point d'accès) compte comme un appel API.

PlanAppels API mensuelsRéinitialisations
Pro201er de chaque mois
Agence1001er de chaque mois

Dépasser cela renvoie HTTP 429 (RATE_LIMITED) avec un resets_at champ dans meta. Vérifiez votre limite en direct et votre utilisation à tout moment via GET /usage.

2. Quota par fonctionnalité & crédits

Au‑delà du compteur d'appels, les points d'accès de données puisent chacun dans leur propre quota mensuel de fonctionnalité (le même plafond que votre tableau de bord connecté utilise). Voici le comportement lorsqu'il est épuisé :

Point d'accèsLorsque le quota de fonctionnalité est épuisé
/keyword-researchRenvoie 429 QUOTA_EXCEEDED. Jamais consomme des crédits — sûr pour les boucles.
/backlinksReculer vers 1 crédit par requête. Un profond requête (page > 1 ou limit > 100) always costs 1 credit. No credits → 402 PAYMENT_REQUIRED.
/site-auditRenvoie 429 QUOTA_EXCEEDED lorsque le nombre mensuel d’explorations ou le budget de pages roulant est épuisé.
Les hits de cache sont gratuits du quota de fonctionnalité. Les résultats sont mis en cache et partagés avec votre tableau de bord, ainsi un domaine ou un mot‑clé déjà consulté récemment est renvoyé instantanément, marqué "cached": true dans meta, et ne consomme aucun quota de fonctionnalité ou crédit (cela compte toujours comme un appel API).

3. Requêtes par minute

Séparément des compteurs mensuels, votre plan définit le nombre de requêtes par minute que vous pouvez effectuer. Cela limite une boucle incontrôlée ou une clé fuyante à quelque chose de récupérable — un plafond mensuel ne dit rien sur la dépense totale en une heure.

PlanRequêtes par minute
Pro20
Agence60

Chaque point d’accès compte séparément, ainsi exploiter votre quota de backlinks ne vous bloque jamais pour la recherche de mots‑clés. Le dépasser renvoie 429 avec retry_after (secondes) et limit dans meta. Les requêtes refusées ne sont pas comptabilisées, donc attendre retry_after efface toujours cela.

Les requêtes identiques sont répondues une seule fois. Si plusieurs de vos requêtes posent la même question au même moment, l'une d'elles est récupérée et les autres reçoivent le même résultat — facturé une fois, pas une fois par requête. Si la récupération est toujours en cours lorsque la vôtre arrive, vous obtenez 409 ALREADY_RUNNING; réessayez dans quelques secondes et ce sera un cache hit.

Emplacements & Langues

/keyword-research accepte un location_code et language_code pour localiser les résultats. Les deux sont facultatifs — les paramètres par défaut sont les États‑Unis (2840) et anglais (en).

location_code

Un code de marché numérique. Valeurs courantes :

CodeMarchéCodeMarché
2840États-Unis2276Allemagne
2826Royaume-Uni2250France
2124Canada2724Espagne
2036Australie2380Italie
2356Inde2528Pays-Bas
2392Japon2076Brésil

Plus de 90 marchés sont pris en charge. Un code non reconnu renvoie 422 UNSUPPORTED_LOCATION plutôt que de revenir aux États‑Unis — être facturé pour des données américaines que vous n'avez pas demandées est pire que d'être informé que le code est erroné. Appelez GET /api/v1/keyword-research/locations pour la liste complète.

language_code

Un code de langue à deux lettres. Valeurs prises en charge:

CodeLangueCodeLangue
enAnglaisptPortugais
esEspagnolnlNéerlandais
frFrançaisruRusse
deAllemandjaJaponais
itItalienzhChinois
Seules les langues répertoriées ci-dessus sont prises en charge. Toute autre language_code revenir à Anglais plutôt que de renvoyer une erreur — vérifiez donc le code si les résultats semblent inattenduement en anglais.

Codes d’erreur

HTTPcodeSignification
400BAD_REQUESTSyntaxe de requête malformée
401UNAUTHORIZEDClé API manquante ou invalide
403INTERDITAccès API non disponible sur votre forfait (Pro ou Agency requis)
404NON_TROUVÉPoint de terminaison ou ressource non trouvé
402PAIEMENT_REQUISQuota de fonctionnalité épuisé et aucun crédit restant (backlinks)
422ERREUR_DE_VALIDATIONParamètre requis manquant ou valeur invalide
409DÉJÀ_EN_COURSLa même requête est déjà en cours de récupération pour votre compte — réessayez rapidement et ce sera un cache hit. Aucun frais n'a été facturé
429LIMITATION_DE_TAUX / QUOTA_EXCÉDÉLimite d’appels mensuelle, cadence par minute ou quota de fonctionnalité atteint — voir resets_at ou retry_after dans meta
502ERREUR_EN_AMONTAucune donnée renvoyée par le fournisseur de données en amont
500ERREUR_SERVEURErreur interne — sécuritaire à réessayer

MCP & Clients LLM

Si votre objectif est de permettre à un assistant comme Claude de lire ces données de façon conversationnelle, vous n'avez pas besoin d'écrire un client. SignalSumo parle le Protocole de contexte de modèle, qui expose les points de terminaison ci-dessous comme des outils qu'un LLM peut appeler directement.

RouteAuthentificationIdéal pour
Connecteur hébergéOAuth 2.1 — no key to copyClaude et autres clients MCP. Aucun besoin d'installation, toujours à jour.
@signalsumo/mcp sur npmClé API dans la configuration du clientInstallations locales, configurations auto-hébergées ou exécution sur votre propre environnement.
Cette API RESTAuthorization: BearerVos propres scripts, tableaux de bord et intégrations back‑end.

All three read the same data through the same endpoints and the same plan limits — they differ only in how the caller authenticates. The npm package uses slightly different tool names from the hosted connector; its README is the reference for those. Source: github.com/signalsumo/mcp.

L’accès MCP est régi par son propre indicateur de plan, distinct de l’accès à l’API REST. Vérifiez votre forfait si un client s'authentifie mais chaque appel d'outil est refusé.

GET /api/v1/usage

GET /api/v1/usage

Renvoie votre utilisation du quota API pour le mois civil en cours.

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/usage"

Exemple de réponse

{
  "success": true,
  "data": {
    "plan": "agency",
    "api_calls_used": 42,
    "api_calls_limit": 100,
    "unlimited": false,
    "resets_at": "2026-08-01"
  },
  "meta": {
    "timestamp": "2026-06-26T10:00:00+00:00",
    "key_name": "Production App"
  }
}
GET /api/v1/backlinks?domain={domain}

Renvoie le profil de backlinks d'un domaine : un résumé overview, distribution insights, et une liste enrichie d'individus backlinks. Les résultats sont mis en cache et partagés avec votre tableau de bord (Pro : 2 jours, Agence : 7 jours) ; un hit de cache est marqué "cached": true et ne consomme aucun quota de fonctionnalité.

Ceci est les mêmes données que le Backlink Checker shows in the app, and the cache is shared — a domain you have already looked at there returns instantly here, free.

Une requête standard consomme votre quota mensuel de recherche de backlinks (puis 1 crédit si c'est épuisé). Un profond requête — page > 1 ou limit > 100 — coûte toujours 1 crédit. Voir Offres & Facturation.

Paramètres de requête

ParamètreTypeObligatoireDescription
domainchaîneOuiDomaine racine, par ex. example.com (une URL complète est également acceptée et normalisée)
pageentierNonNuméro de page, par défaut 1
limiteentierNonRésultats par page, 1–200, par défaut 100

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/backlinks?domain=example.com&limit=2"

Exemple de réponse

{
  "success": true,
  "data": {
    "domain": "example.com",
    "total_backlinks": 48210,
    "referring_domains": 1824,
    "page": 1,
    "limit": 2,
    "overview": {
      "domain_rank": 71,
      "total_backlinks": 48210,
      "referring_domains": 1824,
      "referring_domains_nofollow": 640,
      "referring_main_domains": 1610,
      "referring_pages": 39044,
      "referring_ips": 1502,
      "referring_subnets": 1210,
      "dofollow_backlinks": 1184,
      "broken_backlinks": 220,
      "broken_pages": 96,
      "spam_score": 8,
      "first_seen": "2018-05-11 09:20:00",
      "lost_date": null
    },
    "insights": {
      "referring_links_types":          { "anchor": 30140, "image": 9800 },
      "referring_links_attributes":     { "noopener": 12000, "nofollow": 8400 },
      "referring_links_platform_types": { "blogs": 900, "cms": 640, "news": 210 },
      "referring_links_tld":            { "com": 1200, "org": 180 },
      "referring_links_countries":      { "US": 800, "GB": 210 },
      "referring_subnets": 1210,
      "referring_main_domains": 1610
    },
    "backlinks": [
      {
        "domain_from": "blog.example-news.com",
        "url_from": "https://blog.example-news.com/best-seo-tools",
        "url_to": "https://example.com/",
        "anchor": "SignalSumo",
        "dofollow": 1,
        "spam_score": 4,
        "first_seen": "2021-03-10 12:00:00",
        "last_seen": "2026-06-20 04:00:00",
        "semantic_location": "article",
        "platform_type": "blogs",
        "country": "US",
        "is_broken": 0,
        "domain_from_rank": 62,
        "page_from_rank": 41,
        "is_lost": 0,
        "lost_date": null,
        "is_new": 0,
        "item_type": "anchor",
        "page_from_title": "The Best SEO Tools in 2026",
        "page_from_status_code": 200,
        "url_to_status_code": 200,
        "domain_from_ip": "192.0.2.10",
        "tld_from": "com",
        "links_count": 2,
        "is_indirect_link": 0,
        "url_from_https": 1,
        "attributes": ["noopener"],
        "text_pre": "we recommend",
        "text_post": "for site audits",
        "kw_top3": 4,
        "kw_top10": 12,
        "kw_top100": 88
      }
    ]
  },
  "meta": { "timestamp": "2026-06-26T10:00:00+00:00", "cached": false }
}

Champs de backlink

ChampDescription
domain_from / url_fromLe site de liaison et la page exacte où se trouve le lien
url_toLa page de votre domaine vers laquelle le lien pointe
ancreTexte d’ancre du lien
dofollow1 = dofollow, 0 = nofollow
spam_scoreScore de spam de la page de liaison (0–100)
domain_from_rank / page_from_rankAutorité du domaine / page de liaison, normalisée 0–100
is_new / is_lost / is_brokenIndicateurs du cycle de vie du lien (1/0)
first_seen / last_seen / lost_dateQuand le lien a été vu pour la première fois, vu pour la dernière fois et (le cas échéant) perdu
platform_type / country / tld_fromPlateforme, pays et TLD du site de liaison
item_typeForme du lien : anchor, image, redirect, …
page_from_status_code / url_to_status_codeStatut HTTP de la page de liaison / de la page liée
attributsAttributs rel du lien, par ex. ["noopener","nofollow"]
kw_top3 / kw_top10 / kw_top100Mots‑clés pour lesquels la page de liaison se classe dans le top 3 / 10 / 100

POST /api/v1/keyword-research

POST /api/v1/keyword-research

Renvoie un ensemble complet de métriques pour un mot‑clé de base — volume de recherche, CPC, concurrence, difficulté, intention de recherche, tendance du volume sur 12 mois, fonctionnalités SERP et plus — ainsi qu’une liste classée de mots‑clés associés contenant les mêmes champs. Synchronous — répond immédiatement.

Voici les métriques que Keyword Research Tool affiche. Une fois que vous avez sélectionné les mots‑clés à poursuivre, le Rank Tracker follows their positions daily — and /rank/keywords lit ces positions en retour, gratuitement.

Ce point d’accès consomme votre quota mensuel de recherche de mots‑clés et ne consomme jamais de crédits: une fois le quota épuisé il renvoie 429 QUOTA_EXCEEDED, donc il est sûr d'appeler en boucle. Les recherches récentes sont servies depuis le cache (marquées "cached": true) sans coût de quota.

Corps de la requête (JSON)

ChampTypeObligatoireDescription
mot‑cléchaîneOuiMot‑clé de départ, max 200 caractères
location_codeentierNonCode localisation, par défaut 2840 (États‑Unis)
language_codechaîneNonCode langue, par défaut en
limiteentierNonMots‑clés associés max retournés, 1–100, par défaut 10

Exemple de requête

curl -X POST \
     -H "Authorization: Bearer ss_live_xxxx" \
     -H "Content-Type: application/json" \
     -d '{"keyword":"seo audit tool","limit":5}' \
     "https://signalsumo.com/api/v1/keyword-research"

Exemple de réponse

{
  "success": true,
  "data": {
    "keyword": "seo audit tool",
    "location_code": 2840,
    "language_code": "en",
    "total_count": 80,
    "overview": {
      "search_volume": 2900,
      "cpc": 19.07,
      "competition": 0.11,
      "competition_level": "LOW",
      "difficulty": 77,
      "intent": ["Commercial"],
      "trend": [ { "y": 2026, "m": 5, "v": 2400 }, { "y": 2026, "m": 6, "v": 1600 } ],
      "serp_features": ["organic"],
      "growth": { "m": -33, "q": -16, "y": -64 },
      "bid_low": 4.72,
      "bid_high": 19.10,
      "avg_backlinks": 5087,
      "avg_ref_domains": 970,
      "comp_domain_rank": 486,
      "se_results": 41000000
    },
    "related_keywords": [
      {
        "keyword": "free seo audit tool",
        "search_volume": 1900,
        "cpc": 3.10,
        "competition": 0.68,
        "competition_level": "MEDIUM",
        "difficulty": 54,
        "intent": ["Commercial", "Transactional"],
        "trend": [ { "y": 2026, "m": 6, "v": 1900 } ],
        "serp_features": ["organic", "people_also_ask"],
        "growth": { "m": 4, "q": -2, "y": 11 },
        "bid_low": 1.20,
        "bid_high": 4.90,
        "avg_backlinks": 210,
        "avg_ref_domains": 88,
        "comp_domain_rank": 402,
        "se_results": 12000000,
        "related": ["website audit tool", "seo checker free"],
        "match_bucket": "similar"
      }
    ]
  },
  "meta": { "timestamp": "2026-06-26T10:00:00+00:00" }
}

Champs de mots‑clés

Le overview (mot‑clé source) et chaque related_keywords ligne partage ces champs. Tout champ peut être null lorsque les données en amont ne sont pas disponibles.

ChampDescription
search_volumeRecherches mensuelles moyennes
cpcCoût moyen par clic (USD)
competitionConcurrence payante, 0–1
competition_levelLOW / MEDIUM / HIGH
difficultyDifficulté de classement organique, 0–100 (null si pas encore calculé)
intentIntention de recherche, par ex. ["Commercial"]
trendHistorique du volume sur 12 mois — { y, m, v } par mois
growthVariation du volume % : m mensuel, q trimestriel, y annuel
serp_featuresTypes de fonctionnalités SERP présents, par ex. ["organic","people_also_ask"]
bid_low / bid_highFourchette d’enchère en haut de page (USD)
avg_backlinks / avg_ref_domainsMoyenne des backlinks / domaines référents des pages actuellement classées
comp_domain_rankAutorité moyenne (0–1000) des pages actuellement classées
se_resultsNombre total de résultats concurrents pour le mot‑clé
relatedJusqu’à 8 sous‑mots‑clés associés (lignes associées uniquement)
match_bucketRelation à la graine : similar, related, ou question

POST /api/v1/site-audit

POST /api/v1/site-audit

Exécute le même crawl que le Website Audit Tool — broken links, redirect chains, missing titles and canonical problems, page by page.

Les audits de site sont asynchronous. Ce point d’accès renvoie un job_id immediately. Poll GET /api/v1/jobs/{job_id} pour les résultats. Temps d'exploration typique : 1–5 minutes.

Corps de la requête (JSON)

ChampTypeObligatoireDescription
urlchaîneOuiURL complète à explorer, ex. https://example.com
max_pagesentierNonPages max à explorer (par défaut 100). Limité par la limite de crawl de votre forfait et votre budget mensuel de pages restant.
depthentierNonProfondeur de crawl, 1–5, par défaut 3

Exemple de requête

curl -X POST \
     -H "Authorization: Bearer ss_live_xxxx" \
     -H "Content-Type: application/json" \
     -d '{"url":"https://example.com","max_pages":50}' \
     "https://signalsumo.com/api/v1/site-audit"

Réponse (202 Accepted)

{
  "success": true,
  "job_id": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
  "status": "queued",
  "poll": "https://signalsumo.com/api/v1/jobs/a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
  "meta": { "timestamp": "2026-06-26T10:00:00+00:00" }
}

GET /api/v1/jobs/{job_id}

GET /api/v1/jobs/{job_id}

Interrogez le statut d'un travail asynchrone. Interrogez toutes les 10–15 secondes jusqu'à status est complete ou failed.

Valeurs d’état

StatutSignification
queuedTravail accepté, pas encore démarré
runningCrawl en cours — vérifier progress (0–100)
completeTerminé — data le champ contient des résultats
failedCrawl échoué — error le champ a la raison

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/jobs/a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5"

Réponse — Running

{
  "success": true,
  "data": {
    "job_id": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
    "endpoint": "site-audit",
    "status": "running",
    "progress": 42,
    "created_at": "2026-06-26 10:00:00",
    "updated_at": "2026-06-26 10:01:30",
    "completed_at": null
  },
  "meta": { "timestamp": "2026-06-26T10:01:30+00:00" }
}

Réponse — Complète

{
  "success": true,
  "data": {
    "job_id": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5",
    "endpoint": "site-audit",
    "status": "complete",
    "progress": 100,
    "created_at": "2026-06-26 10:00:00",
    "updated_at": "2026-06-26 10:03:18",
    "completed_at": "2026-06-26 10:03:18",
    "data": {
      "audit_id": "AUDIT-A1B2C3-4567",
      "domain": "https://example.com",
      "pages_crawled": 47,
      "total_score": 78,
      "geo_score": 71,
      "issues": { "critical": 3, "warning": 12, "total": 15 },
      "report_url": "https://signalsumo.com/report?id=AUDIT-A1B2C3-4567"
    }
  },
  "meta": { "timestamp": "2026-06-26T10:03:18+00:00" }
}

GET /api/v1/rank/keywords

GET /api/v1/rank/keywords

Chaque mot‑clé suivi par votre compte, avec le marché et l’appareil de mesure ainsi que sa position la plus récente. Ce sont les données derrière le Rank Tracker — no crawl is triggered and nothing is charged.

country, language et device are returned on every row on purpose. A position is meaningless without them — comparing a desktop US ranking against a mobile UK one produces a decline that never happened.

Paramètres de requête

ParamètreTypeObligatoireDescription
project_identierNonRestreindre à un projet. Omettre pour obtenir les mots‑clés de tous les projets que vous possédez.
limiteentierNon1–500, default 100

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/rank/keywords?limit=1"

Exemple de réponse

{
  "success": true,
  "data": {
    "keywords": [
      {
        "keyword_id": 4821,
        "keyword": "seo audit tool",
        "difficulty": 62,
        "search_volume": 8100,
        "cpc": 12.4,
        "country": "US",
        "language": "en",
        "device": "desktop",
        "status": "active",
        "project_id": 17,
        "project_domain": "example.com",
        "project_name": "Example Site",
        "last_checked": "2026-08-19",
        "current_position": 8,
        "previous_position": 11,
        "position_change": 3,
        "landing_page": "https://example.com/tools/audit",
        "gsc_clicks": 143,
        "gsc_impressions": 5210,
        "gsc_ctr": 2.74,
        "local_pack": false,
        "featured_snippet": true,
        "ai_overview": false
      }
    ],
    "count": 1
  },
  "meta": { "project_id": null, "limit": 1 }
}

position_change est positif lorsque le mot‑clé a bougé en hausse. Un mot‑clé jamais vérifié renvoie null pour chaque latest.* champ plutôt que 0 — position zero would read as "ranked first".

GET /api/v1/rank/history

GET /api/v1/rank/history?keyword_id={id}

Historique quotidien des positions pour un mot‑clé suivi, avec l’URL classée et les fonctionnalités SERP présentes à chaque vérification. Inclut un pré‑calculé trend résumé.

Paramètres de requête

ParamètreTypeObligatoireDescription
keyword_identierOuiDe /rank/keywords. Un mot‑clé que vous ne possédez pas renvoie 404 NOT_FOUND.
joursentierNon1–365, default 90

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/rank/history?keyword_id=4821&days=30"

Exemple de réponse

{
  "success": true,
  "data": {
    "keyword": {
      "id": 4821,
      "keyword": "seo audit tool",
      "project_id": 17,
      "domain": "example.com",
      "project": "Example Site"
    },
    "history": [
      {
        "check_date": "2026-08-19",
        "position": 8,
        "previous_position": 11,
        "change": 3,
        "landing_page": "https://example.com/tools/audit",
        "gsc_clicks": 143,
        "gsc_impressions": 5210,
        "gsc_ctr": 2.74,
        "gsc_average_position": 8.6,
        "featured_snippet": true,
        "ai_overview": false,
        "people_also_ask": true,
        "local_pack": false,
        "images": false,
        "videos": false,
        "shopping": false,
        "knowledge_graph": false,
        "sitelinks": true
      }
    ],
    "trend": { "first": 14, "latest": 8, "best": 6, "worst": 15 }
  },
  "meta": { "days_requested": 30, "points": 1 }
}

Lecture trend

ChampSignification
premierPosition au plus ancien point dans la fenêtre
dernierPosition lors du contrôle le plus récent
meilleurNombre le plus bas atteint (meilleur classement)
pireNombre le plus élevé atteint (pire classement)

history est trié du plus récent au plus ancien. best et worst ignorer les vérifications non classées, afin qu'elles soient null lorsque le mot‑clé n’a jamais été classé dans la période.

GET /api/v1/gsc/properties

GET /api/v1/gsc/properties

Les propriétés Google Search Console connectées à votre compte, comme affichées dans Search Console Insights. Aucun paramètre requis.

This reads SignalSumo's synced copy — it does not call Google. last_synced_at vous indique à quel point cette copie est fraîche.

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/gsc/properties"

Exemple de réponse

{
  "success": true,
  "data": {
    "properties": [
      {
        "property_id": 31,
        "property_uri": "sc-domain:example.com",
        "display_name": "example.com",
        "status": "active",
        "last_synced_at": "2026-08-20 04:15:02",
        "last_sync_status": "ok",
        "google_email": "[email protected]",
        "is_sandbox": false
      }
    ],
    "count": 1
  }
}

GET /api/v1/gsc/queries

GET /api/v1/gsc/queries?property_id={id}

Clicks, impressions, CTR and average position for a synced property, grouped by whichever dimension you ask for. Despite the name it is not limited to queries — set dim pour décomposer les mêmes chiffres par page, pays, appareil ou date.

Paramètres de requête

ParamètreTypeObligatoireDescription
property_identierOuiDe /gsc/properties. Une propriété que vous ne possédez pas renvoie 404 NOT_FOUND.
dimchaîneNonquery (par défaut), page, country, device, date, searchAppearance
fromchaîneNonYYYY-MM-DD, par défaut il y a 28 jours
tochaîneNonYYYY-MM-DD, par défaut aujourd’hui
sortchaîneNonclicks (par défaut), impressions, ctr, position, key
dirchaîneNondesc (par défaut) ou asc
limiteentierNon1–500, default 100
Une date mal formatée renvoie 422 VALIDATION_ERROR, mais un non reconnu dim ou sort la valeur revient silencieusement aux paramètres par défaut au lieu de générer une erreur. Consultez le dim renvoyé dans data avant de faire confiance à une ventilation.

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/gsc/queries?property_id=31&dim=query&limit=2"

Exemple de réponse

{
  "success": true,
  "data": {
    "property_id": 31,
    "dim": "query",
    "from": "2026-07-23",
    "to": "2026-08-20",
    "totals": {
      "clicks": 4820,
      "impressions": 216400,
      "ctr": 2.23,
      "position": 18.4
    },
    "rows": [
      { "key": "seo audit tool", "clicks": 143, "impressions": 5210, "ctr": 2.74, "position": 8.6 },
      { "key": "free seo checker", "clicks": 98,  "impressions": 7740, "ctr": 1.27, "position": 14.2 }
    ],
    "total_rows": 1842
  },
  "meta": { "sort": "clicks", "dir": "desc", "limit": 2 }
}

total_rows is the number of distinct keys in the period, not the number returned — use it to decide whether to raise limit. totals couvre toujours toute la période, quel que soit limit.

GET /api/v1/ai-visibility/projects

GET /api/v1/ai-visibility/projects

Les marques que vous suivez sur les moteurs de réponse IA, une ligne par projet, avec le score de visibilité actuel et son évolution. Aucun paramètre requis. Propulsé par le AI Visibility Checker.

Scores are collected by scheduled scans, so this endpoint never calls an AI provider — it returns what the last scan stored.

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/ai-visibility/projects"

Exemple de réponse

{
  "success": true,
  "data": {
    "projects": [
      {
        "id": 9,
        "domain": "example.com",
        "brand_name": "Example",
        "target_country": "US",
        "target_language": "en",
        "ai_engine": "all",
        "tracking_frequency": "weekly",
        "status": "active",
        "visibility_score": 41.8,
        "previous_visibility_score": 37.2,
        "score_change": 4.6,
        "created_at": "2026-05-02 11:20:44",
        "updated_at": "2026-08-18 06:02:11"
      }
    ],
    "count": 1
  }
}

score_change est null until a project has been scanned at least twice — a first scan has nothing to compare against, and reporting 0 serait lu comme « aucun mouvement ».

GET /api/v1/ai-visibility/share-of-voice

GET /api/v1/ai-visibility/share-of-voice?project_id={id}

À quelle fréquence les assistants IA mentionnent votre marque par rapport aux concurrents suivis, ainsi que la répartition complète des métriques du dernier scan.

Paramètres de requête

ParamètreTypeObligatoireDescription
project_identierOuiDe /ai-visibility/projects. Un projet que vous ne possédez pas renvoie 404 NOT_FOUND.

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/ai-visibility/share-of-voice?project_id=9"

Exemple de réponse

{
  "success": true,
  "data": {
    "project": {
      "id": 9,
      "domain": "example.com",
      "brand_name": "Example",
      "target_country": "US",
      "ai_engine": "all",
      "visibility_score": 41.8,
      "previous_visibility_score": 37.2
    },
    "latest_snapshot": {
      "geo_score": 41.8,
      "mention_rate": 38.0,
      "avg_position": 2.4,
      "sentiment_avg": 0.62,
      "citation_rate": 21.5,
      "competition_score": 58.3,
      "prompts_evaluated": 50,
      "snapshot_date": "2026-08-18"
    },
    "share_of_voice": {
      "brand_mentions": 19,
      "competitor_mentions": 74,
      "total_mentions": 93,
      "brand_share_pct": 20.43
    },
    "competitors": [
      {
        "competitor_name": "Competitor One",
        "competitor_domain": "competitor1.com",
        "mention_count": 31,
        "visibility_score": 52.1,
        "avg_position": 1.9,
        "updated_at": "2026-08-18 04:41:07"
      }
    ]
  }
}

Deux pourcentages différents

Ce sont des notions faciles à confondre, et elles répondent à des questions différentes :

ChampQuestion à laquelle elle répond
mention_rateOf the prompts we tested, what share mentioned you at all? — coverage.
brand_share_pctOf every brand mention across you and your tracked competitors, what share was yours? — competitive position.

latest_snapshot est null avant que le premier scan d'un projet ne soit terminé. competitors renvoie au maximum 20, triés par nombre de mentions. brand_share_pct est null when no mentions have been recorded on either side — a share of nothing is not zero percent.

GET /api/v1/keyword-research/locations

GET /api/v1/keyword-research/locations

Tous les marchés POST /keyword-research accepte, afin que vous puissiez découvrir un location_code au lieu de deviner un et de gagner un 422. Aucun paramètre requis.

Ceci est délibérément pas the full market list. Keyword research runs on the keyword database, which covers fewer markets than SERP work does — publishing the wider list here would only move the failure one call later.

Exemple de requête

curl -H "Authorization: Bearer ss_live_xxxx" \
     "https://signalsumo.com/api/v1/keyword-research/locations"

Exemple de réponse

{
  "success": true,
  "data": {
    "locations": [
      { "location_code": 2840, "location_name": "United States", "country_iso": "US", "language_code": "en" },
      { "location_code": 2826, "location_name": "United Kingdom", "country_iso": "GB", "language_code": "en" }
    ],
    "count": 94,
    "note": "These are the markets covered by the keyword database. Pass location_code to POST /keyword-research."
  }
}

Journal des modifications

VersionDateModifications
v1.2Août 2026Documenté les sept points d’accès en lecture seule déjà actifs : /rank/keywords, /rank/history, /gsc/properties, /gsc/queries, /ai-visibility/projects, /ai-visibility/share-of-voice et /keyword-research/locations. No behaviour changed — these were callable before, just undocumented. Added MCP and LLM client guidance.
v1.1Juil. 2026Réponses mot‑clé & backlink étendues aux ensembles complets de métriques (difficulté, intention, tendance, fonctionnalités SERP, champs backlink enrichis, aperçu & insights). Les résultats d’audit du site ajoutent geo_score et le nombre de problèmes. Référence de localisation/langue ajoutée et détails de facturation.
v1.0Jun 2026Version initiale — utilisation, backlinks, recherche de mots‑clés, audit de site, jobs

Des questions ? Email [email protected]