Content version
GET
/v1/events/{slug}/versionA single timestamp that moves whenever the event or its lineup is edited.
Poll this instead of re-fetching the lineup. It is small and cached for 15 seconds, so you can check often and only pull the heavy feeds when the version actually changes.
No key is required today — send one anywayThe Grofomo mobile app still calls this endpoint without a credential, so it cannot be locked down yet. It will be. A key sent now is accepted and ignored, so an integration built this way keeps working on the day enforcement lands; one built without a key will start returning
401 unauthorized.Send ?surface=webOmit it and the request is treated as coming from the mobile app, which is gated on a different visibility setting — so a perfectly live event can return
404 not_found for no visible reason.Request
curl -sS \
-H 'X-Grofomo-Key: pk_live_YOUR_PUBLISHABLE_KEY' \
'https://api.grofomo.com/v1/events/summer-fest/version?surface=web'Path parameters
slugstringrequired- The event's URL slug. Globally unique. It can change if the organiser renames the event, but an old slug keeps reaching the same event, so a stored one never breaks. Example: `summer-fest`.
Query parameters
surface'web'required- Must be `web` for a website. Omit it and you get the mobile-app surface, which is gated on a different visibility setting — so a perfectly live event can return 404. Example: `web`.
Response
200 OK
{
"apiVersion": 1,
"data": {
"eventId": "6f1c8e2a-4b3d-4c9e-9f21-8a7d5e0b1c34",
"eventSlug": "summer-fest",
"scheduleVersion": "2026-06-01T09:15:00.000Z",
"updatedAt": "2026-06-01T09:15:00.000Z"
}
}eventIduuideventSlugstringscheduleVersionstring- Opaque token that changes whenever the event or its lineup is edited. Compare it with the last one you saw; only pull the heavy feeds when it differs.
updatedAtstring- When that last edit happened.
Generated from EventVersionResponse
Errors
not_foundHTTP 404- No event with that slug is published on this surface. Check the slug, and check you sent `?surface=web`.