# Welcome!

## Welcome to Appointo API

Welcome to Appointo API! Here you'll find all the documentation you need to get up and running with the Appointo API.

## Want to jump right in?

Jump into the quick start docs and get making your first request:

{% content-ref url="/pages/apwzIUd4S6iCZ3eeZRJr" %}
[Quick Start](/quick-start)
{% endcontent-ref %}

## Want to deep dive?

Dive a little deeper and start exploring our API reference to get an idea of everything that's possible with the API:

{% content-ref url="/pages/XaS5dpwUJNLz98in7Oyw" %}
[API Reference](/reference/api-reference)
{% endcontent-ref %}


# Quick Start

{% hint style="info" %}
**To note: Appointo API access is currently available in paid plans and not in free plans.**
{% endhint %}

## Get your API keys

Your API requests are authenticated using API keys. Any request that doesn't include an API key will return an error.

You can generate an API key in the Appointo app under **Plans & Settings -> API access** at any time.

## Make your first request

To make your first request, send an authenticated request to the pets endpoint. This will fetch all `products` added in Appointo

Take a look at how you might call this method using our official libraries, or via `curl`:

{% tabs %}
{% tab title="curl" %}

```
GET https://app.appointo.me/api/products  
    -H APPOINTO-TOKEN:  <api-token>
```

{% endtab %}
{% endtabs %}


# API Reference

Dive into the specifics of each API endpoint by checking out our complete documentation.

## Products

All the methods associated with Products:

{% content-ref url="/pages/keBOzHOvSk6hip2wLXSP" %}
[Products](/reference/api-reference/products)
{% endcontent-ref %}

## Bookings

Everything related to Bookings:

{% content-ref url="/pages/fkmF4bQxNysKyJYFZdx7" %}
[Bookings](/reference/api-reference/bookings)
{% endcontent-ref %}

## Appointments

Everything related to Appointments:

{% content-ref url="/pages/mx9XuEIMj4hIIHOhmmm0" %}
[Appointments](/reference/api-reference/appointments)
{% endcontent-ref %}

##


# Products

## To Fetch All Products

## Get Products

<mark style="color:blue;">`GET`</mark> `https://app.appointo.me/api/products`

Fetch all products

#### Query Parameters

| Name         | Type    | Description                                |
| ------------ | ------- | ------------------------------------------ |
| limit        | integer | Limit (max limit: 100. default limit: 100) |
| search\_term | string  | To filter through product names            |
| offset       | string  | Offset                                     |

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

{% tabs %}
{% tab title="200 Products successfully fetched" %}

```json
[
  {
    "id": 142,
    "activate": true,
    "product_uuid": "gid://shopify/Product/8005520294172",
    "shop_id": 135,
    "created_at": "2022-11-11T08:18:08.099Z",
    "updated_at": "2023-07-18T16:23:45.242Z",
    "product_name": "Short",
    "show_widget": true,
    "appointment_type": "open",
    "vendor_name": "cosmere-items-dev6",
    "include_variant_booking": true,
    "book_without_pay": false,
    "image_url": null,
    "variants_count": 1,
    "appointments": [
      {
        "id": 302,
        "activate": null,
        "product_uuid": "gid://shopify/Product/8005520294172",
        "calendly_event_uuid": null,
        "duration_uuid": "gid://shopify/ProductVariant/43907273883932",
        "shop_id": 135,
        "product_detail_id": 142,
        "name": "Short - Default Title",
        "is_combo_service": false,
        "price": "100.0",
        "currency": "USD",
        "description": null,
        "archived": false,
      }
    ]
  }
]
```

{% endtab %}

{% tab title="401 Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}
{% endtabs %}


# Bookings

## To Fetch Bookings

## Get Bookings

<mark style="color:blue;">`GET`</mark> `https://app.appointo.me/api/bookings`

Fetch Bookings

#### Query Parameters

| Name         | Type    | Description                                                                     |
| ------------ | ------- | ------------------------------------------------------------------------------- |
| limit        | integer | Limit (max limit: 100. default limit: 100)                                      |
| offset       | integer | Offset                                                                          |
| status       | string  | `past` \| `upcoming`                                                            |
| booking\_id  | integer | to fetch single booking                                                         |
| search\_term | string  | (Optional) Searches on product name, customer name, email, phone and order name |

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

{% tabs %}
{% tab title="200 Booking successfully fetched" %}

```json
[
  {
    "id": 969,
    "selected_time": "2023-07-20T00:00:00.000Z",
    "timestring": "2023-07-20",
    "shop_id": 135,
    "appointment_id": 299,
    "created_at": "2023-07-18T16:33:17.565Z",
    "updated_at": "2023-07-18T16:33:18.236Z",
    "customers_count": 1,
    "duration": 30,
    "product_name": "T-shirt",
    "variant_name": "T-shirt - s",
    "order_uuid": "-",
    "price": "",
    "order_name": "-",
    "currency": "",
    "meeting_detail": "",
    "note": "",
    "google_meta": {},
    "google_event_id": "o0sc5qt4dg70u9sghg4hmfgul8",
    "location_value": null,
    "location_type": null,
    "location_meta": null,
    "quantity": 1,
    "team_member_id": null,
    "scenario": "multi_day",
    "day_duration": 1,
    "end_date": "2023-07-20",
    "start_date": "2023-07-20",
    "group_id": null,
    "start_buffer_time": 0,
    "end_buffer_time": 0,
    "category": null,
    "archived": false,
    "notes_count": 0,
    "customers": [
      {
        "id": 1095,
        "email": "abc@xyz.com",
        "payload": {
          "phone": ""
        },
        "name": "Mukul Chaware",
        "shop_id": 135,
        "appointment_id": 299,
        "booking_id": 969,
        "created_at": "2023-07-18T16:33:17.593Z",
        "updated_at": "2023-07-18T16:33:17.593Z",
        "customer_uuid": "6943848005916",
        "reschedule_uuid": null,
        "cancel_uuid": null,
        "order_name": "-",
        "order_uuid": null,
        "shipping_address": {
          "id": 9180953739548,
          "customer_id": 6943848005916,
          "first_name": "ABC",
          "last_name": "TTT",
          "company": null,
          "address1": "ABC",
          "address2": null,
          "city": "Bangalore",
          "province": "Karnataka",
          "country": "India",
          "zip": "111111",
          "phone": null,
          "name": "ABC TTT",
          "province_code": "KA",
          "country_code": "IN",
          "country_name": "India",
          "default": true
        },
        "override": false,
        "signpanda_cust_uuid": null,
        "parent_customer_id": null,
        "is_active_sub": false,
        "sub_interval": null,
        "sub_booking_count": null,
        "sub_booking_num": null,
        "sub_recurring_type": null,
        "customer_type": null,
        "customer_timezone": null,
        "archived": false,
        "subscription_contract_id": null,
        "selling_plan_id": null,
        "checkin": false,
        "checkin_qr_code": null,
        "image_data": null
      }
    ],
    "archived_customers": [],
    "appointment": {
      "id": 299,
      "activate": null,
      "product_uuid": "gid://shopify/Product/7971637428508",
      "duration_uuid": "gid://shopify/ProductVariant/43666758828316",
      "shop_id": 135,
      "product_detail_id": 141,
      "name": "T-shirt - s",
      "is_combo_service": false,
      "price": "100.0",
      "currency": "USD",
      "description": null,
      "archived": false
    }
  }
]
```

{% endtab %}

{% tab title="401 Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}
{% endtabs %}

## To Fetch Cancelled Bookings

## Get Cancelled Bookings

<mark style="color:blue;">`GET`</mark> `https://app.appointo.me/api/bookings/cancelled_bookings`

Fetch Cancelled Bookings

#### Query Parameters

| Name         | Type    | Description                                                                     |
| ------------ | ------- | ------------------------------------------------------------------------------- |
| limit        | integer | Limit (max limit: 100. default limit: 100)                                      |
| offset       | integer | Offset                                                                          |
| status       | string  | `past` \| `upcoming`                                                            |
| search\_term | string  | (Optional) Searches on product name, customer name, email, phone and order name |

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

## To Create New Booking

## Create New Booking

<mark style="color:green;">`POST`</mark> `https://app.appointo.me/api/bookings`

Create new Booking (max. 100 requests per day)

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

#### Request Body

| Name                                              | Type     | Description                              |
| ------------------------------------------------- | -------- | ---------------------------------------- |
| appointment\_id<mark style="color:red;">\*</mark> | integer  | Appointo Appointment Id                  |
| timestring<mark style="color:red;">\*</mark>      | datetime | Timestring for timeslot (iso8601 string) |
| quantity                                          | integer  | Number of bookings. Default: 1           |
| email<mark style="color:red;">\*</mark>           | string   | Email of the customer                    |
| name<mark style="color:red;">\*</mark>            | string   | Name of the customer                     |
| phone                                             | string   | phone number of the customer             |

{% tabs %}
{% tab title="200 Booking successfully created" %}

```json
[
  {
    "id": 969,
    "selected_time": "2023-07-20T00:00:00.000Z",
    "timestring": "2023-07-20",
    "shop_id": 135,
    "appointment_id": 299,
    "created_at": "2023-07-18T16:33:17.565Z",
    "updated_at": "2023-07-18T16:33:18.236Z",
    "customers_count": 1,
    "duration": 30,
    "product_name": "T-shirt",
    "variant_name": "T-shirt - s",
    "order_uuid": "-",
    "price": "",
    "order_name": "-",
    "currency": "",
    "meeting_detail": "",
    "note": "",
    "google_meta": {},
    "google_event_id": "o0sc5qt4dg70u9sghg4hmfgul8",
    "location_value": null,
    "location_type": null,
    "location_meta": null,
    "quantity": 1,
    "team_member_id": null,
    "scenario": "multi_day",
    "day_duration": 1,
    "end_date": "2023-07-20",
    "start_date": "2023-07-20",
    "group_id": null,
    "start_buffer_time": 0,
    "end_buffer_time": 0,
    "category": null,
    "archived": false,
    "notes_count": 0,
    "customers": [
      {
        "id": 1095,
        "email": "abc@xyz.com",
        "payload": {
          "phone": ""
        },
        "name": "Mukul Chaware",
        "shop_id": 135,
        "appointment_id": 299,
        "booking_id": 969,
        "created_at": "2023-07-18T16:33:17.593Z",
        "updated_at": "2023-07-18T16:33:17.593Z",
        "customer_uuid": "6943848005916",
        "reschedule_uuid": null,
        "cancel_uuid": null,
        "order_name": "-",
        "order_uuid": null,
        "shipping_address": {
          "id": 9180953739548,
          "customer_id": 6943848005916,
          "first_name": "ABC",
          "last_name": "TTT",
          "company": null,
          "address1": "ABC",
          "address2": null,
          "city": "Bangalore",
          "province": "Karnataka",
          "country": "India",
          "zip": "111111",
          "phone": null,
          "name": "ABC TTT",
          "province_code": "KA",
          "country_code": "IN",
          "country_name": "India",
          "default": true
        },
        "override": false,
        "signpanda_cust_uuid": null,
        "parent_customer_id": null,
        "is_active_sub": false,
        "sub_interval": null,
        "sub_booking_count": null,
        "sub_booking_num": null,
        "sub_recurring_type": null,
        "customer_type": null,
        "customer_timezone": null,
        "archived": false,
        "subscription_contract_id": null,
        "selling_plan_id": null,
        "checkin": false,
        "checkin_qr_code": null,
        "image_data": null
      }
    ],
    "archived_customers": [],
    "appointment": {
      "id": 299,
      "activate": null,
      "product_uuid": "gid://shopify/Product/7971637428508",
      "duration_uuid": "gid://shopify/ProductVariant/43666758828316",
      "shop_id": 135,
      "product_detail_id": 141,
      "name": "T-shirt - s",
      "is_combo_service": false,
      "price": "100.0",
      "currency": "USD",
      "description": null,
      "archived": false
    }
  }
]
```

{% endtab %}

{% tab title="401: Unauthorized Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}

{% tab title="400: Bad Request Invalid field error" %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Reschedule Booking

<mark style="color:green;">`PUT`</mark> `https://app.appointo.me/api/bookings/reschedule`

Reschedule Booking (max. 100 requests per day)

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

#### Request Body

| Name                                          | Type     | Description                                                                                                        |
| --------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
| booking\_id<mark style="color:red;">\*</mark> | integer  | Booking Id to reschedule                                                                                           |
| timestring<mark style="color:red;">\*</mark>  | datetime | Timestring for timeslot (iso8601 string)                                                                           |
| customer\_ids                                 | array    | Array of customer ids to reschedule (Optional). if customer ids are not sent, it will reschedule the whole booking |
| override                                      | boolean  | default: *false*. If true, it will forcefully reschedule for above timeslot                                        |

{% tabs %}
{% tab title="200 Booking successfully rescheduled" %}

```json
{
response: {
 status: "ok",
 booking: {
 ....
 }
}
}
```

{% endtab %}
{% endtabs %}

## Cancel Booking

<mark style="color:green;">`PUT`</mark> `https://app.appointo.me/api/bookings/cancel`

Cancel Booking (max. 100 requests per day)

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

#### Request Body

| Name                                          | Type    | Description                                                                                                |
| --------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------- |
| booking\_id<mark style="color:red;">\*</mark> | integer | Booking Id to reschedule                                                                                   |
| customer\_ids                                 | array   | Array of customer ids to cancel (Optional). if customer ids are not sent, it will cancel the whole booking |

{% tabs %}
{% tab title="200 Booking successfully rescheduled" %}

```json
{
response: {
 status: "ok",
 booking: {
 ....
 }
}
}
```

{% endtab %}
{% endtabs %}

## Update Booking

<mark style="color:green;">`PUT`</mark> `https://app.appointo.me/api/bookings/:booking_id`

Update Booking (max. 100 requests per day)

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | string | Appointo API token |

#### Request Body

| Name                                          | Type    | Description                              |
| --------------------------------------------- | ------- | ---------------------------------------- |
| booking\_id<mark style="color:red;">\*</mark> | integer | Booking Id to reschedule                 |
| start\_buffer\_time                           | integer | Start Buffer Time for the booking ( > 0) |
| end\_buffer\_time                             | integer | End Buffer Time for the booking (> 0)    |

{% tabs %}
{% tab title="200 Booking successfully rescheduled" %}

```json
{
response: {
 status: "ok",
 booking: {
 ....
 }
}
}
```

{% endtab %}
{% endtabs %}


# Appointments

## To Fetch Appointments

## Get Appointments

<mark style="color:blue;">`GET`</mark> `https://app.appointo.me/api/appointments`

Fetch Appointments

#### Query Parameters

| Name            | Type    | Description                       |
| --------------- | ------- | --------------------------------- |
| appointment\_id | integer | to fetch single appointment       |
| product\_id     | integer | to fetch appointments for product |
| limit           | integer | Default and Max value: 100        |
| offset          | integer | Default: 0                        |
| search\_term    | string  | (optional)                        |

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | String | Appointo API token |

{% tabs %}
{% tab title="200 Appointments successfully fetched" %}

```json
[{
    id: 123,
    ...
}]
```

{% endtab %}

{% tab title="401 Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}
{% endtabs %}

## Get Availability for Appointment

<mark style="color:blue;">`GET`</mark> `https://app.appointo.me/api/appointments/:appointment_id/calendar_availability`

Fetch Availability for the Appointment

#### Query Parameters

| Name                                          | Type       | Description                                                          |
| --------------------------------------------- | ---------- | -------------------------------------------------------------------- |
| start\_date<mark style="color:red;">\*</mark> | string     | YYYY-MM-DD format. start date for availability                       |
| end\_date                                     | string     | YYYY-MM-DD format. end date for availability                         |
| impersonated\_tms                             | \[integer] | To show availability for specific team members. Example: \[123, 234] |

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | String | Appointo API token |

{% tabs %}
{% tab title="200 Availability successfully fetched" %}

```json
[{
    id: 123,
    ...
}]
```

{% endtab %}

{% tab title="401 Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}
{% endtabs %}

## Upsert Appointment Config

<mark style="color:blue;">`PUT`</mark> `https://app.appointo.me/api/appointments/:appointment_id`

Upsert Availability config and date overrides

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | String | Appointo API token |

```
Request payload
// Please make sure to send all date overrides in the following format
{
    "config": {
        "timezone": "America/New_York",
        "duration": "30",
        "minimum_notice": "240",
        "max_capacity": "10",
        "meeting_detail": "",
        "note": "",
        "interval": "30",
        "reminder_duration": "10",
        "send_reminder": true,
        "whatsapp_duration": "15",
        "send_whatsapp_reminder": false,
        "enable_max_events_per_day": false,
        "max_events_per_day": 1,
        "start_buffer_time": "0",
        "end_buffer_time": "0",
        "location_type": "null",
        "location_value": "",
        "allow_cancel": true,
        "allow_reschedule": true,
        "reschedule_duration": 10,
        "cancel_duration": 10,
        "date_range_type": "all",
        "tm_assign_rule": "random",
        "days_in_future": "1",
        "start_date_range": "2022-11-10",
        "end_date_range": "2022-11-10",
        "is_combo_service": false,
        "send_text_reminder": false,
        "text_duration": "0",
        "min_day_duration": "1",
        "max_day_duration": "1",
        "fixed_multi_day_price": true,
        "rem_group_slot_after_booking": false,
        "start_month": "2024-10-29",
        "color": "#51796B",
        "allow_waitlist": true,
        "email_label": "email",
        "name_label": "name",
        "phone_label": "phone",
        "show_phone": true
    },
"availabilities": [
        {
            "id": 6028,
            "weekday": "monday",
            "weekday_index": 1,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM" }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": true,
            "max_capacity": null
        },
        {
            "id": 6029,
            "weekday": "tuesday",
            "weekday_index": 2,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM" }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": true,
            "max_capacity": null
        },
        {
            "id": 6030,
            "weekday": "wednesday",
            "weekday_index": 3,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM" }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": true,
            "max_capacity": null
        },
        {
            "id": 6031,
            "weekday": "thursday",
            "weekday_index": 4,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM" }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": false,
            "max_capacity": null
        },
        {
            "id": 6032,
            "weekday": "friday",
            "weekday_index": 5,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM" }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": false,
            "max_capacity": null
        },
        {
            "id": 6884,
            "weekday": "sunday",
            "weekday_index": 0,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM", "surge": true, "price": "20" }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": true,
            "max_capacity": null
        },
        {
            "id": 6885,
            "weekday": "saturday",
            "weekday_index": 6,
            "slots": [
                { "start_time": "09:00AM", "end_time": "10:00PM", "max_capacity": 5 }
            ],
            "shop_id": 135,
            "appointment_id": 304,
            "day_available": true,
            "max_capacity": null
        }
    ],
    "override": [
        {
            "id": 511,
            "day": "2024-03-28",
            "slots": [
                {
                    "start_time": "09:00AM",
                    "end_time": "05:00PM"
                }
            ],
            "shop_id": 135,
            "appointment_id": 299,
            "day_available": true
        },
        {
            "day": "2024-03-29",
            "slots": [
                {
                    "start_time": "09:00AM",
                    "end_time": "05:00PM"
                }
            ],
            "day_available": true
        }
    ]
}

```

{% tabs %}
{% tab title="200 Availability successfully created" %}

```json
[{
    id: 123,
    ...
}]
```

{% endtab %}

{% tab title="401 Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}
{% endtabs %}


# Subscription Contracts

## To fetch subscription contracts

## Get Subscription Contracts

<mark style="color:blue;">`GET`</mark> `https://app.appointo.me/api/appointment_subscriptions`

#### Query Parameters

| Name                    | Type   | Description                                                                                                                  |
| ----------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| search\_term (optional) | string | <p>Search keyword can be any of the following:<br> - Product Name<br> - Variant Name<br> - Order No.<br> - Customer Name</p> |

#### Headers

| Name                                             | Type   | Description        |
| ------------------------------------------------ | ------ | ------------------ |
| APPOINTO-TOKEN<mark style="color:red;">\*</mark> | String | Appointo API token |

{% tabs %}
{% tab title="200 contracts successfully fetched" %}

```json
[{
    id: 123,
    ...
}]
```

{% endtab %}

{% tab title="401 Permission denied" %}
{"error\_code":"invalid\_api\_token","message":"API token is invalid. Please check token in Appointo settings."}
{% endtab %}
{% endtabs %}


# Zapier Reference

This guide will help you with how to setup Appointo's Zapier triggers to create zaps as per your requirement


# Zapier Setup

To create Zapier Api token, login to Appointo dashboard -> Click on Settings -> Generate Zapier Token

<figure><img src="/files/hYFbahjmSNNxHFLmdWw2" alt=""><figcaption><p>Zapier token settings</p></figcaption></figure>

**3 Triggers Supported via Appointo in Zapier integration**

* New Booking -> Tigger will be initiated when a new booking is scheduled
* Booking Rescheduled -> Trigger will be initiated when a booking is rescheduled
* Booking Canceled -> trigger will be initiated when a booking is cancelled

**Quick examples of zaps you can create:**

1. Send a Slack message when a new booking is scheduled<br>

   <figure><img src="/files/rr6ZLEhcRJAcfFvcqqUl" alt=""><figcaption></figcaption></figure>
2. Send a Slack message when the booking is rescheduled<br>

   <figure><img src="/files/NkHEQgzSD0Fhc5UmLsnI" alt=""><figcaption><p>Booking Rescheduled</p></figcaption></figure>
3. Send a Slack message when the booking is canceled\ <br>

   <figure><img src="/files/njRv6Of7r7pXhvsFjlk8" alt=""><figcaption><p>Booking Canceled</p></figcaption></figure>


