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.

News article

GET/v1/events/{slug}/news/{articleSlug}

One published article, including its body as sanitised HTML.

On the web surface the response carries a NewsArticle JSON-LD block.

Request

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

Path parameters

slugstringrequired
The event's URL slug. Globally unique, and fixed once the event is created. Example: `summer-fest`.
articleSlugstringrequired
The article's slug, from the news index. Example: `first-wave-announced`.

Response

200 OK
{
  "apiVersion": 1,
  "data": {
    "slug": "second-wave-announced",
    "title": "Second wave announced",
    "excerpt": "Twelve more names join the bill, including a Sunday close on the Main Stage.",
    "heroImageUrl": "https://cdn.grofomo.com/summer-fest/news/second-wave.jpg",
    "tags": [
      "lineup"
    ],
    "author": "Riot Promotions",
    "publishedAt": "2026-05-28T09:00:00.000Z",
    "updatedAt": "2026-05-28T09:00:00.000Z",
    "bodyMarkdown": "## Twelve more names\n\nThe second wave lands today, and it fills out both the Friday night Orchard programme and Sunday on the Main Stage.\n\nTickets for all three days are on sale now.",
    "bodyHtml": "<h2>Twelve more names</h2>\n<p>The second wave lands today, and it fills out both the Friday night Orchard programme and Sunday on the Main Stage.</p>\n<p>Tickets for all three days are on sale now.</p>",
    "seoTitle": "Summer Fest 2026: second wave announced",
    "seoDescription": "Twelve more names join the Summer Fest bill, including a Sunday Main Stage close.",
    "schemaOrg": {
      "@context": "https://schema.org",
      "@type": "NewsArticle",
      "headline": "Second wave announced",
      "datePublished": "2026-05-28T09:00:00.000Z",
      "dateModified": "2026-05-28T09:00:00.000Z",
      "author": {
        "@type": "Organization",
        "name": "Riot Promotions"
      }
    }
  }
}
slugstring
Pass this to the single-article endpoint for the body.
titlestring
excerptstring
Short standfirst, for a listing card.
heroImageUrlstring | null
tagsstring[]
Free-text tags, e.g. "lineup". May be empty.
authorstring | null
publishedAtstring
Publication time. The index is sorted newest first on this.
updatedAtstring
bodyMarkdownstring
The canonical body, in markdown.
bodyHtmlstring | null
The same body pre-rendered to sanitised HTML, so you need no markdown renderer.
seoTitlestring | null
Override for the page `<title>`, when the organiser set one.
seoDescriptionstring | null
Override for the meta description.
schemaOrgobject | null
A ready-made schema.org `NewsArticle` block for a JSON-LD script tag.
Generated from EventNewsArticleResponse

Structured data

The response carries a ready-made NewsArticle JSON-LD block in schemaOrg. Emitted on the web surface. Drop it into a <script type="application/ld+json"> tag and search engines can read your lineup without you modelling any of it yourself.

Errors

unauthorizedHTTP 401
No key was sent and the organiser requires one — or the key is invalid, revoked, belongs to another organisation, or is scoped to a different event.
origin_not_allowedHTTP 403
Your site's domain is not on the organiser's allowed list. Browser calls only: a server sends no Origin header and is unaffected.
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.