SignalSumo

API‑referentie

Integreer SignalSumo's SEO‑data direct in je eigen tools, dashboards en workflows.

Pro Agency API‑toegang is beschikbaar op de Pro‑ en Agency‑plannen

Snelstart

Drie stappen naar je eerste respons.

1. Maak een API‑sleutel

Op een Pro‑ of Agency‑plan, genereer een sleutel op API-sleutels en kopieer deze — hij wordt slechts één keer getoond.

2. Verifieer de verbinding

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

A 200 reactie met uw plan en resterende oproepen betekent dat u verbonden bent.

3. Doe je eerste dataverzoek

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"
Dat is alles. Elke endpoint gebruikt dezelfde Authorization: Bearer header en retourneert dezelfde JSON‑envelop — bekijk de onderstaande eindpunten voor parameters en responsvelden.

Overzicht

Alle API‑endpoints worden geserveerd onder:

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

Verzoeken en antwoorden gebruiken JSON. Elke respons volgt dezelfde envelop:

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

Fouten volgen dezelfde structuur met success: false en een error object in plaats van data.

Endpoints vallen in twee groepen, en het verschil is wat ze je kosten:

  • Onderzoeks‑endpoints — /backlinks, /keyword-research, /site-audit — fetch fresh data from outside SignalSumo. They draw feature quota or credits. See Abonnementen & Facturering.
  • Jouw‑data‑endpoints — everything under /rank, /gsc en /ai-visibility — read what your account has already collected. They are plain database reads: they cost geen credits en geen functiekwota, en ze worden nooit zelf geweigerd vanwege een overschrijding van de maandelijkse limiet.
Uw‑data‑eindpunten zijn vrij van credits en functie‑quota, maar elke oproep is nog steeds geregistreerd in je maandelijkse API‑aanroep totaal — 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 MCP‑connector, die op dezelfde meter draait.

Authenticatie

Geef uw API‑sleutel door in de Authorization header bij elk verzoek:

Authorization: Bearer ss_live_your_key_here

Alternatief kun je het als query‑parameter doorgeven (niet aanbevolen voor productie):

GET /api/v1/usage?api_key=ss_live_your_key_here
Genereer en beheer uw API-sleutels op signalsumo.com/api-keys. Each key is shown eenmalig bij creatie — bewaar het veilig.

De Authorization: Bearer header is de aanbevolen methode. De API stuurt ook permissieve CORS-headers, zodat deze direct vanuit browser‑gebaseerde tools kan worden aangeroepen. Houd geheime sleutels server‑side in productie.

Abonnementen & Facturering

API‑toegang is beschikbaar op de Pro en Agency plannen. Twee onafhankelijke meters bepalen het gebruik — een oproep wordt alleen uitgevoerd wanneer beide toestaan.

1. Maandelijkse API‑oproepen

Elke aanvraag (inclusief cache‑hits en fouten die een endpoint bereiken) telt als één API‑oproep.

PlanMaandelijkse API‑oproepenReset
Pro201e van elke maand
Agency1001e van elke maand

Overschrijding hiervan levert HTTP 429 (RATE_LIMITED) met een resets_at veld in meta. Controleer uw live limiet en gebruik op elk moment via GET /usage.

2. Per‑functie‑kwota & credits

Buiten de oproepmeter halen de data‑endpoints elk uit hun eigen maandelijkse functiekwota (dezelfde toelage die je ingelogde dashboard gebruikt). Hoe elk zich gedraagt wanneer die kwota op is:

EndpointWanneer functiekwota is uitgeput
/keyword-researchRetourneert 429 QUOTA_EXCEEDED. Nooit verbruikt credits — veilig om te loopen.
/backlinksValt terug op 1 credit per aanvraag. Een diep query (page > 1 of limit > 100) always costs 1 credit. No credits → 402 PAYMENT_REQUIRED.
/site-auditRetourneert 429 QUOTA_EXCEEDED wanneer het maandelijkse crawl‑aantal of het rollende paginabudget is opgebruikt.
Cache‑hits zijn vrij van functiekwota. Resultaten worden gecached en gedeeld met uw dashboard, zodat een domein of zoekwoord dat recent is opgezocht direct wordt geretourneerd, gemarkeerd "cached": true in meta, en trekt geen functiequota of credits (het telt nog steeds als één API‑aanroep).

3. Aanvragen per minuut

Los van de maandelijkse meters bepaalt je plan hoeveel aanvragen per minuut je kunt doen. Dit beperkt een uit de hand gelopen lus of een gelekte sleutel tot iets herstelbaars — een maandelijkse toelage zegt niets over het volledig uitgeven ervan binnen een uur.

PlanAanvragen per minuut
Pro20
Agency60

Elk eindpunt telt apart, zodat het benutten van uw backlink‑toewijzing u nooit uitsluit van zoekwoordonderzoek. Overschrijding hiervan levert 429 met retry_after (seconden) en limit in meta. Geweigerde verzoeken worden niet geteld, dus wachten retry_after maakt het altijd leeg.

Identieke aanvragen worden één keer beantwoord. Als meerdere van uw verzoeken op hetzelfde moment dezelfde vraag stellen, wordt één daarvan opgehaald en krijgen de rest hetzelfde resultaat — één keer in rekening gebracht, niet per verzoek. Als het ophalen nog bezig is wanneer het uwe arriveert, ontvangt u 409 ALREADY_RUNNING; probeer het over een paar seconden opnieuw en het zal een cache‑hit zijn.

Locaties & Talen

/keyword-research accepteert een location_code en language_code om resultaten te lokaliseren. Beide zijn optioneel — de standaard is de Verenigde Staten (2840) en Engels (en).

location_code

Een numerieke marktcode. Veelvoorkomende waarden:

CodeMarktCodeMarkt
2840Verenigde Staten2276Duitsland
2826Verenigd Koninkrijk2250Frankrijk
2124Canada2724Spanje
2036Australië2380Italië
2356India2528Nederland
2392Japan2076Brazilië

Meer dan 90 markten worden ondersteund. Een niet-herkende code retourneert 422 UNSUPPORTED_LOCATION in plaats van terug te vallen op de Verenigde Staten — gefactureerd worden voor Amerikaanse data die u niet heeft aangevraagd is erger dan te horen dat de code fout is. Bel GET /api/v1/keyword-research/locations voor de volledige lijst.

language_code

Een tweetalige taalcodes. Ondersteunde waarden:

CodeTaalCodeTaal
enEngelsptPortugees
esSpaansnlNederlands
frFransruRussisch
deDuitsjaJapans
itItaliaanszhChinees
Alleen de hierboven genoemde talen worden ondersteund. Elke andere language_code valt terug naar Engels in plaats van een fout terug te geven — controleer de code dubbel als resultaten onverwacht Engels lijken.

Foutcodes

HTTPcodeBetekenis
400BAD_REQUESTOngeldige request-syntaxis
401UNAUTHORIZEDOntbrekende of ongeldige API-sleutel
403FORBIDDENAPI-toegang niet beschikbaar op uw abonnement (Pro of Agency vereist)
404NOT_FOUNDEndpoint of resource niet gevonden
402PAYMENT_REQUIREDFunctiequota uitgeput en geen credits meer (backlinks)
422VALIDATION_ERRORVereiste parameter ontbreekt of heeft een ongeldige waarde
409ALREADY_RUNNINGHetzelfde verzoek wordt al opgehaald voor uw account — probeer het over een ogenblik opnieuw; het zal een cache-hit zijn. Er is niets in rekening gebracht
429RATE_LIMITED / QUOTA_EXCEEDEDMaandelijks bel‑limiet, per‑minuut pacing of functie‑quotum‑overschrijding — zie resets_at of retry_after in meta
502UPSTREAM_ERRORGeen gegevens ontvangen van de upstream-gegevensprovider
500SERVER_ERRORInterne fout — veilig om opnieuw te proberen

MCP & LLM‑clients

Als uw doel is om een assistent zoals Claude deze gegevens conversatie‑matig te laten lezen, hoeft u geen client te schrijven. SignalSumo spreekt de Model Context Protocol, die de onderstaande endpoints beschikbaar maakt als tools die een LLM direct kan aanroepen.

RouteAuthBeste voor
Gehoste connectorOAuth 2.1 — no key to copyClaude en andere MCP‑clients. Niets te installeren, altijd actueel.
@signalsumo/mcp op npmAPI-sleutel in de clientconfiguratieLokale installaties, zelf‑gehoste omgevingen, of draaien tegen uw eigen omgeving.
Deze REST‑APIAuthorization: BearerUw eigen scripts, dashboards en back‑endintegraties.

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.

MCP-toegang wordt beheerd door zijn eigen plan‑vlag, los van REST‑API‑toegang. Controleer uw abonnement als een client authenticatie uitvoert maar elke tool‑aanroep wordt geweigerd.

GET /api/v1/usage

GET /api/v1/usage

Geeft uw API‑quota‑gebruik weer voor de huidige kalendermaand.

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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}

Retourneert een domein‑backlinkprofiel: een samenvatting overview, distributie insights, en een verrijkte lijst van individuele backlinks. Resultaten worden gecached en gedeeld met uw dashboard (Pro: 2 dagen, Agency: 7 dagen); een cache‑hit wordt gemarkeerd "cached": true en kost geen functiequota.

Dit is dezelfde data die de Backlink Checker shows in the app, and the cache is shared — a domain you have already looked at there returns instantly here, free.

Een standaardverzoek trekt uw maandelijkse backlink-zoekquota (dan 1 credit als dat uitgeput is). Een diep verzoek — page > 1 of limit > 100 — kost altijd 1 credit. Zie Abonnementen & Facturering.

Queryparameters

ParameterTypeVerplichtBeschrijving
domeinstringJaRoot‑domein, bijv. example.com (een volledige URL wordt ook geaccepteerd en genormaliseerd)
paginaintegerNeePaginanummer, standaard 1
limietintegerNeeResultaten per pagina, 1–200, standaard 100

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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 }
}

Backlinkvelden

VeldBeschrijving
domain_from / url_fromDe verwijzende site en de exacte pagina waarop de link staat
url_toDe pagina op uw domein waarnaar gelinkt wordt
anchorAnkertekst van de link
dofollow1 = dofollow, 0 = nofollow
spam_scoreSpamscore van de verwijzende pagina (0–100)
domain_from_rank / page_from_rankAutoriteit van het verwijzende domein / pagina, genormaliseerd 0–100
is_new / is_lost / is_brokenLink‑levenscyclusvlaggen (1/0)
first_seen / last_seen / lost_dateWanneer de link voor het eerst werd gezien, laatst gezien, en (indien van toepassing) verloren
platform_type / country / tld_fromPlatform, land en TLD van de verwijzende site
item_typeLinkvorm: anchor, image, redirect, …
page_from_status_code / url_to_status_codeHTTP-status van de verwijzende pagina / de gelinkte pagina
attributenLink rel‑attributen, bijv. ["noopener","nofollow"]
kw_top3 / kw_top10 / kw_top100Trefwoorden waarop de verwijzende pagina rankt in de top 3 / 10 / 100

POST /api/v1/keyword-research

POST /api/v1/keyword-research

Retourneert een volledige metrische set voor een seed‑trefwoord — zoekvolume, CPC, concurrentie, moeilijkheidsgraad, zoekintentie, een 12‑maanden volume‑trend, SERP‑features en meer — plus een gerangschikte lijst van gerelateerde trefwoorden met dezelfde velden. Synchronous — reageert onmiddellijk.

Dit zijn de metrics die Keyword Research Tool worden weergegeven. Zodra u de trefwoorden hebt gekozen die de moeite waard zijn, de Rank Tracker follows their positions daily — and /rank/keywords leest die posities terug, gratis.

Dit endpoint trekt van je maandelijkse zoekwoord‑quotum en besteedt nooit credits: zodra de quota is opgebruikt, retourneert het 429 QUOTA_EXCEEDED, dus het is veilig om in een lus aan te roepen. Recente opzoekingen worden uit de cache geserveerd (gemarkeerd "cached": true) zonder quota‑kosten.

Request Body (JSON)

VeldTypeVerplichtBeschrijving
zoekwoordstringJaStartzoekwoord, max 200 tekens
location_codeintegerNeeLocatiecode, standaard 2840 (Verenigde Staten)
language_codestringNeeTaalcode, standaard en
limietintegerNeeMaximaal geretourneerde gerelateerde zoekwoorden, 1–100, standaard 10

Voorbeeldverzoek

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"

Voorbeeldrespons

{
  "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" }
}

Zoekwoordvelden

De overview (seed‑keyword) en elke related_keywords rij deelt deze velden. Elk veld kan zijn null wanneer de upstream‑data niet beschikbaar is.

VeldBeschrijving
search_volumeGemiddeld aantal maandelijkse zoekopdrachten
cpcGemiddelde kosten per klik (USD)
concurrentieBetaalde concurrentie, 0–1
competition_levelLOW / MEDIUM / HIGH
moeilijkheidsgraadOrganische rankingmoeilijkheid, 0–100 (null als nog niet berekend)
intentieZoekintentie, bijv. ["Commercial"]
trend12‑maanden volumegeschiedenis — { y, m, v } per maand
groeiVolume verandering %: m maandelijks, q kwartaal, y jaarlijks
serp_featuresSERP‑functietypen aanwezig, bijv. ["organic","people_also_ask"]
bod_laag / bod_hoogBodbereik bovenaan pagina (USD)
gemidd_backlinks / gem_ref_domeinenGemiddeld aantal backlinks / verwijzende domeinen van de momenteel rankende pagina's
comp_domain_rankGemiddelde autoriteit (0–1000) van de momenteel rankende pagina's
se_resultsTotaal concurrerende resultaten voor het zoekwoord
gerelateerdTot 8 gerelateerde sub-zoekwoorden (alleen gerelateerde rijen)
match_bucketRelatie tot de seed: similar, related, of question

POST /api/v1/site-audit

POST /api/v1/site-audit

Voert dezelfde crawl uit als de Website Audit Tool — broken links, redirect chains, missing titles and canonical problems, page by page.

Site‑audits zijn asynchroon. Dit endpoint retourneert een job_id immediately. Poll GET /api/v1/jobs/{job_id} voor resultaten. Typische crawltijd: 1–5 minuten.

Request Body (JSON)

VeldTypeVerplichtBeschrijving
urlstringJaVolledige URL om te crawlen, bijv. https://example.com
max_pagesintegerNeeMaximaal te crawlen pagina's (standaard 100). Beperkt door de per-crawl limiet van uw abonnement en uw resterende maandelijkse pagina‑budget.
diepteintegerNeeCrawl‑diepte, 1–5, standaard 3

Voorbeeldverzoek

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"

Response (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}

Poll de status van een async‑taak. Poll elke 10–15 seconden totdat status is complete of failed.

Statuswaarden

StatusBetekenis
in wachtrijTaak geaccepteerd, nog niet gestart
actiefCrawl bezig — controleer progress (0–100)
voltooidVoltooid — data veld bevat resultaten
misluktCrawl mislukt — error veld heeft de reden

Voorbeeldverzoek

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

Reactie — Bezig

{
  "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" }
}

Reactie — Voltooid

{
  "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

Elke zoekterm die uw account volgt, elk met de markt en het apparaat waarop gemeten is en de meest recente positie. Dit is de data achter de Rank Tracker — no crawl is triggered and nothing is charged.

country, language en 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.

Queryparameters

ParameterTypeVerplichtBeschrijving
project_idintegerNeeBeperk tot één project. Laat weg om zoekwoorden uit alle projecten die u bezit te retourneren.
limietintegerNee1–500, default 100

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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 is positief wanneer het zoekwoord is verplaatst omhoog. Een zoekwoord dat nog nooit is gecontroleerd, geeft null voor elke latest.* veld in plaats van 0 — position zero would read as "ranked first".

GET /api/v1/rank/history

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

Dagelijkse positiegeschiedenis voor één gevolgde zoekterm, met de gerangschikte URL en de SERP‑features die bij elke controle aanwezig waren. Inclusief een vooraf berekende trend samenvatting.

Queryparameters

ParameterTypeVerplichtBeschrijving
keyword_idintegerJaVan /rank/keywords. Een zoekwoord dat je niet bezit, geeft 404 NOT_FOUND.
dagenintegerNee1–365, default 90

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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 }
}

Lezen trend

VeldBetekenis
eerstePositie op de oudste punt in het venster
nieuwstePositie bij de meest recente controle
besteLaagste nummer bereikt (beste ranking)
slechtsteHoogste nummer bereikt (slechtste ranking)

history is gesorteerd op nieuwste eerst. best en worst negeer niet-gerankte controles, zodat ze null wanneer het zoekwoord nooit gerangschikt was in het venster.

GET /api/v1/gsc/properties

GET /api/v1/gsc/properties

De Google Search Console-eigenschappen die aan uw account zijn gekoppeld, zoals weergegeven in Search Console Insights. Neemt geen parameters.

This reads SignalSumo's synced copy — it does not call Google. last_synced_at vertelt je hoe actueel die kopie is.

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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 om dezelfde cijfers op te splitsen per pagina, land, apparaat of datum.

Queryparameters

ParameterTypeVerplichtBeschrijving
property_idintegerJaVan /gsc/properties. Een eigenschap die u niet bezit, retourneert 404 NOT_FOUND.
dimstringNeequery (standaard), page, country, device, date, searchAppearance
fromstringNeeYYYY-MM-DD, standaard 28 dagen geleden
tostringNeeYYYY-MM-DD, standaard vandaag
sortstringNeeclicks (standaard), impressions, ctr, position, key
dirstringNeedesc (standaard) of asc
limietintegerNee1–500, default 100
Een ongeldige datum geeft 422 VALIDATION_ERROR, maar een niet‑herkende dim of sort waarde valt stilzwijgend terug op de standaard in plaats van een fout te geven. Controleer de dim teruggekaatst in data voordat u een uitsplitsing vertrouwt.

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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 dekt altijd de volledige periode, ongeacht limit.

GET /api/v1/ai-visibility/projects

GET /api/v1/ai-visibility/projects

De merken die u volgt over AI-antwoordmachines, één rij per project, met de huidige zichtbaarheidsscore en de beweging ervan. Neemt geen parameters. Aangedreven door de AI Visibility Checker.

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

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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 is null until a project has been scanned at least twice — a first scan has nothing to compare against, and reporting 0 zou lezen als "geen beweging".

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

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

Hoe vaak AI-assistenten uw merk noemen versus de concurrenten die naast uw merk worden gevolgd, plus de volledige metrische uitsplitsing van de meest recente scan.

Queryparameters

ParameterTypeVerplichtBeschrijving
project_idintegerJaVan /ai-visibility/projects. Een project dat je niet bezit, geeft 404 NOT_FOUND.

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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"
      }
    ]
  }
}

Twee verschillende percentages

Deze zijn gemakkelijk te verwarren, en ze beantwoorden verschillende vragen:

VeldVraag die het beantwoordt
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 is null voordat de eerste scan van een project voltooid is. competitors retourneert maximaal 20, gesorteerd op vermeldingsteller. brand_share_pct is 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

Elke markt POST /keyword-research accepteert, zodat u een kunt ontdekken location_code in plaats van er één te raden en een 422. Neemt geen parameters.

Dit is bewust niet 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.

Voorbeeldverzoek

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

Voorbeeldrespons

{
  "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."
  }
}

Changelog

VersieDatumWijzigingen
v1.2aug 2026Documenteerde de zeven alleen‑lezen eindpunten die al live waren: /rank/keywords, /rank/history, /gsc/properties, /gsc/queries, /ai-visibility/projects, /ai-visibility/share-of-voice en /keyword-research/locations. No behaviour changed — these were callable before, just undocumented. Added MCP and LLM client guidance.
v1.1jul 2026Keyword‑ en backlink‑reacties uitgebreid naar volledige metrische sets (moeilijkheid, intentie, trend, SERP‑functies, verrijkte backlink‑velden, overzicht & inzichten). Site‑auditresultaten toevoegen geo_score en probleemtelling. Toegevoegde locatie-/taalreferentie en factureringsdetails.
v1.0jun 2026Eerste release — gebruik, backlinks, zoekwoordenonderzoek, site-audit, taken

Vragen? E‑mail [email protected]