JKz JKz Logo API-Docs

1. Grundlagen

Diese Dokumentation enthält alle für Nutzer und Entwickler bestimmten Routen der JKz-API v1. Reine Admin-, Moderations-, interne Service- und Webhook-Routen sind bewusst ausgeschlossen.

Basis-URL

https://api.jkz-group.de

Alle Pfade beginnen mit /v1/. Für Clients ohne Redirect-Following ist der abschließende Slash kanonisch (z. B. /v1/health/); das Terminal ergänzt ihn automatisch. Fehler folgen dem Schema {"error":{"code":"…","message":"…"}}.

Bearer-Token

Authorization: Bearer <access_token>

Keycloak-Login nutzt die normale JKz-Sitzung. Game-Token bedeutet: Der Token muss über den registrierten OAuth-Client des Spiels ausgestellt worden sein.

Sicher testen

POST, PUT und DELETE im Web-Terminal gehen an die produktive API und können Daten, Käufe oder E-Mails auslösen. Prüfe die editierbare Anfrage vor dem Absenden. Binärantworten werden auf eine Vorschau begrenzt.

2. Authentifizierung

Keycloak-Sitzung für das Web-Terminal

Das Access-Token bleibt im Session-Speicher dieses Browser-Tabs und wird weder in die Seite noch in Logs geschrieben. Game-SDK-Routen benötigen den Token des jeweiligen Spiel-Clients; dieser kann im Terminal überschrieben werden.

Nicht angemeldet

3. Code-Beispiele

Die Beispiele verwenden denselben Bearer-Header wie das Web-Terminal.

const response = await fetch("https://api.jkz-group.de/v1/users/profile/me/", {
  headers: {
    "Accept": "application/json",
    "Authorization": `Bearer ${accessToken}`
  }
});
const data = await response.json();

4. Öffentliche Endpoints

„Im Web-Terminal öffnen“ blendet direkt unter der Route eine vollständig editierbare Anfrage und die Live-Antwort ein.

4.1 System & Allgemein

3 Routen
GET /v1/health
Ohne Login

Aggregierter Status der JKz-Dienste und ihrer Abhängigkeiten.

Parameter
Optional: status.
Antwort
{"status":"operational","services":[],"checkedAt":"…"}
POST /v1/beta/validate
Ohne Login

Prüft einen GameStore-Beta-Key und liefert bei Erfolg dessen Metadaten.

Parameter
JSON: key (Pflicht).
Antwort
{"valid":true,"data":{}}
POST /v1/contact
Ohne Login

Versendet eine Kontakt- oder Bewerbungsnachricht; optional mit PDF-/ZIP-Anhang bis 8 MiB.

Parameter
JSON/Form: name, email, subject, bodyText. Bei Multipart beliebige Datei-Feldnamen.
Antwort
{"success":true,"message":"Nachricht wurde erfolgreich versendet."}

4.2 Badges

2 Routen
GET /v1/badges/list
Ohne Login

Listet alle verfügbaren Badges einschließlich Farben, Logos und Nutzeranzahl.

Parameter
Keine.
Antwort
{"data":[],"count":0}
GET /v1/badges/user
Ohne Login

Listet die Badges eines Nutzers.

Parameter
Query: id (Keycloak-UUID, Pflicht).
Antwort
{"userId":"…","count":0,"badges":[]}

4.3 Chat

4 Routen
GET POST /v1/chat/conversations
Keycloak-Login

Listet eigene Direkt-Konversationen oder erstellt/findet eine 1:1-Konversation.

Parameter
POST JSON: toUserId (Pflicht).
Antwort
{"data":[]}
GET POST /v1/chat/messages
Keycloak-Login

Liest Nachrichten einer eigenen Konversation oder sendet E2EE-Nachrichten.

Parameter
GET Query: conversationId, limit (max. 100). POST: conversationId, toUserId, ciphertext, nonce, optional protocolHeader.
Antwort
{"data":[]}
POST /v1/chat/keys/me
Keycloak-Login

Speichert oder aktualisiert den öffentlichen Chat-Identity-Key des angemeldeten Nutzers.

Parameter
JSON: publicKeyJwk, algorithm.
Antwort
{"data":{"userId":"…","algorithm":"…"}}
GET /v1/chat/keys/user
Keycloak-Login

Liefert den öffentlichen Chat-Identity-Key eines Nutzers.

Parameter
Query: id (User-UUID, Pflicht).
Antwort
{"data":{"userId":"…","publicKeyJwk":{},"algorithm":"…"}}

4.4 Nutzer & Profile

11 Routen
GET /v1/users
Ohne Login

Listet die Usernamen des öffentlichen JKz-Realms.

Parameter
Keine.
Antwort
{"count":0,"usernames":[]}
GET /v1/users/profile/username
Ohne Login

Liefert die freigegebenen Felder eines öffentlichen Profils per Username oder UUID.

Parameter
Query: genau eines von username oder id; optional fields als kommaseparierte Allowlist.
Antwort
{"data":{"id":"…","username":"Alice"}}
GET PUT /v1/users/profile/me
Keycloak-Login

Liest oder aktualisiert das eigene Profil und ausgewählte Keycloak-Basisfelder.

Parameter
GET optional fields. PUT: displayName, bio, birthdate, Hintergrund-/Sichtbarkeits-/Newsletterfelder sowie optional username und email.
Antwort
{"data":{"id":"…","displayName":"Alice"}}
POST /v1/users/profile/me/avatar
Keycloak-Login

Lädt das eigene Avatarbild hoch und aktualisiert die Profil-URL.

Parameter
Multipart: file (Bild, Pflicht; Serverlimit 5 MiB).
Antwort
{"data":{"avatarUrl":"https://…"}}
POST /v1/users/profile/me/banner
Keycloak-Login

Lädt das eigene Profilbanner hoch und aktualisiert die Profil-URL.

Parameter
Multipart: file (Bild, Pflicht; Serverlimit 5 MiB).
Antwort
{"data":{"bannerUrl":"https://…"}}
POST /v1/users/profile/me/password
Keycloak-Login

Reservierter Passwort-Endpunkt. Er antwortet derzeit immer mit 501; Passwortänderungen erfolgen über Keycloak.

Parameter
Keine nutzbare Payload.
Antwort
{"error":{"code":"PASSWORD_CHANGE_NOT_IMPLEMENTED","message":"…"}}
GET /v1/users/sanctions/username
Ohne Login

Liefert die öffentlich sichtbaren Sanktionen eines Nutzers.

Parameter
Query: id oder username; optional only_active=1|0 (Standard 1).
Antwort
{"id":"…","username":"Alice","only_active":true,"count":0,"sanctions":[]}
GET PUT /v1/users/theme/me
Keycloak-Login

Liest oder speichert das persönliche Portal-/Store-Theme.

Parameter
PUT JSON: mode, accent, accentHover, bgPage, bgPanel, previewBg.
Antwort
{"data":{"theme":{}}}
GET /v1/users/integrations/discord/me
Keycloak-Login

Liefert den Status der eigenen Discord-Verknüpfung.

Parameter
Keine.
Antwort
{"data":{"connected":false}}
GET POST /v1/integrations/discord/confirm
Ohne Login

Bestätigt eine Discord-Verknüpfung über einen einmaligen Token.

Parameter
GET Query oder POST JSON: token (20–300 Zeichen).
Antwort
{"success":true,"status":"CONNECTED"}

4.5 Beziehungen & Datenschutz

10 Routen
GET POST DELETE /v1/users/blocks
Keycloak-Login

Listet eigene Blockierungen, blockiert Nutzer oder entfernt eine Blockierung.

Parameter
POST JSON: blockedUserId. DELETE Query: id (Block-ID).
Antwort
{"data":[]}
POST /v1/users/blocks/unblock
Keycloak-Login

Hebt eine eigene Blockierung anhand ihrer Block-ID auf.

Parameter
JSON: id.
Antwort
{"success":true}
GET POST /v1/users/friend-requests
Keycloak-Login

Listet Freundschaftsanfragen oder sendet eine neue Anfrage.

Parameter
GET Query: direction=inbound|outbound|all, status. POST: toUserId, optional message.
Antwort
{"data":[]}
POST /v1/users/friend-requests/accept
Keycloak-Login

Akzeptiert eine eingegangene Freundschaftsanfrage.

Parameter
JSON: id (Request-ID).
Antwort
{"success":true}
POST /v1/users/friend-requests/cancel
Keycloak-Login

Bricht eine selbst gesendete Freundschaftsanfrage ab.

Parameter
JSON: id (Request-ID).
Antwort
{"success":true}
POST /v1/users/friend-requests/decline
Keycloak-Login

Lehnt eine eingegangene Freundschaftsanfrage ab.

Parameter
JSON: id (Request-ID).
Antwort
{"success":true}
POST /v1/users/friend-requests/unfriend
Keycloak-Login

Entfernt eine bestehende Freundschaft.

Parameter
JSON: id (Freund-User-ID).
Antwort
{"success":true}
POST /v1/users/privacy/events
Keycloak-Login

Übermittelt eine begrenzte Liste von Empfehlungs-/Interaktionsereignissen.

Parameter
JSON: events (Array).
Antwort
{"accepted":0}
GET /v1/users/privacy/fyp
Keycloak-Login

Liefert personalisierte Spielempfehlungen unter Berücksichtigung der Einwilligung.

Parameter
Query: limit (max. serverseitig begrenzt), exclude (kommaseparierte UUIDs).
Antwort
{"data":[]}

4.6 Nachrichten & Sicherheit

6 Routen
GET /v1/messages
Keycloak-Login

Listet Systemnachrichten des angemeldeten Nutzers.

Parameter
Query: limit (1–100).
Antwort
{"data":[]}
POST PUT /v1/messages/read
Keycloak-Login

Markiert eine oder alle Systemnachrichten als gelesen.

Parameter
JSON: messageId/id oder all/markAll=true.
Antwort
{"success":true}
GET /v1/notifications
Keycloak-Login

Listet Benachrichtigungen des angemeldeten Nutzers.

Parameter
Query: limit.
Antwort
{"data":[]}
POST PUT /v1/notifications/read
Keycloak-Login

Markiert eine oder alle Benachrichtigungen als gelesen.

Parameter
JSON: notificationId/id oder all/markAll=true.
Antwort
{"success":true}
GET POST /v1/security/e2ee/user-key
Keycloak-Login

Liest oder speichert den aktiven öffentlichen E2EE-Key samt verschlüsseltem privaten Schlüssel.

Parameter
POST: algorithm, usage, publicKeyPem, encryptedPrivateKey.
Antwort
{"data":{"key":{}}}
GET /v1/moderation/violations/me
Keycloak-Login

Listet ausschließlich die eigenen Moderationsverstöße; dies ist kein Moderator-Endpunkt.

Parameter
Query: limit, offset, status, includeMatches=1.
Antwort
{"data":[],"count":0}

4.7 Meldungen

7 Routen
GET /v1/reports/categories
Ohne Login

Listet aktive öffentliche Meldekategorien.

Parameter
Keine.
Antwort
{"data":[]}
POST /v1/reports
Login optional

Erstellt eine Meldung. ACCOUNT/PSEUDONYM benötigen Login; ANONYMOUS ist ohne Login möglich.

Parameter
JSON: categoryCode, contactEmail; außerdem description und/oder reportedObjectType/reportedObjectId. Optional reportedUserId, visibilityMode, wantsSecureChat.
Antwort
{"data":{"reportId":1}}
POST /v1/reports/submit
Login optional

Aktueller Melde-Endpunkt mit Support-Ticket-/Zammad-Anbindung; anonyme Meldungen sind möglich.

Parameter
JSON wie /v1/reports. reporterUserId ist für interne Übergangssysteme vorgesehen und sollte öffentlich nicht gesetzt werden.
Antwort
{"data":{"reportId":1}}
GET /v1/reports/my
Keycloak-Login

Listet eigene Meldungen.

Parameter
Query: status, page, limit (max. 100).
Antwort
{"data":[],"page":1,"limit":20,"total":0}
GET /v1/reports/detail
Keycloak-Login

Liefert Details einer Meldung, wenn der Nutzer Reporter oder Teilnehmer ist.

Parameter
Query: id (numerische Report-ID).
Antwort
{"data":{}}
GET POST /v1/reports/messages
Keycloak-Login

Liest oder sendet E2EE-Nachrichten im eigenen Report-Chat.

Parameter
GET: reportId, optional since/limit. POST: reportId, contentType, ciphertext, nonce, authTag, optional attachmentId.
Antwort
{"data":[]}
POST /v1/reports/attachments
Keycloak-Login

Lädt einen Anhang zu einer Meldung hoch, auf die der Nutzer Zugriff hat.

Parameter
Multipart: reportId und file (max. 10 MiB gemäß API-Konfiguration).
Antwort
{"data":{"attachmentId":1}}

4.8 Spielekatalog

11 Routen
GET /v1/games/categories
Ohne Login

Listet öffentliche Spielekategorien samt Zähler.

Parameter
Keine.
Antwort
{"data":[]}
GET /v1/games/categories/games
Ohne Login

Listet öffentliche Spiele einer Kategorie.

Parameter
Query: category oder slug.
Antwort
{"data":[]}
GET /v1/games/community
Ohne Login

Liefert Community-Aktivität und Top-Inhalte.

Parameter
Query: commentLimit, topLimit.
Antwort
{"data":{}}
GET /v1/games/public/info
Ohne Login

Liefert öffentliche Detailinformationen zu einem Spiel.

Parameter
Query: id/gameUuid/uuid.
Antwort
{"data":{}}
GET /v1/games/public/by-user
Ohne Login

Listet öffentliche Spiele eines Uploaders.

Parameter
Query: id oder userId.
Antwort
{"data":[]}
GET /v1/games/build/web-current
Ohne Login

Liefert den aktuellen akzeptierten Web-Build eines öffentlichen Spiels.

Parameter
Query: id/gameUuid/uuid.
Antwort
{"data":{}}
GET POST PUT /v1/games/ratings
Keycloak-Login

Liest Bewertungsstatistiken und setzt die eigene Bewertung.

Parameter
GET: id oder ids, optional includeMine=1. POST/PUT: gameUuid/id und rating.
Antwort
{"data":{}}
GET POST PUT DELETE /v1/games/comments
Keycloak-Login

Liest Kommentare; angemeldete Nutzer können kommentieren, abstimmen und eigene Kommentare ändern/löschen.

Parameter
GET: id/ids, userId/authorId, limit, includeMine. POST: gameUuid, body. PUT: commentUuid plus body oder vote. DELETE Query: commentUuid.
Antwort
{"data":[]}
GET POST PUT /v1/games/favorites
Keycloak-Login

Liest Favoritenstatus und setzt/entfernt ein eigenes Lieblingsspiel.

Parameter
GET: id oder ids, includeMine. POST/PUT: gameUuid/id und favorited/favorite.
Antwort
{"data":{}}
GET POST PUT /v1/games/watchlist
Keycloak-Login

Liest Watchliststatus und setzt/entfernt ein Spiel auf der eigenen Watchlist.

Parameter
GET: id oder ids, includeMine. POST/PUT: gameUuid/id und listed/watchlisted.
Antwort
{"data":{}}

4.9 Spiele veröffentlichen

13 Routen
GET /v1/games/my
Keycloak-Login

Listet die Spiele des angemeldeten Uploaders.

Parameter
Keine.
Antwort
{"data":[]}
GET /v1/games/my/info
Keycloak-Login

Liefert den eigenen Info-Datensatz eines Spiels.

Parameter
Query: id (Game-UUID).
Antwort
{"data":{}}
GET /v1/games/my/build
Keycloak-Login

Listet eigene Builds eines Spiels oder liefert einen eigenen Build.

Parameter
Query: genau eines von gameid oder buildid.
Antwort
{"data":[]}
POST /v1/games/info/upload
Keycloak-Login

Reicht neue Spielinformationen mit Icon und Banner ein.

Parameter
Multipart: metadata (JSON), icon und banner. Die Metadaten enthalten u. a. title, description, genre und Plattformdaten.
Antwort
{"data":{"gameUuid":"…"}}
POST /v1/games/info/edit
Keycloak-Login

Bearbeitet eigene Spielinformationen; Icon/Banner sind optional ersetzbar.

Parameter
Multipart: metadata mit gameId/gameUuid; optional icon und banner.
Antwort
{"data":{"gameUuid":"…"}}
POST /v1/games/build/upload
Keycloak-Login

Lädt einen komprimierten Build zu einem eigenen Spiel hoch.

Parameter
Multipart: metadata (JSON) und file (Archiv).
Antwort
{"data":{"buildUuid":"…"}}
POST /v1/games/build/current
Keycloak-Login

Setzt einen akzeptierten eigenen Build als aktuelle Version.

Parameter
JSON: buildUuid oder buildId.
Antwort
{"data":{"ok":true,"gameUuid":"…","buildUuid":"…"}}
POST /v1/games/build/delete/request
Keycloak-Login

Fordert die Löschung eines eigenen Builds an und sendet eine Bestätigungs-E-Mail.

Parameter
JSON: buildUuid oder buildId.
Antwort
{"data":{"requestId":"…","expiresAt":"…"}}
GET /v1/games/build/delete/confirm
Ohne Login

Bestätigt eine zuvor angeforderte Build-Löschung per Einmal-Token.

Parameter
Query: token.
Antwort
{"data":{"ok":true}}
POST /v1/games/info/delete/request
Keycloak-Login

Fordert die Löschung eines eigenen Spiels an und sendet eine Bestätigungs-E-Mail.

Parameter
JSON: gameUuid oder gameId.
Antwort
{"data":{"requestId":"…","expiresAt":"…"}}
GET /v1/games/info/delete/confirm
Ohne Login

Bestätigt eine zuvor angeforderte Spiel-Löschung per Einmal-Token.

Parameter
Query: token.
Antwort
{"data":{"ok":true}}
GET POST /v1/games/visibility
Keycloak-Login

Liest oder plant die Sichtbarkeit eines eigenen Spiels.

Parameter
GET/POST: gameUuid/gameId; beim Schreiben visibilityStatus/status, optional scheduledStatus und scheduledAt.
Antwort
{"data":{}}
GET POST PUT /v1/games/monetization
Keycloak-Login

Liest oder konfiguriert Preis, Währung und Rabatt eines eigenen Spiels.

Parameter
GET: id/gameUuid. POST/PUT: gameUuid, action, isPaid, priceCents/price, currency, optionale Rabattfelder.
Antwort
{"data":{}}

4.10 Developer-Portal

22 Routen
GET /v1/dev/me
Keycloak-Login

Aggregiert den eigenen Entwickler-, Onboarding- und Stripe-Status.

Parameter
Optional Query: syncStripe=1.
Antwort
{"data":{}}
GET /v1/dev/dashboard
Keycloak-Login

Liefert Dashboard-Kennzahlen des Entwicklers.

Parameter
Query: range in Tagen.
Antwort
{"data":{}}
GET /v1/dev/onboarding/status
Keycloak-Login

Liefert Fortschritt und aktuellen Developer-Tier.

Parameter
Keine.
Antwort
{"data":{}}
PUT /v1/dev/onboarding/profile
Keycloak-Login

Speichert Publisher-Typ, Engine, Teamname und Links für das Onboarding.

Parameter
JSON: publisherType, engine, teamName, links.
Antwort
{"data":{}}
POST /v1/dev/onboarding/agreements/accept
Keycloak-Login

Dokumentiert die Annahme der erforderlichen Entwicklervereinbarungen.

Parameter
JSON enthält die vom Portal angebotenen Vereinbarungs-/Versionsangaben.
Antwort
{"data":{}}
POST /v1/dev/onboarding/compliance/confirm
Keycloak-Login

Bestätigt die Sicherheits- und Compliance-Erklärungen für Uploads.

Parameter
JSON: malwareFreeConfirmed, noUnauthorizedAccessConfirmed.
Antwort
{"data":{}}
POST /v1/dev/onboarding/complete
Keycloak-Login

Schließt ein vollständiges Onboarding ab und aktiviert den Developer-Tier.

Parameter
Keine.
Antwort
{"data":{}}
GET PUT /v1/dev/business/profile
Keycloak-Login

Liest oder speichert das geschäftliche Entwickler-/Rechnungsprofil.

Parameter
GET optional syncStripe=1. PUT: die vom Developer-Portal gelieferten Unternehmens-, Steuer- und Adressfelder.
Antwort
{"data":{}}
GET POST /v1/dev/monetization
Keycloak-Login

Liest oder bestätigt die Entwickler-Monetarisierungsvereinbarung.

Parameter
POST: acceptAgreement und optional enablePaidGames.
Antwort
{"data":{}}
GET /v1/dev/stripe-connect
Keycloak-Login

Liefert den eigenen Stripe-Connect-Status.

Parameter
Optional Query: sync=1.
Antwort
{"data":{}}
POST /v1/dev/stripe-connect/refresh
Keycloak-Login

Erstellt einen neuen Link für ein abgelaufenes Stripe-Onboarding.

Parameter
Keine.
Antwort
{"data":{"url":"https://…"}}
GET /v1/dev/payouts/bank-accounts
Keycloak-Login

Ehemaliger Auszahlungsdaten-Endpunkt; antwortet dauerhaft mit 410, da Stripe Connect zuständig ist.

Parameter
Keine.
Antwort
{"error":{"code":"PAYOUTS_MOVED_TO_STRIPE","message":"…"}}
GET /v1/dev/billing
Keycloak-Login

Liefert Pläne, Abonnements und Rechnungsübersicht des Entwicklers.

Parameter
Keine.
Antwort
{"data":{}}
POST /v1/dev/billing/checkout
Keycloak-Login

Erstellt eine Stripe-Checkout-Session für einen Entwicklerplan.

Parameter
JSON: gameUuid/game_uuid, planCode/plan_code.
Antwort
{"data":{"url":"https://…"}}
POST /v1/dev/billing/manage
Keycloak-Login

Verwaltet ein Entwickler-Abo (z. B. Wechsel oder Kündigung).

Parameter
JSON: action sowie je nach Aktion subscriptionUuid, gameUuid und planCode.
Antwort
{"data":{}}
GET /v1/dev/billing/invoices/download
Keycloak-Login

Lädt eine eigene Entwicklerrechnung herunter.

Parameter
Query: invoiceUuid/invoice_uuid.
Antwort
[Binäre PDF-Antwort]
GET /v1/dev/store/seller-statements
Keycloak-Login

Listet eigene Verkäuferabrechnungen.

Parameter
Query: status, dateFrom/date_from, dateTo/date_to, limit.
Antwort
{"data":[]}
GET POST /v1/dev/game-auth
Keycloak-Login

Listet/liest oder erstellt und aktualisiert JKz-Login-Clients eigener Spiele.

Parameter
GET: action=list|detail, id, gameUuid. POST: action und Client-Konfiguration (gameUuid, Redirect-URIs, Origins, Scopes).
Antwort
{"data":{}}
GET POST /v1/dev/game-cloud
Keycloak-Login

Verwaltet GameCloud-Collections, Spalten, Schlüssel und Entwickleransichten von Datensätzen/Audit.

Parameter
GET: action, id, gameUuid, limit. POST: action sowie gameUuid, collectionId/id, columnId, key und aktionsbezogene Daten.
Antwort
{"data":{}}
GET POST /v1/dev/game-server
Keycloak-Login

Verwaltet GameServer-Projekte, Räume, Matches, Ereignisse und Hosted-Instanzen eigener Spiele.

Parameter
GET: action, id/projectId und aktionsbezogene Filter. POST: action, projectId/id, gameUuid und aktionsbezogene Daten.
Antwort
{"data":{}}
GET POST DELETE /v1/dev/in-app-purchases
Keycloak-Login

Listet und verwaltet In-App-Produkte eigener Spiele.

Parameter
GET: gameUuid. POST: action und Produktdaten. DELETE: itemUuid als Query.
Antwort
{"data":{}}

4.11 Game-SDK

6 Routen
POST /v1/game-auth/token
Ohne Login

Tauscht einen OAuth-Code eines registrierten Spiel-Clients per PKCE oder erneuert dessen Token.

Parameter
JSON action=exchange: clientId, code, redirectUri, codeVerifier. action=refresh: clientId, refreshToken.
Antwort
{"data":{"accessToken":"…"}}
GET /v1/game-auth/me
Game-Token

Liefert das freigegebene JKz-Profil für die Session eines registrierten Spiels.

Parameter
Query: gameUuid. Header: Bearer Game-Access-Token; optional X-JKZ-ID-Token.
Antwort
{"data":{"userId":"…"}}
GET POST DELETE /v1/game-cloud/records
Game-Token

Liest, sucht, schreibt oder löscht GameCloud-Datensätze und Leaderboard-Einträge.

Parameter
GET: gameUuid, table/collection, key, action, limit, playerUserId, where, orderBy, direction, cursor. Schreiben: entsprechende JSON-Felder. Alternativ Header X-JKZ-GameCloud-Key.
Antwort
{"data":{"record":{}}}
GET POST /v1/game-server/runtime
Game-Token

Runtime-API für Polling, Räume, Matchmaking, State, Input, Ergebnisse und Fehlerberichte.

Parameter
GET: action=poll, gameUuid plus Cursor-/Raumparameter. POST: gameUuid und action (join, spectate, quick_join, list_rooms, send, poll, heartbeat, update_state, input, start_match, finish_match, submit_result, leave, disconnect, log_error).
Antwort
{"data":{}}
GET /v1/game-server/hosted-routing
Ohne Login

Löst die öffentliche Route einer Hosted-GameServer-Instanz auf.

Parameter
Query: gameUuid/game_uuid oder slug; optional instanceKey/instance und purpose (Standard http).
Antwort
{"data":{}}
GET POST /v1/game-iap/items
Game-Token

Listet eigene In-App-Käufe im Spiel oder verbraucht ein Consumable.

Parameter
GET: gameUuid. POST: gameUuid, action=consume und Item-/Mengenfelder.
Antwort
{"data":{"items":[],"summary":{}}}

4.12 GameStore

16 Routen
GET /v1/store/faq
Ohne Login

Listet veröffentlichte GameStore-FAQ-Einträge. Rollenpflichtige Schreibmethoden sind nicht Teil der öffentlichen Doku.

Parameter
Keine.
Antwort
{"ok":true,"data":{"items":[],"canManage":false}}
GET /v1/store/seals
Ohne Login

Liefert öffentliche Seal-Definitionen und Zuordnungen. Admin-Suche/-Schreibaktionen sind ausgeschlossen.

Parameter
Query: userIds/users und/oder gameUuids/games als CSV.
Antwort
{"definitions":[],"data":[]}
GET POST /v1/store/game-jams
Login optional

Listet GameJams; angemeldete Nutzer können teilnehmen, verlassen, Spiele einreichen und abstimmen. Admin-Aktionen sind ausgeschlossen.

Parameter
GET action=list oder eligible mit jamId. POST action=participate|leave|submit|vote und aktionsbezogene Felder.
Antwort
{"data":[]}
GET POST PUT DELETE /v1/store/cart
Keycloak-Login

Liest oder ändert den eigenen Warenkorb.

Parameter
Schreiben: action, gameUuid/gameUuids und inCart/cart. DELETE entfernt Einträge.
Antwort
{"data":{}}
GET /v1/store/library
Keycloak-Login

Listet die eigene Spielebibliothek.

Parameter
Keine.
Antwort
{"data":[]}
GET /v1/store/downloads
Login optional

Liefert Download-/Build-Metadaten eines Spiels, abhängig von Sichtbarkeit und Besitz.

Parameter
Query: id oder gameUuid.
Antwort
{"data":{}}
POST /v1/store/downloads/waiver
Keycloak-Login

Dokumentiert den Verzicht auf das Widerrufsrecht für einen digitalen Download.

Parameter
JSON: buildUuid/buildId und digitalContentWaiverAccepted/digitalWaiverAccepted=true.
Antwort
{"success":true}
GET /v1/store/downloads/file
Keycloak-Login

Lädt einen gekauften/freigegebenen Spiel-Build herunter.

Parameter
Query: buildUuid/buildId; optional source=web|launcher.
Antwort
[Binäre Datei-Antwort]
GET /v1/store/in-app-purchases
Login optional

Listet kaufbare In-App-Produkte eines Spiels; Login ergänzt Besitz-/Verfügbarkeitsdaten.

Parameter
Query: gameUuid oder id.
Antwort
{"data":[]}
POST /v1/store/in-app-purchases/session
Keycloak-Login

Erstellt eine Checkout-Session für ein In-App-Produkt.

Parameter
JSON: itemUuid, quantity sowie bestätigte Digital-Waiver-Felder.
Antwort
{"data":{"url":"https://…"}}
POST /v1/store/checkout/session
Keycloak-Login

Erstellt gruppierte Stripe-Checkout-Sessions für Spiele und/oder In-App-Produkte.

Parameter
JSON: gameUuids/gameIds, optional inAppItems, sowie bestätigte Digital-Waiver-Felder.
Antwort
{"data":{"checkoutGroupUuid":"…","sessions":[]}}
GET /v1/store/checkout/status
Keycloak-Login

Prüft den Status einer eigenen Checkout-Session oder Bestellung.

Parameter
Query: sessionId/checkout_session_id oder orderUuid.
Antwort
{"data":{}}
POST /v1/store/checkout/cancel
Keycloak-Login

Bricht offene eigene Checkout-Sessions einer Gruppe ab.

Parameter
JSON: checkoutGroupUuid/checkout_group_uuid oder sessionIds.
Antwort
{"data":{}}
POST /v1/store/orders/refund
Keycloak-Login

Fordert für eine eigene Bestellung eine Erstattung an.

Parameter
JSON oder Query: orderUuid/order_uuid, optional reason (Standard withdrawal).
Antwort
{"data":{"refundUuid":"…"}}
GET POST /v1/store/advancement/me
Keycloak-Login

Liest eigenen Store-Fortschritt/XP oder zeichnet eine zulässige Advancement-Aktion auf.

Parameter
POST: action, optional gameUuid, orderUuid, metadata.
Antwort
{"data":{}}
GET /v1/store/seller-statements/download
Keycloak-Login

Lädt die Verkäuferabrechnung zu einer eigenen Bestellung, sofern die Verkäuferrolle passt.

Parameter
Query: orderUuid/order_uuid.
Antwort
[Binäre PDF-Antwort]

4.13 GameStore-Launcher

6 Routen
GET /v1/gamestore/client/win/version
Ohne Login

Liefert Windows-Client-Release-Metadaten oder das Tauri-v2-Updateformat.

Parameter
Query: channel, architecture/arch, format=jkz|tauri2, currentVersion/current_version.
Antwort
{"data":{"version":"…","downloadUrl":"…"}}
GET /v1/gamestore/client/win/file
Ohne Login

Lädt das signierte Windows-Client-Artefakt mit Range-Unterstützung.

Parameter
Query: channel, architecture/arch.
Antwort
[Binäre Installer-Antwort]
GET /v1/gamestore/game/build
Keycloak-Login

Liefert Metadaten des aktuellen launcherfähigen, gekauften Windows-Builds.

Parameter
Query: gameUuid/gameId, optional architecture.
Antwort
{"data":{"gameUuid":"…","buildUuid":"…"}}
GET /v1/gamestore/game/manifest
Keycloak-Login

Liefert signiertes Launcher-Manifest eines gekauften Builds.

Parameter
Query: genau eines von gameUuid/gameId oder buildUuid/buildId; optional platform=windows, architecture.
Antwort
{"data":{"payload":"BASE64","manifestSha256":"…","signature":"…"}}
GET /v1/gamestore/game/archive
Keycloak-Login

Lädt das vollständige gekaufte Spielarchiv mit Range-Unterstützung.

Parameter
Query: buildUuid/buildId, optional architecture.
Antwort
[Binäres ZIP-Archiv]
GET /v1/gamestore/game/file
Keycloak-Login

Lädt eine einzelne, im signierten Manifest enthaltene Datei.

Parameter
Query: buildUuid/buildId, fileId (SHA-256), optional architecture.
Antwort
[Binäre Datei-Antwort]