Grofomo API
Browse the docs

Examples use a fictional festival, summer-fest. Sign in at events.grofomo.com and they switch to your own events.

Event detail

GET/v1/events/{slug}

Everything that describes the event itself — name, dates, timezone, venue, stages and the organiser's brand settings.

Usually the first call a site makes.

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.

Request

curl -sS \
  -H 'X-Grofomo-Key: pk_live_YOUR_PUBLISHABLE_KEY' \
  'https://api.grofomo.com/v1/events/summer-fest'

Path parameters

slugstringrequired
The event's URL slug. Globally unique, and fixed once the event is created. Example: `summer-fest`.

Response

200 OK
{
  "apiVersion": 1,
  "data": {
    "id": "6f1c8e2a-4b3d-4c9e-9f21-8a7d5e0b1c34",
    "slug": "summer-fest",
    "name": "Summer Fest",
    "description": "Three days of house, disco and breaks across two stages on the edge of Bristol, with camping from Friday morning.",
    "summary": "Three days, two stages, Ashton Court.",
    "ticketUrl": "https://grfm.to/e/summer-fest",
    "capacity": 8000,
    "familyFriendly": true,
    "musicGenres": [
      "House",
      "Disco",
      "Breaks"
    ],
    "timezone": "Europe/London",
    "dates": {
      "startDate": "2026-07-17",
      "endDate": "2026-07-19",
      "doorsOpen": "12:00",
      "doorsClose": "02:00",
      "timezone": "Europe/London",
      "singleDay": false
    },
    "venue": {
      "name": "Ashton Court",
      "address": "Ashton Court Estate",
      "city": "Bristol",
      "region": "England",
      "postcode": "BS41 9JN",
      "country": "GB",
      "indoorOutdoor": "outdoor"
    },
    "stages": [
      {
        "id": "main-stage",
        "name": "Main Stage",
        "type": "outdoor",
        "description": "The big one, in the meadow.",
        "imageUrl": "https://cdn.grofomo.com/summer-fest/stages/main.jpg"
      },
      {
        "id": "the-orchard",
        "name": "The Orchard",
        "type": "tent",
        "description": null,
        "imageUrl": null
      }
    ],
    "brand": {
      "brandColors": [
        "#FFEA00",
        "#080808"
      ],
      "logoUrl": "https://cdn.grofomo.com/summer-fest/brand/logo.png",
      "logoVectorUrl": "https://cdn.grofomo.com/summer-fest/brand/logo.svg",
      "artworkUrl": "https://cdn.grofomo.com/summer-fest/brand/poster.jpg",
      "coverArtUrl": "https://cdn.grofomo.com/summer-fest/brand/cover.jpg",
      "backgroundColor": "#080808",
      "textColor": "#FAFAF7",
      "accentColor": "#FFEA00",
      "fontFamily": "Syne",
      "socialLinks": {
        "instagram": "https://instagram.com/summerfest",
        "spotify": "https://open.spotify.com/playlist/summerfest"
      },
      "mapImageUrl": "https://cdn.grofomo.com/summer-fest/brand/site-map.png",
      "themeMode": "brand",
      "fonts": {
        "headline": {
          "family": "Syne",
          "url": "https://fonts.gstatic.com/s/syne/v22/8vIS7w4qzmVxsWxjBZRjr0FKM_04uT6kR47NCV5Z.ttf",
          "weight": 700
        },
        "body": null
      }
    },
    "community": {
      "chatUrl": "https://chat.whatsapp.com/summerfest",
      "chatPlatform": "whatsapp",
      "chatLabel": "Summer Fest group chat"
    },
    "organiser": {
      "id": "b2d4a6f8-1c3e-4a5b-8d7f-2e9c0a1b3d45",
      "name": "Riot Promotions",
      "slug": "riot-promotions",
      "logoUrl": "https://cdn.grofomo.com/riot-promotions/logo.png"
    }
  }
}
iduuid
slugstring
The URL slug, fixed once the event is created.
namestring
descriptionstring | null
Long-form event copy.
summarystring | null
One line, for a card or a meta description.
ticketUrlstring | null
Where to send someone to buy. Null when no tickets are on sale.
capacitynumber | null
familyFriendlyboolean | null
musicGenresstring[]
Free-text genre tags for the event as a whole.
timezonestring
IANA zone, e.g. "Europe/London". Every local time in the API is in it.
datesobject
dates.startDatestring | null
First day, as `YYYY-MM-DD`.
dates.endDatestring | null
Last day, as `YYYY-MM-DD`. Equal to `startDate` for a one-day event.
dates.doorsOpenstring | null
Local opening time as `HH:MM`.
dates.doorsClosestring | null
Local closing time as `HH:MM`. May be after midnight.
dates.timezonestring | null
IANA zone, e.g. "Europe/London". Every `HH:MM` here is local to it.
dates.singleDayboolean | null
venueobject
venue.namestring | null
venue.addressstring | null
Street address, without city or postcode.
venue.citystring | null
venue.regionstring | null
State, province or county.
venue.postcodestring | null
venue.countrystring | null
Raw ISO 3166-1 alpha-2 code, e.g. "GB".
venue.indoorOutdoorstring | null
Free text, e.g. "outdoor".
stagesobject[]
Every stage. A lineup slot names its stage by `name`, not by `id`.
stages[].idstring
Stable within the event. Matches `stage` on a lineup slot by name, not by id.
stages[].namestring
stages[].typestring | null
Free text, e.g. "tent".
stages[].descriptionstring | null
stages[].imageUrlstring | null
brandobject
The organiser's colours, logos and fonts, so your site can match the event's identity.
brand.brandColorsstring[]
brand.logoUrlstring | null
brand.logoVectorUrlstring | null
brand.artworkUrlstring | null
brand.coverArtUrlstring | null
brand.backgroundColorstring | null
brand.textColorstring | null
brand.accentColorstring | null
brand.fontFamilystring | null
brand.socialLinksobject
brand.mapImageUrlstring | null
brand.themeMode"neutral" | "brand" | "brand-full"
brand.fontsobject
brand.fonts.headlineobject | null
brand.fonts.headline.familystring
brand.fonts.headline.urlstring
brand.fonts.headline.weightnumber
brand.fonts.bodyobject | null
brand.fonts.body.familystring
brand.fonts.body.urlstring
brand.fonts.body.weightnumber
communityobject
community.chatUrlstring | null
Invite link to the attendee group chat, when the organiser runs one.
community.chatPlatform"whatsapp" | "telegram" | "discord" | "signal" | … | null
Which platform the chat is on, so you can show the right icon.
community.chatLabelstring | null
Call-to-action text, e.g. "Summer Fest group chat".
organiserobject | null
Present only when the organiser has opted into a public profile — i.e. only when there is a page to link to.
organiser.iduuid
organiser.namestring
organiser.slugstring
organiser.logoUrlstring | null
Generated from EventDetailResponse

Errors

not_foundHTTP 404
No event with that slug is published on this surface. Check the slug, and check you sent `?surface=web`.