Calendar

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.

GET /v1/events

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 }
}
Worth knowing

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.

Errors

Every failure uses the same shape, with a stable string code you can branch on. See the error reference.

Related

GET /v1/events

Runs the real request against your own workspace. The key is used once and never stored.