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.
titlestringexcerptstring- Short standfirst, for a listing card.
heroImageUrlstring | nulltagsstring[]- Free-text tags, e.g. "lineup". May be empty.
authorstring | nullpublishedAtstring- Publication time. The index is sorted newest first on this.
updatedAtstringbodyMarkdownstring- 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.