Skip to main content

How to create an appointment

This document is designed to help you understand how to create an appointment in myKaarma, what all parameters would you need, how to fetch them and then use them to best suit your use case.

You can create appointments in myKaarma for customer visits so that your Service Advisors are aware of their daily schedule and your customers could be notified/reminded for their scheduled visit.

To create an appointment, you first need your credentials. If you don't already have one, head over to the Authentication and Authorization page to see how you can request for credentials from us.

Parameters

Path parameter:

Required path parameters for process :

Parameter NameTypeDescription
departmentUUIDstringUnique identifier of dealer's department
dealerUuidStringUnique identifier of dealer

Scope

This process requires the following authorization scopes :

ScopeLevelDescription
customer.searchDealerDepartmentAuthorizes client to search for customers for provided user's dealer department
customer.updateDealerDepartmentAuthorizes client to create customer for provided user's dealer department
kopcode.operation.readDealerAuthorizes client to get operation codes for given dealership
kopcode.factory.menu.readDealerAuthorizes client to get factory-menus for given dealership
appointment.configurationDealerAuthorizes client to get eligible advisor for the provided dealer
appointment.transportOptionsDealerDepartmentAuthorizes client to get transportOption for a dealer
manage.dealerassociate.groupDealerDepartmentAuthorizes client to manage dealerassociate group

The following endpoints can help you with forming a proper request to create an appointment:

Process

To create an appointment in myKaarma, follow these steps based on your use case.

Decision Tree

  • Search for a Customer: Please refer to search and then create customer documentation. For this process, you will need to get UUID of the customer and vehicle.

  • Get services/opcodes: Please refer to get opcodes and menus. For this process, you can get the UUIDs of these services and operation Types. Alternatively, you can also use the laborOpcodes of these services. This endpoint gives only OPCODE and SERVICEMENU operation Types. Please use that information while creating an Appointment.

  • Get factory menus: Note - This is an Optional Step. Please refer to get factory menus. For this process, you can get the UUIDs of these services and operation Types. This endpoint gives only SERVICEMOTORSMAINTENANCEMENU operation Type. Please use that information while creating an Appointment.

  • Get Advisors: If your use case doesn't need a specific advisor to whom an appointment will be assigned, you can skip this step. You can pass the 'assignedUser' field as null. If it does require a specific advisor, then you will to find the UUID of this advisor. Please refer to get eligible advisors to find the UUID for your particular advisor.

  • Get Transport options: If your use case doesn't require any particular transport option or the transport option is 'None' for the appointment, you can pass 'transportOption' field as null. If it requires a different transport option, go through this page to obtain the UUID of the required transport option.

  • Get Team List: Teams are basically group of advisors created at the dealership. Let us say dealership wants appointments of a particular vehicle go to only a group of advisors, teams are helpful in such a setup. Again, if your use case is of no particular advisor then you can send 'teamUuid' as null and skip this step. If it is not, then please go through this page and check which teams have the UUID of the advisor you want to be assigned to the appointment and then select a team of your choice. Store the team's UUID for further processing.

  • Get slots available for appointment: Now you have all the parameters needed to create the appointment ready and need to find an available slot to schedule the appointment. Please note that availability of slots depend on various parameters:

  • Customer information
  • Vehicle information
  • Advisor to which appointment is assigned.
  • Team of the advisor to which appointment is assigned.
  • Services related to the appointment.
  • Transport option related to the appointment.

You have obtained the unique identifiers of all these parameters in previous steps of this process. You have to pass these identifiers in the availability request. Please note:

  • It is advised to fetch availability everytime one of these parameters is added/changed.
  • There are limits on how many appointments can be scheduled per transport option, advisor or dealership on slot, date and day level. Thus, availability also may change whenever an appointment is scheduled. The appointment can be scheduled from any myKaarma client or any other API partners. Keeping this in mind, it is advised to fetch availability right before scheduling the appointment.

For detailed explanation on how to get the available slots, refer to this page.

Request

HTTP request

POST  https://api.mykaarma.com/appointment/v2/dealer/{dealerUuid}/appointment

Parameters

Path parameter:

Parameter NameValueDescriptionRequired
dealerUuidStringUnique identifier of dealerYes

Authorization

This request requires the following authorization scopes:

ScopeLevelDescription
appointment.createDealerAuthorises client to create appointment for the provided dealer

Request Body

Property NameValueDescriptionRequired
customerUuidStringUnique token assigned to each customer in myKaarmaYes
vehicleInformationObjectDetails of the vehicle for which appointment is to be created such as - vin , vehicleKey , vehicleUuidYes
appointmentStartDateTimeStringThe preferred start date-time of the appointment in yyyy-MM-ddTHH:mm:ss formatYes
appointmentEndDateTimeStringThe preferred end date-time of the appointment in yyyy-MM-ddTHH:mm:ss formatNo
transportationStringOption Name of transport option fetched using 'Get Transport options' endpoint. Example: LoanerNo
transportOptionUuidStringUUID of transport option fetched using 'Get Transport options' endpoint. Example: -f_LNZEWiHQg4AbTH-b_qmDTO8CKwkSQXCtpYFHfWGwNo
altTransportationStringCustom Name of transport option fetched using 'Get Transport options' endpoint. Example: LoanerNo
assignedUserObejctThe details of the dealer associate to whom the appointment is assignedNo
creatorUserObjectThe details of the dealer associate who created the appointmentNo
appointmentKeyStringUnique token assigned to each appointment in DMSNo
commentsStringComments/remarks for the appointment taken as customer's notesNo
internalNotesStringInternal notes for the appointment which are intended for the dealership personnel only and not for the customer's visibilityNo
serviceListObjectList of services to be performed on the customer's vehicle for the appointment. It contains field like title, description, operationType etc.
title: Title of the service (also referred as labor opcode)
description: Description of the service
operationType: There are 3 supported operation types - OPCODE, SERVICEMENU, SERVICEMOTORSMAINTENANCEMENU.
No
customerAppointmentPreferenceObjectPreferences for customer communicationNo
statusObjectStatus of the appointmentNo
recallBooleanWhether the appointment includes a recallNo
pushToDmsBooleanWhether the appointment should be pushed to DMSNo

Explaining objects in request body

vehicleInformation

Property NameValueDescriptionRequired
vinStringVehicle Identification Number - unique code used by automotive industry to identify vehicleNo
vehicleKeyStringUnique key of vehicle in the DMSNo
vehicleUuidStringUnique identifier of vehicle in myKaarmaNo

Note

None of the fields in this object are required but if you want a vehicle to be associated with the appointment, please pass one of these fields in the vehicleInformation object. You will get the UUID of the vehicle in the same process of getting a customer. Please refer to search and then create customer documentation.

assignedUser

Property NameValueDescriptionRequired
uuidStringUnique identifier of the userNo
deptUUIDStringUnique identifier of the department of the userNo
teamUuidStringUnique identifier of the team user belongs toNo

Note

Send this object as null if your use case doesn't require an appointment to be assigned to any of the users. Our system will automatically assign the appointment to one of the advisors depending on their availability. If you want the appointment to be assigned to a specific user, we would recommend sending the uuid and deptUUID fields. If deptUUID is not sent, we would be default pick the UUID of service department of the dealership. You can get these fields from the response of get eligible advisors. 'userUuid' would map to uuid field in this object and "uuid" field of "department" object in the response would map to 'deptUUID'.

creatorUser

Property NameValueDescriptionRequired
uuidStringUnique identifier of the userNo
deptUUIDStringUnique identifier of the department of the userNo
teamUuidStringUnique identifier of the team user belongs toNo

Note

This object is similar to assignedUser in terms of fields. You can pass this as null if your use case doesn't need a specific creator for the appointment. If not, follow the same steps as the assignedUser.

customerAppointmentPreference

Property NameValueDescriptionRequired
emailConfirmationBooleanDecides whether to send an email for appointment confirmationNo
textConfirmationBooleanDecides whether to send an text for appointment confirmationNo
emailReminderBooleanDecides whether to send a reminder email for appointmentNo
textReminderBooleanDecides whether to send a reminder text for appointmentNo
notifyCustomerBooleanDecides whether to send appointment notifications to the customerNo
sendCommunicationToDABooleanWhether to send appointment communications to the dealer associateNo
confirmationEmailStringEmail ID of customer where appointment confirmation email should be sentNo
confirmationPhoneNumberStringPhone number of the customer where appointment confirmation text should be sentNo

Note

None of the fields are required. If you do not want communication with the customer to be done from myKaarma, send this object as null. If you want communication with the customer to be done from myKaarma, 'notifyCustomer' will be the umbrella boolean that has to be sent as true. Send other boolean depending on your use case whether you want communication through text or email and whether you want to send reminders or not. Reminders typically go out a day before the appointment. If you want the user to get notifications of the communication to customer, send this 'sendCommunicationToDA' field as true.

status

To create an appointment, our recommendation would be to send this as null. This is actually an enum that can take these values - CANCELLED, FAILED, UPDATED, Rescheduling Requested, Cancellation Requested, Show, No Show, Rescheduled, Updated, Confirmed, Scheduled, Reminder Sent, Cancelled. This status updates as the journey of the appointment happens in myKaarma.

serviceList

Note

This is not a required field. Send this as null if you don't want any opcodes/services to be attached to your appointment. We will save the service lines with as many details as you send us. For details exactly as they are in our system, just send the 'operationUuid' or 'title' field. 'title' maps to "laborOpCode" and 'operationUuid' maps to "uuid" of the response to get opcodes and menus.

Property NameValueDescriptionRequired
titleStringlaborOpCode of the opcode - unique code assigned to every serviceNo
descriptionStringDescription of the opcode/serviceNo
opCodeNameStringName of the opcode/serviceNo
priceStringPrice of the opcode/serviceNo
laborTotalStringTotal labor price of the opcode/serviceNo
partsTotalStringTotal parts price of the opcode/serviceNo
shopFeesStringPrice of the shop of the opcode/serviceNo
taxesStringTaxes to be applied for the opcode/serviceNo
payTypeStringWhat is the pay type of the opcode/service, ex. Customer, Warranty, Internal, etc.No
sortOrderStringDefines at what place in the list will the opcode/service showNo
recallIDStringID of the recall associated with the opcode/serviceNo
parentTitleStringThis is valid only for menus and not opcodes. The laborOpCode of the opcode associated with the menuNo
menuUuidStringThis is valid only for menus and not opcodes. Unique identifier of the menuNo
operationTypeStringWhat is the type of service. The default is OPCODE. It can be OPCODE, SERVICEMENU, SERVICEMOTORSMAINTENANCEMENU, SERVICEMOTORSLINEITEM, SERVICEMOTORSINDICATOR.No
operationUuidStringUnique identifier to the opcode/serviceNo
isCustomConcernStringThis tells whether the opcode/service is present at dealership or there is a custom request from customerNo
durationInMinsStringThe time opcode/service takes in minsNo
parentOpcodeUuidStringThis is valid only for menus and not opcodes. The UUID of the opcode associated with the menuNo

Curl for appointment with no specific advisor, team and transport option.

curl --location --request POST 'https://api.mykaarma.com/appointment/v2/dealer/{{dealer_uuid}}/appointment' \
--header 'Authorization: Basic {{basic_auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"customerUuid": "{customer_uuid}",
"vehicleInformation": {
"vehicleUuid": "{vehicle_uuid}"
},
"appointmentInformation": {
"appointmentStartDateTime": "{appointment_start_date_time e.g 2024-10-25T11:15:00}",
"appointmentEndDateTime": "{appointment_end_date_time e.g 2024-10-25T11:29:59}",
"trasportOption": null,
"transportOption": null,
"assignedUser": null,
"creatorUser": null,
"appointmentKey": null,
"mileageText": null,
"comments": "\n",
"internalNotes": "",
"serviceList": [
{
"title": "{labor_opcode}",
"operationUuid": {operation_uuid},
"isCustomConcern": false,
"operationType": "{operation_type}",
}
],
"customerAppointmentPreference": {
"emailConfirmation": false,
"textConfirmation": false,
"emailReminder": false,
"textReminder": false,
"confirmationEmail": "{email}",
"confirmationPhoneNumber": "310XXXXXXX",
"notifyCustomer": true,
"sendCommunicationToDA": true
},
"status": null,
"recall": false,
"reminderCount": 0,
"isOverridden": false,
"overrideFutureNoPrefAppointment": false,
"pushToDms": true,
"draftUuid": null,
"pdrToOpcodes": {},
"deferredRecallDTOList": null,
"pickupDeliveryTripEvent": null,
"sdSessionId": null
}
}
'

Complete Curl

curl --location --request POST 'https://api.mykaarma.com/appointment/v2/dealer/{{dealer_uuid}}/appointment' \
--header 'Authorization: Basic {{basic_auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"customerUuid": "fdgdfdfretertegbv43-A9ujPPd-M",
"vehicleInformation": {
"vin": null,
"vehicleKey": null,
"vehicleUuid": "kdFmlaWcUCWMAdZotP3fgdfVnOKHge56t0NXuG4QpXdWY"
},
"appointmentInformation": {
"appointmentStartDateTime": "2024-10-25T11:15:00",
"appointmentEndDateTime": "2024-10-25T11:29:59",
"trasportOption": {
"altTransportation": null,
"transportation": null,
"transportOptionUuid": "dfsdsf43tfxs-pCn0VBtnCur1AsjPwkH2RHUpf89LiMU",
"bookingID": null,
"bookInThirdParty": false
},
"transportOption": null,
"assignedUser": {
"uuid": "6bed86cc14791jkbdsf85a396610a3a84737546a0dd4ed23f522f90c91fe0",
"deptUUID": "8ec821aefe98664ab15dfwrtrgfdghl0b1aeda9ff58df3db89bb0a55a3",
"teamUuid": null
},
"creatorUser": {
"uuid": "80c9166f65eecad91e3855555svdgerfg3e5d7a95841c3a2a7086d1c87a",
"deptUUID": "8ec821aefe9twr42f34f26c3c46f9c37d0b1aeda9ff58df3db89bb0a55a3",
"teamUuid": null
},
"appointmentKey": null,
"mileageText": null,
"comments": "\n",
"internalNotes": "",
"serviceList": [
{
"title": "CECOIL",
"description": "CECOIL",
"opCodeName": null,
"price": null,
"laborTotal": null,
"partsTotal": null,
"shopFees": null,
"taxes": null,
"payType": null,
"sortOrder": 2,
"recallID": null,
"parentTitle": null,
"menuUuid": null,
"laborOpCode": null,
"operationType": "OPCODE",
"operationUuid": null,
"isCustomConcern": false,
"durationInMins": null,
"parentOpcodeUuid": null
}
],
"customerAppointmentPreference": {
"emailConfirmation": false,
"textConfirmation": false,
"emailReminder": false,
"textReminder": false,
"confirmationEmail": "test@gmail.com",
"confirmationPhoneNumber": "310XXXXXXX",
"notifyCustomer": true,
"sendCommunicationToDA": true
},
"status": null,
"recall": false,
"reminderCount": 0,
"isOverridden": false,
"overrideFutureNoPrefAppointment": false,
"pushToDms": true,
"draftUuid": null,
"pdrToOpcodes": {},
"deferredRecallDTOList": null,
"pickupDeliveryTripEvent": null,
"sdSessionId": null
}
}
'