Jetron TicketFluid

Example site

A real event site built on Fluid, using both the embed and the API.

boba.jtr.rsvp is a working event site built on Jetron Fluid, and it is open source. It is worth a look because it does everything at once: the checkout embed on some events, the API on others, and webhooks behind both.

Who supplies what

The site looks nothing like Jetron. It has its own domain, fonts, colours, and layout.

Jetron suppliesThe site supplies
Which events exist, with their dates, posters, and pricesThe design: fonts, colours, imagery, and layout
How many tickets are left right nowThe writing: hero copy and event descriptions
Taking payment and sending out the ticketsEverything the visitor actually sees

Add an event in Jetron Ticket and it appears on the site on its own.

Two ways to sell, on one site

Each event picks how it sells.

With the embed, the page drops in an iframe and passes its own accent colour so the checkout matches the page around it:

<iframe
  src={`https://checkout.jetronticket.com/${event.slug}?theme=light&colorScheme=${encodeURIComponent(event.accent)}`}
  className="h-[760px] w-full border-0"
  title={`${event.name} checkout`}
  allowFullScreen
/>

With the API, the site builds its own screens instead: pick quantities, reserve (which starts a countdown), collect contact details, then send the buyer off to pay.

const { data: order } = await client.createOrder(
  slug,
  { quoteReference, email, firstName, lastName, callbackUrl, metadata: { bringing } },
  { deviceId: reservation.reservationToken },
)
window.location.assign(order.checkoutUrl)

Anything in metadata comes back later on the webhook, which is how the site knows what each buyer said they were bringing.

Where the keys go

.env.local
JETRON_API_KEY=jt_public_...              # reading events on the server
NEXT_PUBLIC_JETRON_API_KEY=jt_public_...  # the checkout running in the browser
JETRON_PRIVATE_API_KEY=jt_private_...     # checking webhook signatures

The public key is safe in the browser, which is why the same value appears twice. The private key only ever verifies webhooks and never leaves the server.

Receiving webhooks

When someone buys a ticket, Jetron posts to the site's /api/webhooks/jetron route. It checks the signature, then records the purchase against its reference so a repeated delivery updates the same row instead of creating a second one. The live feed at /webhooks shows them landing.

See Verifying signatures for the code.

On this page