Det offentlige API giver organisationsadministratorer direkte HTTP-adgang til jeres organisations live-data — hent den ind i enhver hjemmeside, app, bot eller automatisering, der kan lave et HTTP-kald. Det er en funktion i Club-planen.

Siden Offentlig API: generér en API-nøgle til organisationen, og slå Log ind med Ludoya til

Nøglen gælder kun jeres organisation — alle endpoints arbejder automatisk på den gruppe. Base-URL: https://api.ludoya.com/public/v1. Auth-header: X-Api-Key: DIN_NØGLE. Grænserne afhænger af planen: Club-nøgler tillader 30 kald i minuttet og 2.000 om dagen, Business-nøgler 100 i minuttet uden dagligt loft; derover får du en 429.

Kører du WordPress? Så behøver du slet ikke røre API'et: det gratis Ludoya-plugin viser jeres arrangementer på jeres egen side og lader jer oprette og redigere dem fra WordPress-administrationen med den samme nøgle.

Nøgler begynder med ldy_ og er 36 tegn lange, så de er lette at få øje på i en konfigurationsfil — og lette at scanne efter, hvis en engang ender et forkert sted. Behandl den som en adgangskode: kun på serversiden, og tilbagekald den fra den samme side, hvis den lækker.

Hvad du har adgang til

  • Steder — din gruppes tilgængelige lokaler og deres pladser; bruges som input, når du opretter arrangementer
  • Arrangementer (læs) — kommende og tidligere arrangementer med titel, beskrivelse, dato/tid, tidszone, kapacitet, deltagerantal og status
  • Arrangementer (skriv) — opret og opdatér arrangementer via POST og PUT, med fuld kontrol over sted, kapacitet, rettigheder, synlighed og billede
  • Underarrangementer — vis de arrangementer, der ligger inde i et overordnet arrangement
  • Deltagere — føj nogen til et arrangement, ændr deres fremmøde, eller fjern dem
  • Medlemmer — medlemsliste med brugerprofiler og roller (Ejer, Administrator, Medlem), pagineret
  • Invitationer — invitér nogen ind i din gruppe
  • Søgning — slå Ludoya-brugere og brætspilskataloget op, så du kan omsætte navne til ID'er, inden du skriver
  • Samling — spilsamling med filtrering på ejerskab, navn, antal spillere og liste; sorterbar og pagineret; hvert spil indeholder BGG-metadata
  • Statistik — spilstatistik for en vilkårlig periode: totaler, gennemsnit, topspillere med sejre og point, opdelinger pr. antal spillere, pr. sted og pr. spil
  • Kampagner (læs) — vis gruppens kampagner med antal medlemmer og sessioner; hent fulde kampagnedetaljer inklusive medlemmer, tidligere sessioner og planlagte arrangementer
  • Kampagner (skriv) — opret kampagner for gruppen, og opdatér deres navn, beskrivelse, status og synlighed
  • Kampagnemedlemmer — tilføj, opdatér og fjern personerne i en kampagne

Endpoints

GET /locations

Returnerer gruppens tilgængelige steder. Hvert sted har et id, name, valgfri address, capacity, et isDefault-flag og et spots-array (hver plads har sit eget id, name og capacity). Brug sted- og plads-ID'er, når du opretter arrangementer.

Log ind med Ludoya

Den samme side, der rummer din API-nøgle, gør også din organisation til en login-udbyder. Lad folk logge ind på dit eget websted, forum eller community med deres Ludoya-konto — ingen separat adgangskode, de kan glemme, og ingen brugerdatabase, du skal drive.

Hvorfor det er det værd

Når nogen godkender login, bliver de tilknyttet din organisation: afhængigt af din gruppes optagelsespolitik bliver de medlem med det samme (åben), sender en anmodning om medlemskab, som en administrator godkender (ansøgning kræves), eller logger blot ind uden at melde sig ind (kun invitation). Uanset hvad dukker de op i /members-endpointet som alle andre — så dit websteds login og din Ludoya-medlemsliste holdes automatisk i takt.

Sådan sætter du det op

Det er almindelig OpenID Connect, så de fleste platforme skal ikke bruge andet end en issuer-URL plus et client ID og en hemmelighed. Registrér din applikation fra siden Offentlig API for at få de oplysninger, og angiv de redirect-URI'er, dit site vil bruge — du kan registrere flere, og hver af dem skal matche den redirect_uri, dit site sender, tegn for tegn, inklusive afsluttende skråstreg. Et næsten-match er den suverænt hyppigste grund til, at et første login-forsøg fejler.

  • Discourse — installér OpenID Connect-plugin'et, indsæt discovery-URL'en, tilføj oplysningerne
  • WordPress — et hvilket som helst generisk OpenID Connect-plugin med dets "auto discover"-mulighed
  • Alt andet — hvis det taler OIDC, så peg det mod issuer-URL'en, og det konfigurerer sig selv

Hvert login returnerer personens permanente identifikator, brugernavn, visningsnavn og avatar samt e-mail. Fulde opsætningsinstruktioner, inklusive flowet i hånden, findes i udviklerguiden i appen under Developers → Sign in with Ludoya.

For dem, der logger ind

Enhver, der har brugt Ludoya til at logge ind et sted, kan gennemgå de forbindelser under Indstillinger → Tilsluttede apps, se hvornår hver enkelt blev tilsluttet og sidst brugt, og afbryde en hvilken som helst af dem når som helst. At afbryde forbindelsen afskærer webstedets adgang med det samme, men fjerner dem ikke fra din gruppe.

GET /events

Returnerer fremtidige og tidligere arrangementer i separate paginerede lister.

Parameter Type Standard Beskrivelse
onlyFuture boolean true Sæt false for også at returnere tidligere arrangementer

Hvert arrangement indeholder: type (MEETUP eller PLANNED_PLAY), title, description, startsAt, endsAt, timeZone, imageUrl, capacity, participantCount, canceled, teacher (brugerobjekt eller null), master (brugerobjekt eller null). Brugerobjekter indeholder id, username, name, avatarUrl.

POST /events

Opretter et arrangement i gruppen. Påkrævede felter: type og title. Udelades locationId, bruges gruppens standardsted; findes der intet, returneres 400.

Valgfrie felter omfatter: description, locationId, spotId, gameId, parentEventId (til underarrangementer), startsAt, endsAt, restrictedAttendance, capacity, minParticipants, estimatedDurationMinutes, maxReservationsPerUser, takeGamesPermission, organizePlaysPermission, teacherUserId, masterUserId, visibility, image.

Feltet image accepterer enten {"base64": "data:image/jpeg;base64,..."} or {"url": "https://..."}. Maks. 5 MB.

Returnerer {"id": "string"} med status 201.

PUT /events/{eventId}

Opdaterer et eksisterende arrangement. Samme body-struktur som POST — medtag kun de felter, du vil ændre. Kalderen skal være arrangementets arrangør (gruppekontoen). Returnerer 202 med tom body.

GET /events/{eventId}

Henter en enkelt begivenhed ud fra id, med samme struktur som posterne i GET /events.

GET /events/{eventId}/children

Viser underarrangementerne inde i et overordnet arrangement — de enkelte spor eller sessioner i en større begivenhed. Hvert underarrangement har samme struktur som et almindeligt arrangement.

Administration af deltagere

Tre endpoints lader dig styre et arrangements deltagerliste uden for Ludoya — praktisk, hvis tilmeldinger sker på dit eget websted, eller du importerer en eksisterende liste.

Metode Sti Hvad den gør
POST `/events/

Flere endpoints

Resten af API'et, kort fortalt. API-reference på siden for det åbne API viser hvert endpoint med alle felter, og den samme kontrakt udgives som /public/v1/openapi.json, og som /public/v1/llms.txt til en AI-assistent, der skriver din integration. Kopiér instruktioner til din AI-assistent, på samme side, giver den hele API'et i én indsættelse, uden din nøgle.

Til AI-agenter: MCP. En assistent, der taler Model Context Protocol, forbinder sig direkte til /public/v1/mcp med den samme nøgle og kan kun læse. /public/v1/mcp/write tilbyder også de værktøjer, der ændrer ting, så om en agent må skrive, afgøres af den adresse, du giver den.

  • Udgiv, aflys, slet. `POST /events/

GET /members

Returnerer en pagineret medlemsliste.

Parameter Type Standard
pagination.size int 50
pagination.offset int 0

Hvert medlem indeholder: id, username, name, avatarUrl, role (OWNER, ADMIN, eller MEMBER).

POST /members/invite

Inviterer nogen ind i din gruppe. Denne tager et username direkte – der er ingen id-opslag – så du kan tilføje medlemmer direkte fra dit eget websted eller adminværktøj.

GET /collection

Returnerer din spilsamling med filtrering, sortering og paginering.

Parameter Type Standard Beskrivelse
filter string — Semikolonadskilte key=value-par. Nøgler: ownership (OWNED, PREVIOUSLY_OWNED, PREORDERED, WISHLISTED), played (boolean), listId, nameFilter, playerCountFilterType (OFFICIAL, GOOD, BEST), playerCountFilter (number)
groupExpansions boolean true Gruppér udvidelser under deres grundspil
sort string — Format: property,direction — f.eks. name,asc
pagination string — Format: size,pageIndex — f.eks. 20,0

Svar: totalGames, totalExpansions, games[] — hver med: id, slug, name, imageUrl, isExpansion, yearPublished, minPlayerCount, maxPlayerCount.

GET /stats

Returnerer spilstatistik for et konfigurerbart tidsvindue.

Parameter Type Standard Beskrivelse
period string ALL_TIME Format: PERIOD,date,index. Værdier: ALL_TIME, ONE_YEAR, ONE_MONTH, THIRTY_DAYS, SEVEN_DAYS, ONE_DAY, CUSTOM. index rykker vinduet tilbage (0 = nuværende, 1 = forrige). Brugerdefineret: CUSTOM,startDate,0,endDate

Svaret indeholder:

  • Opsummering — samlet antal partier, samlet/gennemsnitlig spilletid, antal unikke spil, spillere og steder
  • Pr. spiller — partier, sejre, gennemsnitlig og bedste score pr. person
  • Pr. antal spillere — fordeling på 2-spiller-, 3-spiller-, 4-spillerspil osv.
  • Pr. sted — antal partier og unikke spil pr. spillested
  • Pr. spil — antal partier, samlet/gennemsnitlig spilletid og unikke spillere pr. titel

GET /campaigns

Returnerer en pagineret liste over kampagner, der tilhører gruppen.

Parameter Type Standard Beskrivelse
status string — Filtrér efter status: ACTIVE, COMPLETED eller ARCHIVED
pagination.size int 50 Elementer pr. side
pagination.offset int 0 Forskydning

Hver kampagne indeholder: id, game (id, name, imageUrl), name, image, status, visibility, createdAt, updatedAt, memberCount, sessionCount.

GET /campaigns/{campaignId}

Returnerer de fulde detaljer for en kampagne, der tilhører gruppen.

Svaret indeholder: Alle listefelter plus template, description, globalNotes, globalState, members[] (hver med user, role, characterNotes, characterState), sessions[] og events[].

POST /campaigns

Opretter en kampagne for gruppen. Påkrævede felter: gameId og name. Synligheden er som standard kun gruppemedlemmer (ONLY_GROUP), hvis den udelades.

Valgfrie felter: templateId, description, visibility (PUBLIC, ONLY_GROUP, ONLY_FRIENDS eller PRIVATE).

Returnerer {"id": "string"} med status 201.

PUT /campaigns/{campaignId}

Opdaterer en eksisterende kampagne. Alle felter er valgfrie — medtag kun det, du vil ændre.

Valgfrie felter: name, description, status (ACTIVE, COMPLETED, ARCHIVED), visibility.

Returnerer 202 med tom body.

Kampagnemedlemmer

Administrér, hvem der er med i en kampagne, på samme måde som du administrerer deltagere i et arrangement.

Metode Sti Hvad den gør
POST `/campaigns/

Fejlkoder

Status Hvornår
400 Valideringsfejl (påkrævet felt mangler, ingen lokation fundet, ugyldigt billede)
401 Manglende eller ugyldig API-nøgle
403 Handlingen er ikke tilladt, eller gruppen har ikke Club-plan eller højere
404 Ressourcen blev ikke fundet
429 Hastighedsgrænsen er overskredet

Kom godt i gang

1. Generer en API-nøgle

En nygenereret API-nøgle, vist én enkelt gang med en kopiknap og en Tilbagekald-handling

  1. Gå til organisationens profilside og tryk på menuen (⋮) → Åbent API, eller åbn Integrationer i konsollen og vælg Nøgler og apps
  2. Tryk på Generer nøgle
  3. Kopiér nøglen med det samme — den vises kun én gang og kan ikke hentes igen

Nøglen er knyttet til din organisation. Hold den hemmelig: enhver med nøglen kan læse og skrive alle ovenstående data.

2. Tilbagekald eller generer på ny

For at tilbagekalde en eksisterende nøgle skal du gå tilbage til siden Offentlig API og trykke på Tilbagekald. Bekræft dialogen. Ethvert system, der bruger den gamle nøgle, begynder straks at modtage 401-fejl. Tryk på Generer nøgle igen for at udstede en ny nøgle.

Se også:

  • Organisationer — organisationskonti og premiumfunktioner
  • Premium — priser på Club- og Business-planerne
  • Integrationer — andre måder at forbinde Ludoya med eksterne værktøjer på