Skip to content

Booking engine integration

The booking engine is where guests book and pay. Trident adds two things to it: members arrive already signed in, and paid bookings earn points. The booking engine keeps everything about bookings and payment; Trident keeps who the member is and their points.

People

GuestMember once signed in
StaffGuest services, admins

Touchpoints

FINNS PassApple/Google Wallet
Guest appFlutter (mobile app + web)
Booking websiteCTG
Gate scannerVendor TBD
Admin consoleSvelteKit

Trident platform

API
LoyaltyPoints ledger and membership
AssetsWallet balance, wristbands
AccessesGym
Relationships
ReservationsEvents
Transactions
Customer PII

Services

Guest identityKeycloak
Staff identityJumpCloud
Transactional emailAmazon SES
Payment gatewayAirwallex
POSShiji
PMSDaylight
Customer engagementSota Platforms
CDPInsider
flowchart LR
  classDef ours fill:#13686C,stroke:#0B4A4D,color:#ffffff
  classDef ext fill:#F3ECDF,stroke:#B9A88B,color:#12191B
  classDef person fill:#E9724C,stroke:#C55A37,color:#ffffff

  g(["Guest"]):::person
  app["FINNS app"]:::ours
  be["<b>Your booking engine</b><br/>website + backend"]:::ext
  kc["Keycloak<br/>FINNS accounts"]:::ext
  core["Trident core"]:::ours

  g --> app
  app -- "1 · opens /auth/handoff?code=…" --> be
  be -- "2 · peek + redeem code" --> core
  be -- "3 · OIDC sign-in<br/>(direct, silent, fresh)" --> kc
  be -- "4 · booking paid" --> core
  core -- "5 · guest signed out" --> be
  kc -- "5 · back-channel logout" --> be

You receive

The member’s Keycloak subject (sub), session id (sid), display name and email, at sign-in.

You send

One message per paid booking: {sub, bookingId, totalIdr}. Core turns it into points.

You host

POST /auth/revoke (from core) and a back-channel logout endpoint (from Keycloak).

You hold

Two secrets from FINNS: an API token (you → core) and a revoke token (core → you). Plus a Keycloak client registration.

Internal and confidential. Share partner sections only as partner builds (pnpm build:partner).