Legal Cookies
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

CampoTipoRequeridoDescripción
urlstringURL 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:// y https://
  • 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

CampoTipoDescripción
reportIdstringID único del reporte generado
hashstringHash SHA256 para verificación de integridad
scorenumberPuntuación de cumplimiento (0-100)
zonestringZona de riesgo: green, yellow, red
verdictstringVeredicto resumido del análisis
verdictReasonstringExplicación detallada del veredicto
summarystringResumen ejecutivo del estado de cumplimiento
recommendationsstring[]Lista de recomendaciones de mejora
statsobjectEstadísticas detalladas del análisis

Estadísticas (stats)

CampoTipoDescripción
totalCookiesnumberTotal de cookies detectadas
problematicCookiesnumberCookies que requieren consentimiento
exemptCookiesnumberCookies exentas (estrictamente necesarias)
totalStorageItemsnumberItems en localStorage/sessionStorage
totalThirdPartyRequestsnumberRequests a dominios de terceros
cmpDetectedstring|nullNombre del CMP detectado o null
analysisDurationMsnumberDuración del análisis en milisegundos

Zonas de riesgo

ZonaScoreDescripción
green80-100Buen cumplimiento
yellow50-79Cumplimiento parcial, requiere atención
red0-49Problemas 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: 999

Errores

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.