Jetron TicketFluid

Caching & ETags

Conditional requests with ETag and If-None-Match.

Event read endpoints (GET /events, GET /events/{slug}, and GET /events/{slug}/gallery) support conditional requests so you can poll for changes cheaply.

How it works

Each response includes an ETag header (an opaque validator for the response body) plus a Cache-Control policy like:

Cache-Control: private, max-age=60, stale-while-revalidate=120

On your next request, echo the ETag back in the If-None-Match header.

If nothing changed, the API responds 304 Not Modified with no body, so keep using your cached copy. Otherwise you get a fresh 200 with a new ETag.

curl https://fluid.jetronticket.com/api/v1/events/my-event \
  -H "Authorization: Bearer jt_public_..." \
  -H 'If-None-Match: "the-previous-etag"'

With the SDK

Every ApiResult exposes etag and notModified:

const first = await client.getEvent('my-event')

const next = await client.getEvent('my-event', {
  ifNoneMatch: first.etag ?? undefined,
})

if (next.notModified) {
  // 304: next.data is null, reuse first.data
}

client.getEventGallery() accepts the same ifNoneMatch option, so event details and gallery images can be revalidated independently.

See Conditional requests for the SDK guide.

What is never cached

Reservations, tickets, and orders are never cached. Only the event list, event-detail, and gallery endpoints participate in ETag caching. Responses are private: cache per user, not in a shared cache.

On this page