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.
Browse the site
Events, ticket pages, and two different ways to buy.
Read the source
The full site on GitHub. Clone it and point it at your own events.
Watch webhooks arrive
A live feed of purchases as they come in.
Who supplies what
The site looks nothing like Jetron. It has its own domain, fonts, colours, and layout.
| Jetron supplies | The site supplies |
|---|---|
| Which events exist, with their dates, posters, and prices | The design: fonts, colours, imagery, and layout |
| How many tickets are left right now | The writing: hero copy and event descriptions |
| Taking payment and sending out the tickets | Everything 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
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 signaturesThe 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.

