API REST
Gestisci domini, scansioni e record di consenso via HTTPS, esporta la prova del consenso e ricevi webhook firmati. Autenticazione, paginazione, errori e limiti.
Ultimo aggiornamento: 29 ottobre 2026
L’API REST ti permette di automatizzare tutto ciò che puoi fare nella dashboard: aggiungere domini, avviare scansioni, cercare ed esportare record di consenso e ricevere webhook quando qualcosa cambia. È disponibile con i piani Pro ed Enterprise.
Autenticazione
Crea una chiave API in Settings → API keys. Le chiavi valgono per un solo workspace e sono di sola lettura oppure di lettura e scrittura. Invia la chiave come bearer token:
curl https://api.cookiesh.eu/v1/domains \
-H "Authorization: Bearer ck_sk_live_..."
Le chiavi segrete iniziano con ck_sk_. Non usarle mai nel codice eseguito nel browser. Al tag script basta il tuo Site ID pubblico.
Tutte le richieste usano HTTPS e JSON. L’URL di base è https://api.cookiesh.eu/v1. Le marche temporali sono stringhe ISO 8601 in UTC.
Endpoint
| Metodo | Percorso | Descrizione |
|---|---|---|
GET |
/domains |
Elenca i domini del workspace |
POST |
/domains |
Aggiunge un dominio |
GET |
/domains/{id} |
Restituisce un dominio e le sue impostazioni |
DELETE |
/domains/{id} |
Rimuove un dominio |
POST |
/domains/{id}/scans |
Avvia una scansione dei cookie |
GET |
/domains/{id}/scans/{scan_id} |
Restituisce stato e risultati di una scansione |
GET |
/domains/{id}/cookies |
Elenca i cookie e i tracker classificati |
GET |
/consents |
Cerca i record di consenso |
GET |
/consents/{consent_id} |
Restituisce un record di consenso con la prova della catena di hash |
POST |
/exports |
Avvia un’esportazione in CSV o JSON dei record di consenso |
GET |
/exports/{id} |
Restituisce lo stato di un’esportazione e l’URL di download |
DELETE |
/subjects/{user_id} |
Elimina tutti i record di consenso collegati a un ID utente |
Esempio: trovare i record di consenso di un visitatore.
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
}
Paginazione
Gli endpoint di elenco restituiscono fino a 100 elementi. Passa limit per riceverne di meno. Se ci sono altri risultati, la risposta include un next_cursor. Rimandalo come cursor per ottenere la pagina successiva. I cursori restano validi per 24 ore.
Errori
Gli errori usano i codici di stato HTTP standard e un corpo sempre uguale:
{
"error": {
"type": "invalid_request",
"message": "domain_id is required",
"request_id": "req_4Kd92"
}
}
| Stato | Significato |
|---|---|
400 |
La richiesta non è valida. Il messaggio spiega il motivo. |
401 |
La chiave API manca o non è valida. |
403 |
La chiave è di sola lettura, oppure il tuo piano non include questa funzionalità. |
404 |
La risorsa non esiste in questo workspace. |
429 |
Hai raggiunto il limite di richieste. Riprova dopo il numero di secondi indicato in Retry-After. |
5xx |
Qualcosa non ha funzionato da parte nostra. Riprova con un backoff esponenziale. |
Indica il request_id quando contatti il supporto.
Limiti di richieste
I workspace Pro possono effettuare 600 richieste al minuto, quelli Enterprise 3.000. Ogni risposta include le intestazioni RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset. Le esportazioni in corso non vengono conteggiate nel limite.
Webhook
Aggiungi un endpoint in Settings → Webhooks e scegli gli eventi da ricevere:
| Evento | Inviato quando |
|---|---|
consent.created |
Un visitatore salva una nuova scelta |
consent.updated |
Un visitatore modifica una scelta precedente |
scan.completed |
Una scansione dei cookie termina |
scan.new_items |
Una scansione trova cookie o tracker da verificare |
usage.threshold |
Il workspace raggiunge l’80% o il 100% dei log di consenso mensili |
Ogni consegna è una richiesta POST con un corpo JSON e un’intestazione Cookiesh-Signature. L’intestazione contiene una marca temporale e una firma HMAC-SHA256 di timestamp.body, generata con il segreto di firma del tuo endpoint. Verificala prima di fidarti del payload:
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; // rifiuta le consegne vecchie
const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
Rispondi con uno stato 2xx entro 10 secondi. Le consegne non riuscite vengono ritentate con backoff esponenziale per un massimo di 24 ore. Gli eventi possono arrivare più di una volta, quindi usa l’id dell’evento per ignorare i duplicati.