# YM Canary API Documentation
* [Product API's](#products-api)
* [API List](#api-list-products)
* [Mandatory Fields In Response](#mandatory-fields-products)
* [Parameters Description](#parameters-description-products)
* [Request and Response Details](#request-and-response-details-products)
* [User API's](#user-api)
* [API List](#api-list-user)
* [Mandatory Fields In Response](#mandatory-fields-user)
* [Parameters Description](#parameters-description-user)
* [Request and Response Details](#request-and-response-details-user)
* [Order API's](#order-api)
* [API List](#api-list-order)
* [Mandatory Fields In Response](#mandatory-fields-order)
* [Parameters Description](#parameters-description-order)
* [Request and Response Details](#request-and-response-details-order)
* [Subscription API's](#subscription-api)
* [API List](#api-list-subscription)
* [Mandatory Fields In Response](#mandatory-fields-subscription)
* [Parameters Description](#parameters-description-subscription)
* [Request and Response Details](#request-and-response-details-subscription)
* [Appointment API's](#appointment-api)
* [API List](#api-list-appointment)
* [Mandatory Fields In Response](#mandatory-fields-appointment)
* [Parameters Description](#parameters-description-appointment)
* [Request and Response Details](#request-and-response-details-appointment)
* [Service API's](#service-api)
* [API List](#api-list-service)
* [Mandatory Fields In Response](#mandatory-fields-service)
* [Parameters Description](#parameters-description-service)
* [Request and Response Details](#request-and-response-details-service)
* [Therapist API's](#therapist-api)
* [API List](#api-list-therapist)
* [Mandatory Fields In Response](#mandatory-fields-therapist)
* [Parameters Description](#parameters-description-therapist)
* [Request and Response Details](#request-and-response-details-therapist)
* [Store API's](#store-api)
* [API List](#api-list-store)
* [Mandatory Fields In Response](#mandatory-fields-store)
* [Parameters Description](#parameters-description-store)
* [Request and Response Details](#request-and-response-details-store)
---
## Product API's <a id="products-api"></a>
| API List :mag_right: <a id="api-list-products"></a>
-
---
1. getAllProducts (`from`, `size`) **`GET`**
2. getProduct (`productId`) **`GET`**
3. getProductsByUserChoice (`options`) **`POST`**
4. getProductsBy (`columns`, `from`, `size`) **`POST`**
5. getProductsByCategory (`category`) **`GET`**
6. getProductsBySubcategory (`subcategory`) **`GET`**
7. getVariants (`productId`) **`GET`**
8. getFilter (`options`) **`POST`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-products"></a>
-
---
> **For Products** [name=Mandatory]
- Product ID [`string`]
- Title [`string`]
- Description [`string`]
- Brand [`string`]
- Tags [`string`]
- Images [`string`]
- MRP Price [`integer`]
- Seling Price [`integer`]
- Category Level 1 [`string`]
- Category Level 2 [`string`]
- Variants ( Check the variants response for more details ) [`array of variants`]
> **For Variants** [name=Mandatory]
- Available Quantity [`integer`]
- Selling Price [`integer`]
- Size ['string']
- Sku Id [`string`]
- MRP Price [`integer`]
- Image [`string`]
- Color [`string`]
- Weight [`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-products"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`from`** | integer | The value from which the api has to start fetching the products
| **`size`** | integer | The amount of data that we expect to be returned from the api
| **`productId`** | string (or) integer | The unique id of the product with which it is referred
| **`columns`** | object | An object containing the key as the column name and the value as the data that has to be searched in that column
| **`options`** | object | An object containing the key as the column name and the value as the data that has to be searched in that column
| **`category`** | string | The category
| **`subcategory`** | string | The subcategory
| **`subscription`** | boolean | A boolean value to identify to check only for subscription products
---
| Request and Response Details :mag_right: <a id="request-and-response-details-products"></a>
-
---
**1. getAllProducts()**
```api
[API] getAllProducts (`from`, `size`,`subscription`) [`GET`]
[Parameters] from, size, subscription
[Request] https://example.com/api/v3/products
[Response] Array of Multiple Products
```
**2. getProduct()**
```api
[API] getProduct (`productId`,`subscription`) [`GET`]
[Parameters] productId,subscription
[Request] https://example.com/api/v3/products/<productId>
[Response] Single Product Object
```
**3. getProductsByUserChoice()**
```api
[API] getProductsByUserChoice(`options`) [`POST`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/products-by-user-choice
[Response] Array of Products by User Choice
```
**4. getProductsBy()**
```api
[API] getProductsBy (`columns`, `from`, `size`) [`POST`]
[Parameters] from, size
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/products-by
[Response] Array of Products by the Requested Columns
```
**5. getProductsByCategory()**
```api
[API] getProductsByCategory (`category`,`subscription`) [`GET`]
[Parameters] category,subscription
[Request] https://example.com/api/v3/products-category
[Response] Array of Products by the Category
```
**6. getProductsBySubcategory()**
```api
[API] getProductsBySubcategory (`subcategory`,`subscription`) [`GET`]
[Parameters] subcategory,subscription
[Request] https://example.com/api/v3/products-subcategory
[Response] Array of Products by the Subcategory
```
**7. getVariants()**
```api
[API] getVariants (`productId`,`subscription`) [`GET`]
[Parameters] productId,subscription
[Request] https://example.com/api/v3/variants/<product-id>
[Response] Array of Variants of a Product
```
**8. getFilter()**
```api
[API] getFilter (`options`) [`POST`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/get-filter
[Response] Array of Products Based on the Filter
```
---
## User API's <a id="user-api"></a>
| API List :mag_right: <a id="api-list-user"></a>
-
---
1. getAllUsers () **`GET`**
2. getUser (`primaryKey`) **`GET`**
3. getUserData (`data`, `primaryKey`) **`POST`**
4. addUser (`data`) **`POST`**
5. updateUser (`data`, `primaryKey`) **`POST`**
6. utilUserDetails(`data`, `primaryKey`) **`POST`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-user"></a>
-
---
> **For User** [name=Mandatory]
- User ID [`string`]
- Name [`string`]
- Email [`string`]
- Mobile [`string`]
- Pincode [`string`]
- City [`string`]
- Region [`string`]
- Country [`string`]
- Country Code [`string`]
- Offers [`array`]
- Address [`array of objects ( Max 3 address )`]
- Lat Long [`integer`]
- Optin [`array`]
- Locale [`string`]
- User Type [`string`]
- User Status [`string`]
- Recent Orders (Last 5 Order's Order-ID) [`array`]
- Channels Interacted [`array`]
- Store ID [`string`]
- Store [`string`]
- Open Cart [`array of objects`]
- Last Interacted [`timestamp`]
- Building [`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-user"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`primaryKey`** | string / integer | The primary key of the user. Either userId (or) mobile (or) email
| **`data`** | object | An object containing the data that has to be inseted / updated / deleted
---
| Request and Response Details :mag_right: <a id="request-and-response-details-user"></a>
-
---
**1. getAllUsers()**
```api
[API] getAllUsers () [`GET`]
[Request] https://example.com/api/v3/users
[Response] Array of Multiple Users
```
**2. getUser()**
```api
[API] getUser (`primaryKey`) [`GET`]
[Parameters] primaryKey ( Mobile, Email or UserID )
[Request] https://example.com/api/v3/users/<primary-key>
[Response] Single User Object
```
**3. getUserData()**
```api
[API] getUserData(`data`, `primaryKey`) [`POST`]
[Parameters] primaryKey ( Mobile, Email or UserID )
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/user-data
[Response] Object of a Single User with the Specified Fields
```
**4. addUser()**
```api
[API] addUser (`data`) [`GET`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/variants/add-users
[Response] If the User has been Added Successfully
```
**5. updateUser()**
```api
[API] updateUser (`data`, `primaryKey`) [`POST`]
[Parameters] primaryKey ( Mobile, Email or UserID )
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/update-user
[Response] Object of the Columns that have been Updated
```
**6. utilUserDetails()**
```api
[API] utilUserDetails (`data`, `primaryKey`) [`POST`]
[Parameters] primaryKey ( Mobile, Email or UserID )
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/util-user-details
[Response] Data that has been Updated ( last_interacted, open_cart, channels_interacted )
```
---
## Order API's <a id="order-api"></a>
| API List :mag_right: <a id="api-list-order"></a>
-
---
1. placeOrder (`data`) **`POST`**
2. updateOrder (`data`) **`POST`**
3. getOrderStatus (`orderId`) **`GET`**
4. getOrderDetails (`orderId`) **`GET`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-order"></a>
-
---
> **For Order** [name=Mandatory]
- Customer Name [`string`]
- Mobile [`string`]
- Address [`string`]
- City [`string`]
- Pincode [`string`]
- Landmark [`string`]
- Nearest Store [`string`]
- Order Items [`array of items ordered`]
- Order Quantity [`array of quantity of respective items ordered`]
- Order ID [`string`]
- Payment Mode [`string`]
- Region [`String`]
- Store Plant [`string`]
- Order Value [`integer`]
- User Source [`string`]
- Order Status [`string`]
- Ordered Time [`Timestamp`]
- Order Reason [`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-order"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`data`** | object | Object containing the customer details along with his cart details
| **`orderId`** | string | Unique order id for that order
---
| Request and Response Details :mag_right: <a id="request-and-response-details-order"></a>
-
---
**1. placeOrder()**
```api
[API] placeOrder () [`POST`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/place-order
[Response] Object with the details of the Order and Customer
```
**2. updateOrder()**
```api
[API] updateOrder () [`POST`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/updateOrder
[Response] Object with the Details of the Order that has been Updated
```
**3. getOrderStatus()**
```api
[API] getOrderStatus (`orderId`) [`GET`]
[Parameters] orderId
[Request] https://example.com/api/v3/order-status
[Response] Order Status of the Specified Order ID
```
**4. getOrderDetails()**
```api
[API] getOrderDetails (`orderId`) [`GET`]
[Parameters] orderId
[Request] https://example.com/api/v3/order-details
[Response] Order Details of the Specified Order ID
```
---
## Subscription API's <a id="subscription-api"></a>
| API List :mag_right: <a id="api-list-subscription"></a>
-
---
1. getProductsBySubType(`subtype`) **`GET`**
2. getSubscriptionDetailsByVariantId(`variantId`) **`GET`**
3. getSubscribedItemsByUserId(`userId`) **`GET`**
4. getSubscribedItemsByMobileNumber(`mobileNo`) **`GET`**
5. getSubscribedItemsByDate(`fromDate`,`toDate`) **`GET`**
6. addSubscription (`data`) **`POST`**
7. getAllSubType() **`GET`**
8. deleteSubscription(`subId`) **`POST`**
9. cancelSubscription(`subId`) **`POST`**
10. getSubByMobileAndVariantId(`data`) **`POST` **
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-subscription"></a>
-
---
> **For Subscription** [name=Mandatory]
- Subscription ID[`string`]
- User ID[`string`]
- Mobile Number[`string`]
- Product ID[`string`]
- Variant ID['string']
- Subscription Type[`string`]
- Start Date[`Timestamp`]
- End Date[`Timestamp`]
- Subscription Times[`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-subscription"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`from`** | integer | The value from which the api has to start fetching the products
| **`size`** | integer | The amount of data that we expect to be returned from the api
| **`productId`** | string (or) integer | The unique id of the product with which it is referred
| **`subType`** | string | The subscription type
| **`variantId`** | string (or) integer | The unique id of the product's variant with which it is referred
| **`columns`** | object | An object containing the key as the column name and the value as the data that has to be searched in that column
| **`options`** | object | An object containing the key as the column name and the value as the data that has to be searched in that column
| **`userId`** | string | The unique ID to identify the user
| **`mobileNo`** | string | The mobile number of the user
---
| Request and Response Details :mag_right: <a id="request-and-response-details-subscription"></a>
-
---
**1. getProductBySubType()**
```api
[API] getProduct (`subType`) [`GET`]
[Parameters] subType
[Request] https://example.com/api/v3/products/<subType>
[Response] Product Object
```
**2. getSubscriptionDetailsByVariantId()**
```api
[API] getProduct (`variantId`) [`GET`]
[Parameters] variantId
[Request] https://example.com/api/v3/products/<variant-id>
[Response] Single Product Object
```
**3. getSubscribedItemsByUserId()**
```api
[API] getSubscribedItemsByUserId (`userId`) [`GET`]
[Parameters] userId
[Request] https://example.com/api/v3/get-subscribed-items-userid/<user-id>
[Response] Array of Products Based on the Filter
```
**4. getSubscribedItemsByMobileNo()**
```api
[API] getSubscribedItemsByUserId (`mobileNo`) [`GET`]
[Parameters] mobileNo
[Request] https://example.com/api/v3/get-subscribed-items-mobile/<mobile-no>
[Response] Array of Products Based on the Filter
```
**5. getSubscribedItemsByDate()**
```api
[API] getSubscribedItemsByUserId (`options`) [`GET`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/get-subscribed-items-by-date
[Response] Array of Products Based on the Filter
```
**6. addSubscription()**
```api
[API] addSubscription (`data`) [`POST`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/add-subscription
[Response] If the subscription has been Added Successfully
```
**7. deleteSubscription()**
```api
[API] deleteSubscription (`variantId`) [`POST`]
[Parameters] variantId
[Request] https://example.com/api/v3/delete-subscription
[Response] If the product has been deleted from the subscription list
```
**8. getAllSubType()**
```api
[API] getAllSubType (`from`,`size`) [`GET`]
[Parameters] from,size
[Request] https://example.com/api/v3/get-subscription-types
[Response] Array of Products Based on the Filter
```
**9. getSubByMobileAndVariantId()**
```api
[API] getSubByMobileAndVariantId ('data') [`POST`]
[Body] Object ( Key - Column, Value - Data to Search )
[Request] https://example.com/api/v3/get-subscription-mobile-variantId
[Response] Array of Products Based on the Filter
```
---
## Appointment API's <a id="appointment-api"></a>
| API List :mag_right: <a id="api-list-appointment"></a>
-
---
1. bookAppointment(`bookAppointmentData`) **`POST`**
2. getAllAppointments(`mobile`) **`GET`**
3. getAppointment(`appointmentId`) **`GET`**
4. cancelAppointment(`appointmentId`) **`GET`**
5. rescheduleAppointment(`rescheduleData`) **`POST`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-appointment"></a>
-
---
> **For Appointment** [name=Mandatory]
- User ID [`string`]
- Name [`string`]
- Mobile Number [`string`]
- Email [`string`]
- Appointment ['string']
- Service [`string`]
- Date [`string`]
- Slotted [`boolean`]
- Start Time [`string`]
- End Time [`string`]
- Status [`string`]
- Service Status [`string`]
- Custom Therapist [`boolean`]
- Therapist [`string`]
- Notes [`string`]
- Price [`String`]
- Checkin Time [`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-appointment"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`bookAppointmentData`** | object | All the mandatory fields which are required to create an appointment for the user
| **`mobile`** | string | Mobile number of the user which is the unique primary key
| **`appointmentId`** | string (or) integer | The unique appointment ID of the booked appointment
| **`rescheduleData`** | object | This consist of the appointment id, the new date and new time to reschedule the appointment
---
| Request and Response Details :mag_right: <a id="request-and-response-details-appointment"></a>
-
---
**1. bookAppointment()**
```api
[API] bookAppointment (`bookAppointmentData`) [`POST`]
[Parameters] bookAppointmentData
[Request] https://example.com/api/v3/appointments/book
[Response] Single Object with all the Booked Appointment Details
```
**2. getAllAppointments()**
```api
[API] getAllAppointments (`mobile`) [`GET`]
[Parameters] mobile
[Request] https://example.com/api/v3/appointments/getAll
[Response] Array of Multiple Objects of Appointments Matched With the Passed Mobile
```
**3. getAppointment()**
```api
[API] getAppointment (`appointmentId`) [`GET`]
[Parameters] appointmentId
[Request] https://example.com/api/v3/appointments/getAppintment
[Response] Single Object With All the Data of the Booked Appointment
```
**4. cancelAppointment()**
```api
[API] cancelAppointment (`appointmentId`) [`GET`]
[Parameters] appointmentId
[Request] https://example.com/api/v3/appointments/cancelAppointment
[Response] Response Whether the Cancel was true or fase
```
**5. rescheduleAppointment()**
```api
[API] rescheduleAppointment (`rescheduleDate`) [`GET`]
[Body] rescheduleData (appointmentId, newDate, newTime)
[Request] https://example.com/api/v3/appointments/reschedule
[Response] Response With all the New Changed Values of the Appointment
```
---
## Service API's <a id="service-api"></a>
| API List :mag_right: <a id="api-list-service"></a>
-
---
1. getService(`category`, `subcategory`) **`GET`**
2. getAllServices() **`GET`**
3. getCategories() **`GET`**
4. getSubcategories(`category`) **`GET`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-service"></a>
-
---
> **For Services** [name=Mandatory]
- Service ID [`integer or string`]
- Name [`string`]
- Category [`string`]
- Subcategory [`string`]
- Description ['string']
- Image [`string`]
- Duration [`string`]
- Recovery Time [`string`]
- Price [`string`]
- Additional Info [`string`]
- Variants [`array`]
- Variants ID [`array`]
- Offers [`array`]
- Is Add On [`boolean`]
- Has Add On [`boolean`]
- Add Ons [`array`]
---
| Parameters Description :mag_right: <a id="parameters-description-service"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`category`** | string | Category to which a service belong to
| **`subcategory`** | string | Subcategory to which a service belong to
---
| Request and Response Details :mag_right: <a id="request-and-response-details-service"></a>
-
---
**1. getService()**
```api
[API] getService (`category`, `subcategory`) [`POST`]
[Parameters] category, subcategory
[Request] https://example.com/api/v3/services/get
[Response] Single Object with all the Service Details
```
**2. getAllServices()**
```api
[API] getAllAppointments () [`GET`]
[Parameters]
[Request] https://example.com/api/v3/services/getAll
[Response] Array of Multiple Objects of Services
```
**3. getCategories()**
```api
[API] getCategories () [`GET`]
[Parameters]
[Request] https://example.com/api/v3/services/getCategories
[Response] Array of All the Categories Available
```
**4. getSubcategories()**
```api
[API] cancelAppointment (`category`) [`GET`]
[Parameters] categiry
[Request] https://example.com/api/v3/services/getSubcategory
[Response] Array of Subcategories Which Belong to Passed Category
```
---
## Therapist API's <a id="therapist-api"></a>
| API List :mag_right: <a id="api-list-therapist"></a>
-
---
1. getAllTherapist(`storeId`) **`GET`**
2. get(`therapistId`) **`GET`**
3. getAllTherapistId(`storeId`) **`GET`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-therapist"></a>
-
---
> **For Therapist** [name=Mandatory]
- Name [`string`]
- Mobile [`string`]
- Email [`string`]
- Employee ID ['string']
- Service Handled [`array`]
- Available [boolean]
- Servicable [`boolean`]
- Store ID [`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-therapist"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`storeId`** | string | The unique ID of the store to which the therapist belong to
| **`therpistId`** | string | The unique id of the therapist
---
| Request and Response Details :mag_right: <a id="request-and-response-details-therapist"></a>
-
---
**1. getAllTherapist()**
```api
[API] getAllTherapist (`storeId`) [`POST`]
[Parameters] storeId
[Request] https://example.com/api/v3/therapist/storeId
[Response] Array of Multiple Objects of Services
```
**2. get()**
```api
[API] get (`therapistId`) [`GET`]
[Parameters]
[Request] https://example.com/api/v3/therapist/get
[Response] Single Object with all the Therapist Details
```
**3. getAllTherapistId(`storeId`)**
```api
[API] getAllTherapistId (`storeId`) [`GET`]
[Parameters]
[Request] https://example.com/api/v3/therapist/getAllTherapistId
[Response] Array of All the Therapist ID Withing the Store
```
---
## Store API's <a id="store-api"></a>
| API List :mag_right: <a id="api-list-store"></a>
-
---
1. getStores(`lat,lng,distance`) **`GET`**
2. getStoresByPlant(`plantName`) **`GET`**
---
| Mandatory Fields In Response :mag_right: <a id="mandatory-fields-store"></a>
-
---
> **For Therapist** [name=Mandatory]
- Plant Name [`string`]
- Address [`string`]
- Branch Name [`string`]
- City ['string']
- Region [`array`]
- Store Status [boolean]
- Store ID [`string`]
---
| Parameters Description :mag_right: <a id="parameters-description-stores"></a>
-
---
| Parameters | Type | Description |
| - | - | - |
| **`plantName`** | string | The store name
| **`address`** | string | The store address
| **`branchName`** | string | The branch name for the store
| **`city`** | string | The city name
| **`region`** | string | The region name
| **`storeStatus`** | boolean | The status of the store
| **`storeId`** | boolean | The unique id for the store
---
| Request and Response Details :mag_right: <a id="request-and-response-details-store"></a>
-
---
**1. getStores()**
```api
[API] getStores (`lat,lng,distance`) [`POST`]
[Parameters] lat,lng,distance
[Request] https://example.com/api/v3/store/getStores
[Response] Array of Multiple Objects of Stores
```
**2. getStoresByPlantName()**
```api
[API] getStoresByPlantName (`plantName`) [`GET`]
[Parameters] plantName
[Request] https://example.com/api/v3/stores/getStoresByPlantName
[Response] Single Object with all the Store Details by plant name
```
---