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

# List calendar availability (paginated)

> Returns the bookable appointment slots for a clinic's calendar resources over a date range of up to 7 days.

Calendar availability represents the open appointment slots for each resource on a calendar, with all scheduling rules applied — resource schedules, existing appointments, calendar events, designations, and business hours are all accounted for. Availability can be requested for one or more resources and one or more appointment kinds at once; the result is computed independently for each resource-and-kind combination, since an appointment kind's configured duration and designation-based restrictions affect which slots are bookable.

The appointment length used to size the returned slots defaults to the kind's configured duration, but can be overridden with a custom length that applies to every requested kind. Start times are offered on the calendar's block-increment grid rather than stepping by the appointment length, so overlapping start times are returned (for example, a 15-minute grid with a 30-minute appointment offers starts at 8:00, 8:15, and 8:30). Grid alignment is computed in the clinic's local time.

Results are paginated by appointment slot rather than by resource. When a resource's slots span a page boundary, that resource appears on consecutive pages with the remaining slots.

To keep responses bounded, the number of requested appointment kinds per call is capped, and each page returns a bounded number of slots.



## OpenAPI

````yaml get /ext/v2/calendar-availability/paginated/
openapi: 3.1.0
info:
  description: ''
  title: NinjaAPI
  version: 2.0.0
servers:
  - url: https://connect.vetcove.com/
security: []
paths:
  /ext/v2/calendar-availability/paginated/:
    get:
      tags:
        - Scheduler
      summary: List calendar availability (paginated)
      description: >-
        Returns the bookable appointment slots for a clinic's calendar resources
        over a date range of up to 7 days.


        Calendar availability represents the open appointment slots for each
        resource on a calendar, with all scheduling rules applied — resource
        schedules, existing appointments, calendar events, designations, and
        business hours are all accounted for. Availability can be requested for
        one or more resources and one or more appointment kinds at once; the
        result is computed independently for each resource-and-kind combination,
        since an appointment kind's configured duration and designation-based
        restrictions affect which slots are bookable.


        The appointment length used to size the returned slots defaults to the
        kind's configured duration, but can be overridden with a custom length
        that applies to every requested kind. Start times are offered on the
        calendar's block-increment grid rather than stepping by the appointment
        length, so overlapping start times are returned (for example, a
        15-minute grid with a 30-minute appointment offers starts at 8:00, 8:15,
        and 8:30). Grid alignment is computed in the clinic's local time.


        Results are paginated by appointment slot rather than by resource. When
        a resource's slots span a page boundary, that resource appears on
        consecutive pages with the remaining slots.


        To keep responses bounded, the number of requested appointment kinds per
        call is capped, and each page returns a bounded number of slots.
      operationId: listCalendarAvailabilityPaginated
      parameters:
        - description: >-
            Required. Start date for fetching availability. This will be
            translated to a datetime representing the start of the day in the
            clinic's timezone. Must be no more than 7 days before `end_date`.
            Format: YYYY-MM-DD
          in: query
          name: start_date
          required: true
          schema:
            description: >-
              Required. Start date for fetching availability. This will be
              translated to a datetime representing the start of the day in the
              clinic's timezone. Must be no more than 7 days before `end_date`.
              Format: YYYY-MM-DD
            title: Start Date
            type: string
        - description: >-
            End date for fetching availability. This will be translated to a
            datetime representing the end of the day in the clinic's timezone.
            Must be no more than 7 days after `start_date`. Defaults to
            `start_date` if omitted. Format: YYYY-MM-DD
          in: query
          name: end_date
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              End date for fetching availability. This will be translated to a
              datetime representing the end of the day in the clinic's timezone.
              Must be no more than 7 days after `start_date`. Defaults to
              `start_date` if omitted. Format: YYYY-MM-DD
            title: End Date
        - description: >-
            Filter to specific calendar resources by ID. Accepts multiple IDs.
            When omitted, availability is returned for every resource on the
            calendar.
          in: query
          name: calendar_resource_ids
          required: false
          schema:
            anyOf:
              - items:
                  type: integer
                type: array
              - type: 'null'
            description: >-
              Filter to specific calendar resources by ID. Accepts multiple IDs.
              When omitted, availability is returned for every resource on the
              calendar.
            title: Calendar Resource Ids
        - description: >-
            Filter by appointment kind by ID. Accepts multiple IDs. Controls
            slot duration and designation filtering; each requested kind
            produces its own set of response entries. When omitted, a single
            kind-less pass is returned at the calendar's default duration.
          in: query
          name: appointment_kind_ids
          required: false
          schema:
            anyOf:
              - items:
                  type: integer
                type: array
              - type: 'null'
            description: >-
              Filter by appointment kind by ID. Accepts multiple IDs. Controls
              slot duration and designation filtering; each requested kind
              produces its own set of response entries. When omitted, a single
              kind-less pass is returned at the calendar's default duration.
            title: Appointment Kind Ids
        - description: >-
            Overrides the appointment kind's default duration, in minutes. When
            provided it applies to every requested kind. Must be a positive
            multiple of the calendar's block increment.
          in: query
          name: duration
          required: false
          schema:
            anyOf:
              - type: integer
              - type: 'null'
            description: >-
              Overrides the appointment kind's default duration, in minutes.
              When provided it applies to every requested kind. Must be a
              positive multiple of the calendar's block increment.
            title: Duration
        - description: >-
            The maximum number of appointment slots to return per page, counted
            by summing nested slots across every resource/kind entry on that
            page. A resource/kind group that spans a page boundary is split, and
            only the slots on this page count toward the limit. Defaults to
            1000; the maximum is 5000.
          in: query
          name: limit
          required: false
          schema:
            default: 1000
            description: >-
              The maximum number of appointment slots to return per page,
              counted by summing nested slots across every resource/kind entry
              on that page. A resource/kind group that spans a page boundary is
              split, and only the slots on this page count toward the limit.
              Defaults to 1000; the maximum is 5000.
            maximum: 5000
            minimum: 1
            title: Limit
            type: integer
        - description: >-
            A cursor token from a previous response's next page URL. Fetches
            slots after the last slot of the previous page. Omit to start from
            the first page.
          in: query
          name: cursor
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              A cursor token from a previous response's next page URL. Fetches
              slots after the last slot of the previous page. Omit to start from
              the first page.
            title: Cursor
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalCalendarAvailabilitySchemaList'
          description: OK
      security:
        - ExternalAPIAuth: []
components:
  schemas:
    ExternalCalendarAvailabilitySchemaList:
      properties:
        data:
          description: A single page of data contained within this list.
          items:
            $ref: '#/components/schemas/ExternalCalendarAvailabilitySchema'
          title: Data
          type: array
        has_more:
          default: false
          description: Whether there are more pages or data in this list.
          title: Has More
          type: boolean
        next_page:
          description: A URL linking to the next page of this list.
          title: Next Page
          type: string
        type:
          default: list
          description: Type of this object. Always `list`.
          title: Type
          type: string
      required:
        - data
        - next_page
      title: ExternalCalendarAvailabilitySchemaList
      type: object
    ExternalCalendarAvailabilitySchema:
      properties:
        appointment_kind_id:
          anyOf:
            - type: integer
            - type: 'null'
          description: >-
            The ID of the appointment kind these slots apply to, or null when no
            appointment kind was requested. When null, slots are sized by the
            calendar's configured default appointment duration.
          title: Appointment Kind Id
        calendar_resource_id:
          description: The ID of the calendar resource.
          title: Calendar Resource Id
          type: integer
        calendar_resource_name:
          description: The name of the calendar resource.
          title: Calendar Resource Name
          type: string
        slots:
          description: >-
            The available appointment slots for this resource within the
            requested date range.
          items:
            $ref: '#/components/schemas/ExternalAvailabilitySlotSchema'
          title: Slots
          type: array
      required:
        - calendar_resource_id
        - calendar_resource_name
        - appointment_kind_id
        - slots
      title: ExternalCalendarAvailabilitySchema
      type: object
    ExternalAvailabilitySlotSchema:
      properties:
        end_datetime:
          description: The end of this available slot, in UTC.
          format: date-time
          title: End Datetime
          type: string
        start_datetime:
          description: The start of this available slot, in UTC.
          format: date-time
          title: Start Datetime
          type: string
      required:
        - start_datetime
        - end_datetime
      title: ExternalAvailabilitySlotSchema
      type: object
  securitySchemes:
    ExternalAPIAuth:
      scheme: bearer
      type: http

````