List / search events
GET
/eventsSearch and list events with rich filters. The public response omits startTime / endTime / onlineUrl (read schedules instead). groupByDate=true returns date-grouped results.
| Auth | Not required |
|---|
Query parameters
pagenumberPage number (1-based). Default 1
perPagenumberItems per page. Default 20
timeFilter'upcoming' | 'past'Filter by time
isPaidstringPaid / free (true / false, comma-separated)
qstringKeyword (title / description / slug, AND)
tagsstringTags (comma-separated, OR)
parentEventIdstringParent event ID for side events
playlistIdstringLimit to events in a playlist
startDate / endDatestring (YYYY-MM-DD)Filter by date range overlap
featured'true'Featured only
groupByDate'true'Group by date
bboxstringMap bbox minLng,minLat,maxLng,maxLat
Response
| Field | Type | Description |
|---|---|---|
events | Event[] | Events (with tags / isPaid / hasEnded) |
pageInfo | object | Pagination info (totalCount / totalPages / page / perPage) |
dateGroups | object[] | 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 }}