Saltar al contenido

Idioma

Menú de la documentación

API REST

Gestiona dominios, escaneos y registros de consentimiento por HTTPS, exporta la prueba del consentimiento y recibe webhooks firmados. Errores y límites.

Última actualización: 29 de octubre de 2026

La API REST te permite automatizar todo lo que puedes hacer en el panel: añadir dominios, lanzar escaneos, buscar y exportar registros de consentimiento y recibir webhooks cuando algo cambia. Está disponible en los planes Pro y Enterprise.

Autenticación

Crea una clave de API en Settings → API keys. Cada clave pertenece a un único espacio de trabajo y es de solo lectura o de lectura y escritura. Envía la clave como token bearer:

curl https://api.cookiesh.eu/v1/domains \
  -H "Authorization: Bearer ck_sk_live_..."

Las claves secretas empiezan por ck_sk_. No las uses nunca en código del navegador. La etiqueta script solo necesita tu Site ID público.

Todas las solicitudes usan HTTPS y JSON. La URL base es https://api.cookiesh.eu/v1. Las marcas de tiempo son cadenas ISO 8601 en UTC.

Endpoints

Método Ruta Descripción
GET /domains Lista los dominios del espacio de trabajo
POST /domains Añade un dominio
GET /domains/{id} Obtiene un dominio y su configuración
DELETE /domains/{id} Elimina un dominio
POST /domains/{id}/scans Lanza un escaneo de cookies
GET /domains/{id}/scans/{scan_id} Obtiene el estado y los resultados de un escaneo
GET /domains/{id}/cookies Lista las cookies y los rastreadores clasificados
GET /consents Busca registros de consentimiento
GET /consents/{consent_id} Obtiene un registro de consentimiento con su prueba de la cadena de hashes
POST /exports Inicia una exportación de registros de consentimiento en CSV o JSON
GET /exports/{id} Obtiene el estado de una exportación y su URL de descarga
DELETE /subjects/{user_id} Elimina todos los registros de consentimiento vinculados a un ID de usuario

Ejemplo: buscar los registros de consentimiento de un visitante.

curl "https://api.cookiesh.eu/v1/consents?domain_id=dom_29xk&consent_id=cns_8Hq2Lw" \
  -H "Authorization: Bearer ck_sk_live_..."
{
  "data": [
    {
      "id": "cns_8Hq2Lw",
      "domain_id": "dom_29xk",
      "created_at": "2026-10-12T09:41:07Z",
      "region": "DE",
      "method": "banner",
      "banner_version": "v14",
      "categories": { "necessary": true, "preferences": false, "analytics": true, "marketing": false },
      "hash": "9f2c…e71a"
    }
  ],
  "next_cursor": null
}

Paginación

Los endpoints de listado devuelven hasta 100 elementos. Pasa limit para pedir menos. Si hay más resultados, la respuesta incluye un next_cursor. Devuélvelo como cursor para obtener la página siguiente. Los cursores son válidos durante 24 horas.

Errores

Los errores usan los códigos de estado HTTP estándar y un cuerpo con formato uniforme:

{
  "error": {
    "type": "invalid_request",
    "message": "domain_id is required",
    "request_id": "req_4Kd92"
  }
}
Estado Significado
400 La solicitud no es válida. El mensaje explica el motivo.
401 Falta la clave de API o no es válida.
403 La clave es de solo lectura o tu plan no incluye esta función.
404 El recurso no existe en este espacio de trabajo.
429 Has alcanzado el límite de solicitudes. Vuelve a intentarlo tras los segundos indicados en Retry-After.
5xx Algo ha fallado por nuestra parte. Vuelve a intentarlo con espera exponencial.

Incluye el request_id cuando te pongas en contacto con soporte.

Límites de solicitudes

Los espacios de trabajo Pro pueden hacer 600 solicitudes por minuto, y los Enterprise, 3.000. Cada respuesta incluye las cabeceras RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset. Las exportaciones no cuentan para el límite mientras se ejecutan.

Webhooks

Añade un endpoint en Settings → Webhooks y elige los eventos que quieres recibir:

Evento Se envía cuando
consent.created Un visitante guarda una nueva elección
consent.updated Un visitante cambia una elección anterior
scan.completed Termina un escaneo de cookies
scan.new_items Un escaneo encuentra cookies o rastreadores que requieren revisión
usage.threshold El espacio de trabajo alcanza el 80 % o el 100 % de sus registros de consentimiento mensuales

Cada entrega es un POST con un cuerpo JSON y una cabecera Cookiesh-Signature. La cabecera contiene una marca de tiempo y una firma HMAC-SHA256 de timestamp.body, generada con el secreto de firma de tu endpoint. Verifícala antes de fiarte de la carga útil:

import crypto from 'node:crypto';

export function verify(rawBody: string, header: string, secret: string): boolean {
  const { t, v1 } = Object.fromEntries(header.split(',').map((part) => part.split('=')));
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // rechaza las entregas antiguas
  const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}

Responde con un estado 2xx en menos de 10 segundos. Las entregas fallidas se reintentan con espera exponencial durante un máximo de 24 horas. Un mismo evento puede llegar más de una vez, así que usa su id para descartar duplicados.