CookieBanerPro

Dokumentacja API

Wersja 1 · dla agencji, generatorów stron i firm z wieloma witrynami · plan Enterprise

API pozwala zakładać strony z gotowym banerem zgody prosto z Twojego systemu - na przykład w chwili, gdy generator stron tworzy witrynę klienta. Jednym zapytaniem zakładasz stronę, ustawiasz podstawowy wygląd i teksty, publikujesz baner i dostajesz kod do wstawienia w <head>. Pełna konfiguracja (lista ciasteczek, kategorie, Consent Mode, rejestr zgód, dokumenty) zostaje w panelu.

Szybki start
Klucze i uwierzytelnianie
Zakładanie strony
Pola konfiguracji
Zmiany i publikacja
Lista i szczegóły
Klient agencji
Statystyki
Błędy i limity
OpenAPI

Szybki start

  1. Plan Enterprise włączamy po rozmowie - napisz do nas.
  2. W panelu wejdź w Ustawienia konta - API i utwórz klucz. Skopiuj go od razu - pokazujemy go tylko raz.
  3. Załóż pierwszą stronę:
curl -X POST https://cookiebanerpro.pl/api/v1/sites \
  -H "Authorization: Bearer cbp_live_TWOJ_KLUCZ" \
  -H "Content-Type: application/json" \
  -d '{"domain": "sklep-klienta.pl", "externalId": "projekt-1001"}'

W odpowiedzi dostajesz stronę z opublikowanym banerem i gotowym kodem instalacyjnym w polu site.install.html. Wstaw go jak najwyżej w <head> każdej podstrony - i gotowe.

Klucze i uwierzytelnianie

Adres bazowy: https://cookiebanerpro.pl/api/v1. Każde zapytanie wysyła klucz w nagłówku:

Authorization: Bearer cbp_live_...

GET/me - sprawdzenie klucza: konto, plan, limity i zużycie.

Zakładanie strony

POST/sites

{
  "domain": "sklep-klienta.pl",
  "name": "Sklep Kowalskich",
  "externalId": "projekt-1001",
  "lang": "pl",
  "template": "light",
  "style": "box",
  "image": true,
  "colors": { "primary": "#1E2B2F", "background": "#FFFFFF", "text": "#3A4A4F" },
  "texts": { "title": "Szanujemy Twoją prywatność" },
  "policyUrl": "https://sklep-klienta.pl/polityka-cookies",
  "rejectButton": true,
  "publish": true,
  "clientEmail": "wlasciciel@sklep-klienta.pl",
  "clientAccess": "odczyt"
}

Wymagane jest tylko domain (z https://, www. i ścieżką też zadziała - zapiszemy samą domenę). Pozostałe pola są opcjonalne.

PoleOpis
externalIdTwój identyfikator projektu. Gdy zapytanie powtórzy się z tym samym externalId (np. po błędzie sieci), nie założymy drugiej strony - oddamy istniejącą z "existing": true i statusem 200.
langJęzyk tekstów baneru: pl (domyślnie), en, de, uk. Ustawiany przy zakładaniu.
templatelight (domyślnie), dark albo site:{id} - kopia opublikowanego wyglądu strony wzorcowej z Twojego konta. Tak ustawisz pełny, firmowy wygląd raz w panelu i użyjesz go dla każdej nowej strony.
publishtrue (domyślnie) - baner od razu działa po wstawieniu kodu. false - zapisujemy tylko szkic.
clientEmail, clientAccessZaproszenie właściciela strony do panelu - zobacz Klient agencji.

Odpowiedź 201:

{
  "site": {
    "id": "4f1c...e9", "key": "k3x9a1b2c3d4", "domain": "sklep-klienta.pl",
    "name": "Sklep Kowalskich", "externalId": "projekt-1001", "createdVia": "api",
    "published": true, "version": 1, "publishedAt": "2026-10-02T10:15:00.000Z",
    "settings": { "style": "box", "image": true, "colors": {...}, "texts": {...},
                  "policyUrl": "https://...", "rejectButton": true, "enabled": true },
    "install": {
      "scriptUrl": "https://cookiebanerpro.pl/c/k3x9a1b2c3d4.js",
      "html": "<script>window.dataLayer = ... </script>\n<script src=\"...\" async></script>",
      "gtm": { "tagType": "Custom HTML", "trigger": "Consent Initialization - All Pages", "html": "..." }
    },
    "panelUrl": "https://cookiebanerpro.pl/panel#strona=4f1c...e9"
  }
}

Kod z install.html ustawia też domyślne zgody Google Consent Mode v2 (wszystko odrzucone do decyzji odwiedzającego). Jeśli strona korzysta z Google Tag Managera, zaimportuj szablon tagu cookiebanerpro.tpl i dodaj tag „CookieBanerPro - baner zgody” z kluczem strony i regułą Consent Initialization - All Pages. Tag Niestandardowy HTML nie gwarantuje, że domyślne zgody zadziałają przed innymi tagami.

Pola konfiguracji

Te same pola przyjmuje zakładanie strony i jej zmiana.

PoleWartości
stylebox - karta w rogu, bar - pasek na dole, popup - okno na środku
imagetrue - z grafiką ciastka, false - sam tekst
colors.primaryKolor przycisku zgody, linków i przełączników, #RRGGBB. Kolor tekstu na przycisku dobieramy sami (jasny albo ciemny).
colors.background, colors.textTło i tekst baneru, #RRGGBB
texts.titleNagłówek, do 120 znaków
texts.messageTreść, zwykły tekst do 1500 znaków. Pusta linia zaczyna nowy akapit. HTML nie jest interpretowany.
texts.accept, texts.reject, texts.customise, texts.policyLabelNapisy przycisków i linku do polityki, do 60 znaków
policyUrlAdres polityki cookies (https://...); null usuwa link
rejectButtontrue - przycisk odmowy w pierwszym widoku (zalecane), false - ukryty
enabledfalse wyłącza wyświetlanie baneru bez usuwania kodu
Lista ciasteczek, kategorie, rejestr zgód, ustawienia Consent Mode, wykluczone podstrony i generator dokumentów są dostępne w panelu. Kategorie i opisy dostaje każda nowa strona automatycznie, a ciasteczka wykrywa sam baner po instalacji.

Zmiany i publikacja

PATCH/sites/{id} - zmienia pola konfiguracji oraz name i externalId. Domyślnie od razu publikuje; z "publish": false zmienia tylko szkic.

curl -X PATCH https://cookiebanerpro.pl/api/v1/sites/4f1c...e9 \
  -H "Authorization: Bearer cbp_live_TWOJ_KLUCZ" -H "Content-Type: application/json" \
  -d '{"colors": {"primary": "#E85D04"}, "texts": {"accept": "Zgadzam się"}}'

POST/sites/{id}/publish - publikuje szkic (np. po zmianach z "publish": false albo w panelu).

DELETE/sites/{id} - usuwa stronę razem z banerem, statystykami i rejestrem zgód. Kod na stronie przestaje wyświetlać baner. Odpowiedź 204.

Lista i szczegóły

GET/sites?externalId=projekt-1001 - lista stron konta, od najnowszych. Filtry: externalId, domain; stronicowanie: page, limit (do 100). Odpowiedź zawiera total.

GET/sites/{id} - szczegóły strony z bieżącymi ustawieniami i kodem instalacyjnym.

GET/templates - dostępne szablony.

Klient agencji

Właściciel strony może dostać własny dostęp do panelu - tylko do swojej strony. Podaj clientEmail przy zakładaniu strony albo wyślij zaproszenie później:

POST/sites/{id}/client z treścią {"email": "wlasciciel@sklep.pl", "access": "odczyt"}

Statystyki

GET/sites/{id}/stats?days=30 - odsłony i decyzje dzień po dniu (do 365 dni) oraz podsumowanie z odsetkiem zgód (acceptRate, w procentach).

Błędy i limity

Błędy mają postać {"error": {"code": "...", "message": "..."}}.

StatusKodKiedy
400invalid_jsonTreść zapytania nie jest obiektem JSON
401unauthorizedBrak, zły albo unieważniony klucz
403plan_required, site_limitKonto bez planu Enterprise; osiągnięty limit stron z umowy
404site_not_found, not_foundNie ma takiej strony na koncie albo takiego adresu
409domain_exists, external_id_existsDomena albo externalId jest już na koncie (w odpowiedzi siteId)
422validation_failedBłędne pola - wszystkie naraz w error.fields
429rate_limitedPonad 120 zapytań na minutę na klucz - spróbuj po minucie

Limity stron i odsłon wynikają z umowy Enterprise - sprawdzisz je w GET /me.

OpenAPI i przykłady

Pełna specyfikacja w formacie OpenAPI 3.1: /api/v1/openapi.json - wczytasz ją do Postmana, Insomnii albo generatora klienta.

PHP

$ch = curl_init('https://cookiebanerpro.pl/api/v1/sites');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('CBP_API_KEY'), 'Content-Type: application/json'],
  CURLOPT_POSTFIELDS => json_encode(['domain' => $domena, 'externalId' => (string) $projektId, 'template' => 'site:' . $idWzorca]),
]);
$odp = json_decode(curl_exec($ch), true);
$kod = $odp['site']['install']['html']; // wstaw do <head> strony klienta

JavaScript (Node.js)

const r = await fetch('https://cookiebanerpro.pl/api/v1/sites', {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.CBP_API_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ domain, externalId: String(projektId), lang: 'pl' }),
});
const { site, error } = await r.json();
if (error) throw new Error(error.message);
console.log(site.install.html);
Plan Enterprise - API, setki stron na jednym koncie, limity z umowy, rejestr zgód do 3 lat i faktura. Wycena indywidualna. Porozmawiajmy →