Zocdoc appointments API

Endpoints for booking, cancelling, and rescheduling appointments, including retrieving current appointment statuses and updated information.

Operations 9

POST /v1/appointments Create appointment #
GET /v1/appointments Get appointments #
GET /v1/appointments/{appointment_id} Get appointment by id #
GET /v1/appointments/{appointment_id}/participants Get participants for appointment #
POST /v1/appointments/cancel Cancel appointment #
POST /v1/appointments/confirm Confirm appointment #
POST /v1/appointments/reschedule Reschedule appointment #
POST /v1/appointments/{appointment_id}/attachments Create attachment for appointment #
PUT /v1/appointments/update-status Update appointment status #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/zocdoc-appointments-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

zocdoc-appointments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: '1.177'
  title: Documentation Appointments API
  description: Endpoints for booking, cancelling, and rescheduling appointments, including retrieving current appointment statuses and updated information.
servers:
- url: https://api-developer-sandbox.zocdoc.com
  description: Sandbox
- url: https://api-developer.zocdoc.com
  description: Production
tags:
- name: appointments
  description: Endpoints for booking, cancelling, and rescheduling appointments, including retrieving current appointment statuses and updated information.
  x-displayName: Appointments
paths:
  /v1/appointments:
    post:
      tags:
      - appointments
      summary: Create appointment
      security:
      - ClientCredentialsFlow:
        - external.appointment.write
      - AuthorizationCodeFlow:
        - external.appointment.write
      operationId: createAppointment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookAppointmentRequestBody'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
      description: 'This endpoint is used for creating new appointments. Developers should gather the necessary information to pass in the request body as inputs for this endpoint. Only timeslots retrieved from the /v1/provider_locations/availability endpoint will be accepted. After an /appointments call is successfully processed, the system will return an appointment ID.


        The `appointment_id` returned is used in the endpoint /v1/appointments/{appointment_id} to track the status of the appointment, and in the endpoint /v1/appointments/cancel to cancel an appointment.

        '
    get:
      tags:
      - appointments
      summary: Get appointments
      security:
      - ClientCredentialsFlow:
        - external.appointment.read
      - AuthorizationCodeFlow:
        - external.appointment.read
      operationId: getAppointments
      description: 'This endpoint retrieves the paginated list of appointment details and statuses for the given credential. By default, appointments will be returned in descending order of start time.


        A maximum of 1,000 total appointments will be returned via pagination; if more are expected, use filters and batch requests.


        If the request comes from a Zocdoc user credential, only appointments that user has created will be returned. If the request comes from a machine-to-machine credential, any appointments that were booked with that developer will be returned.

        '
      parameters:
      - name: page
        in: query
        description: The zero indexed page of results. A mimimum value of 0 and a maximum of 10 will be accepted.
        required: false
        schema:
          type: integer
      - name: page_size
        in: query
        description: The number of results to return per page. A mimimum value of 1 and a maximum of 100 will be accepted.
        required: false
        schema:
          type: integer
      - name: statuses
        in: query
        required: false
        description: A comma-delimited list of Zocodc appointment statuses to filter appointments by.
        schema:
          type: string
          example: pending_booking,confirmed
      - name: developer_patient_id
        in: query
        required: false
        description: The patient identifier provided by 3P developer to filter appointments by.
        schema:
          type: string
      - name: sort_by
        in: query
        required: false
        description: The field to sort appointments by. Default is start_time.
        schema:
          $ref: '#/components/schemas/AppointmentSortByType'
      - name: sort_direction
        in: query
        required: false
        description: The direction to sort appointments by. Default is descending.
        schema:
          $ref: '#/components/schemas/AppointmentSortDirectionType'
      - name: practice_ids
        in: query
        required: false
        description: The comma separated values of practice ids to filter appointments by
        schema:
          type: string
          example: pt_abc123-def456_wxyz7890,pt_ghi123-jkl456_mnop7890
      - name: provider_ids
        in: query
        required: false
        description: The comma separated values of provider ids to filter appointments by
        schema:
          type: string
          example: pr_abc123-def456_wxyz7890,pr_ghi123-jkl456_mnop7890
      - name: location_ids
        in: query
        required: false
        description: The comma separated values of location ids to filter appointments by
        schema:
          type: string
          example: lo_abc123-def456_wxyz7890,lo_ghi123-jkl456_mnop7890
      - name: start_time_utc_min
        in: query
        required: false
        description: The minimum UTC start time of the appointments to fetch. Exclude appointments that start before this time.
        schema:
          type: string
          format: instant
          example: '2024-01-01 00:00:00+00:00'
      - name: start_time_utc_max
        in: query
        required: false
        description: The maximum UTC start time of the appointments to fetch. Exclude appointments that start after this time.
        schema:
          type: string
          format: instant
          example: '2024-01-01 00:00:00+00:00'
      - name: created_time_utc_min
        in: query
        required: false
        description: The minimum UTC created time of the appointments to fetch. Exclude appointments that were created before this time.
        schema:
          type: string
          format: instant
          example: '2024-01-01 00:00:00+00:00'
      - name: created_time_utc_max
        in: query
        required: false
        description: The maximum UTC created time of the appointments to fetch. Exclude appointments that were created after this time.
        schema:
          type: string
          format: instant
          example: '2024-01-01 00:00:00+00:00'
      - name: last_modified_time_utc_min
        in: query
        required: false
        description: The minimum UTC last modified time of the appointments to fetch. Exclude appointments that were last modified before this time.
        schema:
          type: string
          format: instant
          example: '2024-01-01 00:00:00+00:00'
      - name: last_modified_time_utc_max
        in: query
        required: false
        description: The maximum UTC last modified time of the appointments to fetch. Exclude appointments that were last modified after this time.
        schema:
          type: string
          format: instant
          example: '2024-01-01 00:00:00+00:00'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentStatusListResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
  /v1/appointments/{appointment_id}:
    get:
      tags:
      - appointments
      summary: Get appointment by id
      security:
      - ClientCredentialsFlow:
        - external.appointment.read
      - AuthorizationCodeFlow:
        - external.appointment.read
      operationId: getAppointment
      parameters:
      - name: appointment_id
        in: path
        required: true
        description: The Zocdoc ID for the appointment.
        schema:
          type: string
          example: d04b049a-41b1-4aba-9268-d8973cf72cdd
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentStatusResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
      description: 'This endpoint retrieves updated appointment details and the status of a single existing appointment. Developers must send a valid `appointment_id` as input in the request body, and Zocdoc returns the appointment details and status for that appointment. See [Appointment Status definitions](/guides/glossary).


        If the appointment was booked with a Zocdoc user credential, only that user will have access to view or modify the appointment. If the appointment was booked with a machine-to-machine credential, the appointment can be viewed and modified by any of the developer''s machine-to-machine credentials.

        '
  /v1/appointments/{appointment_id}/participants:
    get:
      tags:
      - appointments
      summary: Get participants for appointment
      security:
      - ClientCredentialsFlow:
        - external.appointment.read
      - AuthorizationCodeFlow:
        - external.appointment.read
      operationId: getAppointmentParticipants
      parameters:
      - name: appointment_id
        in: path
        required: true
        description: The Zocdoc id of the appointment
        schema:
          type: string
          example: d04b049a-41b1-4aba-9268-d8973cf72cdd
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentParticipantsResponse'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
      description: 'This endpoint retrieves the participants of an appointment. Developers must provide a valid `appointment_id` as a path parameter, and Zocdoc returns the participants of that appointment.

        '
  /v1/appointments/cancel:
    post:
      tags:
      - appointments
      summary: Cancel appointment
      security:
      - ClientCredentialsFlow:
        - external.appointment.write
      - AuthorizationCodeFlow:
        - external.appointment.write
      operationId: cancelAppointment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelAppointmentRequestBody'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBaseResponse'
        '400':
          description: Bad request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
      description: 'This endpoint is used to request the cancellation of an appointment in a non-cancelled status. (Non-cancelled statuses include: pending_booking, booking_failed, confirmed, pending_reschedule, reschedule_failed and rescheduled)


        Developers must send a valid `appointment_id` as input in the request body and may choose to pass a cancellation reason using the standardized `cancellation_reason_type` field. The optional `cancellation_reason` field should only be used when the cancellation reason type is ''other_patient_reason'' or ''other_provider_reason'' to provide additional context.


        If the appointment was booked with a Zocdoc user credential, only that user will have access to view or modify the appointment. If the appointment was booked with a machine-to-machine credential, the appointment can be viewed and modified by any of the developer''s machine-to-machine credentials.

        '
  /v1/appointments/confirm:
    post:
      tags:
      - appointments
      summary: Confirm appointment
      security:
      - ClientCredentialsFlow:
        - external.appointment.write
      - AuthorizationCodeFlow:
        - external.appointment.write
      operationId: confirmAppointment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConfirmAppointmentRequestBody'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBaseResponse'
        '400':
          description: Bad request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
      description: 'This endpoint is used to confirm an appointment in pending booking status. Developers must send a valid `appointment_id` as input in the request body.

        '
  /v1/appointments/reschedule:
    post:
      tags:
      - appointments
      summary: Reschedule appointment
      security:
      - ClientCredentialsFlow:
        - external.appointment.write
      - AuthorizationCodeFlow:
        - external.appointment.write
      operationId: rescheduleAppointment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RescheduleAppointmentRequestBody'
      responses:
        '200':
          description: Successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
      description: 'This endpoint is used to only modify the appointment time and request the reschedule of an appointment in pending_booking, confirmed, pending_reschedule, or rescheduled status. Developers must send a valid `appointment_id` and a new start time as input in the request body.


        If the appointment was booked with a Zocdoc user credential, only that user will have access to view or modify the appointment. If the appointment was booked with a machine-to-machine credential, the appointment can be viewed and modified by any of the developer''s machine-to-machine credentials.

        '
  /v1/appointments/{appointment_id}/attachments:
    post:
      tags:
      - appointments
      summary: Create attachment for appointment
      security:
      - ClientCredentialsFlow:
        - external.appointment.write
      - AuthorizationCodeFlow:
        - external.appointment.write
      operationId: uploadAppointmentAttachment
      parameters:
      - name: appointment_id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UploadAppointmentAttachmentRequest'
      responses:
        '200':
          description: Successfully uploaded attachment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UploadAppointmentAttachmentResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '500':
          description: Internal Server Error
      description: "This endpoint is used to upload attachment documents related to the appointment for the provider to view. You can upload more than one attachment with the same attachment_type for the same appointment_id if needed. The provider will be able to receive all uploaded attachments. \n\nOnly documents of type jpg, png, pdf, and docx are supported. Documents must be less than 100MB. You may not upload attachments to appointments in a failed state or over 7 days after the appointment.\n"
  /v1/appointments/update-status:
    put:
      summary: Update appointment status
      description: 'Use this endpoint to update the status of an appointment to either ''arrived'' or ''no_show''.

        - `arrived`: Indicates the patient has arrived at the office.

        - `no_show`: Indicates the patient did not show up for their scheduled appointment. Appointment start time should be in the past but no older than 2 days to be marked as no_show.

        '
      tags:
      - appointments
      security:
      - ClientCredentialsFlow:
        - external.appointment.write
      - AuthorizationCodeFlow:
        - external.appointment.write
      operationId: updateAppointmentStatus
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalUpdateAppointmentStatusRequestBody'
      responses:
        '200':
          description: Successful status update
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AppointmentBaseResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not found
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResult'
        '500':
          description: Internal Server Error
components:
  schemas:
    RescheduleAppointmentRequestBody:
      type: object
      required:
      - appointment_id
      - start_time
      properties:
        appointment_id:
          type: string
          description: The Zocdoc id of the appointment
          example: 63f995c2-49c4-40c8-a93a-140fb32e913b
        start_time:
          type: string
          format: date-time
          description: Date & time of the appointment in ISO-8601 format with a timezone offset
          example: '2022-04-27T09:00:00-04:00'
    ErrorResult:
      allOf:
      - $ref: '#/components/schemas/BaseResult'
      - type: object
        required:
        - error_type
        - errors
        properties:
          error_type:
            $ref: '#/components/schemas/ErrorType'
          errors:
            type: array
            items:
              $ref: '#/components/schemas/Error'
    CancellationReasonType:
      type: string
      description: Enum field describing why the appointment was cancelled. This field is optional but recommended when known for metrics purposes. If the cancellation reason does not match any predefined enum values, use 'other_patient_reason' or 'other_provider_reason' and provide a free text explanation in the cancellation_reason field.
      enum:
      - patient_no_longer_needs_appointment
      - patient_no_longer_available
      - other_patient_reason
      - missing_needed_patient_information
      - payment_or_insurance_issue
      - patient_or_visit_type_not_accepted
      - provider_not_available
      - rescheduling_patient
      - other_provider_reason
    UploadAppointmentAttachmentResponse:
      allOf:
      - $ref: '#/components/schemas/BaseResult'
      - type: object
        required:
        - data
        properties:
          data:
            $ref: '#/components/schemas/UploadAppointmentAttachmentResponseData'
    AppointmentResponse:
      allOf:
      - $ref: '#/components/schemas/BaseResult'
      - type: object
        required:
        - data
        properties:
          data:
            $ref: '#/components/schemas/AppointmentResponseData'
    BookAppointmentRequestBody:
      required:
      - appointment_type
      - data
      type: object
      properties:
        appointment_type:
          $ref: '#/components/schemas/AppointmentType'
        data:
          $ref: '#/components/schemas/AppointmentData'
    AppointmentVisitType:
      type: string
      description: The appointment's [visit type](/guides/glossary)
      enum:
      - in_person
      - zocdoc_video_service
      - third_party_video_service
    ErrorType:
      type: string
      enum:
      - api_error
      - invalid_request
    PatientAddress:
      required:
      - address1
      - city
      - state
      - zip_code
      type: object
      properties:
        address1:
          type: string
          description: The patient's address, line 1.
        city:
          type: string
          description: The patient's address, city.
        state:
          type: string
          description: The patient's address, two letter state code.
          example: NY
        zip_code:
          type: string
          description: The patient's address, 5 digit zip code.
          example: 36925
        address2:
          type: string
          description: The patient's address, line 2.
    DocumentSide:
      type: string
      description: Indicates whether the document image is of the front or back side. This field is typically used for documents like insurance cards or ID cards that have information on both sides.
      enum:
      - front
      - back
    Gender:
      type: string
      description: "Patient's gender values\n  * Female at birth - Assigned female at birth\n  * Male at birth - Assigned male at birth\n  * Cisgender - A person whose current gender corresponds to the sex they were assigned at birth\n  * Genderfluid - A person who does not identify with a fixed gender\n  * Genderqueer - A person who does not follow binary gender norms\n  * Intersex - A person born with traits, including genital anatomy, reproductive organs, hormone function, and/or chromosome patterns that may not fit the typical definition of male or female\n  * Non-binary - Umbrella term for a person whose gender identity lies outside the gender binary\n  * Transgender man - A person whose gender is male and whose sex assigned at birth was female\n  * Transgender woman - A person whose gender is female and whose sex assigned at birth was male\n"
      enum:
      - female_at_birth
      - male_at_birth
      - cisgender
      - genderfluid
      - genderqueer
      - intersex
      - non_binary
      - transgender_man
      - transgender_woman
      - prefer_not_to_say
      - none_apply
    AppointmentConfirmationType:
      type: string
      description: "Specifies how the appointment confirmation will be handled.\n  * auto: means the system will automatically confirm.\n  * manual: means confirmation requires user action.\n  * pending_evaluation: indicates that the confirmation approach is pending evaluation.\n"
      enum:
      - auto
      - manual
      - pending_evaluation
    AppointmentType:
      type: string
      enum:
      - providers
      description: The type of appointment.
    AppointmentStatus:
      type: string
      description: The status of the appointment. See [Appointment Status definitions](/guides/glossary).
      enum:
      - pending_booking
      - confirmed
      - booking_failed
      - cancelled
      - no_show
      - pending_reschedule
      - rescheduled
      - reschedule_failed
    Patient:
      required:
      - first_name
      - last_name
      - date_of_birth
      - sex_at_birth
      - phone_number
      - email_address
      - patient_address
      type: object
      properties:
        patient_id:
          type: string
          description: The Zocdoc ID of the patient.
        developer_patient_id:
          type: string
          description: The patient identifier provided by 3P developer.
        first_name:
          type: string
          description: The patient's first name.
        last_name:
          type: string
          description: The patient's last name.
        date_of_birth:
          type: string
          format: date
          description: The patient's date of birth in the format, YYYY-MM-DD.
        sex_at_birth:
          $ref: '#/components/schemas/PatientSex'
        phone_number:
          type: string
          description: The patient's unformatted 10 digit phone number. The first and fourth digits cannot be a 0 or 1.
          example: '9999999999'
        email_address:
          type: string
          description: The patient's email address.
          example: test@example.com
        patient_address:
          $ref: '#/components/schemas/PatientAddress'
        insurance:
          $ref: '#/components/schemas/PatientInsurance'
        gender:
          type: array
          items:
            $ref: '#/components/schemas/Gender'
          description: none_apply and prefer_not_to_say must be used independently, all other gender identities can be used in combination with each other.
    AppointmentParticipantsResponse:
      allOf:
      - $ref: '#/components/schemas/BaseResult'
      - type: object
        required:
        - data
        properties:
          data:
            $ref: '#/components/schemas/AppointmentParticipantsResponseData'
    SharedAppointmentResponseData:
      allOf:
      - $ref: '#/components/schemas/AppointmentBaseResponseData'
      - type: object
        required:
        - is_provider_resource
        - confirmation_type
        properties:
          is_provider_resource:
            type: boolean
            description: Whether the appointment will be performed by a professional under the supervision of the booked provider.
          location_phone_number:
            type: string
            description: The appointment location's unformatted 10 digit phone number
            example: '9999999999'
          location_phone_extension:
            type: string
            description: The appointment location's unformatted extension number, as digits
          waiting_room_path:
            type: string
            description: Patient facing url that can be used to navigate to Zocdoc video service appointments
          confirmation_type:
            $ref: '#/components/schemas/AppointmentConfirmationType'
    AppointmentBaseResponseData:
      required:
      - appointment_status
      - appointment_id
      type: object
      description: Data that will be returned upon a sucessful booking request
      properties:
        appointment_id:
          type: string
          description: The Zocdoc ID of the appointment.
        appointment_status:
          $ref: '#/components/schemas/AppointmentStatus'
        developer_patient_id:
          type: string
          description: The patient identifier provided by 3P developer. Null if not provided.
    UploadedAppointmentAttachment:
      type: object
      required:
      - attachment_type
      properties:
        attachment_type:
          $ref: '#/components/schemas/AttachmentType'
    ConfirmAppointmentRequestBody:
      type: object
      required:
      - appointment_id
      properties:
        appointment_id:
          type: string
          example: d04b049a-41b1-4aba-9268-d8973cf72cdd
    AppointmentData:
      required:
      - start_time
      - visit_reason_id
      - provider_location_id
      - patient
      - patient_type
      type: object
      properties:
        start_time:
          type: string
          format: date-time
          description: Date & time of the appointment in ISO-8601 format with a timezone offset. Must be a valid start time from the /v1/provider_locations/availability endpoint.
          example: '2022-04-27T09:00:00-04:00'
        visit_reason_id:
          type: string
          description: The Zocdoc visit reason ID for the appointment. Must be accepted by the provider.
          example: pc_FRO-18leckytNKtruw5dLR
        provider_location_id:
          type: string
          description: The Zocdoc provider-location ID for the appointment.
          example: pr_abc123-def456_wxyz7890|lo_abc123-def456_wxyz7890
        patient:
          $ref: '#/components/schemas/Patient'
        patient_type:
          $ref: '#/components/schemas/PatientType'
        notes:
          type: string
          description: Patient notes. 100 character maximum limit.
    AppointmentStatusResponse:
      allOf:
      - $ref: '#/components/schemas/BaseResult'
      - type: object
        required:
        - data
        properties:
          data:
            $ref: '#/components/schemas/AppointmentStatusResponseData'
    UploadAppointmentAttachmentResponseData:
      type: object
      required:
      - appointment_id
      - attachments
      properties:
        appointment_id:
          type: string
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/UploadedAppointmentAttachment'
    AppointmentParticipantPatient:
      allOf:
      - $ref: '#/components/schemas/Patient'
      - type: object
        required:
        - uploaded_attachments
        - is_booked_by_another_patient
        properties:
          uploaded_attachments:
            type: array
            items:
              $ref: '#/components/schemas/UploadedAttachment'
            description: Documents and files that have been uploaded by the patient for this appointment, such as insurance cards, ID cards, or intake forms.
          is_booked_by_another_patient:
            type: boolean
            description: Indicates whether this patient's appointment was booked by another patient (e.g., a parent booking for their child or someone booking for a dependent)
    BaseResult:
      required:
      - request_id
      type: object
      properties:
        request_id:
          type: string
          description: Unique request identifier for tracing
    ExternalUpdateAppointmentStatusRequestBody:
      type: object
      required:
      - appointment_id
      - appointment_status
      properties:
        appointment_id:
          type: string
          description: The Zocdoc ID of the appointment.
          example: d04b049a-41b1-4aba-9268-d8973cf72cdd
        appointment_status:
          $ref: '#/components/schemas/AppointmentStatusToSet'
    PaginatedBaseResult:
      allOf:
      - $ref: '#/components/schemas/BaseResult'
      - type: object
        required:
        - page
        - page_size
        - total_count
        - next_url
        properties:
          page:
            description: The zero based index of the current page.
            type: integer
          page_size:
            description: The size of the current page.
            type: integer
          total_count:
            description: The total number of result items.
            type: integer
          next_url:
            description: A link to the next page of results; null if this is the last page of results.
            type: string
    CancelAppointmentRequ

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zocdoc/refs/heads/main/openapi/zocdoc-appointments-api-openapi.yml