How to manage appointments using the Amelia API
Amelia API Appointments let you create, update, retrieve, list, change status, and delete appointments from your own system (for example, when you need to sync an external CRM or custom admin panel with Amelia).
To see all available endpoints with ready-made request and response examples, download the Amelia API Postman collection: Amelia API Postman collection.
How do I authorize requests to Amelia API endpoints?
All Amelia API endpoints use API key authorization sent through a request header named Amelia.
- Header name: Amelia
- Header value: your generated API key
What is the base path for Amelia API appointment endpoints?
All appointment endpoints use the same base path, and you only change the endpoint part (for example /appointments).
Base path: https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1
How do I create an appointment using the Amelia API?
You can create an appointment by sending a POST request to /appointments with the appointment start date and an array of bookings.
Method: POST
Endpoint: /appointments
Required properties:
- bookingStart (string); appointment start date and time in
YYYY-MM-DD HH:mm - bookings (array); booking objects; each booking must include customerId of an existing customer; to create a new customer during booking, use the
/bookingsendpoint - notifyParticipants (boolean); whether customers should be notified
- locationId (integer); location ID
- providerId (integer); employee ID
- serviceId (integer); service ID
- recurring (array); recurring appointments; required if the appointment is recurring
Optional properties:
- internalNotes (string); internal note
- timeZone (string); customer timezone; example:
Europe/Belgrade - lessonSpace (string); lesson space ID; if omitted a new one may be created
- utc (boolean); whether the date time is sent in UTC; false by default
Example
Request
curl --location 'https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/appointments' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"bookingStart": "2026-01-14 13:00",
"bookings": [
{
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"customerId": 10,
"duration": 1800,
"extras": [],
"packageCustomerId": null,
"persons": 1,
"status": "approved"
}
],
"internalNotes": "",
"lessonSpace": "",
"locationId": 2,
"notifyParticipants": 1,
"providerId": 1,
"recurring": [],
"serviceId": 1,
"timeZone": "Europe/Belgrade",
"utc": false
}'
Response
{
"message": "Successfully added new appointment",
"data": {
"appointment": {
"id": 742,
"bookings": [
{
"id": 979,
"customerId": 10,
"customer": null,
"status": "approved",
"extras": [],
"couponId": null,
"price": 23,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 742,
"persons": 1,
"token": "example-token",
"payments": [
{
"id": 1000,
"customerBookingId": 979,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-01-14 13:00:00",
"status": "pending",
"data": "",
"entity": "appointment",
"created": null,
"actionsCompleted": true,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null,
"transactionId": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": true,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-01-10 10:19:00",
"actionsCompleted": true,
"isUpdated": null
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "approved",
"serviceId": 1,
"parentId": null,
"providerId": 1,
"locationId": 2,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": null,
"googleMeetUrl": null,
"outlookCalendarEventId": null,
"zoomMeeting": null,
"lessonSpace": null,
"bookingStart": "2026-01-14 13:00:00",
"bookingEnd": "2026-01-14 13:30:00",
"type": "appointment",
"isRescheduled": null,
"isFull": null,
"resources": []
},
"recurring": []
}
}
How do I update an appointment using the Amelia API?
You can update an appointment by sending a POST request to /appointments/{{appointment_id}}, and sending only the fields you want to change.
Method: POST
Endpoint: /appointments/{{appointment_id}}
Optional properties:
- bookingStart (string); start date and time in YYYY-MM-DD HH:mm
- bookings (array); booking objects to update
- notifyParticipants (boolean); whether customers should be notified
- locationId (integer); location ID
- providerId (integer); employee ID
- serviceId (integer); service ID
- internalNotes (string); internal note
- lessonSpace (string); lesson space ID
- removedBookings (array); bookings to remove
- recurring (array); recurring appointments; required if appointment is recurring
Important: To update the appointment status, use /appointments/status/{{appointment_id}}.
Example
Request
curl --location 'https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/appointments/742' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"bookingStart": "2026-02-06 11:00",
"bookings": [
{
"id": 979,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"customerId": 10,
"duration": 1800,
"extras": [],
"packageCustomerId": null,
"persons": 2,
"status": "approved"
}
],
"internalNotes": "",
"lessonSpace": "",
"locationId": 2,
"notifyParticipants": 1,
"providerId": 1,
"removedBookings": [],
"serviceId": 1
}'
Response
{
"message": "Successfully updated appointment",
"data": {
"appointment": {
"id": 742,
"bookings": [
{
"id": 979,
"customerId": 10,
"customer": null,
"status": "approved",
"extras": [],
"couponId": null,
"price": 23,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": null,
"persons": 2,
"token": null,
"payments": [],
"utcOffset": null,
"aggregatedPrice": null,
"isChangedStatus": false,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-01-10 10:19:00",
"actionsCompleted": null,
"isUpdated": true
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "approved",
"serviceId": 1,
"parentId": null,
"providerId": 1,
"locationId": 2,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": "hlda2snvbh7llqbupsgnels3io",
"googleMeetUrl": null,
"outlookCalendarEventId": "example-outlook-event-id",
"zoomMeeting": {
"id": 76092515836,
"startUrl": "https://zoom.example/start-url",
"joinUrl": "https://zoom.example/join-url"
},
"lessonSpace": null,
"bookingStart": "2026-02-06 11:00:00",
"bookingEnd": "2026-02-06 11:30:00",
"type": "appointment",
"isRescheduled": null,
"isFull": null,
"resources": []
},
"appointmentStatusChanged": false,
"appointmentRescheduled": false,
"initialAppointmentDateTime": {
"bookingStart": "2026-02-06 11:00:00",
"bookingEnd": "2026-02-06 11:30:00"
},
"bookingsWithChangedStatus": [],
"appointmentEmployeeChanged": null,
"appointmentZoomUserChanged": false,
"bookingAdded": false,
"appointmentZoomUsersLicenced": false,
"createPaymentLinks": null
}
}
How do I update an appointment status using the Amelia API?
You can update an appointment status by sending a POST request to /appointments/status/{{appointment_id}} with the new status value.
Method: POST
Endpoint: /appointments/status/{{appointment_id}}
Required properties:
- status (string); possible values: approved, pending, canceled, rejected, no-show
- packageCustomerId (integer); package customer ID if the appointment belongs to a package; otherwise null
Example
Request
curl --location 'https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/appointments/status/742' \
--header 'Content-Type: application/json' \
--header 'Amelia: YOUR_API_KEY' \
--data '{
"status": "pending",
"packageCustomerId": null
}'
Response
{
"message": "Successfully updated appointment status",
"data": {
"appointment": {
"id": 742,
"bookings": [
{
"id": 979,
"customerId": 10,
"customer": null,
"status": "pending",
"extras": [],
"couponId": null,
"price": 23,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 742,
"persons": 2,
"token": null,
"payments": [
{
"id": 1000,
"customerBookingId": 979,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-02-06 11:00:00",
"status": "pending",
"data": "",
"entity": null,
"created": null,
"actionsCompleted": null,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null,
"transactionId": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": false,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-01-10 10:19:00",
"actionsCompleted": null,
"isUpdated": null
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "pending",
"serviceId": 1,
"parentId": null,
"providerId": 1,
"locationId": 2,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": "hlda2snvbh7llqbupsgnels3io",
"googleMeetUrl": null,
"outlookCalendarEventId": null,
"zoomMeeting": null,
"lessonSpace": null,
"bookingStart": "2026-02-06 11:00:00",
"bookingEnd": "2026-02-06 11:30:00",
"type": "appointment",
"isRescheduled": null,
"isFull": null,
"resources": []
},
"bookingsWithChangedStatus": [],
"status": "pending",
"oldStatus": "pending",
"message": "Appointment status has been changed to pending"
}
}
How do I retrieve a single appointment using the Amelia API?
You can retrieve a single appointment by sending a GET request to /appointments/{{appointment_id}}.
Method: GET
Endpoint: /appointments/{{appointment_id}}
Example
Request
curl --location 'https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/appointments/742' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully retrieved appointment",
"data": {
"appointment": {
"id": 742,
"bookings": [
{
"id": 979,
"customerId": 10,
"customer": null,
"status": "pending",
"extras": [],
"couponId": null,
"price": 23,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 742,
"persons": 2,
"token": null,
"payments": [
{
"id": 1000,
"customerBookingId": 979,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-02-06 11:00:00",
"status": "pending",
"data": "",
"entity": null,
"created": null,
"actionsCompleted": null,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null,
"transactionId": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": null,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-01-10 10:19:00",
"actionsCompleted": null,
"isUpdated": null
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "pending",
"serviceId": 1,
"parentId": null,
"providerId": 1,
"locationId": 2,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": "hlda2snvbh7llqbupsgnels3io",
"googleMeetUrl": null,
"outlookCalendarEventId": null,
"zoomMeeting": null,
"lessonSpace": null,
"bookingStart": "2026-02-06 11:00:00",
"bookingEnd": "2026-02-06 11:30:00",
"type": "appointment",
"isRescheduled": null,
"isFull": null,
"resources": []
},
"recurring": []
}
}
How do I retrieve appointments within a date range using the Amelia API?
You can retrieve appointments by sending a GET request to /appointments and passing a date range and paging parameters.
Method: GET
Endpoint: /appointments
Query parameters:
- dates (string); beginning and end date in a comma-separated format; example: 2023-05-09,2023-05-10
- page (integer); page number; the limit is defined in settings
- skipServices (boolean); whether to skip service details
- skipProviders (boolean); whether to skip employee details
- asArray (boolean); if false returns an object keyed by dates; if true returns an array
Example
Request
curl --location 'https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/appointments&dates=2026-03-10,2026-03-11&page=1&skipServices=1&skipProviders=1' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully retrieved appointments",
"data": {
"appointments": {
"2026-03-10": {
"date": "2026-03-10",
"appointments": [
{
"id": 151,
"bookings": [
{
"id": 228,
"customerId": 16,
"customer": {
"id": 16,
"firstName": "John",
"lastName": "Doe",
"birthday": null,
"email": "john.doe@example.com",
"phone": null,
"type": "customer",
"status": "visible",
"note": null,
"zoomUserId": null,
"countryPhoneIso": null,
"externalId": null,
"pictureFullPath": null,
"pictureThumbPath": null,
"translations": null,
"gender": null
},
"status": "approved",
"extras": [],
"couponId": null,
"price": 100,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 151,
"persons": 1,
"token": null,
"payments": [
{
"id": 269,
"customerBookingId": 228,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-03-10 11:00:00",
"status": "pending",
"data": "",
"entity": null,
"created": "2026-03-01 10:55:33",
"actionsCompleted": null,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": null,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-03-01 10:55:33",
"actionsCompleted": null
},
{
"id": 229,
"customerId": 17,
"customer": {
"id": 17,
"firstName": "Jane",
"lastName": "Doe",
"birthday": null,
"email": "jane.doe@example.com",
"phone": null,
"type": "customer",
"status": "visible",
"note": null,
"zoomUserId": null,
"countryPhoneIso": null,
"externalId": null,
"pictureFullPath": null,
"pictureThumbPath": null,
"translations": null,
"gender": null
},
"status": "approved",
"extras": [],
"couponId": null,
"price": 100,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 151,
"persons": 1,
"token": null,
"payments": [
{
"id": 270,
"customerBookingId": 229,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-03-10 11:00:00",
"status": "pending",
"data": "",
"entity": null,
"created": "2026-03-01 10:55:58",
"actionsCompleted": null,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": null,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-03-01 10:55:58",
"actionsCompleted": null
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "approved",
"serviceId": 2,
"parentId": null,
"providerId": 1,
"locationId": 1,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": "omia1hbnknkcha7addq7nc8aes",
"googleMeetUrl": null,
"outlookCalendarEventId": null,
"zoomMeeting": {
"id": 83025905325,
"startUrl": "https://zoom.example/start-url",
"joinUrl": "https://zoom.example/join-url"
},
"lessonSpace": null,
"bookingStart": "2026-03-10 11:00:00",
"bookingEnd": "2026-03-10 11:30:00",
"type": "appointment",
"isRescheduled": null,
"resources": [],
"cancelable": true,
"reschedulable": true,
"past": false,
"isGroup": false
}
]
},
"2026-03-11": {
"date": "2026-03-11",
"appointments": [
{
"id": 157,
"bookings": [
{
"id": 237,
"customerId": 2,
"customer": {
"id": 2,
"firstName": "Alex",
"lastName": "Miller",
"birthday": null,
"email": "alex.miller@example.com",
"phone": null,
"type": "customer",
"status": "visible",
"note": null,
"zoomUserId": null,
"countryPhoneIso": null,
"externalId": null,
"pictureFullPath": null,
"pictureThumbPath": null,
"translations": null,
"gender": null
},
"status": "approved",
"extras": [],
"couponId": null,
"price": 100,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"type\":\"text\",\"value\":\"\"}}",
"info": "{\"firstName\":\"Alex\",\"lastName\":\"Miller\",\"phone\":null,\"locale\":\"en_US\",\"timeZone\":\"Europe\\/Belgrade\",\"urlParams\":null}",
"appointmentId": 157,
"persons": 1,
"token": null,
"payments": [
{
"id": 277,
"customerBookingId": 237,
"packageCustomerId": null,
"parentId": null,
"amount": 120,
"gateway": "wc",
"gatewayTitle": "Check payments",
"dateTime": "2026-03-02 16:32:11",
"status": "paid",
"data": "",
"entity": null,
"created": "2026-03-02 14:32:11",
"actionsCompleted": null,
"wcOrderId": 330,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": 20
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": null,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-03-02 14:32:11",
"actionsCompleted": null
},
{
"id": 238,
"customerId": 11,
"customer": {
"id": 11,
"firstName": "Sarah",
"lastName": "Johnson",
"birthday": null,
"email": "sarah.johnson@example.com",
"phone": null,
"type": "customer",
"status": "visible",
"note": null,
"zoomUserId": null,
"countryPhoneIso": null,
"externalId": null,
"pictureFullPath": null,
"pictureThumbPath": null,
"translations": null,
"gender": null
},
"status": "approved",
"extras": [],
"couponId": null,
"price": 100,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"type\":\"text\",\"value\":\"\"}}",
"info": "{\"firstName\":\"Sarah\",\"lastName\":\"Johnson\",\"phone\":null,\"locale\":\"en_US\",\"timeZone\":\"Europe\\/Belgrade\",\"urlParams\":null}",
"appointmentId": 157,
"persons": 1,
"token": null,
"payments": [
{
"id": 278,
"customerBookingId": 238,
"packageCustomerId": null,
"parentId": null,
"amount": 120,
"gateway": "wc",
"gatewayTitle": "Check payments",
"dateTime": "2026-03-02 16:42:44",
"status": "paid",
"data": "",
"entity": null,
"created": "2026-03-02 14:42:44",
"actionsCompleted": null,
"wcOrderId": 331,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": 20
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": null,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": "2026-03-02 14:42:44",
"actionsCompleted": null
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "pending",
"serviceId": 2,
"parentId": null,
"providerId": 1,
"locationId": 1,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": "9v21b37kr4gsi19tabjtt97404",
"googleMeetUrl": null,
"outlookCalendarEventId": null,
"zoomMeeting": null,
"lessonSpace": null,
"bookingStart": "2026-03-11 11:00:00",
"bookingEnd": "2026-03-11 11:30:00",
"type": "appointment",
"isRescheduled": null,
"resources": [],
"cancelable": true,
"reschedulable": true,
"past": false,
"isGroup": false
}
]
}
},
"availablePackageBookings": [],
"emptyPackageBookings": [],
"occupied": [],
"total": 2,
"totalApproved": 1,
"totalPending": 1,
"currentUser": {
"id": null,
"firstName": "API",
"lastName": "Admin",
"birthday": null,
"email": "api.admin@example.com",
"phone": null,
"type": "admin",
"status": "visible",
"note": null,
"zoomUserId": null,
"countryPhoneIso": null,
"externalId": null,
"pictureFullPath": null,
"pictureThumbPath": null,
"translations": null
}
}
}
How do I delete an appointment using the Amelia API?
You can delete an appointment by sending a POST request to /appointments/delete/{{appointment_id}}.
Method: POST
Endpoint: /appointments/delete/{{appointment_id}}
Example
Request
curl --location --request POST 'https://example.com/wp-admin/admin-ajax.php?action=wpamelia_api&call=/api/v1/appointments/delete/173' \
--header 'Amelia: YOUR_API_KEY'
Response
{
"message": "Successfully deleted appointment",
"data": {
"appointment": {
"id": 173,
"bookings": [
{
"id": 254,
"customerId": 10,
"customer": null,
"status": "rejected",
"extras": [],
"couponId": null,
"price": 20,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 173,
"persons": 1,
"token": null,
"payments": [
{
"id": 295,
"customerBookingId": 254,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-01-22 09:00:00",
"status": "pending",
"data": "",
"entity": null,
"created": null,
"actionsCompleted": null,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": true,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": null,
"actionsCompleted": null
}
],
"notifyParticipants": 1,
"internalNotes": "",
"status": "rejected",
"serviceId": 1,
"parentId": null,
"providerId": 1,
"locationId": 1,
"provider": null,
"service": null,
"location": null,
"googleCalendarEventId": null,
"googleMeetUrl": null,
"outlookCalendarEventId": null,
"zoomMeeting": null,
"lessonSpace": null,
"bookingStart": "2026-01-22 09:00:00",
"bookingEnd": "2026-01-22 09:30:00",
"type": "appointment",
"isRescheduled": null,
"resources": []
},
"bookingsWithChangedStatus": [
{
"id": 254,
"customerId": 10,
"customer": null,
"status": "pending",
"extras": [],
"couponId": null,
"price": 20,
"coupon": null,
"customFields": "{\"1\":{\"label\":\"text\",\"value\":\"\",\"type\":\"text\"}}",
"info": null,
"appointmentId": 173,
"persons": 1,
"token": null,
"payments": [
{
"id": 295,
"customerBookingId": 254,
"packageCustomerId": null,
"parentId": null,
"amount": 0,
"gateway": "onSite",
"gatewayTitle": "",
"dateTime": "2026-01-22 09:00:00",
"status": "pending",
"data": "",
"entity": null,
"created": null,
"actionsCompleted": null,
"wcOrderId": null,
"wcOrderUrl": null,
"wcItemCouponValue": null,
"wcItemTaxValue": null
}
],
"utcOffset": null,
"aggregatedPrice": true,
"isChangedStatus": true,
"isLastBooking": null,
"packageCustomerService": null,
"ticketsData": [],
"duration": 1800,
"created": null,
"actionsCompleted": null
}
]
}
}
What should I keep in mind when using appointment endpoints?
If you plan to use appointment endpoints in production, test requests on a staging site first and log both request and response payloads while building your integration.
- Use the right endpoint for status: update appointment details with
/appointments/{{appointment_id}}, and update status with/appointments/status/{{appointment_id}}. - Send only what you change: update requests can include only the fields you want to modify.
- Respect timezone handling: if you pass timeZone and utc, keep them consistent across your integration.
- Handle recurring carefully: if the appointment is recurring, include the recurring array as required.
- Avoid exposing API keys: store keys securely and never ship them to the front end.