List events
Lists events across every calendar in a time range, with recurring events expanded. Start and end are required: a recurring series has no finite end.
Permission
The key must be granted calendar.events.read
A key without it gets 403 insufficient_scope, with the missing permission named in details.
start and end are required because a recurring series expands without limit — there is no finite answer to "all events". Recurring events arrive already expanded, one entry per occurrence. Times are UTC; the offset a calendar app shows is that app's timezone, so anything scheduling by wall-clock time needs the user's zone from elsewhere.
Query parameters
| Field | Type | Description |
|---|---|---|
start required |
RFC 3339 | Beginning of the window. |
end required |
RFC 3339 | End of the window. Must be after start. |
calendar_id |
string | Limit to one calendar. Repeat for several. Omit for all of them. |
limit |
integer |
Events in this response, 1 to 1000.
Defaults to 250
|
Request
curl https://api.veruapis.com/v1/events?start=2026-09-05T00:00:00Z&end=2026-09-06T00:00:00Z \
-H "Authorization: Bearer vak_live_..."
Response
{
"data": [
{
"id": "fa9a0631-da8e-4210-8a92-d6f880986294",
"calendar_id": "1d81f1c3-4df0-42c8-b880-506e77333792",
"summary": "Meeting with Justina",
"starts_at": "2026-09-05T12:00:00Z",
"ends_at": "2026-09-05T13:00:00Z",
"is_recurring": false,
"organizer": "[email protected]",
"attendees": [
{ "email": "[email protected]", "partstat": "NEEDS-ACTION", "role": "REQ-PARTICIPANT" }
]
}
],
"meta": { "request_id": "req_01j8z9...", "timestamp": "2026-09-02T10:00:00Z" },
"pagination": { "next_cursor": "eyJ1aWQiOjQyMTF9", "has_more": true, "limit": 25 }
}
start and end are both required: a recurring series expands without limit, so there is no finite answer to "all events". Times are UTC. The offset a calendar app shows is that app's timezone, not this API's, so anything scheduling by wall-clock time needs the user's zone from somewhere else.
Every failure uses the same shape, with a stable string code you can branch on. See the error reference.
Related
- POST Create a calendar
- POST Create an event
- DELETE Delete a calendar
- DELETE Delete an event
- POST Find a time that works
- POST Query free/busy
- GET Get a calendar
- GET Get an event
- GET List events in a calendar
- GET List calendars
- POST Respond to an invitation
- PATCH Update a calendar
- PATCH Update an event