Manual programisty: Publiczne API v1

Dokumentacja API tylko do odczytu z listą aktywnych webinarów i aktywnych kursów platformy szkoleniowej.

GET application/json Auth: nagłówek X-API-Key

1. Informacje ogólne

Adres bazowyhttps://TWOJA-DOMENA/api/public/v1
Metoda HTTPGET
Format odpowiedziapplication/json
KodowanieUTF-8
WersjonowanieWersja jest w ścieżce (/v1/). Zmiany łamiące trafią do /v2/, a /v1/ zostanie niezmienione.

Adres TWOJA-DOMENA to domena instancji (ta sama, na której działa strona zapisu). API jest wyłącznie do odczytu: nie tworzy ani nie zmienia danych.

2. Autoryzacja

Klucz API należy przesłać w nagłówku HTTP X-API-Key. Klucz generuje administrator w panelu (Ustawienia → Klucze API) i przekazuje go odbiorcy.

X-API-Key: TWOJ_KLUCZ_API
Klucz jest pokazywany jeden raz – w chwili wygenerowania. W bazie przechowywany jest wyłącznie jego skrót (SHA-256), więc klucza nie da się odczytać ponownie. Jeśli zostanie zgubiony, wygeneruj nowy i usuń stary.

Można wydać wiele kluczy dla różnych odbiorców i wyłączać je niezależnie. Wyłączenie lub usunięcie klucza odbiera dostęp natychmiast.

3. Endpoint: aktywne webinary

AdresGET /api/public/v1/webinars
ZwracaTablicę JSON aktywnych webinarów (opublikowane i jeszcze niezakończone), posortowaną według daty rozpoczęcia rosnąco.

Pola pozycji

PoleTypOpis
slugstringIdentyfikator w adresie strony zapisu.
titlestringTytuł webinaru.
descriptionstring / nullKrótki opis (zajawka). Bez znaczników HTML.
startsAtstring (ISO 8601)Termin rozpoczęcia z przesunięciem strefy, np. 2026-09-17T09:00:00+02:00.
endsAtstring (ISO 8601)Termin zakończenia.
timezonestringStrefa czasowa webinaru, np. Europe/Warsaw.
registrationOpenbooleanIntencja organizatora co do otwarcia zapisów.
capacityinteger / nullLimit miejsc. null oznacza brak limitu.
registeredCountintegerLiczba zajętych miejsc (bez rezygnacji).
registrationUrlstring / nullPełny adres strony zapisu. null, gdy w instancji nie ustawiono publicznego adresu.

4. Endpoint: aktywne kursy

AdresGET /api/public/v1/courses
ZwracaTablicę JSON opublikowanych kursów, w kolejności ustalonej przez administratora.

Pola pozycji

PoleTypOpis
slugstringIdentyfikator w adresie strony kursu.
titlestringTytuł kursu.
subtitlestring / nullPodtytuł.
descriptionstring / nullKrótki opis.
categorystring / nullKategoria kursu.
levelstring / nullPoziom: BASIC, INTERMEDIATE lub ADVANCED.
durationMinutesinteger / nullŁączny czas materiału w minutach. null, gdy nie podano.
freebooleantrue dla kursu bezpłatnego.
priceGrossnumber / nullCena brutto. null dla kursu darmowego.
currencystringWaluta ceny, np. PLN.
enrolledCountintegerLiczba kursantów (zapisy aktywne i ukończone).
courseUrlstring / nullPełny adres strony kursu. null, gdy nie ustawiono publicznego adresu.

5. Przykład zapytania (cURL)

curl -X GET "https://TWOJA-DOMENA/api/public/v1/webinars" \
  -H "X-API-Key: TWOJ_KLUCZ_API"
curl -X GET "https://TWOJA-DOMENA/api/public/v1/courses" \
  -H "X-API-Key: TWOJ_KLUCZ_API"

6. Przykład zapytania (JavaScript / fetch)

const response = await fetch("https://TWOJA-DOMENA/api/public/v1/webinars", {
  method: "GET",
  headers: { "X-API-Key": "TWOJ_KLUCZ_API" }
});

if (!response.ok) {
  throw new Error("API zwrocilo status " + response.status);
}

const webinars = await response.json();
console.log(webinars.length, "aktywnych webinarow");

7. Przykład zapytania (PHP)

<?php
$ch = curl_init("https://TWOJA-DOMENA/api/public/v1/courses");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: TWOJ_KLUCZ_API"]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status === 200) {
    $courses = json_decode($body, true);
    foreach ($courses as $course) {
        echo $course["title"] . "\n";
    }
}

8. Odpowiedzi API

8.1 Sukces (HTTP 200) – webinary

[
  {
    "slug": "audyt-sieci-20260917",
    "title": "Audyt bezpieczenstwa sieci",
    "description": "Jak wykryc luki, zanim zrobi to ktos inny.",
    "startsAt": "2026-09-17T09:00:00+02:00",
    "endsAt": "2026-09-17T10:30:00+02:00",
    "timezone": "Europe/Warsaw",
    "registrationOpen": true,
    "capacity": 100,
    "registeredCount": 42,
    "registrationUrl": "https://TWOJA-DOMENA/w/audyt-sieci-20260917"
  }
]

8.2 Sukces (HTTP 200) – kursy

[
  {
    "slug": "podstawy-eksploatacji",
    "title": "Podstawy eksploatacji sieci wodociagowej",
    "subtitle": "Kurs dla poczatkujacych",
    "description": "Od podstaw do samodzielnej pracy.",
    "category": "Eksploatacja",
    "level": "BASIC",
    "durationMinutes": 180,
    "free": false,
    "priceGross": 490.00,
    "currency": "PLN",
    "enrolledCount": 128,
    "courseUrl": "https://TWOJA-DOMENA/kurs/podstawy-eksploatacji"
  }
]

Brak pozycji zwraca pustą tablicę [] ze statusem 200 – to nie jest błąd.

8.3 Błędy

Ciało błędu ma postać { "message": "...", "fields": {} }.

HTTPKomunikatZnaczenie
401Nieprawidłowy lub brakujący klucz API.Brak nagłówka X-API-Key, pusty, błędny albo wyłączony klucz. Jeden komunikat dla wszystkich tych przypadków.
404Nie znaleziono zasobu pod tym adresem.Zły adres endpointu.
405Metoda ... nie jest obsługiwana pod tym adresem.Użyto innej metody niż GET.

9. Dobre praktyki po stronie klienta

10. Checklista testów integracyjnych