Referencia API
Integre los datos SEO de SignalSumo directamente en sus propias herramientas, paneles y flujos de trabajo.
Inicio rápido
Tres pasos para su primera respuesta.
1. Crear una clave API
En un plan Pro o Agency, genere una clave en Claves API y cópiela — se muestra solo una vez.
2. Verificar la conexión
curl -H "Authorization: Bearer ss_live_your_key_here" \
"https://signalsumo.com/api/v1/usage"
A 200 respuesta con su plan y llamadas restantes significa que está conectado.
3. Realizar su primera llamada de datos
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 encabezado y devuelve el mismo sobre JSON — explora los endpoints a continuación para ver parámetros y campos de respuesta.
Resumen
Todos los endpoints de la API se sirven bajo:
https://signalsumo.com/api/v1/
Las solicitudes y respuestas usan JSON. Cada respuesta sigue el mismo sobre:
{
"success": true,
"data": { ... },
"meta": { "timestamp": "2026-06-26T10:00:00+00:00" }
}
Los errores siguen la misma estructura con success: false y un error objeto en lugar de data.
Los endpoints se dividen en dos grupos, y la diferencia es lo que le cuesta:
- Endpoints de investigación —
/backlinks,/keyword-research,/site-audit— fetch fresh data from outside SignalSumo. They draw feature quota or credits. See Planes y facturación. - Endpoints de sus datos — everything under
/rank,/gscy/ai-visibility— read what your account has already collected. They are plain database reads: they cost sin créditos ni cuota de funciones, y nunca se rechazan por superar el límite mensual.
Autenticación
Pase su clave API en el Authorization encabezado en cada solicitud:
Authorization: Bearer ss_live_your_key_here
Alternativamente, puede pasarlo como parámetro de consulta (no recomendado para producción):
GET /api/v1/usage?api_key=ss_live_your_key_here
El Authorization: Bearer el encabezado es el método recomendado. La API también envía encabezados CORS permisivos, por lo que puede llamarse directamente desde herramientas basadas en navegador. Mantén las claves secretas en el servidor en producción.
Planes y facturación
El acceso a la API está disponible en los Pro y Agencia planes. Dos medidores independientes regulan el uso — una llamada solo se sirve cuando ambos lo permiten.
1. Llamadas API mensuales
Cada solicitud (incluidos los aciertos de caché y los errores que llegan a un endpoint) cuenta como una llamada API.
| Plan | Llamadas API mensuales | Restablecimientos |
|---|---|---|
| Pro | 20 | 1.º de cada mes |
| Agencia | 100 | 1.º de cada mes |
Superar esto devuelve HTTP 429 (RATE_LIMITED) con un resets_at campo en meta. Verifique su límite en vivo y uso en cualquier momento a través de GET /usage.
2. Cuota por característica y créditos
Más allá del contador de llamadas, los puntos finales de datos extraen cada uno de su propia cuota mensual de característica (la misma asignación que usa su panel de control conectado). Cómo se comporta cada uno cuando esa cuota se agota:
| Punto final | Cuando la cuota de característica se agota |
|---|---|
| /investigación-palabras-clave | Devuelve 429 QUOTA_EXCEEDED. Nunca gasta créditos — seguro para bucle. |
| /backlinks | Recurre a 1 crédito por solicitud. A profundo consulta (page > 1 o limit > 100) always costs 1 credit. No credits → 402 PAYMENT_REQUIRED. |
| /site-audit | Devuelve 429 QUOTA_EXCEEDED cuando se agota el recuento mensual de rastreo o el presupuesto de páginas rotativo. |
"cached": true en meta, y no consume cuota de funciones ni créditos (sigue contando como una llamada API).
3. Solicitudes por minuto
Separado de los contadores mensuales, su plan establece cuántas solicitudes por minuto puede realizar. Esto limita un bucle descontrolado o una clave filtrada a algo recuperable — una asignación mensual no dice nada sobre gastar todo en una hora.
| Plan | Solicitudes por minuto |
|---|---|
| Pro | 20 |
| Agencia | 60 |
Cada endpoint cuenta por separado, por lo que trabajar con su asignación de backlinks nunca le bloquea la investigación de palabras clave. Superarla devuelve 429 con retry_after (segundos) y limit en meta. Las solicitudes rechazadas no se contabilizan, por lo que esperar retry_after siempre lo borra.
409 ALREADY_RUNNING; reintente en unos segundos y será un acierto de caché.
Ubicaciones y lenguajes
/keyword-research acepta un location_code y language_code para localizar resultados. Ambos son opcionales — los valores predeterminados son Estados Unidos (2840) y Inglés (en).
código_ubicación
Un código de mercado numérico. Valores comunes:
| Código | Mercado | Código | Mercado |
|---|---|---|---|
| 2840 | Estados Unidos | 2276 | Alemania |
| 2826 | Reino Unido | 2250 | Francia |
| 2124 | Canadá | 2724 | España |
| 2036 | Australia | 2380 | Italia |
| 2356 | India | 2528 | Países Bajos |
| 2392 | Japón | 2076 | Brasil |
Se admiten más de 90 mercados. Un código no reconocido devuelve 422 UNSUPPORTED_LOCATION en lugar de volver a los Estados Unidos — que se le facture por datos estadounidenses que no solicitó es peor que que le indiquen que el código es incorrecto. Llame GET /api/v1/keyword-research/locations para la lista completa.
código_idioma
Un código de idioma de dos letras. Valores admitidos:
| Código | Idioma | Código | Idioma |
|---|---|---|---|
| en | Inglés | pt | Portugués |
| es | Español | nl | Holandés |
| fr | Francés | ru | Ruso |
| de | Alemán | ja | Japonés |
| it | Italiano | zh | Chino |
language_code recurre a Inglés en lugar de devolver un error — así que verifique el código si los resultados aparecen inesperadamente en inglés.
Códigos de error
| HTTP | código | Significado |
|---|---|---|
| 400 | BAD_REQUEST | Sintaxis de solicitud malformada |
| 401 | UNAUTHORIZED | Clave API faltante o no válida |
| 403 | FORBIDDEN | Acceso API no disponible en su plan (se requiere Pro o Agencia) |
| 404 | NOT_FOUND | Endpoint o recurso no encontrado |
| 402 | PAYMENT_REQUIRED | Cuota de la función agotada y no quedan créditos (backlinks) |
| 422 | VALIDATION_ERROR | Parámetro requerido faltante o valor no válido |
| 409 | ALREADY_RUNNING | La misma solicitud ya se está obteniendo para su cuenta — vuelva a intentarlo en breve y será un acierto de caché. No se cobró nada |
| 429 | RATE_LIMITED / QUOTA_EXCEEDED | Límite mensual de llamadas, ritmo por minuto o cuota de función alcanzada — vea resets_at o retry_after en meta |
| 502 | UPSTREAM_ERROR | No se devolvieron datos del proveedor de datos ascendente |
| 500 | SERVER_ERROR | Error interno — seguro de reintentar |
MCP y clientes LLM
Si su objetivo es permitir que un asistente como Claude lea estos datos de forma conversacional, no necesita escribir un cliente. SignalSumo habla el Protocolo de Contexto del Modelo, que expone los endpoints a continuación como herramientas que un LLM puede invocar directamente.
| Ruta | Autenticación | Ideal para |
|---|---|---|
| Conector alojado | OAuth 2.1 — no key to copy | Claude y otros clientes MCP. No hay nada que instalar, siempre actualizado. |
@signalsumo/mcp en npm | Clave API en la configuración del cliente | Instalaciones locales, configuraciones autoalojadas o ejecución en su propio entorno. |
| Esta API REST | Authorization: Bearer | Sus propios scripts, paneles y integraciones de 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
Devuelve el uso de tu cuota API para el mes calendario actual.
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/usage"
Respuesta de ejemplo
{
"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
Devuelve el perfil de backlinks de un dominio: un resumen overview, distribución insights, y una lista enriquecida de individual backlinks. Los resultados se almacenan en caché y se comparten con su panel (Pro: 2 días, Agencia: 7 días); una coincidencia en caché se marca "cached": true y no consume cuota de funciones.
Estos son los mismos datos que el Comprobador de backlinks 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 — siempre cuesta 1 crédito. Ver Planes y facturación.
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| domain | cadena | Sí | Dominio raíz, p. example.com (también se acepta una URL completa y se normaliza) |
| página | entero | No | Número de página, por defecto 1 |
| limit | entero | No | Resultados por página, 1–200, predeterminado 100 |
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/backlinks?domain=example.com&limit=2"
Respuesta de ejemplo
{
"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 }
}
Campos de backlinks
| Campo | Descripción |
|---|---|
| domain_from / url_from | El sitio enlazante y la página exacta donde está el enlace |
| url_to | La página en tu dominio a la que se enlaza |
| anchor | Texto ancla del enlace |
| dofollow | 1 = dofollow, 0 = nofollow |
| spam_score | Puntuación de spam de la página enlazante (0–100) |
| domain_from_rank / page_from_rank | Autoridad del dominio / página enlazante, normalizada 0–100 |
| is_new / is_lost / is_broken | Banderas del ciclo de vida del enlace (1/0) |
| first_seen / last_seen / lost_date | Cuándo se vio el enlace por primera vez, la última vez y (si corresponde) se perdió |
| platform_type / country / tld_from | Plataforma, país y TLD del sitio enlazante |
| item_type | Formato del enlace: anchor, image, redirect, … |
| page_from_status_code / url_to_status_code | Estado HTTP de la página enlazante / la página enlazada |
| attributes | Atributos rel del enlace, p. ej. ["noopener","nofollow"] |
| kw_top3 / kw_top10 / kw_top100 | Palabras clave para las que la página enlazante se posiciona en los top 3 / 10 / 100 |
POST /api/v1/keyword-research
Devuelve un conjunto completo de métricas para una palabra clave semilla: volumen de búsqueda, CPC, competencia, dificultad, intención de búsqueda, tendencia de volumen de 12 meses, características SERP y más, además de una lista clasificada de palabras clave relacionadas con los mismos campos. Sincrónico: responde de inmediato.
Estas son las métricas que Herramienta de investigación de palabras clave se muestra. Una vez que haya seleccionado las palabras clave que vale la pena perseguir, el Rank Tracker follows their positions daily — and /rank/keywords lee esas posiciones de vuelta, gratis.
429 QUOTA_EXCEEDED, por lo que es seguro llamarlo en un bucle. Las búsquedas recientes se sirven desde la caché (marcadas "cached": true) sin costo de cuota.
Cuerpo de la solicitud (JSON)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| keyword | cadena | Sí | Palabra clave semilla, máx. 200 caracteres |
| código_ubicación | entero | No | Código de ubicación, por defecto 2840 (Estados Unidos) |
| código_idioma | cadena | No | Código de idioma, por defecto en |
| limit | entero | No | Máximo de palabras clave relacionadas devueltas, 1–100, por defecto 10 |
Solicitud de ejemplo
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"
Respuesta de ejemplo
{
"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" }
}
Campos de palabra clave
El overview (palabra clave inicial) y cada related_keywords fila comparte estos campos. Cualquier campo puede ser null cuando los datos ascendentes no están disponibles.
| Campo | Descripción |
|---|---|
| search_volume | Búsquedas mensuales promedio |
| cpc | Costo promedio por clic (USD) |
| competition | Competencia pagada, 0–1 |
| nivel_de_competencia | LOW / MEDIUM / HIGH |
| dificultad | Dificultad de posicionamiento orgánico, 0–100 (null si aún no se ha calculado) |
| intención | Intención de búsqueda, p. ["Commercial"] |
| tendencia | Historial de volumen de 12 meses — { y, m, v } por mes |
| crecimiento | Cambio de volumen %: m mensual, q trimestral, y anual |
| características_serp | Tipos de características SERP presentes, p. ["organic","people_also_ask"] |
| bid_low / bid_high | Rango de puja superior de página (USD) |
| avg_backlinks / avg_ref_domains | Promedio de backlinks / dominios de referencia de las páginas que aparecen ahora |
| comp_domain_rank | Autoridad promedio (0–1000) de las páginas que aparecen ahora |
| se_results | Total de resultados competidores para la palabra clave |
| relacionado | Hasta 8 subpalabras clave relacionadas (solo filas relacionadas) |
| match_bucket | Relación con la semilla: similar, related, o question |
POST /api/v1/site-audit
Ejecuta el mismo rastreo que el Herramienta de auditoría web — broken links, redirect chains, missing titles and canonical problems, page by page.
job_id immediately.
Poll GET /api/v1/jobs/{job_id} para resultados. Tiempo típico de rastreo: 1–5 minutos.
Cuerpo de la solicitud (JSON)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| url | cadena | Sí | URL completa para rastrear, e.g. https://example.com |
| max_pages | entero | No | Máximo de páginas a rastrear (por defecto 100). Limitado por el límite de rastreo por crawl de su plan y su presupuesto mensual de páginas restantes. |
| profundidad | entero | No | Profundidad de rastreo, 1–5, predeterminado 3 |
Solicitud de ejemplo
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"
Respuesta (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}
Consulte el estado de un trabajo asíncrono. Consulte cada 10–15 segundos hasta status es complete o failed.
Valores de estado
| Estado | Significado |
|---|---|
| en cola | Trabajo aceptado, aún no iniciado |
| en ejecución | Rastreo en progreso — verifique progress (0–100) |
| completo | Hecho — data el campo contiene resultados |
| fallido | Rastreo fallido — error el campo tiene la razón |
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/jobs/a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5"
Respuesta — En proceso
{
"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" }
}
Respuesta — 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
Todas las palabras clave que tu cuenta rastrea, cada una con el mercado y dispositivo en que se midió y su posición más reciente. Estos son los datos detrás del Rank Tracker — no crawl is triggered and nothing is charged.
country, language y 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.
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| project_id | entero | No | Restringir a un proyecto. Omitir para devolver palabras clave de todos los proyectos que posees. |
| limit | entero | No | 1–500, default 100 |
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/rank/keywords?limit=1"
Respuesta de ejemplo
{
"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 es positivo cuando la palabra clave se movió arriba. Una palabra clave que nunca se ha consultado devuelve null para cada latest.* campo en lugar de 0 — position zero would read as "ranked first".
GET /api/v1/rank/history
Historial diario de posiciones para una palabra clave rastreada, con la URL que se posicionó y las características SERP presentes en cada verificación. Incluye un precomputado trend resumen.
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| keyword_id | entero | Sí | Desde /rank/keywords. Una palabra clave que no posee devuelve 404 NOT_FOUND. |
| días | entero | No | 1–365, default 90 |
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/rank/history?keyword_id=4821&days=30"
Respuesta de ejemplo
{
"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 }
}
Lectura trend
| Campo | Significado |
|---|---|
| primero | Posición en el más antiguo punto en la ventana |
| más reciente | Posición en la verificación más reciente |
| mejor | Número más bajo alcanzado (mejor posición) |
| peor | Número más alto alcanzado (peor posición) |
history se ordena del más reciente al más antiguo. best y worst ignorar verificaciones sin ranking, para que sean null cuando la palabra clave nunca se posicionó en la ventana.
GET /api/v1/gsc/properties
Las propiedades de Google Search Console conectadas a tu cuenta, como se muestra en Insights de Search Console. No requiere parámetros.
This reads SignalSumo's synced copy — it does not call Google. last_synced_at le indica cuán reciente es esa copia.
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/gsc/properties"
Respuesta de ejemplo
{
"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 para desglosar los mismos números por página, país, dispositivo o fecha.
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| property_id | entero | Sí | Desde /gsc/properties. Una propiedad que no posees devuelve 404 NOT_FOUND. |
| dim | cadena | No | query (predeterminado), page, country, device, date, searchAppearance |
| from | cadena | No | YYYY-MM-DD, predeterminado hace 28 días |
| to | cadena | No | YYYY-MM-DD, predeterminado hoy |
| sort | cadena | No | clicks (predeterminado), impressions, ctr, position, key |
| dir | cadena | No | desc (predeterminado) o asc |
| limit | entero | No | 1–500, default 100 |
422 VALIDATION_ERROR, pero un no reconocido dim o sort el valor recae silenciosamente al predeterminado en lugar de generar un error. Consulte el dim repetido en data antes de confiar en un desglose.
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/gsc/queries?property_id=31&dim=query&limit=2"
Respuesta de ejemplo
{
"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 siempre cubre todo el período sin importar limit.
GET /api/v1/ai-visibility/projects
Las marcas que sigues en los motores de respuesta de IA, una fila por proyecto, con la puntuación de visibilidad actual y su movimiento. No requiere parámetros. Impulsado por el Comprobador de Visibilidad IA.
Scores are collected by scheduled scans, so this endpoint never calls an AI provider — it returns what the last scan stored.
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/ai-visibility/projects"
Respuesta de ejemplo
{
"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 es null until a project has been scanned at least twice — a first scan has nothing to compare against, and reporting 0 se leería como "sin movimiento".
GET /api/v1/ai-visibility/share-of-voice
Con qué frecuencia los asistentes de IA nombran tu marca frente a los competidores que se rastrean junto a ella, más el desglose completo de métricas del escaneo más reciente.
Parámetros de consulta
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| project_id | entero | Sí | Desde /ai-visibility/projects. Un proyecto que no posee devuelve 404 NOT_FOUND. |
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/ai-visibility/share-of-voice?project_id=9"
Respuesta de ejemplo
{
"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"
}
]
}
}
Dos porcentajes diferentes
Estos son fáciles de confundir y responden a preguntas diferentes:
| Campo | Pregunta que responde |
|---|---|
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 es null antes de que se complete el primer escaneo de un proyecto. competitors devuelve como máximo 20, ordenados por recuento de menciones. brand_share_pct es null when no mentions have been recorded on either side — a share of nothing is not zero percent.
GET /api/v1/keyword-research/locations
Todos los mercados POST /keyword-research acepta, para que puedas descubrir un location_code en lugar de adivinar uno y ganar un 422. No requiere parámetros.
Solicitud de ejemplo
curl -H "Authorization: Bearer ss_live_xxxx" \
"https://signalsumo.com/api/v1/keyword-research/locations"
Respuesta de ejemplo
{
"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."
}
}
Registro de cambios
| Versión | Fecha | Cambios |
|---|---|---|
| v1.2 | Ago 2026 | Documentados los siete endpoints de solo lectura que ya estaban activos: /rank/keywords, /rank/history, /gsc/properties, /gsc/queries, /ai-visibility/projects, /ai-visibility/share-of-voice y /keyword-research/locations. No behaviour changed — these were callable before, just undocumented. Added MCP and LLM client guidance. |
| v1.1 | Jul 2026 | Respuestas de palabra clave y backlinks ampliadas a conjuntos métricos completos (dificultad, intención, tendencia, características SERP, campos de backlinks enriquecidos, visión general y análisis). Los resultados de auditoría del sitio añaden geo_score y recuentos de incidencias. Referencia de ubicación/idioma añadida y detalles de facturación. |
| v1.0 | Jun 2026 | Lanzamiento inicial — uso, backlinks, investigación de palabras clave, auditoría del sitio, trabajos |
¿Preguntas? Correo electrónico [email protected]