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

# Update a booking

> Update a booking. Use this endpoint to reschedule a booking by providing new slot details, change the booking status (cancel, approve, reject), or assign a meeting outcome to the booking. A rescheduled booking keeps its add-on services and their duration.

To reschedule to a time outside the scheduling link's availability, pass `override_availability: true` along with the new slot. The booking keeps its current host.


<Info>
  In **API v2**, this endpoint handles **approve**, **reject**, **cancel**, and **reschedule** flows. Older v1-only routes for those actions are not available in v2—use `status` for approve/reject/cancel, and `slot_date`, `slot_start_time`, and `time_zone` to reschedule. See the operation description below for details.
</Info>

<Info>Replace `{your-subdomain}` with your workspace’s subdomain. <br /> Learn how to find your subdomain in [Workspace subdomain](/api/workspace-subdomain).</Info>


## OpenAPI

````yaml bundled/bookings.yaml PATCH /bookings/{booking_id}
openapi: 3.0.3
info:
  title: NeetoCal Bookings APIs
  version: 2.0.0
servers:
  - description: NeetoCal APIs
    url: https://{your-subdomain}.neetocal.com/api/external/v2
    variables:
      your-subdomain:
        default: spinkart
        description: >-
          Replace **spinkart** with your [workspace's
          subdomain](/api/workspace-subdomain).
security: []
tags:
  - name: Bookings
    description: >-
      APIs to create, list, and update bookings (reschedule, approve, reject, or
      cancel via the update endpoint).
paths:
  /bookings/{booking_id}:
    patch:
      tags:
        - Bookings
      summary: Update a booking
      description: >
        Update a booking. Use this endpoint to reschedule a booking by providing
        new slot details, change the booking status (cancel, approve, reject),
        or assign a meeting outcome to the booking. A rescheduled booking keeps
        its add-on services and their duration.


        To reschedule to a time outside the scheduling link's availability, pass
        `override_availability: true` along with the new slot. The booking keeps
        its current host.
      parameters:
        - $ref: '#/components/parameters/api_key_header'
        - in: path
          name: booking_id
          description: ID or SID of the booking that you want to update.
          required: true
          schema:
            type: string
            example: hda6gxy
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: >-
                    Name of person making the booking. This is applied only as
                    part of a reschedule, so send it alongside `slot_date` and
                    `slot_start_time`. A request carrying it without them is
                    rejected with a 422 error.
                  example: Eve Smith
                email:
                  type: string
                  description: >-
                    Email of person making the booking. This is applied only as
                    part of a reschedule, so send it alongside `slot_date` and
                    `slot_start_time`. A request carrying it without them is
                    rejected with a 422 error.
                  example: eve@example.com
                slot_date:
                  type: string
                  description: >-
                    Date on which the booking is to be rescheduled. This should
                    be in "YYYY-MM-DD" format.
                  example: '2025-07-25'
                slot_start_time:
                  type: string
                  description: >-
                    Start time for the booking. This should be in "HH:MM AM/PM"
                    format.
                  example: 10:30 AM
                time_zone:
                  type: string
                  description: Time zone of person rescheduling the booking.
                  example: Asia/Kolkata
                override_availability:
                  type: boolean
                  description: >
                    When `true`, reschedules to the requested time even if it is
                    outside the scheduling link's availability, following the
                    same rules as `override_availability` on [Create a
                    booking](/api/bookings/create). Used only when rescheduling.
                    The response includes `is_overridden` and `bypassed_rules`.
                  default: false
                reschedule_reason:
                  type: string
                  description: Reason for rescheduling the booking (optional).
                  example: I want to change the booking time
                status:
                  type: string
                  description: >
                    Sets booking lifecycle status in one call (replaces v1
                    approve / reject / cancel endpoints). Use `approved` to
                    approve, `rejected` to reject (optional `rejection_reason`),
                    or `cancelled` to cancel (optional `cancel_reason`). Do not
                    send this field when you are only rescheduling or updating
                    other attributes.
                  enum:
                    - cancelled
                    - approved
                    - rejected
                cancel_reason:
                  type: string
                  description: >-
                    Reason for cancelling the booking. Used when status is
                    `cancelled`.
                  example: I am not available
                rejection_reason:
                  type: string
                  description: >-
                    Reason for rejecting the booking. Used when status is
                    `rejected`.
                  example: Time slot no longer available
                meeting_outcome_id:
                  type: string
                  nullable: true
                  description: >
                    Assign a meeting outcome to the booking by providing the
                    outcome's ID. Pass `null` to remove the currently assigned
                    outcome. This parameter cannot be combined with `status` or
                    reschedule parameters (`slot_date`, `slot_start_time`) in
                    the same request. Meeting outcomes can only be set on
                    confirmed or parallel-error bookings. You can get the
                    outcome ID from the [List meeting
                    outcomes](/api/meeting-outcomes/list) endpoint.
                  example: 59413def-60eb-47c6-b390-098fcf583b66
      responses:
        '200':
          description: OK - Booking updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/booking'
components:
  parameters:
    api_key_header:
      in: header
      name: X-Api-Key
      description: >-
        Use the X-Api-Key header to provide your workspace API key. Refer to
        [Authentication](/api/authentication) for more information.
      required: true
      schema:
        type: string
  schemas:
    booking:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the booking.
        sid:
          type: string
          description: Short identifier (SID) for the booking, used in URLs and API calls.
        parent_booking_id:
          type: string
          nullable: true
          description: Reference to the parent booking if this is a group booking.
        email:
          type: string
          description: Email address of the person who made the booking.
        name:
          type: string
          description: Name of the person who made the booking.
        host_name:
          type: string
          description: Name of the primary host for the meeting.
        host_email:
          type: string
          description: Email address of the primary host for the meeting.
        is_multihost:
          type: boolean
          description: Whether the meeting has multiple hosts.
        multihosts:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                description: Name of the host.
              email:
                type: string
                description: Email address of the host.
          description: List of all hosts for the meeting when is_multihost is true.
        starts_at:
          type: string
          format: date-time
          description: Start time of the booking in UTC.
        ends_at:
          type: string
          format: date-time
          description: End time of the booking in UTC.
        time_zone:
          type: string
          description: Time zone of the booking location.
        starts_at_for_client:
          type: string
          description: Start time of the booking in the client's local time zone.
        ends_at_for_client:
          type: string
          description: End time of the booking in the client's local time zone.
        status:
          type: string
          description: >-
            Current status of the booking (e.g., confirmed, cancelled,
            awaiting_approval, rejected).
        cancel_reason:
          type: string
          nullable: true
          description: Reason provided when the booking was cancelled.
        cancelled_by:
          type: string
          nullable: true
          description: Name of the person who cancelled the booking.
        reschedule_requested:
          type: boolean
          description: Whether a reschedule has been requested for this booking.
        preferred_meeting_spot:
          type: string
          description: Preferred meeting platform or location type selected by the client.
        room_type:
          type: string
          nullable: true
          description: |
            Type of meeting room or platform being used.
          enum:
            - daily
            - zoom
            - jitsi
            - google_meet
            - teams
            - whereby
            - in_person
            - custom
            - phone_call
        room_url:
          type: string
          nullable: true
          description: URL for the meeting room or platform.
        room_id:
          type: string
          nullable: true
          description: Unique identifier for the meeting room or platform.
        spot_details:
          type: string
          nullable: true
          description: Additional details about the meeting place.
        created_at:
          type: string
          format: date-time
          description: Timestamp when the booking was created.
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the booking was last updated.
        meeting_id:
          type: string
          description: Unique identifier of the scheduling link this booking belongs to.
        meeting:
          type: object
          properties:
            name:
              type: string
              description: Name of the scheduling link.
          description: Basic information about the associated meeting.
        no_show:
          type: boolean
          description: Whether the booking is marked as no-show by the host.
        is_overridden:
          type: boolean
          description: >-
            Whether the booking was made or rescheduled outside the scheduling
            link's availability.
        bypassed_rules:
          type: array
          items:
            type: string
          description: >-
            Messages for the availability checks skipped by
            `override_availability` (e.g., "Host is not available at the time").
            Only included in the response to that create or update request.
        meeting_outcome:
          nullable: true
          description: Meeting outcome assigned to the booking.
          allOf:
            - $ref: '#/components/schemas/meeting_outcome'
        notes_url:
          type: string
          nullable: true
          description: URL to access notes or additional information about the booking.
        internal_notes:
          type: string
          nullable: true
          description: Internal notes about the booking visible only to hosts and admins.
        metadata:
          type: object
          nullable: true
          description: Additional custom data associated with the booking.
        admin_booking_url:
          type: string
          description: URL for hosts and admins to view and manage the booking.
        client_booking_url:
          type: string
          description: URL for clients to view their booking details.
        form_responses:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
                description: Display name of the form field.
              value:
                type: string
                description: Value submitted for the form field.
              type:
                type: string
                description: Type of the form field (e.g., name, email, additional_guests).
              field_code:
                type: string
                description: Internal code identifier for the form field.
          description: Responses submitted through the booking form.
        form_responses_as_hash:
          type: object
          description: Form responses organized as key-value pairs for easier access.
          additionalProperties:
            type: string
        add_on_services:
          type: array
          description: Add-on services chosen for the booking.
          items:
            $ref: '#/components/schemas/booking_add_on_service'
        payment:
          nullable: true
          description: >-
            Payment details for the booking. Included only when a payment exists
            for the booking.
          allOf:
            - $ref: '#/components/schemas/booking_payment'
    meeting_outcome:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the meeting outcome.
          example: 59413def-60eb-47c6-b390-098fcf583b66
        name:
          type: string
          description: Name of the meeting outcome.
          example: Pricing Discussion
        color:
          type: string
          description: Color assigned to the meeting outcome.
          enum:
            - blue
            - orange
            - gray
            - red
            - yellow
            - violet
            - pink
            - teal
            - cyan
            - green
          example: yellow
        kind:
          type: string
          description: Kind of the meeting outcome.
          example: custom
        color_hex:
          type: string
          description: Hex color code for the meeting outcome.
          example: '#EAB308'
        is_system:
          type: boolean
          description: >-
            Whether this is a system-defined meeting outcome. System outcomes
            cannot be modified or deleted.
          example: false
        is_organization_owned:
          type: boolean
          description: Whether this outcome belongs to the organization.
          example: true
    booking_add_on_service:
      type: object
      description: >-
        Add-on service selected for a booking, with its name, duration and price
        as they were when the booking was made.
      properties:
        id:
          type: string
          description: Unique identifier for the booking's add-on service record.
          example: 0d3c1e8a-58b7-4c1f-a7f3-3c2f5d1b9e10
        add_on_service_id:
          type: string
          description: ID of the scheduling link's add-on service.
          example: 77150ec6-d4f0-4665-98f0-34bda69f7b3a
        name:
          type: string
          example: Sauna
        duration:
          type: integer
          description: Minutes the add-on service added to the booking.
          example: 30
        amount:
          type: string
          description: Price charged for the add-on service.
          example: '25.5'
        currency:
          type: string
          nullable: true
          example: USD
        free:
          type: boolean
          description: Whether the add-on service was free.
          example: false
    booking_payment:
      type: object
      description: >
        Payment details associated with the booking. Present only when a payment
        exists for the booking.
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier of the payment record.
          example: f46c9ddf-221d-4238-afb2-280c1c6b3185
        external_id:
          type: string
          nullable: true
          description: Payment reference ID from the payment provider.
          example: pi_3ThCkv2c3CtEndqE1BwejQno
        provider:
          type: string
          description: Payment provider that processed the payment.
          example: stripe
        amount:
          type: string
          description: Payment amount.
          example: '100.0'
        currency:
          type: string
          description: Currency code. Follows the ISO 4217 standard.
          example: USD
        status:
          type: string
          description: Current status of the payment.
          example: successful
        successful:
          type: boolean
          description: Whether the payment was completed successfully.
          example: true
        payment_at:
          type: string
          format: date-time
          nullable: true
          description: Timestamp when the payment was made.
          example: '2026-06-11T17:51:09.321Z'

````

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