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.

Announcements

GET/v1/events/{slug}/broadcasts

Announcements the organiser has pushed to attendees — stage changes, weather notices, running-order updates.

Good for a live "latest updates" strip during the event itself. Never cached, so it is safe to poll.

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/broadcasts'

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": {
    "broadcasts": [
      {
        "id": "0d2f4a6c-8e0b-4c73-9f5a-2c4e6a8d0b59",
        "title": "Main Stage running 20 minutes late",
        "body": "Weather delay this morning. Everything from 18:00 shifts back by 20 minutes.",
        "category": "update",
        "sentAt": "2026-07-18T16:42:00.000Z",
        "deepLink": "https://grfm.to/e/summer-fest"
      },
      {
        "id": "4a6c8e0d-2f4b-4e95-8a7c-1f3d5b7e9c60",
        "title": "Last entry is 21:00",
        "body": "Gates close for good at 21:00 tonight. Plan your arrival.",
        "category": "reminder",
        "sentAt": "2026-07-17T14:00:00.000Z",
        "deepLink": null
      }
    ]
  }
}
broadcastsobject[]
broadcasts[].iduuid
broadcasts[].titlestring
broadcasts[].bodystring
broadcasts[].category"reminder" | "update" | "marketing"
What kind of announcement this was. Mirrors the push opt-in it was sent under.
broadcasts[].sentAtstring
When it went out. Newest first.
broadcasts[].deepLinkstring | null
Where the announcement pointed, when it pointed anywhere.
Generated from EventBroadcastIndexResponse

Errors

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

Notes

  • Rate limited to roughly 60 requests per minute per caller. Guidance, not a contract — see caching and rate limits.
  • Cache-Control: no-store