SignalSumo

Riferimento API

Integra i dati SEO di SignalSumo direttamente nei tuoi strumenti, dashboard e flussi di lavoro.

Pro Agency L'accesso API è disponibile nei piani Pro e Agency

Avvio rapido

Tre passaggi per la tua prima risposta.

1. Crea una chiave API

Su un piano Pro o Agency, genera una chiave su Chiavi API e copiala — è mostrata una sola volta.

2. Verifica la connessione

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

A 200 risposta con il tuo piano e le chiamate rimanenti indica che sei connesso.

3. Effettua la tua prima chiamata dati

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"
Questo è tutto. Ogni endpoint utilizza lo stesso Authorization: Bearer header e restituisce lo stesso involucro JSON — consulta gli endpoint qui sotto per parametri e campi di risposta.

Panoramica

Tutti gli endpoint API sono disponibili sotto:

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

Le richieste e le risposte usano JSON. Ogni risposta segue lo stesso involucro:

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

Gli errori seguono la stessa struttura con success: false e un error oggetto invece di data.

Gli endpoint rientrano in due gruppi, e la differenza è ciò che ti costa:

  • Endpoint di ricerca — /backlinks, /keyword-research, /site-audit — fetch fresh data from outside SignalSumo. They draw feature quota or credits. See Piani e fatturazione.
  • Endpoint dei tuoi dati — everything under /rank, /gsc e /ai-visibility — read what your account has already collected. They are plain database reads: they cost nessun credito e nessuna quota funzionale, e non vengono mai rifiutati per aver superato il limite mensile.
I tuoi endpoint dati sono liberi da crediti e quote di funzionalità, ma ogni chiamata è comunque registrato nel tuo totale mensile di chiamate API — 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 Connettore MCP, che funziona sullo stesso contatore.

Autenticazione

Passa la tua chiave API nel Authorization header su ogni richiesta:

Authorization: Bearer ss_live_your_key_here

In alternativa, puoi passarlo come parametro di query (non consigliato in produzione):

GET /api/v1/usage?api_key=ss_live_your_key_here
Genera e gestisci le tue chiavi API su signalsumo.com/api-keys. Each key is shown una sola volta al momento della creazione — archivialo in modo sicuro.

Il Authorization: Bearer header è il metodo consigliato. L'API invia anche intestazioni CORS permissive, quindi può essere chiamata direttamente da strumenti basati su browser. Mantieni le chiavi segrete lato server in produzione.

Piani e fatturazione

L'accesso API è disponibile sul Pro e Agency piani. Due contatori indipendenti regolano l'uso — una chiamata viene servita solo quando entrambi consentirlo.

1. Chiamate API mensili

Ogni richiesta (comprese le cache hit e gli errori che raggiungono un endpoint) conta come una chiamata API.

PianoChiamate API mensiliReset
Pro201° di ogni mese
Agency1001° di ogni mese

Superare questo restituisce HTTP 429 (RATE_LIMITED) con un resets_at campo in meta. Controlla il tuo limite live e l'utilizzo in qualsiasi momento tramite GET /usage.

2. Quota per funzionalità e crediti

Oltre al contatore delle chiamate, gli endpoint dati attingono ciascuno dalla propria quota mensile per funzionalità (la stessa assegnazione usata nella tua dashboard). Come si comportano quando la quota si esaurisce:

EndpointQuando la quota per funzionalità è esaurita
/keyword-researchRestituisce 429 QUOTA_EXCEEDED. Mai spende crediti — sicuro da loop.
/backlinksRitorna a 1 credito per richiesta. Un approfondito query (page > 1 o limit > 100) always costs 1 credit. No credits → 402 PAYMENT_REQUIRED.
/site-auditRestituisce 429 QUOTA_EXCEEDED quando il conteggio mensile di scansioni o il budget di pagine rotante è esaurito.
Le cache hit sono gratuite rispetto alla quota funzionale. I risultati sono memorizzati nella cache e condivisi con la tua dashboard, quindi un dominio o una keyword già cercati di recente restituiscono istantaneamente, contrassegnati "cached": true in meta, e non consuma quota funzionale o crediti (conta comunque come una chiamata API).

3. Richieste al minuto

Separatamente dai contatori mensili, il tuo piano stabilisce quante richieste al minuto puoi effettuare. Questo limita un loop incontrollato o una chiave trapelata a qualcosa di recuperabile — un'assegnazione mensile non dice nulla su una spesa totale in un'ora.

PianoRichieste al minuto
Pro20
Agency60

Ogni endpoint conta separatamente, così utilizzare il tuo limite di backlink non ti blocca mai nella ricerca di keyword. Superarlo restituisce 429 con retry_after (secondi) e limit in meta. Le richieste rifiutate non vengono conteggiate, quindi attendendo retry_after la cancella sempre.

Le richieste identiche vengono risposte una sola volta. Se diverse delle tue richieste pongono la stessa domanda nello stesso momento, una di esse viene recuperata e le altre ricevono lo stesso risultato — addebitato una sola volta, non per ciascuna. Se il recupero è ancora in corso quando arriva la tua, ricevi 409 ALREADY_RUNNING; riprova tra pochi secondi e sarà un risultato dalla cache.

Località e lingue

/keyword-research accetta un location_code e language_code per localizzare i risultati. Entrambi sono opzionali — le impostazioni predefinite sono gli Stati Uniti (2840) e Inglese (en).

location_code

Un codice di mercato numerico. Valori comuni:

CodiceMercatoCodiceMercato
2840Stati Uniti2276Germania
2826Regno Unito2250Francia
2124Canada2724Spagna
2036Australia2380Italia
2356India2528Paesi Bassi
2392Giappone2076Brasile

Sono supportati oltre 90 mercati. Un codice non riconosciuto restituisce 422 UNSUPPORTED_LOCATION piuttosto che ricorrere agli Stati Uniti — essere fatturati per dati americani non richiesti è peggio di essere informati che il codice è errato. Chiama GET /api/v1/keyword-research/locations per l'elenco completo.

language_code

Un codice lingua a due lettere. Valori supportati:

CodiceLinguaCodiceLingua
enIngleseptPortoghese
esSpagnolonlOlandese
frFranceseruRusso
deTedescojaGiapponese
itItalianozhCinese
Sono supportate solo le lingue elencate sopra. Qualsiasi altra language_code ripiega su Inglese piuttosto che restituire un errore — quindi verifica il codice se i risultati appaiono inaspettatamente in inglese.

Codici di errore

HTTPcodiceSignificato
400RICHIESTA_NON_VALIDASintassi della richiesta non valida
401NON_AUTORIZZATOChiave API mancante o non valida
403VIETATOAccesso API non disponibile sul tuo piano (necessario Pro o Agency)
404NON_TROVATOEndpoint o risorsa non trovati
402PAGAMENTO_RICHIESTOQuota della funzionalità esaurita e nessun credito residuo (backlink)
422ERRORE_DI_VALIDAZIONEParametro richiesto mancante o valore non valido
409GIÀ_IN_ESECUZIONELa stessa richiesta è già in fase di recupero per il tuo account — riprova a breve e otterrai un risultato dalla cache. Nessun addebito effettuato
429LIMITE_RATE / QUOTA_SUPERATOLimite di chiamate mensile, ritmo al minuto o quota funzionale raggiunta — vedi resets_at o retry_after in meta
502ERRORE_UPSTREAMNessun dato restituito dal provider di dati upstream
500ERRORE_SERVERErrore interno — è sicuro riprovare

MCP e client LLM

Se il tuo obiettivo è consentire a un assistente come Claude di leggere questi dati in modo conversazionale, non è necessario scrivere un client. SignalSumo parla il Model Context Protocol, che espone gli endpoint seguenti come strumenti che un LLM può chiamare direttamente.

RouteAuthIdeale per
Connettore ospitatoOAuth 2.1 — no key to copyClaude e altri client MCP. Nessuna installazione, sempre aggiornato.
@signalsumo/mcp su npmChiave API nella configurazione del clientInstallazioni locali, configurazioni self‑hosted o esecuzione nel tuo ambiente.
Questa API RESTAuthorization: BearerI tuoi script, dashboard e integrazioni 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'accesso MCP è regolato dal proprio flag di piano, separato dall'accesso REST API. Controlla il tuo piano se un client si autentica ma ogni chiamata allo strumento viene rifiutata.

GET /api/v1/usage

GET /api/v1/usage

Restituisce l'utilizzo della tua quota API per il mese solare corrente.

Richiesta di esempio

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

Risposta di esempio

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

Restituisce il profilo backlink di un dominio: un riepilogo overview, distribuzione insights, e un elenco arricchito di singoli backlinks. I risultati sono memorizzati nella cache e condivisi con la tua dashboard (Pro: 2 giorni, Agency: 7 giorni); un risultato in cache è contrassegnato "cached": true e non costa quota funzionale.

Questi sono gli stessi dati che il Verificatore di backlink shows in the app, and the cache is shared — a domain you have already looked at there returns instantly here, free.

Una richiesta standard consuma la tua quota mensile di ricerca backlink (poi 1 credito se quello è esaurito). Un approfondito richiesta — page > 1 o limit > 100 — costa sempre 1 credito. Vedi Piani e fatturazione.

Parametri di query

ParametroTipoObbligatorioDescrizione
domainstringaSìDominio principale, es. example.com (anche un URL completo è accettato e normalizzato)
paginainteroNoNumero di pagina, predefinito 1
limitinteroNoRisultati per pagina, 1–200, predefinito 100

Richiesta di esempio

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

Risposta di esempio

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

Campi backlink

CampoDescrizione
domain_from / url_fromIl sito di collegamento e la pagina esatta su cui è presente il link
url_toLa pagina del tuo dominio a cui è collegato
anchorTesto di ancoraggio del link
dofollow1 = dofollow, 0 = nofollow
spam_scorePunteggio spam della pagina di collegamento (0–100)
domain_from_rank / page_from_rankAutorità del dominio / pagina di collegamento, normalizzata 0–100
is_new / is_lost / is_brokenFlag del ciclo di vita del link (1/0)
first_seen / last_seen / lost_dateQuando il link è stato visto per la prima volta, l'ultima volta e (se applicabile) perso
platform_type / country / tld_fromPiattaforma, paese e TLD del sito di collegamento
item_typeFormato link: anchor, image, redirect, …
page_from_status_code / url_to_status_codeStato HTTP della pagina di collegamento / della pagina collegata
attributiAttributi rel del link, ad es. ["noopener","nofollow"]
kw_top3 / kw_top10 / kw_top100Parole chiave per le quali la pagina di collegamento si classifica nei primi 3 / 10 / 100 risultati

POST /api/v1/keyword-research

POST /api/v1/keyword-research

Restituisce un set completo di metriche per una parola chiave seed — volume di ricerca, CPC, concorrenza, difficoltà, intento di ricerca, tendenza del volume a 12 mesi, funzionalità SERP e altro — più un elenco classificato di parole chiave correlate con gli stessi campi. Sincrono — risponde immediatamente.

Queste sono le metriche che Strumento di ricerca parole chiave vengono visualizzate. Una volta scelte le parole chiave da perseguire, il Rank Tracker follows their positions daily — and /rank/keywords legge quelle posizioni indietro, gratuitamente.

Questo endpoint consuma la tua quota mensile di ricerche per parole chiave e non spende crediti: una volta esaurita la quota restituisce 429 QUOTA_EXCEEDED, quindi è sicuro chiamare in un ciclo. Le ricerche recenti sono servite dalla cache (segnate "cached": true) senza costo di quota.

Corpo della richiesta (JSON)

CampoTipoObbligatorioDescrizione
keywordstringaSìKeyword seed, max 200 caratteri
location_codeinteroNoCodice località, predefinito 2840 (Stati Uniti)
language_codestringaNoCodice lingua, predefinito en
limitinteroNoNumero massimo di parole chiave correlate restituite, 1–100, predefinito 10

Richiesta di esempio

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"

Risposta di esempio

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

Campi keyword

Il overview (parola chiave seed) e ogni related_keywords riga condivide questi campi. Qualsiasi campo può essere null quando i dati upstream non sono disponibili.

CampoDescrizione
search_volumeRicerche mensili medie
cpcCosto medio per clic (USD)
competitionCompetizione a pagamento, 0–1
competition_levelLOW / MEDIUM / HIGH
difficultyDifficoltà di posizionamento organico, 0–100 (null se non ancora calcolato)
intentIntento di ricerca, es. ["Commercial"]
trendStorico volume 12 mesi — { y, m, v } al mese
growthVariazione volume %: m mensile, q trimestrale, y annuale
serp_featuresTipi di funzionalità SERP presenti, es. ["organic","people_also_ask"]
bid_low / bid_highIntervallo di offerta in cima alla pagina (USD)
avg_backlinks / avg_ref_domainsBacklink medi / domini di riferimento delle pagine attualmente posizionate
comp_domain_rankAutorità media (0–1000) delle pagine attualmente posizionate
se_resultsTotale risultati concorrenti per la keyword
relatedFino a 8 sotto-keyword correlate (solo righe correlate)
match_bucketRelazione al seed: similar, related, o question

POST /api/v1/site-audit

POST /api/v1/site-audit

Esegue la stessa scansione di Strumento di audit del sito — broken links, redirect chains, missing titles and canonical problems, page by page.

Le verifiche del sito sono asynchronous. Questo endpoint restituisce un job_id immediately. Poll GET /api/v1/jobs/{job_id} per i risultati. Tempo medio di scansione: 1–5 minuti.

Corpo della richiesta (JSON)

CampoTipoObbligatorioDescrizione
urlstringaSìURL completo da scansionare, es. https://example.com
max_pagesinteroNoNumero massimo di pagine da scansionare (predefinito 100). Limitato dal limite per scansione del tuo piano e dal budget mensile di pagine rimanente.
depthinteroNoProfondità di scansione, 1–5, predefinita 3

Richiesta di esempio

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"

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

Interroga lo stato di un lavoro asincrono. Interroga ogni 10–15 secondi fino a status è complete o failed.

Valori di stato

StatoSignificato
queuedLavoro accettato, non ancora avviato
runningScansione in corso — controlla progress (0–100)
completoFatto — data campo contiene risultati
fallitoScansione fallita — error campo ha la ragione

Richiesta di esempio

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

Risposta — In corso

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

Risposta — Completa

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

Ogni keyword monitorata dal tuo account, ciascuna con il mercato e il dispositivo in cui è stata misurata e la posizione più recente. Questi sono i dati alla base del Rank Tracker — no crawl is triggered and nothing is charged.

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

Parametri di query

ParametroTipoObbligatorioDescrizione
project_idinteroNoLimita a un progetto. Ometti per restituire le keyword di tutti i progetti di tua proprietà.
limitinteroNo1–500, default 100

Richiesta di esempio

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

Risposta di esempio

{
  "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 è positivo quando la parola chiave si è spostata su. Una keyword mai controllata restituisce null per ogni latest.* campo piuttosto che 0 — position zero would read as "ranked first".

GET /api/v1/rank/history

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

Storico giornaliero delle posizioni per una keyword tracciata, con l'URL posizionato e le funzionalità SERP presenti a ogni controllo. Include un pre‑calcolato trend riepilogo.

Parametri di query

ParametroTipoObbligatorioDescrizione
keyword_idinteroSìDa /rank/keywords. Una keyword che non possiedi restituisce 404 NOT_FOUND.
giorniinteroNo1–365, default 90

Richiesta di esempio

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

Risposta di esempio

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

Lettura trend

CampoSignificato
primaPosizione al più vecchia punto nella finestra
più recentePosizione al controllo più recente
miglioreNumero più basso raggiunto (miglior posizionamento)
peggioreNumero più alto raggiunto (peggiore posizionamento)

history è ordinato dal più recente al più vecchio. best e worst ignora i controlli non classificati, così sono null quando la keyword non è mai stata posizionata nella finestra.

GET /api/v1/gsc/properties

GET /api/v1/gsc/properties

Le proprietà di Google Search Console collegate al tuo account, come mostrato in Search Console Insights. Non richiede parametri.

This reads SignalSumo's synced copy — it does not call Google. last_synced_at ti indica quanto è recente quella copia.

Richiesta di esempio

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

Risposta di esempio

{
  "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 per suddividere gli stessi numeri per pagina, paese, dispositivo o data.

Parametri di query

ParametroTipoObbligatorioDescrizione
property_idinteroSìDa /gsc/properties. Una proprietà che non possiedi restituisce 404 NOT_FOUND.
dimstringaNoquery (predefinito), page, country, device, date, searchAppearance
fromstringaNoYYYY-MM-DD, predefinito 28 giorni fa
tostringaNoYYYY-MM-DD, predefinito oggi
sortstringaNoclicks (predefinito), impressions, ctr, position, key
dirstringaNodesc (predefinito) o asc
limitinteroNo1–500, default 100
Una data non valida restituisce 422 VALIDATION_ERROR, ma un non riconosciuto dim o sort il valore ripiega silenziosamente al valore predefinito anziché generare un errore. Controlla il dim ritornato indietro in data prima di fidarti di una suddivisione.

Richiesta di esempio

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

Risposta di esempio

{
  "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 copre sempre l'intero periodo indipendentemente da limit.

GET /api/v1/ai-visibility/projects

GET /api/v1/ai-visibility/projects

I brand che monitori nei motori di risposta AI, una riga per progetto, con il punteggio di visibilità attuale e la sua variazione. Non richiede parametri. Alimentato da AI Visibility Checker.

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

Richiesta di esempio

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

Risposta di esempio

{
  "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 è null until a project has been scanned at least twice — a first scan has nothing to compare against, and reporting 0 verrebbe interpretato come "nessun movimento".

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

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

Quanto spesso gli assistenti AI citano il tuo brand rispetto ai concorrenti tracciati accanto, più il dettaglio completo della metrica dall'ultima scansione.

Parametri di query

ParametroTipoObbligatorioDescrizione
project_idinteroSìDa /ai-visibility/projects. Un progetto che non possiedi restituisce 404 NOT_FOUND.

Richiesta di esempio

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

Risposta di esempio

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

Due percentuali diverse

Questi sono facili da confondere e rispondono a domande diverse:

CampoDomanda a cui risponde
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 è null prima che la prima scansione di un progetto sia completata. competitors restituisce al massimo 20, ordinati per conteggio delle menzioni. brand_share_pct è 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

Ogni mercato POST /keyword-research accetta, così puoi scoprire un location_code invece di indovinare uno e guadagnare un 422. Non richiede parametri.

Questo è deliberatamente non 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.

Richiesta di esempio

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

Risposta di esempio

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

VersioneDataModifiche
v1.2Ago 2026Documentati i sette endpoint di sola lettura già attivi: /rank/keywords, /rank/history, /gsc/properties, /gsc/queries, /ai-visibility/projects, /ai-visibility/share-of-voice e /keyword-research/locations. No behaviour changed — these were callable before, just undocumented. Added MCP and LLM client guidance.
v1.1Lug 2026Risposte su parole chiave e backlink ampliate a set metrici completi (difficoltà, intento, tendenza, funzionalità SERP, campi backlink arricchiti, panoramica e approfondimenti). I risultati dell'audit del sito aggiungono geo_score e conteggi dei problemi. Aggiunto riferimento di posizione/lingua e dettagli di fatturazione.
v1.0Giu 2026Versione iniziale — utilizzo, backlink, ricerca parole chiave, audit sito, lavori

Domande? Email [email protected]