Publiczne API daje administratorom organizacji bezpośredni dostęp HTTP do bieżących danych twojej organizacji — pobieraj je do dowolnej strony internetowej, aplikacji, bota lub automatyzacji, która potrafi wykonać żądanie HTTP. To funkcja planu Business.

Klucz jest przypisany do twojej organizacji — wszystkie endpointy działają na tej grupie automatycznie. Bazowy URL: https://api.ludoya.com/public/v1. Nagłówek autoryzacji: X-Api-Key: YOUR_KEY. Limit: 100 żądań na minutę, po którego przekroczeniu otrzymasz 429.
Klucz zaczyna się od ldy_ i ma długość 36 znaków, więc łatwo go zauważyć w pliku konfiguracyjnym — i łatwo go wyszukać, jeśli kiedykolwiek trafi tam, gdzie nie powinien. Traktuj go jak hasło: używaj wyłącznie po stronie serwera i unieważnij go na tej samej stronie, jeśli wycieknie.
Do czego masz dostęp
- Lokalizacje — dostępne dla twojej grupy lokale oraz ich miejsca; używane jako dane wejściowe przy tworzeniu wydarzeń
- Wydarzenia (odczyt) — nadchodzące i minione wydarzenia z tytułem, opisem, datą/godziną, strefą czasową, limitem miejsc, liczbą uczestników i statusem
- Wydarzenia (zapis) — twórz i aktualizuj wydarzenia za pomocą POST i PUT, z pełną kontrolą nad lokalizacją, limitem miejsc, uprawnieniami, widocznością i obrazem
- Podwydarzenia — lista wydarzeń zagnieżdżonych w wydarzeniu nadrzędnym
- Uczestnicy — dodaj kogoś do wydarzenia, zmień jego status obecności lub usuń go
- Członkowie — lista członków z profilami użytkowników i rolami (Właściciel, Administrator, Członek), stronicowana
- Zaproszenia — zaproś kogoś do twojej grupy
- Wyszukiwanie — wyszukuj użytkowników Ludoya oraz katalog gier planszowych, aby przed zapisem móc przypisać nazwy do ID
- Kolekcja — kolekcja gier z filtrowaniem według posiadania, nazwy, liczby graczy i listy; sortowalna i stronicowana; każda gra zawiera metadane z BGG
- Statystyki — statystyki rozgrywek dla dowolnego okresu: sumy, średnie, najlepsi gracze z wygranymi i wynikami, podziały według liczby graczy, według lokalizacji i według gier
- Kampanie (odczyt) — lista kampanii grupy z liczbą członków i sesji; pobieraj pełne szczegóły kampanii, w tym członków, przeszłe sesje i zaplanowane wydarzenia
- Kampanie (zapis) — twórz kampanie dla grupy i aktualizuj ich nazwę, opis, status i widoczność
- Członkowie kampanii — dodawaj, aktualizuj i usuwaj osoby w kampanii
Endpointy
GET /locations
Zwraca dostępne lokalizacje grupy. Każda lokalizacja ma id, name, opcjonalny address, capacity, flagę isDefault oraz tablicę spots (każde miejsce ma własne id, name i capacity). Używaj ID lokalizacji i miejsc podczas tworzenia wydarzeń.
Zaloguj się za pomocą Ludoya
Ta sama strona, na której znajduje się Twój klucz API, zamienia też Twoją organizację w dostawcę logowania. Pozwól ludziom logować się do Twojej własnej witryny, forum lub platformy społecznościowej przy użyciu konta Ludoya — bez osobnego hasła, o którym mogliby zapomnieć, i bez bazy użytkowników, którą musisz prowadzić.
Dlaczego warto
Gdy ktoś zatwierdzi logowanie, zostaje powiązany z Twoją organizacją: w zależności od polityki dołączania do grupy albo od razu staje się członkiem (otwarta), składa prośbę o dołączenie do zatwierdzenia przez administratora (prośba o dołączenie), albo po prostu loguje się bez dołączania (tylko na zaproszenie). W każdym przypadku pojawi się w endpointzie /members jak każdy inny — dzięki temu logowanie na Twojej stronie i lista członków Ludoya pozostają zsynchronizowane automatycznie.
Jak to skonfigurować
To standardowy OpenID Connect, więc większość platform potrzebuje tylko adresu URL wystawcy oraz identyfikatora klienta i tajnego klucza. Zarejestruj swoją aplikację na stronie Public API, aby uzyskać te dane, i podaj URI przekierowania, z których będzie korzystać Twoja strona — możesz zarejestrować kilka, a każde musi odpowiadać redirect_uri wysyłanemu przez Twoją stronę znak w znak, z uwzględnieniem końcowego ukośnika. Drobna niezgodność to najczęstsza przyczyna niepowodzenia pierwszej próby logowania.
- Discourse — zainstaluj wtyczkę OpenID Connect, wklej URL odkrywania, dodaj poświadczenia
- WordPress — dowolna ogólna wtyczka OpenID Connect, używająca opcji "auto discover"
- Inne — jeśli obsługuje OIDC, wskaż URL wystawcy, a skonfiguruje się samo
Każde logowanie zwraca trwały identyfikator osoby, jej nazwę użytkownika, nazwę wyświetlaną i awatar oraz adres e-mail. Pełne instrukcje konfiguracji, w tym ręczny przebieg, znajdziesz w przewodniku dla deweloperów w aplikacji: Deweloperzy → Logowanie za pomocą Ludoya.
Dla osób logujących się
Każdy, kto użył Ludoya do zalogowania się gdzieś, może przejrzeć te połączenia w Ustawienia → Połączone aplikacje, zobaczyć, kiedy każde zostało połączone i kiedy ostatnio użyte, oraz w dowolnym momencie je odłączyć. Odłączenie natychmiast odcina dostęp witryny, ale nie usuwa ich z Twojej grupy.
GET /events
Zwraca przyszłe i przeszłe wydarzenia w oddzielnych paginowanych listach.
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
onlyFuture |
boolean | true |
Ustaw false, aby zwrócić także przeszłe wydarzenia |
Każde wydarzenie zawiera: type (MEETUP lub PLANNED_PLAY), title, description, startsAt, endsAt, timeZone, imageUrl, capacity, participantCount, canceled, teacher (obiekt użytkownika lub null), master (obiekt użytkownika lub null). Obiekty użytkownika zawierają id, username, name, avatarUrl.
POST /events
Tworzy wydarzenie w grupie. Pola wymagane: type i title. Jeśli locationId zostanie pominięty, użyta zostanie domyślna lokalizacja grupy; jeśli żadna nie istnieje, zwraca 400.
Pola opcjonalne obejmują: description, locationId, spotId, gameId, parentEventId (dla podwydarzeń), startsAt, endsAt, restrictedAttendance, capacity, minParticipants, estimatedDurationMinutes, maxReservationsPerUser, takeGamesPermission, organizePlaysPermission, teacherUserId, masterUserId, visibility, image.
Pole image akceptuje {"base64": "data:image/jpeg;base64,..."} or {"url": "https://..."}. Maks. 5 MB.
Zwraca {"id": "string"} ze statusem 201.
PUT /events/{eventId}
Aktualizuje istniejące wydarzenie. Taka sama struktura body jak w POST — uwzględnij tylko pola, które chcesz zmienić. Wywołujący musi być organizatorem wydarzenia (konto grupy). Zwraca 202 z pustym body.
GET /events/{eventId}
Pobiera pojedyncze wydarzenie po ID, o tej samej strukturze co elementy w GET /events.
GET /events/{eventId}/children
Zwraca podwydarzenia zagnieżdżone w wydarzeniu nadrzędnym — poszczególne ścieżki tematyczne lub sesje większego spotkania. Każde podwydarzenie ma taką samą strukturę jak zwykłe wydarzenie.
Zarządzanie uczestnikami
Trzy endpointy pozwalają obsługiwać listę uczestników wydarzenia spoza Ludoya — przydatne, jeśli zapisy odbywają się na twojej własnej stronie internetowej, albo importujesz istniejącą listę.
| Metoda | Ścieżka | Co robi |
|---|---|---|
POST |
`/events/ |
GET /members
Zwraca stronicowaną listę członków.
| Parametr | Typ | Wartość domyślna |
|---|---|---|
pagination.size |
int | 50 |
pagination.offset |
int | 0 |
Każdy członek zawiera: id, username, name, avatarUrl, role (OWNER, ADMIN lub MEMBER).
POST /members/invite
Zaprasza kogoś do twojej grupy. Ten endpoint przyjmuje bezpośrednio username — nie trzeba wyszukiwać ID — dzięki czemu możesz dodawać członków bezpośrednio ze swojej strony lub narzędzia administracyjnego.
GET /search/users i GET /search/boardgames
Dwa endpointy wyszukiwania. Większość operacji zapisu wymaga id zamiast nazwy — w ten sposób je uzyskasz.
GET /search/users
| Parametr | Typ | Domyślnie |
|---|---|---|
query |
ciąg znaków | wymagane |
intent |
ciąg znaków | — |
pagination.size |
liczba całkowita | 20 |
pagination.offset |
liczba całkowita | 0 |
GET /search/boardgames
| Parametr | Typ | Domyślnie |
|---|---|---|
query |
ciąg znaków | wymagane |
filter |
ciąg znaków | — |
pagination.size |
liczba całkowita | 50 |
pagination.offset |
liczba całkowita | 0 |
Filtr gier planszowych przyjmuje tę samą, rozdzielaną średnikami formę key=value co filtr kolekcji, więc możesz przeszukiwać katalog po liczbie graczy, czasie rozgrywki, złożoności, roku, wieku lub tagach.
GET /collection
Zwraca twoją kolekcję gier z filtrowaniem, sortowaniem i stronicowaniem.
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
filter |
string | — | Pary key=value oddzielone średnikami. Klucze: ownership (OWNED, PREVIOUSLY_OWNED, PREORDERED, WISHLISTED), played (boolean), listId, nameFilter, playerCountFilterType (OFFICIAL, GOOD, BEST), playerCountFilter (number) |
groupExpansions |
boolean | true |
Grupuj dodatki pod ich grą podstawową |
sort |
string | — | Format: property,direction — np. name,asc |
pagination |
string | — | Format: size,pageIndex — np. 20,0 |
Odpowiedź: totalGames, totalExpansions, games[] — każdy zawiera: id, slug, name, imageUrl, isExpansion, yearPublished, minPlayerCount, maxPlayerCount.
GET /stats
Zwraca statystyki rozgrywek dla konfigurowalnego okna czasowego.
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
period |
string | ALL_TIME | Format: PERIOD,date,index. Wartości: ALL_TIME, ONE_YEAR, ONE_MONTH, THIRTY_DAYS, SEVEN_DAYS, ONE_DAY, CUSTOM. Parametr index przesuwa okno wstecz (0 = bieżące, 1 = poprzednie). Niestandardowe: CUSTOM,startDate,0,endDate |
Odpowiedź zawiera:
- Podsumowanie — łączna liczba rozgrywek, łączny/średni czas rozgrywki, liczba unikalnych gier, graczy i lokalizacji
- Według gracza — liczba rozgrywek na osobę, zwycięstwa, średni i najlepszy wynik
- Według liczby graczy — podział na gry dla 2, 3, 4 graczy itd.
- Według lokalizacji — liczba rozgrywek i liczba unikalnych gier na lokalizację
- Według gry — liczba rozgrywek, łączny/średni czas rozgrywki oraz liczba unikalnych graczy na tytuł
GET /campaigns
Zwraca stronicowaną listę kampanii należących do grupy.
| Parametr | Typ | Wartość domyślna | Opis |
|---|---|---|---|
status |
string | — | Filtruj według statusu: ACTIVE, COMPLETED lub ARCHIVED |
pagination.size |
int | 50 | Elementów na stronę |
pagination.offset |
int | 0 | Przesunięcie |
Każda kampania zawiera: id, game (id, name, imageUrl), name, image, status, visibility, createdAt, updatedAt, memberCount, sessionCount.
GET /campaigns/{campaignId}
Zwraca pełne szczegóły kampanii należącej do grupy.
Odpowiedź zawiera: Wszystkie pola listy oraz template, description, globalNotes, globalState, members[] (każdy z następującymi polami: user, role, characterNotes, characterState), sessions[] oraz events[].
POST /campaigns
Tworzy kampanię dla grupy. Wymagane pola: gameId i name. Domyślna widoczność to tylko dla członków grupy (ONLY_GROUP), jeśli nie podano.
Pola opcjonalne: templateId, description, visibility (PUBLIC, ONLY_GROUP, ONLY_FRIENDS lub PRIVATE).
Zwraca {"id": "string"} ze statusem 201.
PUT /campaigns/{campaignId}
Aktualizuje istniejącą kampanię. Wszystkie pola są opcjonalne — uwzględnij tylko to, co chcesz zmienić.
Pola opcjonalne: name, description, status (ACTIVE, COMPLETED, ARCHIVED), visibility.
Zwraca 202 z pustą treścią.
Członkowie kampanii
Zarządzaj tym, kto jest w kampanii, w taki sam sposób, w jaki zarządzasz uczestnikami wydarzenia.
| Metoda | Ścieżka | Co robi |
|---|---|---|
POST |
`/campaigns/ |
Kody błędów
| Status | Kiedy |
|---|---|
| 400 | Błąd walidacji (brak wymaganego pola, nie znaleziono lokalizacji, nieprawidłowy obraz) |
| 401 | Brak lub nieprawidłowy klucz API |
| 403 | Działanie niedozwolone lub grupa nie jest w planie Business |
| 404 | Nie znaleziono zasobu |
| 429 | Przekroczono limit żądań |
Pierwsze kroki
1. Wygeneruj klucz API

- Przejdź do strony profilu twojej organizacji
- Stuknij menu (⋮) → API publiczne
- Stuknij Wygeneruj klucz
- Skopiuj swój klucz od razu — jest wyświetlany tylko raz i nie można go później odzyskać
Klucz jest powiązany z twoją organizacją. Zachowaj go w tajemnicy: każdy, kto ma ten klucz, może odczytywać i zapisywać wszystkie powyższe dane.
2. Unieważnij lub wygeneruj ponownie
Aby unieważnić istniejący klucz, wróć na stronę API publiczne i stuknij Unieważnij. Potwierdź okno dialogowe. Każdy system używający starego klucza natychmiast zacznie otrzymywać błędy 401. Aby wygenerować nowy klucz, stuknij ponownie Wygeneruj klucz.
Zobacz także:
- Organizacje — konta organizacji i funkcje premium
- Premium — ceny planu Business
- Integracje — inne sposoby łączenia Ludoya z zewnętrznymi narzędziami