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

pagenumber

Page number (1-based). Default 1

perPagenumber

Items per page. Default 20

timeFilter'upcoming' | 'past'

Filter by time

isPaidstring

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

qstring

Keyword (title / description / slug, AND)

tagsstring

Tags (comma-separated, OR)

parentEventIdstring

Parent event ID for side events

playlistIdstring

Limit to events in a playlist

startDate / endDatestring (YYYY-MM-DD)

Filter by date range overlap

featured'true'

Featured only

groupByDate'true'

Group by date

bboxstring

Map bbox minLng,minLat,maxLng,maxLat

Response

FieldTypeDescription
eventsEvent[]Events (with tags / isPaid / hasEnded)
pageInfoobjectPagination info (totalCount / totalPages / page / perPage)
dateGroupsobject[]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 }
}