Endpunkt- & Antwort-Referenz
POST/api/shop/sessionminten — Bearer-Secret
DELETE/api/shop/session/:tokenwiderrufen — Bearer-Secret
In dieser Demo läuft das Minting über den Proxy unter den obigen Pfaden. In Produktion wird die Session im ADITUS-Core gemintet — der Vertrag ist identisch. Beide Aufrufe sind server-zu-server: Dein Backend authentifiziert sich mit dem Mint-Secret deines Clients (erzeugt in der ADITUS-Admin-Konsole) als Bearer-Token. Ein Mint pro Login ist das normale Muster; der Browser sieht ausschließlich den entstandenen Token.
Diesen exakten Ablauf kannst du mit deinen eigenen Zugangsdaten im Integrations-Tester ausprobieren — minten, mounten, Journey durchlaufen.
Session minten — Request
HeaderWertBedeutung
AuthorizationBearer <mint-secret>Das Mint-Secret deines Clients, erzeugt in der ADITUS-Admin-Konsole. Nur server-seitig — es darf nie in einen Browser oder ein App-Bundle gelangen.
Content-Typeapplication/jsonDer Body ist ein JSON-Objekt.
Body-FeldTypBedeutung
publicKeystring · PflichtDer Publishable Key, FÜR den die Session gemintet wird. Es muss derselbe Key sein, mit dem das Micro-Frontend mountet — jeder spätere Shop-Call wird dagegen geprüft (403 bei Abweichung). Das Bearer-Secret muss zum Client dieses Keys gehören.
emailstring · optionalDer Shop-User, als der die Session agiert. Nimm sie aus DEINER authentifizierten Server-Session (Login-/SSO-Cookie oder JWT) — nie aus dem Browser-Request, sonst könnte ein Besucher eine fremde Session erhalten. WEGGELASSEN entsteht eine ANONYME Session: Der Besucher kann browsen und den Warenkorb füllen, aber das Micro-Frontend blockiert den Schritt aus dem Warenkorb, bis dein onUserRequired-Callback eine nutzergebundene Session liefert (siehe Optional-User-Flow). Eine mitgeschickte, aber ungültige E-Mail bleibt ein 400.
externalUserIdstring · optionalDeine eigene User-ID, als Metadatum an der Session gespeichert (nützlich für Support und Log-Korrelation). Wird von ADITUS nicht interpretiert.
ttlSecondsnumber · optionalLebensdauer der Session in Sekunden. Default 20 Minuten, Obergrenze 24 Stunden. Nach Ablauf liefern Shop-Calls 401 session_expired — dann einfach einen frischen Token minten (z. B. über den onSessionExpired-Hook).
eventSlugstring · optionalLegt den EINSTIEGSPUNKT der Journey serverseitig fest: gesetzt startet das Micro-Frontend direkt in der Artikelauswahl dieser Veranstaltung; weggelassen mit der Veranstaltungsübersicht. Da er Teil der geminteten Session ist, kann der Browser ihn nicht manipulieren. Ungültige Zeichen liefern 400 invalid_event_slug; ein Slug ohne passendes Live-Event fällt auf die Veranstaltungsübersicht zurück.
Session minten — Antwort (200)
FeldTypBedeutung
sessionTokenstringOpaker Token (sess_…). An den Browser weiterreichen und bei mount() als sessionToken setzen; das Micro-Frontend sendet ihn bei jedem Shop-Call als X-Aditus-Session. Er enthält keine Nutzerdaten und ist nicht dekodierbar.
expiresAtnumberAblauf als Unix-Timestamp in Millisekunden. Rein informativ für deine eigene Planung — das Micro-Frontend reagiert selbst auf das 401.
Session widerrufen
DELETE /api/shop/session/:token mit demselben Bearer-Secret — es muss zum Client gehören, für den die Session gemintet wurde. Beim Logout aufrufen, damit der Token zusammen mit deiner eigenen Session stirbt. Antwort: { "revoked": true } (oder false, wenn die Session bereits abgelaufen war). Der Widerruf ist idempotent und kann fire-and-forget gesendet werden.
Fehler sind explizit
StatusCodeBedeutung
503session_not_configuredMinting ist für diesen Client deaktiviert: Im Admin wurde noch kein Mint-Secret erzeugt.
401unauthorizeddas Mint-Secret ist falsch oder fehlt. Prüfe, ob das Secret zum Client genau dieses Public Keys gehört (ein rotiertes Secret macht das alte sofort ungültig).
400invalid_public_keyder Public Key ist fehlerhaft oder nicht registriert. Er muss die Form pk_… haben und zu einem eingerichteten Client gehören.
400invalid_emaildie E-Mail des Shop-Users fehlt oder ist keine gültige Adresse.
400invalid_tokender Session-Token im Revoke-Aufruf ist fehlerhaft. Übergib genau den sessionToken aus der Mint-Antwort.
429rate_limitedzu viele Mint-/Revoke-Aufrufe von deiner IP. Warte eine Minute und versuch es erneut.
403public_key_invalidder Header X-Aditus-Public-Key ist fehlerhaft. Er muss die Form pk_… haben, genau wie beim Onboarding ausgegeben.
403public_key_unknownder X-Aditus-Public-Key ist wohlgeformt, aber nicht registriert (oder deaktiviert). Prüfe auf Tippfehler und ob der Client des Keys aktiv ist.
403public_key_origin_unresolveddie Anfrage trug einen publicKey, aber keinen verwertbaren Origin-/Referer-Header, daher kann die Domain-Whitelist nicht geprüft werden. Browser senden Origin automatisch; Server-zu-Server-Aufrufe dürfen den publicKey-Header nicht nutzen.
403public_key_domain_not_alloweddie Herkunftsdomain der Anfrage steht nicht auf der Whitelist dieses publicKey. Lass die Domain beim Onboarding (oder im Admin) freischalten, bevor du dort live gehst.
401invalid_sessionder Shop-Call trug einen fehlerhaften X-Aditus-Session-Token — niemals ein stiller Rückfall auf den Demo-User. Übergib genau den sessionToken (sess_…) aus der Mint-Antwort.
401session_expiredder X-Aditus-Session-Token ist unbekannt, widerrufen oder abgelaufen — niemals ein stiller Rückfall auf den Demo-User. Minte server-zu-server eine frische Session.
403session_requires_public_keyeine Session wurde ohne den Header X-Aditus-Public-Key gesendet (Origin-Pinning ist Pflicht, sobald eine Session im Spiel ist).
403session_key_mismatchder X-Aditus-Public-Key passt nicht zu dem Key, für den die Session gemintet wurde.
403anonymous_sessiondie Session wurde OHNE E-Mail gemintet (anonym) und erlaubt nur Browsen und Warenkorb. Registrierung, Zahlung und Checkout brauchen eine nutzergebundene Session — über onUserRequired minten.