> ## 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 personal contacts

> Returns the authenticated user's personal contacts from their Contacts page, ordered by stored name (nulls last), email and id, with limit/cursor pagination. When pagination.hasMore is true, pass pagination.nextCursor as cursor with the same search. Use usernames of contacts with groupBooking eligible for dynamic group availability and booking with the authenticated user. Team and organization members are not included. A contact whose email belongs to a verified, discoverable Cal account shows that account's name, username and booking page. Contact avatars and Cal user ids are never returned. If accessed using an OAuth access token, the `CONTACT_READ` scope is required.



## OpenAPI

````yaml /api-reference/v2/openapi.json get /v2/contacts
openapi: 3.0.0
info:
  title: Cal.com API v2
  description: ''
  version: 1.0.0
  contact: {}
servers: []
security: []
tags: []
paths:
  /v2/contacts:
    get:
      tags:
        - Contacts
      summary: List personal contacts
      description: >-
        Returns the authenticated user's personal contacts from their Contacts
        page, ordered by stored name (nulls last), email and id, with
        limit/cursor pagination. When pagination.hasMore is true, pass
        pagination.nextCursor as cursor with the same search. Use usernames of
        contacts with groupBooking eligible for dynamic group availability and
        booking with the authenticated user. Team and organization members are
        not included. A contact whose email belongs to a verified, discoverable
        Cal account shows that account's name, username and booking page.
        Contact avatars and Cal user ids are never returned. If accessed using
        an OAuth access token, the `CONTACT_READ` scope is required.
      operationId: ContactsController_list
      parameters:
        - name: search
          required: false
          in: query
          description: Part of a contact's name or email, to narrow the list.
          schema:
            maxLength: 100
            example: jamie
            type: string
        - name: limit
          required: false
          in: query
          description: Maximum number of contacts to return.
          schema:
            minimum: 1
            maximum: 50
            default: 50
            example: 50
            type: number
        - name: cursor
          required: false
          in: query
          description: >-
            Opaque cursor from pagination.nextCursor. Omit for the first page;
            keep the same search on subsequent pages.
          schema:
            type: string
        - 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/ListContactsOutputResponseDto'
        '400':
          description: Invalid cursor
        '401':
          description: Unauthenticated
        '403':
          description: Insufficient permissions
        '429':
          description: Too many contact lookups
components:
  schemas:
    ListContactsOutputResponseDto:
      type: object
      properties:
        status:
          enum:
            - success
            - error
          type: string
          example: success
        data:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/CalUserContactOutput'
                title: Contact on Cal
              - $ref: '#/components/schemas/NonCalUserContactOutput'
                title: Contact not on Cal
            discriminator:
              propertyName: type
              mapping:
                calUser: '#/components/schemas/CalUserContactOutput'
                nonCalUser: '#/components/schemas/NonCalUserContactOutput'
          description: >-
            The contacts on this page, discriminated by `type`. Only a contact
            on Cal has a username, booking URL and group booking eligibility.
        pagination:
          $ref: '#/components/schemas/ContactsCursorPaginationMetaDto'
      required:
        - status
        - data
        - pagination
    CalUserContactOutput:
      type: object
      properties:
        type:
          enum:
            - calUser
          type: string
          description: >-
            The email belongs to a verified, discoverable Cal account. The
            contact shows the name from that account, and its name can't be
            changed.
          example: calUser
        id:
          type: string
          example: 0192f3a1-7c2b-7d4e-9a10-000000000001
        name:
          type: string
          nullable: true
          description: >-
            The name from the contact's Cal account, or the stored name when
            that account has none.
          example: Jamie Rivera
        email:
          type: string
          example: jamie.rivera@example.com
        tags:
          description: The user's own tags on this contact.
          type: array
          items:
            $ref: '#/components/schemas/ContactTagOutput'
        username:
          type: string
          nullable: true
          description: The Cal account's username, null when the account has none yet.
          example: jamie
        bookingUrl:
          type: string
          nullable: true
          description: >-
            Full URL to the contact's booking page, null when the account has no
            username yet.
          example: https://cal.com/jamie
        groupBooking:
          enum:
            - eligible
            - outsideOrganization
            - unavailable
          type: string
          description: >-
            Whether this contact can join a dynamic group booking with the
            authenticated user. eligible: available for group booking with them;
            outsideOrganization: in a different organization; unavailable:
            dynamic group booking is unavailable (disabled, locked or the user
            themself).
      required:
        - type
        - id
        - name
        - email
        - tags
        - username
        - bookingUrl
        - groupBooking
    NonCalUserContactOutput:
      type: object
      properties:
        type:
          enum:
            - nonCalUser
          type: string
          description: The email doesn't belong to a verified, discoverable Cal account.
          example: nonCalUser
        id:
          type: string
          example: 0192f3a1-7c2b-7d4e-9a10-000000000001
        name:
          type: string
          nullable: true
          description: The name the user stored for this contact.
          example: Jamie Rivera
        email:
          type: string
          example: jamie.rivera@example.com
        tags:
          description: The user's own tags on this contact.
          type: array
          items:
            $ref: '#/components/schemas/ContactTagOutput'
      required:
        - type
        - id
        - name
        - email
        - tags
    ContactsCursorPaginationMetaDto:
      type: object
      properties:
        nextCursor:
          type: string
          nullable: true
          description: >-
            Opaque cursor to fetch the next page. Pass this value as the cursor
            query parameter with the same search. null when hasMore is false.
        hasMore:
          type: boolean
          description: Whether more pages are available after this one.
      required:
        - nextCursor
        - hasMore
    ContactTagOutput:
      type: object
      properties:
        id:
          type: string
          example: 0192f3a1-7c2b-7d4e-9a10-00000000000a
        name:
          type: string
          example: Investors
      required:
        - id
        - name

````

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