Events

List / search events

GET/events

Search and list events with rich filters. The public response omits startTime / endTime / onlineUrl (read schedules instead). groupByDate=true returns date-grouped results.

AuthNot required

Query parameters

pagenumberoptional

Page number (1-based). Default 1.

perPagenumberoptional

Items per page. Default 20.

timeFilter'upcoming' | 'past'optional

Filter by time.

isPaidstringoptional

Paid / free (true / false, comma-separated)

qstringoptional

Keyword (title / description / slug, AND)

tagsstringoptional

Tags (comma-separated, OR)

parentEventIdstringoptional

Parent event ID for side events.

playlistIdstringoptional

Limit to events in a playlist.

startDate / endDatestring (YYYY-MM-DD)optional

Filter by date range overlap.

featured'true'optional

Featured only.

groupByDate'true'optional

Group by date.

located'true'optional

Only events that have coordinates. Use with groupByDate=true; honours bbox (for the map screen's list).

bboxstringoptional

Map bbox minLng,minLat,maxLng,maxLat (when located=true).

Response

FieldTypeDescription
eventsEvent[]Events (with tags / isPaid / hasEnded)
pageInfoPageInfoPagination info (totalCount / totalPages / page / perPage)
dateGroupsEventDateGroup[]When groupByDate=true. Array of { date, events }.
Request
curl https://api.4s.link/events \
-H "Authorization: Bearer 4s_at_..."
Example response
{
"events": [
{
"id": "e1f2a3b4-...",
"title": "4S Tech Conference 2026",
"catchphrase": "...",
"eventType": "ONSITE",
"state": "PUBLISHED",
"slug": "tech-conf-2026",
"schedules": [{ "startTime": "...", "endTime": "..." }],
"location": { "name": "..." },
"thumbnailUrl": "https://.../thumb.png",
"organizers": [],
"tickets": [],
"tags": ["tech"],
"isPaid": false,
"hasEnded": false
}
],
"pageInfo": { "totalCount": 100, "totalPages": 5, "page": 1, "perPage": 20 }
}