Riferimento API
Integra i dati SEO di SignalSumo direttamente nei tuoi strumenti, dashboard e flussi di lavoro.
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"
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,/gsce/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.
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
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.
| Piano | Chiamate API mensili | Reset |
|---|---|---|
| Pro | 20 | 1° di ogni mese |
| Agency | 100 | 1° 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:
| Endpoint | Quando la quota per funzionalità è esaurita |
|---|---|
| /keyword-research | Restituisce 429 QUOTA_EXCEEDED. Mai spende crediti — sicuro da loop. |
| /backlinks | Ritorna a 1 credito per richiesta. Un approfondito query (page > 1 o limit > 100) always costs 1 credit. No credits → 402 PAYMENT_REQUIRED. |
| /site-audit | Restituisce 429 QUOTA_EXCEEDED quando il conteggio mensile di scansioni o il budget di pagine rotante è esaurito. |
"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.
| Piano | Richieste al minuto |
|---|---|
| Pro | 20 |
| Agency | 60 |
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.
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:
| Codice | Mercato | Codice | Mercato |
|---|---|---|---|
| 2840 | Stati Uniti | 2276 | Germania |
| 2826 | Regno Unito | 2250 | Francia |
| 2124 | Canada | 2724 | Spagna |
| 2036 | Australia | 2380 | Italia |
| 2356 | India | 2528 | Paesi Bassi |
| 2392 | Giappone | 2076 | Brasile |
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:
| Codice | Lingua | Codice | Lingua |
|---|---|---|---|
| en | Inglese | pt | Portoghese |
| es | Spagnolo | nl | Olandese |
| fr | Francese | ru | Russo |
| de | Tedesco | ja | Giapponese |
| it | Italiano | zh | Cinese |
language_code ripiega su Inglese piuttosto che restituire un errore — quindi verifica il codice se i risultati appaiono inaspettatamente in inglese.
Codici di errore
| HTTP | codice | Significato |
|---|---|---|
| 400 | RICHIESTA_NON_VALIDA | Sintassi della richiesta non valida |
| 401 | NON_AUTORIZZATO | Chiave API mancante o non valida |
| 403 | VIETATO | Accesso API non disponibile sul tuo piano (necessario Pro o Agency) |
| 404 | NON_TROVATO | Endpoint o risorsa non trovati |
| 402 | PAGAMENTO_RICHIESTO | Quota della funzionalità esaurita e nessun credito residuo (backlink) |
| 422 | ERRORE_DI_VALIDAZIONE | Parametro richiesto mancante o valore non valido |
| 409 | GIÀ_IN_ESECUZIONE | La stessa richiesta è già in fase di recupero per il tuo account — riprova a breve e otterrai un risultato dalla cache. Nessun addebito effettuato |
| 429 | LIMITE_RATE / QUOTA_SUPERATO | Limite di chiamate mensile, ritmo al minuto o quota funzionale raggiunta — vedi resets_at o retry_after in meta |
| 502 | ERRORE_UPSTREAM | Nessun dato restituito dal provider di dati upstream |
| 500 | ERRORE_SERVER | Errore 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.
| Route | Auth | Ideale per |
|---|---|---|
| Connettore ospitato | OAuth 2.1 — no key to copy | Claude e altri client MCP. Nessuna installazione, sempre aggiornato. |
@signalsumo/mcp su npm | Chiave API nella configurazione del client | Installazioni locali, configurazioni self‑hosted o esecuzione nel tuo ambiente. |
| Questa API REST | Authorization: Bearer | I 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.
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
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.
page > 1 o limit > 100 — costa sempre 1 credito. Vedi Piani e fatturazione.
Parametri di query
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| domain | stringa | Sì | Dominio principale, es. example.com (anche un URL completo è accettato e normalizzato) |
| pagina | intero | No | Numero di pagina, predefinito 1 |
| limit | intero | No | Risultati 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
| Campo | Descrizione |
|---|---|
| domain_from / url_from | Il sito di collegamento e la pagina esatta su cui è presente il link |
| url_to | La pagina del tuo dominio a cui è collegato |
| anchor | Testo di ancoraggio del link |
| dofollow | 1 = dofollow, 0 = nofollow |
| spam_score | Punteggio spam della pagina di collegamento (0–100) |
| domain_from_rank / page_from_rank | Autorità del dominio / pagina di collegamento, normalizzata 0–100 |
| is_new / is_lost / is_broken | Flag del ciclo di vita del link (1/0) |
| first_seen / last_seen / lost_date | Quando il link è stato visto per la prima volta, l'ultima volta e (se applicabile) perso |
| platform_type / country / tld_from | Piattaforma, paese e TLD del sito di collegamento |
| item_type | Formato link: anchor, image, redirect, … |
| page_from_status_code / url_to_status_code | Stato HTTP della pagina di collegamento / della pagina collegata |
| attributi | Attributi rel del link, ad es. ["noopener","nofollow"] |
| kw_top3 / kw_top10 / kw_top100 | Parole chiave per le quali la pagina di collegamento si classifica nei primi 3 / 10 / 100 risultati |
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.
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)
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| keyword | stringa | Sì | Keyword seed, max 200 caratteri |
| location_code | intero | No | Codice località, predefinito 2840 (Stati Uniti) |
| language_code | stringa | No | Codice lingua, predefinito en |
| limit | intero | No | Numero 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.
| Campo | Descrizione |
|---|---|
| search_volume | Ricerche mensili medie |
| cpc | Costo medio per clic (USD) |
| competition | Competizione a pagamento, 0–1 |
| competition_level | LOW / MEDIUM / HIGH |
| difficulty | Difficoltà di posizionamento organico, 0–100 (null se non ancora calcolato) |
| intent | Intento di ricerca, es. ["Commercial"] |
| trend | Storico volume 12 mesi — { y, m, v } al mese |
| growth | Variazione volume %: m mensile, q trimestrale, y annuale |
| serp_features | Tipi di funzionalità SERP presenti, es. ["organic","people_also_ask"] |
| bid_low / bid_high | Intervallo di offerta in cima alla pagina (USD) |
| avg_backlinks / avg_ref_domains | Backlink medi / domini di riferimento delle pagine attualmente posizionate |
| comp_domain_rank | Autorità media (0–1000) delle pagine attualmente posizionate |
| se_results | Totale risultati concorrenti per la keyword |
| related | Fino a 8 sotto-keyword correlate (solo righe correlate) |
| match_bucket | Relazione al seed: similar, related, o question |
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.
job_id immediately.
Poll GET /api/v1/jobs/{job_id} per i risultati. Tempo medio di scansione: 1–5 minuti.
Corpo della richiesta (JSON)
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| url | stringa | Sì | URL completo da scansionare, es. https://example.com |
| max_pages | intero | No | Numero massimo di pagine da scansionare (predefinito 100). Limitato dal limite per scansione del tuo piano e dal budget mensile di pagine rimanente. |
| depth | intero | No | Profondità 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}
Interroga lo stato di un lavoro asincrono. Interroga ogni 10–15 secondi fino a status è complete o failed.
Valori di stato
| Stato | Significato |
|---|---|
| queued | Lavoro accettato, non ancora avviato |
| running | Scansione in corso — controlla progress (0–100) |
| completo | Fatto — data campo contiene risultati |
| fallito | Scansione 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
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
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| project_id | intero | No | Limita a un progetto. Ometti per restituire le keyword di tutti i progetti di tua proprietà. |
| limit | intero | No | 1–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
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
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| keyword_id | intero | Sì | Da /rank/keywords. Una keyword che non possiedi restituisce 404 NOT_FOUND. |
| giorni | intero | No | 1–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
| Campo | Significato |
|---|---|
| prima | Posizione al più vecchia punto nella finestra |
| più recente | Posizione al controllo più recente |
| migliore | Numero più basso raggiunto (miglior posizionamento) |
| peggiore | Numero 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
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
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
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| property_id | intero | Sì | Da /gsc/properties. Una proprietà che non possiedi restituisce 404 NOT_FOUND. |
| dim | stringa | No | query (predefinito), page, country, device, date, searchAppearance |
| from | stringa | No | YYYY-MM-DD, predefinito 28 giorni fa |
| to | stringa | No | YYYY-MM-DD, predefinito oggi |
| sort | stringa | No | clicks (predefinito), impressions, ctr, position, key |
| dir | stringa | No | desc (predefinito) o asc |
| limit | intero | No | 1–500, default 100 |
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
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
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
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
| project_id | intero | Sì | 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:
| Campo | Domanda a cui risponde |
|---|---|
mention_rate | Of the prompts we tested, what share mentioned you at all? — coverage. |
brand_share_pct | Of 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
Ogni mercato POST /keyword-research accetta, così puoi scoprire un location_code invece di indovinare uno e guadagnare un 422. Non richiede parametri.
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
| Versione | Data | Modifiche |
|---|---|---|
| v1.2 | Ago 2026 | Documentati 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.1 | Lug 2026 | Risposte 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.0 | Giu 2026 | Versione iniziale — utilizzo, backlink, ricerca parole chiave, audit sito, lavori |
Domande? Email [email protected]