API de SEO Report
Lanza la misma auditoría del informe web desde tu aplicación: SEO técnico, rendimiento, contenido, competencia, autoridad, visibilidad en IA y recomendaciones, en JSON.
Autenticación
Envía tu clave en la cabecera Authorization de cada petición. Las claves se crean en Panel → API; solo necesitas una cuenta gratuita.
Cabecera
Authorization: Bearer sr_live_xxxxxxxxxxxxxxxxxxxxxxxx
Endpoint
https://seoreport.es/api/v1/analyze
Cuerpo en JSON con un único campo:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
url | string | Sí | Página a analizar. Si no lleva protocolo se usa https://. |
La respuesta tarda entre 20 y 80 segundos: usa un timeout de al menos 90 s.
Respuesta
200 OK · application/json
{
"cached": false,
"report_id": "api_686a...",
"result": {
"url": "https://ejemplo.com",
"domain": "ejemplo.com",
"analyzed_at": "2026-10-12T12:00:00+02:00",
"overall_score": 72,
"score_breakdown": {
"technical": 80,
"keywords": 70,
"ai_visibility": 60,
"backlinks": 55
},
"technical": { ... },
"backlinks": { ... },
"keywords": { ... },
"competitors": { ... },
"ai_visibility": { ... },
"recommendations": { ... },
"page_info": {
"title": "Ejemplo — Mi Web",
"final_url": "https://ejemplo.com/",
"load_time_ms": 843,
"page_size_kb": 124.5,
"https": true
},
"notices": [], // partes omitidas, si las hay
"ai_narrative": { ... }
}
}
Con "cached": true el resultado viene de un análisis de la misma URL de las últimas 24 horas: no gasta cupo.
Errores
Los errores devuelven {"error": "mensaje"} con estos códigos:
| Código | Motivo |
|---|---|
400 | Falta url, o no es una dirección pública válida |
401 | Clave ausente, incorrecta o revocada |
405 | Método distinto de POST |
422 | No se pudo acceder a la página |
429 | Límite diario alcanzado o demasiados análisis a la vez |
500 | Error interno: vuelve a intentarlo más tarde |
Ejemplos
cURL
curl -X POST https://seoreport.es/api/v1/analyze \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sr_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{"url": "https://tuwebsite.com"}'
PHP
<?php
$response = file_get_contents('https://seoreport.es/api/v1/analyze', false,
stream_context_create(['http' => [
'method' => 'POST',
'header' => "Content-Type: application/json\r\nAuthorization: Bearer sr_live_xxxx",
'content' => json_encode(['url' => 'https://tuwebsite.com']),
'timeout' => 90,
]])
);
$data = json_decode($response, true);
echo $data['result']['overall_score']; // 72
JavaScript
const res = await fetch('https://seoreport.es/api/v1/analyze', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sr_live_xxxx'
},
body: JSON.stringify({ url: 'https://tuwebsite.com' })
});
const data = await res.json();
console.log(data.result.overall_score); // 72
Python
import requests
response = requests.post(
'https://seoreport.es/api/v1/analyze',
headers={'Authorization': 'Bearer sr_live_xxxx'},
json={'url': 'https://tuwebsite.com'},
timeout=90
)
data = response.json()
print(data['result']['overall_score']) # 72
Límites
La API es gratuita y comparte el cupo de tu cuenta: 10 análisis nuevos al día, como máximo 2 a la vez. Los resultados servidos desde caché no cuentan.
Si un día se agota el presupuesto global de alguna fuente (IA, búsqueda o PageSpeed), el informe omite esa parte y lo explica en result.notices; nunca devuelve datos vacíos como si fueran reales.