swarmtix_events_list
Lists the events a connection can see, alphabetically by name, one page at a time
swarmtix_events_list
Lists the events this connection can see, in alphabetical order by name, one page at a time. Each entry carries the event's id, its URL slug, its name, its city and country, and its scheduled dates.
When you would reach for it
- To find an event's id or slug before calling anything that takes one.
- To answer "what have I got on?" — the list is compact enough that a page of 50 events fits in one result comfortably.
- As the first step of a roll-up. Most multi-event questions start here and then call
swarmtix_analytics_eventper event.
For one event in full, use swarmtix_events_get instead. This list deliberately carries only enough to identify an event and place it in time.
Scope
events:read
Reads your events: names, dates, venues, ticket types and prices. It does not cover who bought anything.
Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
limit | integer | No | 50 | How many events to return. 1 to 200. |
cursor | string | No | — | The cursor from the end of a previous page. Omit to start at the beginning. |
Example call
{
"name": "swarmtix_events_list",
"arguments": { "limit": 2 }
}What comes back
A JSON array. If more rows follow, a blank line and a continuation line come after it.
[
{
"id": "8f14e45f-ceea-467a-9c3d-1b2a5f6e7d80",
"slug": "spring-summit-2026",
"name": "Spring Summit 2026",
"city": "Lisbon",
"country": "Portugal",
"multiDay": true,
"dates": [
{ "start": "2026-11-04T19:00:00", "end": "2026-11-04T23:00:00" },
{ "start": "2026-11-05T10:00:00", "end": "2026-11-05T17:00:00" }
]
},
{
"id": "9c2d4b18-7e05-4a36-8f1b-6d0a3c72e594",
"slug": "winter-workshop",
"name": "Winter Workshop",
"city": "Porto",
"country": "Portugal",
"multiDay": false,
"dates": [
{ "start": "2026-12-12T09:30:00", "end": "2026-12-12T16:00:00" }
]
}
]
Showing 2 of 37. Call again with cursor "OWMyZDRiMTgtN2UwNS00YTM2LThmMWItNmQwYTNjNzJlNTk0" for the rest.| Field | What it is |
|---|---|
id | The event's id. Accepted anywhere a tool takes an event. |
slug | The event's URL slug — the last part of its public address. Also accepted anywhere a tool takes an event. |
name | The event's name |
city, country | Where it happens. Empty for an online event. |
multiDay | Whether the event is configured as a multi-day run |
dates | Its scheduled dates, as local start and end times |
The dates entries here carry no id and no capacity. When you need either — and every tool that narrows to a single date needs the id — call swarmtix_event_dates_list.
Fields with no value are left out of the JSON entirely rather than sent as null. An event with no city simply has no city key.
What happens when you call it
limitis checked. Out of range is refused, not clamped.- Every event this organizer account can see is fetched — the service returns the whole set in one unbounded list, with no paging of its own.
- The organisation filter is applied here, at this step, rather than by the service. The service answers "every event this person can reach": the events the account created, plus every event belonging to a team it is a member of, and neither half mentions an organisation. An organizer invited onto teams in two organisations would otherwise get both organisations' events back from a token issued for one. The returned rows carry no organisation of their own, so their ids are taken back to the database to find out which organisation each event is really in, and anything outside this connection's organisation is dropped. It happens before the page is cut, so the cursor always names a row you were actually given.
- The list is sorted by name, case-insensitively, then by id. The id is the tiebreak: two events with the same name would otherwise swap places between calls and a cursor would land in a different spot each time.
- One page is cut from the sorted list, plus one extra row to find out whether anything follows.
- The page is projected to the fields above and serialized. If the JSON would breach the 60,000-character budget, trailing rows are dropped and the cursor is taken from the last row that actually made it out.
Troubleshooting
"limit is not valid: it was 500. Expected a whole number from 1 to 200, or nothing for 50."
limit must be between 1 and 200. It is refused rather than reduced, because silently returning 200 rows to a caller who asked for 500 looks exactly like the list ending.
"cursor is not valid: it was not issued by this server."
The cursor was made up, edited or copied from a different tool. Drop it and start the list again.
"cursor is not valid: the event it points at is no longer in this list."
The cursor was genuine, but the event it names is no longer in the result set — usually because it was removed between the two calls. Resuming from the top would silently repeat rows you already have, so the call is refused instead. Start the list again.
"This connection is not authorized for events:read. Reconnect and grant it to use this tool."
Reconnect and approve events:read on the consent page.
An event you can see in the dashboard is missing from the list
The list covers the events the authorizing organizer account can see, inside the organisation this connection was granted. Two things to check: whether that account has access to the event, and whether the event belongs to the organisation on the connection — swarmtix_whoami names both.
"Swarmtix could not complete this request. Nothing was changed."
A failure on our side while fetching the events. Nothing was read partially — retry, and if it persists, quote the time to support so the call can be found in Settings → Developers → Logs.
Use cases
- "Which events are coming up?" — one call, then the assistant reads the dates
- Finding a slug to hand to a tool that takes an event
- Season planning — list last year's events before duplicating one
- Cross-event reporting — the index a per-event analytics loop walks