How to Update an Appointment Using the API

Learn about the PUT/booking endpoint.

Using the PUT /booking endpoint, the Booxi API now provides a way to update an appointment as a member of staff. This new functionality can only be employed for appointment type bookings.

Please take note that this endpoint requires a partner API Key. If you haven’t been provided with such a key, please contact your Booxi representative.

Be reminded that the URL at which you access the API depends on your hosting region. This article presents examples from a North American hosting.

North America Europe
api.booxi.com api.booxi.eu


Important Note
Booxi keeps track of who last changed a booking. Even though the parameters modifiedBy and modifiedByStaffId are optional and assigned default values when omitted from the request body, it is recommended to explicitly include “modifiedBy”:”Staff” and “modifiedByStaffId”:YOUR_STAFF_ID in all requests. The staffId provided must be valid and belong to your merchant. If not, the request will fail. If the staffId is missing, the account owner will be recorded as the staff who made the changes.


 

Overview of the possible appointment statuses

Here is an overview of the possible appointment status, the corresponding API object properties, and the status as appearing in the Back Office.

  Object properties expected in
the request body of each API call
 
Appointment Status Status client.presence isCompleted Status in Back Office
Approved
The appointment has been automatically confirmed or manually confirmed by staff.
Approved Expecting False Approved
Completed
The appointment has been completed with the client.
Approved Arrived True Completed
No Show
The client has missed the appointment.
Approved NoShow False NoShow
Arrived
The client has arrived and the appointment is in progress.
Approved Arrived False Arrived
Pending Client's Approval
Staff has requested the client to confirm the appointment's time.
PendingClient
Approval
Expecting False Awaiting Client's Approval
Cancelled
The appointment has been cancelled.
Cancelled Expecting* False* Cancelled by Merchant

*This property is not required when making calls to the API.


 

PUT /booking Capabilities Overview

The PUT /booking endpoint allows you to change the status of an appointment but also to reschedule it.

The section below will first address how to change the status of a appointment and then, how to reschedule it.

Updating the Status of an Appointment

To update the status of an appointment, use the PUT /booking/{bookingId} endpoint. Your request must minimally include a valid booking ID. 

Mandatory Parameters

Parameter Format Description
bookingId bookingId
A00135673
ID of the booking to update. 

 

Request URL for North America

https://api.booxi.com/booking/v1/booking/YOUR_BOOKING_ID

cURL

curl -X POST 
"https://api.booxi.com/booking/v1/booking/YOUR_BOOKING_ID" 
-H  "accept: application/json" 
-H  "Booxi-PartnerKey: YOUR_PARTNER_API_KEY" 
-H  "Content-Type: application/json" 
-d "{\"status\":\"STATUS\",\"client\":{\"presence\":\"PRESENCE\"},\"isCompleted\":BOOLEAN}"

 

Request URL for Europe

https://api.booxi.eu/booking/v1/booking/YOUR_BOOKING_ID

cURL

curl -X POST 
"https://api.booxi.eu/booking/v1/booking/YOUR_BOOKING_ID"
-H  "accept: application/json" 
-H  "Booxi-PartnerKey: YOUR_PARTNER_API_KEY" 
-H  "Content-Type: application/json" 
-d "{\"status\":\"STATUS\",\"client\":{\"presence\":\"PRESENCE\"},\"isCompleted\":BOOLEAN}"

 

Optional Parameters

Parameter Format Description
language language=lng
language=eng
The language the content should be provided in.

 

Example with all parameters:

Request URL for North America

https://api.booxi.com/booking/v1/booking/YOUR_BOOKING_ID?language=eng

cURL

curl -X POST 
"https://api.booxi.com/booking/v1/booking/YOUR_BOOKING_ID?language:eng" 
-H  "accept: application/json" 
-H  "Booxi-PartnerKey: YOUR_PARTNER_API_KEY" 
-H  "Content-Type: application/json" 
-d "{\"status\":\"STATUS\",\"client\":{\"presence\":\"PRESENCE\"},\"isCompleted\":BOOLEAN,
   \"modifiedBy\":\"Staff\", \"modifiedByStaffId\":YOUR_STAFF_ID}"

 

Depending on how you wish to update the appointment , the content of the request body will vary. 


 

Supported Appointment Status Transitions

The table below presents the status transitions that are allowed.

Transitioning from Transitioning to
Completed Approved Cancelled No Show Arrived
Completed Allowed Not Supported
Approved Allowed only if appointment's starting time is in the past.
Cancelled
Pending Client's Approval
No Show
Arrived Allowed

Approve an Appointment

To approve an appointment, you must call the API passing:

  • set status to “Approved”.
  • set the client’s presence to “Expecting”.
  • set isCompleted to false.

Note: The Back Office will display the appointment as status “Approved”.

Request Body

{
  "status": "Approved",
  "client": {
    "presence": "Expecting"
  },
  "isCompleted": false
  "modifiedBy": "Staff",
  "modifiedByStaffId": YOUR_STAFF_ID
}

 

Conditions for a Successful Response

The appointment must be scheduled (date and time) and have a staff assigned.

 

Conditions that result in error code 409

  • The appointment is not scheduled.
    {
    "message": "The booking has no time scheduled in any calendar and the requested
    modification required a scheduled booking.",
    "code": 409,
    "error": "BookingNotScheduled"
    }

Cancel an Appointment

To cancel an appointment, you must call the API passing:

  • set status to “Cancelled”
  • set the client’s presence to “Expecting”
  • set isCompleted to false.

Note: The Back Office will display the appointment as status “Cancelled”.

Request Body

{
  "status": "Cancelled",
  "client": {
    "presence": "Expecting"
  },
  "isCompleted": false
  "modifiedBy": "Staff",
  "modifiedByStaffId": YOUR_STAFF_ID
}

 

Conditions for a Successful Response

A booking can be cancelled regardless of its previous state except if it’s been cancelled by the client prior to the request.

 

Conditions that result in error code 409

  • The appointment has been canceled by the client.
    {
    "message": "The booking is already canceled by the client and does not allow
    the requested modification.",
    "code": 409,
    "error": "BookingIsCanceledByClient"
    }

Complete an Appointment

To complete an appointment, you must call the API passing:

  • set status to “Approved”
  • set client’s presence to “Arrived”
  • set isCompleted to true

Note: The Back Office will display the appointment as status “Completed”.

Request Body

{
  "status": "Approved",
  "client": {
  "presence": "Arrived"
  },
  "isCompleted": true
  "modifiedBy": "Staff",
  "modifiedByStaffId": YOUR_STAFF_ID
}

 

Conditions for a Successful Response

The booking must be scheduled (date and time) and have a staff assigned.

 

Conditions that result in error code 409

  • The appointment is not scheduled.
    {
    "message": "The booking has no time scheduled in any calendar and the requested
    modification required a scheduled booking.",
    "code": 409,
    "error": "BookingNotScheduled"
    }

Notify that the client has arrived for his appointment

To notify that the client has arrived or that the appointment is on going, you must call the API passing:

  • set status to “Approved”
  • set client’s presence to “Arrived”
  • set isCompleted to false

Note: The Back Office will display the appointment as status “Arrived”.

Request Body

{
  "status": "Approved",
  "client": {
    "presence": "Arrived"
  },
  "isCompleted": false
  "modifiedBy": "Staff",
  "modifiedByStaffId": YOUR_STAFF_ID
}

 

Conditions for a Successful Response

The booking must have a staff assigned, be scheduled (date and time) with its start time on the current day or in the past. Additionally, its current status must not be “Completed”.

 

Conditions that result in error code 409

  • The appointment is not scheduled.
    {
    "message": "The booking has no time scheduled in any calendar and the requested
    modification required a scheduled booking.",
    "code": 409,
    "error": "BookingNotScheduled"
    }
  • The appointment is scheduled in the future.
    {
    "message": "The booking is scheduled to start on a future day and the requested
    modification can only be performed starting from the day that it starts on.",
    "code": 409,
    "error": "BookingNotToday"
    }
  • The appointment is completed.
    {
    "message": "The booking is completed and cannot be modified",
    "code": 409,
    "error": "BookingIsCompleted"
    }

Notify a Client Missed His Appointment

To notify that the client has missed the appointment, you must call the API passing:

  • set status to “Approved”
  • set client’s presence to “NoShow”
  • set isCompleted to false

Note: The Back Office will display the appointment as status “NoShow”.

Request Body

{
  "status": "Approved",
  "client": {
    "presence": "NoShow"
  },
  "isCompleted": false
  "modifiedBy": "Staff",
  "modifiedByStaffId": YOUR_STAFF_ID
}

 

Conditions for a Successful Response

The booking must have a staff assigned, be scheduled (date and time) with its start time on the current day or in the past. Additionally, its current status must not be “Completed”. Additionally, it must not be completed.

 

Conditions that result in error code 409

  • The appointment is not scheduled.
    {
    "message": "The booking has no time scheduled in any calendar and the requested
    modification required a scheduled booking.",
    "code": 409,
    "error": "BookingNotScheduled"
    }
  • The appointment is scheduled in the future.
    {
    "message": "The booking is scheduled to start on a future day and the requested
    modification can only be performed starting from the day that it starts on.",
    "code": 409,
    "error": "BookingNotToday"
    }
  • The appointment is completed.
    {
    "message": "The booking is completed and cannot be modified",
    "code": 409,
    "error": "BookingIsCompleted"
    }

Rescheduling an Appointment

An appointment can be rescheduled by using the PUT /booking/{bookingId} endpoint. Your request must include a valid booking ID and identify if you request a client confirmation or not. While rescheduling an appointment, it is permitted to update the following properties (duration, price, etc.) within the same API call. 

  • startsOn : new date and time on which the appointment will be rescheduled.
  • staffId : ID of the staff assigned to the appointment.
  • modifiedBy : “staff” is the only supported value for this property.
  • modifiedByStaffId : ID of the staff who last modified the appointment.
  • additionalRequest: request submitted by the client.
  • quickNote: any quick note associated with the appointment.
  • Items[]: The list of services (and their properties) to be associated with the booking.

Limitations

  • Rescheduling is limited to appointment type bookings. Reservations and rental bookings are yet supported.
  • An appointment of status "Completed", "No Show" or "Arrived" cannot be rescheduled. 
  • Appointments associated with a service requiring a resource cannot be rescheduled. This condition also applies to multi-service appointments.
  • Staff assigned to a rescheduled appointment must have a calendar.
  • Rescheduling an appointment while setting its state to “PendingStaffApproval” is not yet supported.

Supported Appointment Status Transitions while Rescheduling

Only the following status changes are currently allowed while rescheduling an appointment.

Rescheduling an appointment of status... to the following status...
Approved Pending Client's Approval
Approved Yes Yes
Pending Client's Approval Yes Yes
Cancelled Yes Yes

 

Request URL for North America

https://api.booxi.com/booking/v1/booking/YOUR_BOOKING_ID

cURL

curl -X PUT
"https://api.booxi.com/booking/v1/booking/YOUR_BOOKING_ID"
-H  "accept: application/json"
-H  "Booxi-PartnerKey: YOUR_PARTNER_API_KEY"
-H  "Content-Type: application/json"
-d "{\"status\":\"STATUS\",\"client\":{\"presence\":\"PRESENCE\"},\"isCompleted\":BOOLEAN}"

Request URL for Europe

https://api.booxi.eu/booking/v1/booking/YOUR_BOOKING_ID

cURL

curl -X POST 
"https://api.booxi.eu/booking/v1/booking/YOUR_BOOKING_ID"
-H  "accept: application/json"
-H  "Booxi-PartnerKey: YOUR_PARTNER_API_KEY"
-H  "Content-Type: application/json"
-d "{\"status\":\"STATUS\",\"client\":{\"presence\":\"PRESENCE\"},\"isCompleted\":BOOLEAN}"

Parameters

Parameter Format Description
status

status=enum

  • PendingClientApproval
  • Approved

 

Mandatory

The status of the booking:

  • PendingClientApproval: The booking is waiting for the client to confirm that they will be there.
  • Approved” The booking has been approved.

isCompleted

isCompleted=boolean

Mandatory

Indicates whether this booking has been completed.

client.presence

client.presence=enum

  • Expecting 
  • Arrived
  • NoShow 

Mandatory

Indicated whether this client has shown up or not to his booking. 

startsOn startsOn=date
startsOn=2023-11-01T16:00:00Z
Optional - The date and time on which the appointment is being rescheduled. It should be formatted per the RFC3399 standard.

Important Note
When omitted, the API will assume the user is attempting to update the status of an appointment. When rescheduling, this parameter should be provided along with a staffId otherwise the request will return a 400 error code.
staffId staffId=staffId
staffId=12567
Optional - The staff associated with the appointment. 

Important Note
When omitted, the API will assume the user is attempting to update the status of an appointment. When rescheduling, this parameter should be provided along with a staffId otherwise the request will return a 400 error code.
modifiedBy modifiedBy=staff
modifiedBy=staff
Optional - The only value supported for this property is “Staff”.
modifiedByStaffId modifiedByStaffId=staffId
modifiedByStaffId=12567
Optional - Id of the staff who modified the appointment. The staffId provided must be valid and belong to your merchant. If not, the request will fail. If the staffId is omitted, the account owner will be recorded as the staff who made the changes.
additionalRequest additionalRequest=request
additionalRequest=request
Optional - additional request submitted by the client associated with the appointment.
quickNote quickNote=quickNote Optional - any quick note associated with the appointment.

items[]

Items[
  {BookingItem object},

  {BookingItem object},...
]

Optional - Collection of services associated with the booking. To be specified when a modification is required to the services associated with the booking. Any existing services associated with the booking will be replaced by the services defined in the array.


A service is represented as a BookingItem object - see definition below

BookingItem object

serviceId=serviceId

serviceId=12023


duration=bookingDuration

duration=60


spacingAfter=spacingDuration

spacingAfter=30


isBusySpacingAfter=spacingCanBeUsedToBook

isBusySpacingAfter=true


Price {...} object



Represent a service associated with a booking.


Mandatory parameters

  • serviceId
  • duration: service duration in minutes. Integer, minimum 5, maximum 720
  • spacingAfter: time to reserve after appointment, in minutes. integer, minimum : 5, maximum: 300
  • isBusySpacingAfter: identify if time for the spacing can be used for an appointment. Boolean
  • Price object - see definition below 

Price object

Visibility=showPriceToClient

visibility=true


amount=priceOfTheService

amount=15


amountPerPerson=pricePerPersonForTheService

amountPerPerson=15

 

amountPerHour=pricePerHour

amountPerHour=20


isStartingAtboolean=useAmountAsStartingPrice

isStartingAtboolean=true


Tax=TypeOfTax

Tax=none

The asking price for a service or a booking item. When providing a price, all of the editable properties should be set.


  • Visibility: enum 
    • “Show” Display all the price information
  • “Hidden” Do not display any price information or message
  • “AskOnly” Display a message that the price information is available on demand
  • amount: 
    • The base price, as a decimal string. Zero when not applicable.
    • string ($decimal) 
  • amountPerPerson: 
    • The price for each person in the booking, as a decimal string. Zero when not applicable.
    • Mutually exclusive with amountPerHour
    • string ($decimal)
  • amountPerHour: 
    • The price for each hour of the booking, as a decimal string. Zero when not applicable.
    • Mutually exclusive with amountPerPerson
    • string($decimal)
  • isStartingAt: boolean
    • If the given amount is only the minimum price or not.
    • Boolean
  • Tax: enum string
    • “None”: The price does not consider taxes.
    • “Included”: The price amounts include the tax.
    • “Excluded”: The price amounts do not include the tax.

Reschedule and approve an appointment, without client’s confirmation

  • When calling the API, pass the following in the request body:
    • Set the booking status to “Approved”.
    • Set the client’s presence to “Expecting”.
    • Set isCompleted to false.
    • Set startsOn to a valid date/time in RFC3339 format.
    • Set staffId to a valid staff that belongs to your merchant.
    Note: The back office will display the appointment with a status “Approved”.

Request Body

{
 "status": "Approved",
 "client": {
   "presence": "Expecting",
   "additionalRequest": "request"
 },
 "isCompleted": false,
  "staffId": YOUR_STAFF_ID,
"startsOn": RESCHEDULED_DATE,
 "modifiedBy": "Staff",
 "modifiedByStaffId": YOUR_STAFF_ID,
"quickNote": "note"
}

 

Reschedule and request the client to confirm the appointment

  • When calling the API, pass the following in the request body:
    • Set the booking status to “PendingClientApproval”. 
    • Set the client presence to “Expecting”.
    • Set isCompleted to false.
    • Set startsOn to a valid date/time in RFC3339 format.
    • Set staffId to a valid staff that belongs to your merchant.
    Note: The back office will display the appointment with a status “Awaiting the client’s approval”.

Request Body

{
 "status": "PendingClientApproval",
 "client": {
   "presence": "Expecting"
 },
 "isCompleted": false,
  "staffId": YOUR_STAFF_ID,
"startsOn": RESCHEDULED_DATE,
 "modifiedBy": "Staff",
 "modifiedByStaffId": YOUR_STAFF_ID
}

 

Modify services and their configuration while rescheduling

  • The API allows you to change services, and their properties like duration, price while rescheduling.
  • When calling the API, you need to pass
    • The same parameters seen in the example above, required to reschedule.
    • An array “items” containing up to 10 services to associate with your booking.

Request Body

{
  "status": "Approved",
  "isCompleted": false,
  "client": {
    "presence": "Expecting"
  },
  "staffId": YOUR_STAFF_ID,
  "startsOn": RESCHEDULED_DATE,
  "modifiedBy": "Staff",
  "modifiedByStaffId": YOUR_STAFF_ID,
  "items": [ 
    {
      "serviceId": YOUR_SERVICE_ID,
      "price": {  
        "visibility": "Show",
        "amount": "50.00",
        "amountPerPerson": "0.00",
        "amountPerHour": "0.00",
        "isStartingAt": false,
        "tax": "None"
      },
      "duration": 22,
      "spacingAfter": 0,
      "isBusySpacingAfter": true
    },
    {
      "serviceId": YOUR_SERVICE_ID,
      "price": {  
        "visibility": "Show",
        "amount": "50.00",
        "amountPerPerson": "0.00",
        "amountPerHour": "0.00",
        "isStartingAt": false,
        "tax": "None"
      },
      "duration": 22,
      "spacingAfter": 0,
      "isBusySpacingAfter": true
    }
  ]
}

Email and Alerts Notifications

Rescheduling an appointment with the API will trigger the same client and staff notifications as it would if it was performed in the Back Office.


Troubleshooting

Conditions that result in error code 409

  • Rescheduling an appointment that was never scheduled, all while omitting to provide a date/time and staffId. 
    {
    "message": "The booking has no time scheduled in any calendar and the requested modification required a scheduled booking.",
    "code": 409,
    "error": "BookingNotScheduled"
    }
  • Rescheduling an appointment bearing the status “Completed”
    {
     "message": "The booking (or the parent group event) is completed and cannot be created or modified.",
     "code": 409,
     "error": "BookingIsCompleted"
    }
  • Rescheduling an appointment bearing the status “NoShow”.
    {
     "message": "A booking rule does not allow this operation.",
     "code": 409,
     "error": "ClientPresenceNoShow"
    }
  • Rescheduling an appointment bearing the status “Client Arrived”.
    {
     "message": "A booking rule does not allow this operation.",
     "code": 409,
     "error": "ClientPresenceArrived"
    }

Testing PUT /Booking

You can test this endpoint at the following links.

For North America For Europe
updateBooking updateBooking

 

In the section “Request body”, from the dropdown menu select the status you wish to assign.

 


Successful JSON Response

When the query is successful, the response will include the booking ID, details about the service(s) provided, the merchant location, the client record and the payment (if applicable).

Here’s an example of a successful response:

{
  "bookingId": "BOOKING_ID",
  "merchantId": YOUR_MERCHANT_D,
  "bookingMethod": "Appointment",
  "status": "Approved",
  "isCompleted": false,
  "startsOn": "STARTING_DATE",
  "totalClientTimespan": {
    "start": "STARTING_TIME",
    "end": "ENDING_TIME",
    "duration": 30
  },
  "staffId": YOUR_STAFF_ID,
  "items": [
    {
      "serviceId": YOUR_SERVICE_ID,
      "serviceName": "SERVICE NAME",
      "price": {
        "visibility": "Show",
        "amount": "0.00",
        "amountPerPerson": "0.00",
        "amountPerHour": "0.00",
        "currency": "CURRENCY",
        "isStartingAt": false,
        "tax": "None"
      },
      "reservedClientTimespan": {
        "start": "STARTING_TIME",
        "end": "ENDING_TIME",
        "duration": 00
      },
      "duration": 00,
      "spacingAfter": 0,
      "isBusySpacingAfter": true
    }
  ],
  "location": "LOCATION",
  "locationText": "",
  "client": {
    "id": YOUR_CLIENT_NAME,
    "firstName": "CLIENT_FIRST_NAME",
    "lastName": "CLIENT_LAST_NAME",
    "email": "CLIENT_EMAIL_ADDRESS",
    "homePhoneNumber": "CLIENT_PHONE_NUMBER",
    "mobilePhoneNumber": CLIENT_MOBILE_NUMBER"",
    "presence": "Expecting",
    "remindByEmail": false,
    "remindBySMS": false,
    "additionalRequest": ""
  },
  "payment": {
    "total": "0.00",
    "paid": "0.00",
    "onlinePaymentStatus": "None"
  },
  "createdOn": "CREATION_DATE",
  "createdBy": "Staff",
  "createdByStaffId": "YOUR_STAFF_ID",
  "modifiedOn": "MODIFICATION_DATE",
  "modifiedBy": "Staff",
  "modifiedByStaffId": "YOUR_STAFF_ID",
  "isScheduled": true,
"clientCount": 1,
"quickNote":""
}

 


Limitations

    • A member of staff that has been blocked will not be prevented from calling the API. It is the merchant’s responsibility to revoke a staff member from accessing it.
    • Changing an appointment status  to “pendingClientApproval” or “pendingStaffApproval” is not supported at this time.
    • The API will not allow creating an appointment with “Arrived” or “NoShow” as its initial status.
    • The authentication method requires a secure environment.
    • The endpoint must not be exposed on a webpage but rather server side.

    References 

    Americas: https://api.booxi.com/doc/booking.html

    Europe: https://api.booxi.com/doc/booking.html

     

    Where to find API keys:

    • Your Merchant API key can be found in the back office, section My Business / Details.
    • Your Partner API key must be requested to your Booxi Account Manager. The Partner API key must only be used in server-side (backend) code to keep it a secret.