API
Referencia de Endpoints
Documentación detallada de los endpoints de la API
Referencia de Endpoints
POST /api/v1/analyze
Analiza el cumplimiento de cookies de una URL.
Request
POST /api/v1/analyze HTTP/1.1
Host: legalcookies.es
Content-Type: application/json
X-Api-Key: lc_pk_xxxxxxxxxxxxxxxxxxxx
X-Timestamp: 1705500000000
X-Signature: abc123...
{
"url": "https://example.com"
}Parámetros
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
url | string | Sí | URL a analizar (debe ser HTTP/HTTPS) |
Validación de URL
La API valida que la URL sea segura para analizar:
- Solo se permiten protocolos
http://yhttps:// - No se permiten URLs locales (
localhost,127.0.0.1) - No se permiten IPs privadas (10.x.x.x, 172.16-31.x.x, 192.168.x.x)
- No se permiten hostnames internos (
.local,.internal)
Response exitoso (200)
{
"success": true,
"data": {
"reportId": "abc123def456",
"hash": "sha256_del_reporte",
"score": 75,
"zone": "yellow",
"verdict": "Cumplimiento parcial",
"verdictReason": "Se detectaron 3 cookies que requieren consentimiento antes de la interacción del usuario",
"summary": "El sitio presenta un nivel de cumplimiento parcial. Se detectó un CMP (Cookiebot) pero algunas cookies se instalan antes del consentimiento.",
"recommendations": [
"Configurar el CMP para bloquear cookies hasta obtener consentimiento",
"Revisar las cookies de terceros identificadas como problemáticas",
"Actualizar la política de cookies con información detallada"
],
"stats": {
"totalCookies": 15,
"problematicCookies": 3,
"exemptCookies": 5,
"totalStorageItems": 2,
"totalThirdPartyRequests": 8,
"cmpDetected": "Cookiebot",
"analysisDurationMs": 4500
}
}
}Campos de respuesta
| Campo | Tipo | Descripción |
|---|---|---|
reportId | string | ID único del reporte generado |
hash | string | Hash SHA256 para verificación de integridad |
score | number | Puntuación de cumplimiento (0-100) |
zone | string | Zona de riesgo: green, yellow, red |
verdict | string | Veredicto resumido del análisis |
verdictReason | string | Explicación detallada del veredicto |
summary | string | Resumen ejecutivo del estado de cumplimiento |
recommendations | string[] | Lista de recomendaciones de mejora |
stats | object | Estadísticas detalladas del análisis |
Estadísticas (stats)
| Campo | Tipo | Descripción |
|---|---|---|
totalCookies | number | Total de cookies detectadas |
problematicCookies | number | Cookies que requieren consentimiento |
exemptCookies | number | Cookies exentas (estrictamente necesarias) |
totalStorageItems | number | Items en localStorage/sessionStorage |
totalThirdPartyRequests | number | Requests a dominios de terceros |
cmpDetected | string|null | Nombre del CMP detectado o null |
analysisDurationMs | number | Duración del análisis en milisegundos |
Zonas de riesgo
| Zona | Score | Descripción |
|---|---|---|
green | 80-100 | Buen cumplimiento |
yellow | 50-79 | Cumplimiento parcial, requiere atención |
red | 0-49 | Problemas significativos de cumplimiento |
Headers de Rate Limit
La respuesta incluye headers informativos sobre tus límites:
X-RateLimit-Limit-Minute: 3
X-RateLimit-Limit-Hour: 20
X-RateLimit-Limit-Day: 100
X-RateLimit-Limit-Total: 1000
X-RateLimit-Remaining-Minute: 2
X-RateLimit-Remaining-Hour: 19
X-RateLimit-Remaining-Day: 99
X-RateLimit-Remaining-Total: 999Errores
400 Bad Request
{
"success": false,
"error": "Invalid request body",
"code": "INVALID_BODY",
"details": [
{
"code": "invalid_string",
"message": "URL inválida",
"path": ["url"]
}
]
}401 Unauthorized
{
"success": false,
"error": "Invalid signature",
"code": "INVALID_SIGNATURE"
}429 Too Many Requests
{
"success": false,
"error": "Daily limit exceeded",
"code": "LIMIT_EXCEEDED_DAILY",
"retryAfter": 3600
}500 Internal Server Error
{
"success": false,
"error": "Analysis failed",
"code": "ANALYSIS_ERROR"
}Códigos de error
Ver la referencia completa de errores para todos los códigos posibles.
Tiempo de respuesta
El análisis típico tarda entre 5-15 segundos dependiendo de:
- Complejidad del sitio web
- Número de recursos cargados
- Velocidad del servidor destino
Recomendamos configurar un timeout de al menos 30 segundos en tu cliente HTTP.