> ## Documentation Index
> Fetch the complete documentation index at: https://cal.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List a team's Events (cursor pagination)

> Returns every Event the team owns, including ones the authenticated user neither hosts nor co-hosts. The user must be an accepted member of the team, or of its parent organization. PBAC permission: `calEvent.read`. Learn more about API access control at https://cal.com/docs/api-reference/v2/access-control. Ordered by start time, newest first.

Cursor-based pagination: pass `pagination.nextCursor` from a previous response as the `cursor` query parameter to fetch the next page; omit `cursor` for the first page. `pagination.hasMore` is `false` and `pagination.nextCursor` is `null` on the last page.

<Note>Must pass `cal-api-version: 2026-05-01` (or later). Older versions use `take`/`skip` offset pagination.</Note>

Events are fixed-date RSVP pages served at cal.com/{slug}; they are not event types (bookable meeting templates) or calendar events. If accessed using an OAuth access token, the `TEAM_EVENT_READ` scope is required.



## OpenAPI

````yaml /api-reference/v2/openapi.json get /v2/teams/{teamId}/events
openapi: 3.0.0
info:
  title: Cal.com API v2
  description: ''
  version: 1.0.0
  contact: {}
servers: []
security: []
tags: []
paths:
  /v2/teams/{teamId}/events:
    get:
      tags:
        - Teams / Events
      summary: List a team's Events (cursor pagination)
      description: >-
        Returns every Event the team owns, including ones the authenticated user
        neither hosts nor co-hosts. The user must be an accepted member of the
        team, or of its parent organization. PBAC permission: `calEvent.read`.
        Learn more about API access control at
        https://cal.com/docs/api-reference/v2/access-control. Ordered by start
        time, newest first.


        Cursor-based pagination: pass `pagination.nextCursor` from a previous
        response as the `cursor` query parameter to fetch the next page; omit
        `cursor` for the first page. `pagination.hasMore` is `false` and
        `pagination.nextCursor` is `null` on the last page.


        <Note>Must pass `cal-api-version: 2026-05-01` (or later). Older versions
        use `take`/`skip` offset pagination.</Note>


        Events are fixed-date RSVP pages served at cal.com/{slug}; they are not
        event types (bookable meeting templates) or calendar events. If accessed
        using an OAuth access token, the `TEAM_EVENT_READ` scope is required.
      operationId: TeamsEventsController_listCursor
      parameters:
        - name: teamId
          required: true
          in: path
          schema:
            type: number
        - name: cursor
          required: false
          in: query
          description: >-
            Opaque cursor for cursor-based pagination. Pass the
            `pagination.nextCursor` value from a previous response to fetch the
            next page. Omit to fetch the first page.
          schema:
            example: >-
              eyJ2IjoyLCJzdGFydFRpbWUiOiIyMDMwLTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJldmVudFR5cGVVdWlkIjoiMDE4ZjRjMmUtM2YxYS03YWJjLTlkZWYtMDEyMzQ1Njc4OWFiIn0
            type: string
        - name: limit
          required: false
          in: query
          description: Maximum number of Events to return.
          schema:
            minimum: 1
            maximum: 250
            default: 50
            example: 25
            type: number
        - name: slug
          required: false
          in: query
          description: Filter by the event's public page slug (cal.com/{slug}).
          schema:
            example: team-offsite
            type: string
        - name: cal-api-version
          in: header
          description: >-
            Must be set to 2026-05-01 (or a later API version) for cursor
            pagination.
          required: true
          schema:
            type: string
            example: '2026-05-01'
            default: '2026-05-01'
        - name: Authorization
          in: header
          description: >-
            value must be `Bearer <token>` where `<token>` is api key prefixed
            with cal_, managed user access token, or OAuth access token
          required: true
          schema:
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventsCursorOutputResponseDto'
        '400':
          description: Invalid cursor
        '401':
          description: Unauthenticated
        '403':
          description: Not a member of the team, or insufficient permissions
components:
  schemas:
    EventsCursorOutputResponseDto:
      type: object
      properties:
        status:
          enum:
            - success
            - error
          type: string
          example: success
        data:
          type: array
          items:
            $ref: '#/components/schemas/EventOutputDto'
        pagination:
          $ref: '#/components/schemas/EventsCursorPaginationMetaDto'
      required:
        - status
        - data
        - pagination
    EventOutputDto:
      type: object
      properties:
        uuid:
          type: string
          description: Unique identifier of the Event.
        slug:
          type: string
        title:
          type: string
        description:
          type: string
          nullable: true
        startTime:
          format: date-time
          type: string
        endTime:
          format: date-time
          type: string
        timeZone:
          type: string
        visibility:
          enum:
            - PUBLIC
            - UNLISTED
          type: string
        hidden:
          type: boolean
        publishedAt:
          format: date-time
          type: string
          nullable: true
        cancelledAt:
          format: date-time
          type: string
          nullable: true
        locations:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/EventAddressLocationOutput'
                title: Address
              - $ref: '#/components/schemas/EventLinkLocationOutput'
                title: Link
              - $ref: '#/components/schemas/EventIntegrationLocationOutput'
                title: Integration
              - $ref: '#/components/schemas/EventOrganizersDefaultAppLocationOutput'
                title: Organizer Default App
        coverImageUrl:
          type: string
          nullable: true
        requiresApproval:
          type: boolean
        waitlistEnabled:
          type: boolean
        confirmedCount:
          type: number
          description: >-
            Confirmed guest count. Returned when listing Events and omitted when
            fetching a single Event by uuid.
        hosts:
          description: >-
            Ordered host roster, creator first. External co-hosts are not
            included.
          type: array
          items:
            $ref: '#/components/schemas/EventHostOutput'
        capacity:
          type: number
          nullable: true
          description: Total seats; null when unlimited.
          example: 100
        price:
          type: number
          nullable: true
          description: Ticket price in the currency's smallest unit; null when free.
          example: 1500
        currency:
          type: string
          nullable: true
          example: eur
        cancellationReason:
          type: string
          nullable: true
        userId:
          type: number
          nullable: true
          description: Owner user id for a personal Event; null for a team-owned one.
        teamId:
          type: number
          nullable: true
          description: Owning team id for a team-owned Event; null for a personal one.
      required:
        - uuid
        - slug
        - title
        - startTime
        - endTime
        - timeZone
        - visibility
        - hidden
        - locations
        - requiresApproval
        - waitlistEnabled
        - hosts
    EventsCursorPaginationMetaDto:
      type: object
      properties:
        nextCursor:
          type: string
          nullable: true
          description: >-
            Opaque cursor to fetch the next page. Pass this value as the
            `cursor` query parameter on the next request. `null` when `hasMore`
            is `false`.
          example: >-
            eyJ2IjoyLCJzdGFydFRpbWUiOiIyMDMwLTAxLTAxVDAwOjAwOjAwLjAwMFoiLCJldmVudFR5cGVVdWlkIjoiMDE4ZjRjMmUtM2YxYS03YWJjLTlkZWYtMDEyMzQ1Njc4OWFiIn0
        hasMore:
          type: boolean
          description: Whether more pages are available after this one.
          example: true
      required:
        - nextCursor
        - hasMore
    EventAddressLocationOutput:
      type: object
      properties:
        type:
          type: string
          example: address
          enum:
            - address
        address:
          type: string
          example: 123 Event Street
      required:
        - type
        - address
    EventLinkLocationOutput:
      type: object
      properties:
        type:
          type: string
          example: link
          enum:
            - link
        link:
          type: string
          example: https://example.com/event
      required:
        - type
        - link
    EventIntegrationLocationOutput:
      type: object
      properties:
        type:
          type: string
          example: integration
          enum:
            - integration
        integration:
          enum:
            - cal-video
            - google-meet
            - zoom
            - whereby-video
            - whatsapp-video
            - webex-video
            - telegram-video
            - tandem
            - sylaps-video
            - skype-video
            - sirius-video
            - signal-video
            - shimmer-video
            - salesroom-video
            - roam-video
            - riverside-video
            - ping-video
            - office365-video
            - mirotalk-video
            - jitsi
            - jelly-video
            - jelly-conferencing
            - huddle
            - facetime-video
            - element-call-video
            - eightxeight-video
            - discord-video
            - demodesk-video
            - campfire-video
          type: string
          example: cal-video
        credentialId:
          type: number
          description: >-
            Identifies which connected account will host the Event when a host
            has multiple connected accounts.
      required:
        - type
        - integration
    EventOrganizersDefaultAppLocationOutput:
      type: object
      properties:
        type:
          type: string
          example: organizersDefaultApp
          enum:
            - organizersDefaultApp
      required:
        - type
    EventHostOutput:
      type: object
      properties:
        userId:
          type: number
          example: 123
        name:
          type: string
          example: Jane Doe
          description: Empty string when the host has no name.
        username:
          type: string
          example: jane
          description: Empty string when the host has no username.
        avatarUrl:
          type: string
          description: Empty string when the host has no avatar.
      required:
        - userId
        - name
        - username
        - avatarUrl

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.