---
title: "List user events"
method: GET
path: "/v1/users/{user_id}/events"
tags: ["Events"]
---

# List user events

`GET /v1/users/{user_id}/events`

## Request

- Base URL: `http://0.0.0.0:3000`
- URL: `http://0.0.0.0:3000/v1/users/{user_id}/events`
- Auth: none declared

Returns events from the user's active calendars.

**Filtering:**
- `calendar_id`: Filter to a specific calendar (cal_xxx format)
- `start_date`: Events ending after this date (YYYY-MM-DD)
- `end_date`: Events starting before this date (YYYY-MM-DD)

**Expand parameter**:
By default, `description`, `location`, `attendees`, `html_link`, `event_link`, `visibility`, and `response_status` are not included.
Use `expand=description,location,attendees,html_link,event_link,visibility,response_status` to include these fields.

**Pagination (cursor-only):**
- `limit`: Maximum number of events per page (default: 100, max: 500)
- `cursor`: Opaque token from `pagination.next_cursor` of a prior response. Pass it back unchanged to fetch the next page. Omit on the first page.

**Ordering:** `start_time` ASC — earliest event first.

**Note:** Only events from active calendars are returned. Cancelled events are excluded.

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `calendar_id` string
- `start_date` string, date
- `end_date` string, date
- `limit` string
- `cursor` string
- `expand` string

## Response `200`

Default Response

- object
  - `success` true, required
  - `data` object[], required
    - `id` string, required: Opaque event ID (evt_xxx format)
    - `calendar_id` string, required: Opaque calendar ID (cal_xxx format)
    - `title` string, nullable: Event title
    - `description` string, nullable: Event description or body
    - `start_time` string, date-time, required: Event start time (ISO8601)
    - `end_time` string, date-time, required: Event end time (ISO8601)
    - `location` string, nullable: Event location
    - `status` string, nullable: Event status (confirmed, tentative, cancelled)
    - `all_day` boolean, required: Whether this is an all-day event
    - `organizer_entity_id` string, nullable: Entity ID of the organizer
    - `attendee_entity_ids` string[], nullable: Entity IDs of attendees
    - `attendees` object[], nullable: Raw attendee data from the calendar provider
    - `html_link` string, nullable: Link to view event in provider's web UI
    - `event_link` string, nullable: Video conference link if present
    - `visibility` string, nullable: Event visibility (default, public, private, confidential)
    - `response_status` string, nullable: Calendar owner's RSVP status (needsAction, accepted, declined, tentative)
    - `update_count` integer, required: Number of meaningful changes detected during sync
    - `created_at` string, date-time, required: When the event was created
    - `updated_at` string, date-time, nullable: When the event was last modified
  - `pagination` union, required
    - object
      - `limit` number, required
      - `has_more` true, required
      - `next_cursor` string, required
    - object
      - `limit` number, required
      - `has_more` false, required

## Other responses

- `400`: Default Response
- `401`: Default Response
- `500`: Default Response

---

[API](https://skmtc.dev/attrove/apis/attrove-api.md) · [All operations](https://skmtc.dev/attrove/apis/attrove-api/llms.txt) · [OpenAPI document](https://skmtc.dev/attrove/apis/attrove-api/revisions/fcdc818b45cb?raw)
