Skip to main content

myKaarma Webhook Events

Context

This document is designed to help you integrate with myKaarma webhooks. myKaarma will publish customer, appointment and order events on any change happening to the corresponding entity in our system. The third party API partners can build an API path (as in example shown later in this document). This API endpoint will be hit anytime myKaarma produces these events.

API partners can take a look at the events shape that is explained in this document and then filter and use the events according to their use cases.

Shape of API and Events

API Path

This API path is what we expect from the third party to provide us so the events can be sent to the API URL as a POST endpoint with a JSON request body.

https://<third-party-base-url>/<webhook-event-path>

Example: https://mykaarma-partner.ai/mykaarmaevents

Important Note on Content-type

Please note that we will send a valid JSON, but with text/plain as Content-type in header. Please make sure that text/plain is accepted on the third party endpoint.

IP Whitelisting for receiving webhook events

You'll need to whitelist the IP 54.174.160.138 to allow traffic from us to your webhook endpoint.

Retry Policy of Events

The endpoint should respond with a 2xx in 5 seconds on receiving the event, otherwise, it is deemed as an invocation failure. In case of any failure, the event is retried 5 times with an exponential back off and jitter, or randomized delay.

Shape of myKaarma Event

AttributeExample value
content-typetext/plain
mykaarma-signature-tokensha256=xxxxxxxxxxxx
x-authorization-tokenmyKaarma_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Please check details on how to use the mykaarma-signature-token in this page.

Body

This table explains the different attributes associated with events in myKaarma.

AttributeDescription
idUnique event ID. Can be used along with type for deduplication.
typeCan be service-orders, appointments, customers, or mpis.
timestampTime of the event occurrence (UTC). Used to handle out-of-order events.
dealeruuidUnique 64-character identifier for the dealer.
departmentuuidUnique 64-character identifier for the department.
payloadStringified JSON corresponding to the event type.

Note

These fields will be common to all the myKaarma events with the payload differing according to the events.

Example:

{
"id": "6c7e57fe-0e06-4fc9-8120-e1593257f1cf",
"timestamp": 1728542293678,
"dealeruuid": "_dealeruuid",
"departmentuuid": "_departmentuuid",
"type": "service-orders/appointments/customers/mpis",
"payload": { ... }
}

Important Notes About Payload Format

  1. Stringified JSON Payload: In the actual webhook events, the payload field will be an escaped stringified JSON (not a JSON object). For example, it would look like:

    "{\"customerWithVehicles\":{\"customer\":{\"id\":null,\"customerKey\":null,\"firstName\":\"myKaarma\"...

    The examples in this document show the payload as formatted JSON objects for readability, but you will need to parse the stringified payload in your webhook endpoint.

  2. Out-of-order events: Please use the timestamp field to handle out-of-order events. Depending on your use-case you might need to use the corresponding GET API endpoint for fetching the latest state of the object received in the event.

There will be four different kinds of events

  • Customer event
  • Appointment event
  • Order event
  • MPI event

Example Customer Payload Event

The payload will include the model of the Customer that third-party partners already receive from calling the myKaarma Customer API.
You can find the documentation references for the fields received in customerWithVehicles payload here.

Important Notes

  • The architecture for customer creation and update pushes events via an indexer job, which runs once per second.
  • If a particular customer has been updated multiple times within a duration of less than 1 second, you will receive only a single update event with the final customer data.

Example Payload

{
"id": "756760fe-e5a5-4be9-8e69-eae7c47f24e8",
"dealeruuid": "cb731d36fd635ddd6ef8dd43500892b0c0249d1c01a46dbcc445a809c0a8e3b2",
"timestamp": 1758964622652,
"type": "customers",
"payload": '
{
"customerWithVehicles":{
"customer":{
"id":null,
"customerKey":null,
"firstName":"myKaarma",
"middleName":"",
"lastName":"Testing",
"company":null,
"preferredLocale":"en-us",
"emails":[
{
"emailAddress":"mykaarma.testing@gmail.com",
"label":"home",
"okToEmail":true,
"isPreferred":true,
"comments":null
}
],
"phoneNumbers":[
{
"phoneNumber":"+13108170196",
"label":"cell",
"okToCall":true,
"okToText":true,
"isPreferred":true,
"comments":null
}
],
"preferredCommunication":null,
"bestTimeToContact":{
"startTime":null,
"endTime":null
},
"addresses":[

],
"availability":1,
"isBusiness":false,
"customerUuid":"GFRR8beBGW8agB5kTOIJtgM9XyGJGmZuye7PfCftGh4",
"customerId":"GFRR8beBGW8agB5kTOIJtgM9XyGJGmZuye7PfCftGh4"
},
"vehicles":[
{
"id":null,
"vin":"1GD312CG0BF081737",
"vehicleKey":null,
"isValid":true,
"imageUrl":null,
"brandId":null,
"licensePlate":null,
"color":null,
"vehicleModel":"Sierra 3500HD",
"vehicleYear":"2011",
"vehicleTrim":"Work Truck Long Box 2WD",
"vehicleUuid":"7nFurSTz5Y1L052dxjMuVnhmETXNgUCRM6kQc5iO_6w",
"vehicleEngine":"6.0L V8 OHV 16V FFV",
"estimatedMileage":null,
"vehicleMake":"GMC"
}
]
}
}
'
}

How to test a customer event

  1. Login to https://app.mykaarma.com using the user credentials provided to you.

  2. In the Customer tab, click on NEW button:

    New Customer Button
  3. Fill in the fields in the Add Customer Dialog and click Save. You should receive an event on your webhook URL for this customer creation:

    New Customer Dialog
  4. In the Customer tab, search for and select the customer you want to edit:

    Search Customer
  5. Click on the EDIT button:

    Edit Customer Button
  6. Fill in/update the fields in the Edit Customer Dialog and click Save. You should receive an event on your webhook URL for this customer updation:

    Edit Customer Dialog

Appointment Event

The appointment event will be fired every time an appointment is created, updated or deleted in myKaarma. You can use event and newStatus fields to identify what caused this event to trigger. You can filter these events depending on your use case and ignore the ones irrelevant to you.

These events have everything that you get on hitting our get APIs and more. Let us walk through what the payload of these events would look like:

AttributeDescription
uuidUnique identifier of the event in myKaarma.
departmentUuidUnique identifier of the dealer department for which the appointment is scheduled.
subscriberNameName of the service subscriber or the user of our APIs that triggered the event.
serviceAppointmentRequestLoanerBookingListThis is a list to show all the loaner bookings that have been done for this appointment. This usually contains information like booking ID, time, etc., when booking loaners through third parties like TSD, Logitrac, etc.
eventThis field basically tells you what triggered this appointment event. For the complete list of these types of events, please check the table below.
appointmentInfoResponseThis is the data model that you receive from myKaarma when getting appointments. Please refer to this page. for details.

This table explains the different values 'event' field in these events can take:

'event' Field ValueMeaning
CREATEDThe appointment has been created.
UPDATEDSome parameter (other than date or time) in the appointment has been changed.
CANCELLEDThe appointment has been cancelled.
PUSHED_DMSThe appointment has been pushed to the data management system (DMS) that the dealership uses.
REMINDER_TEXT_SENTA reminder text has been sent to the customer.
REMINDER_EMAIL_SENTA reminder email has been sent to the customer.
DEALERORDER_MAPPEDA repair order has been mapped to the appointment. This signifies that the customer showed up for the appointment.
DEALERORDER_UNMAPPEDA repair order has been unmapped from the appointment. This means an incorrect order was mapped and has now been corrected. This can happen when a repair order was mapped based on probable matching (e.g., name, phone number), but a more certain mapping (UUID-based) replaces it.
LOANER_BOOKEDA loaner has been booked for the customer related to this appointment.
LOANER_CANCELLEDThe loaner that was booked for the customer has been cancelled.
LOANER_UPDATEDThere has been some change in the loaner booking that was made earlier.
LOANER_BOOKING_FAILUREThere has been a failure in the loaner booking system when trying to book a loaner for the customer.
LOANER_UPDATE_FAILUREThere has been a failure in the loaner booking system when trying to update the loaner booking for the customer.
LOANER_CANCEL_FAILUREThere has been a failure in the loaner booking system when trying to cancel the loaner booking for the customer.
PUSHED_DMS_FAILUREThere has been a failure when trying to push the appointment to the dealership's data management system (DMS).
RESCHEDULEDThe appointment has been rescheduled to a different time or date.
SHOW_WITHOUT_ROThe appointment has been marked as "show" manually by the service advisor without a repair order (RO) being attached. Some users at the dealership have the authority to do this through myKaarma UI.

Note:

  • An event with 'event' field as "UPDATED" and 'newStatus' as "No Show" would mean the customer didn't show up for the appointment.

    • Please note: This appointment can still be marked as Show later by the advisor. The event will come with 'event' field as "DEALERORDER_MAPPED" and 'newStatus' as "Show".
  • An event with 'event' field as "DEALERORDER_MAPPED" and 'newStatus' as "Show" would mean the customer has shown up for the appointment.

    • Please note: This appointment can still be marked as No Show later by the advisor. The event will come with 'event' field as "DEALERORDER_UNMAPPED" and 'newStatus' as "No Show". This event is not published right now, we are working on publishing this.

Important Note

  • For a single appointment update from myKaarma, you will receive two appointment events over the webhook.
    • This happens because every time an appointment is created/updated from myKaarma, the latest details are pushed to DMS, prompting DMS to send another update event, which triggers the second event over the webhook.
    • When an appointment is created from myKaarma, you will receive a SCHEDULED event (due to myKaarma creation) and an UPDATED event (due to the DMS update), for example, when an appointment key is provided by DMS.

Example Payload

The payload will include the model of the Appointment Info that third party partner already gets from calling the myKaarma Appointment API.
You can find the documentation references for the fields received under appointmentInfoResponse key of the payload here.

{
"id": "2b3591f8-967f-4776-908c-870632c55c34",
"dealeruuid": "cb731d36fd635ddd6ef8dd43500892b0c0249d1c01a46dbcc445a809c0a8e3b2",
"timestamp": 1758964761822,
"type": "appointments",
"payload": '
{
"uuid":"2b3591f8-967f-4776-908c-870632c55c34",
"departmentUuid":"8ec821aefe98664ab15df7c426c3c46f9c37d0b1aeda9ff58df3db89bb0a55a3",
"subscriberName":null,
"shiftTrackingDetails":null,
"serviceAppointmentRequestLoanerBookingList":[

],
"event":"RESCHEDULED",
"appointmentInfoResponse":{
"uuid":"uxx05pUbmiArKOXyy2lcmJEJr4CWg5DANSIm5AjRBKs",
"customerInformation":{
"firstName":"myKaarma",
"lastName":"Testing",
"company":null,
"isBusiness":null,
"customerKey":null,
"confirmationPhone":null,
"confirmationEmail":null,
"custLocale":"en-us",
"uuid":"GFRR8beBGW8agB5kTOIJtgM9XyGJGmZuye7PfCftGh4"
},
"vehicleInformation":{
"vin":"1GD312CG0BF081737",
"vehicleKey":null,
"model":"Sierra 3500HD",
"year":"2011",
"brand":"GMC",
"trim":"Work Truck Long Box 2WD",
"engine":null,
"mileage":null,
"dealerUuid":null,
"uuid":"7nFurSTz5Y1L052dxjMuVnhmETXNgUCRM6kQc5iO_6w"
},
"orderInformation":{
"uuid":null,
"orderNumber":null,
"orderDate":null,
"orderType":null
},
"dealerUuid":"cb731d36fd635ddd6ef8dd43500892b0c0249d1c01a46dbcc445a809c0a8e3b2",
"assignedAdvisorUuid":"80c9166f65eecad91e3855555198156470d9cd3e5d7a95841c3a2a7086d1c87a",
"creatorAdvisorUuid":"80c9166f65eecad91e3855555198156470d9cd3e5d7a95841c3a2a7086d1c87a",
"assignedAdvisorUserUuid":null,
"creatorAdvisorUserUuid":null,
"assignedAdvisorDmsDepartmentCode":null,
"date":"2025-09-26 12:29:17",
"preferredDate":"2025-09-27",
"startTime":"2025-09-27 15:00:00",
"endTime":"2025-09-27 15:14:59",
"transportOption":{
"uuid":"Uuid",
"altTransportation":"None",
"bookingId":null,
"bookInThirdParty":false,
"bookingStartDate":null,
"bookingEndDate":null,
"bookingIsManual":null,
"bookingIsValid":null,
"loanerSmartLink":null,
"transportation":"None",
"organicTransportation":"None",
"subTransportOptionUuid":null
},
"appointmentKey":null,
"mileageText":null,
"recall":false,
"platform":"Api",
"appointmentSource":"Appointment API",
"status":"N",
"newStatus":"Rescheduled",
"comments":"",
"internalNotes":"",
"isCancelled":null,
"reminderCount":0,
"serviceList":[

],
"skillList":null,
"appointmentCommunicationPreferences":{
"emailConfirmation":false,
"textConfirmation":true,
"emailReminder":false,
"textReminder":true,
"confirmationEmail":"mykaarma.testing@gmail.com",
"confirmationPhoneNumber":"3108170196",
"notifyCustomer":true,
"sendCommunicationToDA":true
},
"pdrToOpcodes":null,
"teamUuid":null,
"dispatchCode":"B10",
"customerVehicleInspectionId":null,
"recommendedTiresDTO":{
"valid":false,
"chooseLaterOpted":false,
"laborOpcode":null,
"tireGroupInfoWithPricing":null
},
"sarmetaData":null
},
"eventCreationDateTime":"2025-09-27 02:19:21.796",
"updatedByUserUuid":"80c9166f65eecad91e3855555198156470d9cd3e5d7a95841c3a2a7086d1c87a"
}
'
}

How to test an appointment event

  1. Login to https://app.mykaarma.com using the user credentials provided to you.

  2. In the Customer tab, search for and select the customer you want to create/edit an appointment for:

    Search Customer
  3. If the vehicle you want to schedule the appointment for is not already linked to the customer, please click Add Vehicle button on the top right.

    Add Vehicle Button
  4. Paste in your VIN (or a randomly generated VIN) and fill in the Enter VIN textbox, and click Add To Customer. Now the customer has a vehicle attached.

    Add Vehicle Popup
  5. For the vehicle you want to schedule an appointment for, click on the Create Appointment button:

    Schedule Appointment Button
  6. Fill in the details like mileage, opcodes, notes, then select the transport option and advisor and pick a slot, and click on the Schedule button:

    Schedule Appointment Page Schedule Button
  7. The appointment will be created, and you'll see a banner on top of the page. You should receive an event on your webhook URL for this appointment creation.
    You'll be able to see the appointment in the Customer tab, along with edit and delete appointment buttons (edit and delete appointment also raise the webhook event):

    Customer tab - Appointment edit/delete buttons

Example Order Payload Event

The payload will include the model of the Order Info that third-party partners already receive from calling the myKaarma Order API.
You can find the documentation references for the fields received under order key of the payload here.

Example Payload

{
"id": "952fcf6d-5b68-41b0-ae8e-872f88bc882e",
"dealeruuid": "cb731d36fd635ddd6ef8dd43500892b0c0249d1c01a46dbcc445a809c0a8e3b2",
"timestamp": 1759040934147,
"type": "service-orders",
"payload": '
{
"uuid":"qxIiRFwkaUfm8zAM_fd5K61DmaTJi2UmfXNUhRCmTHw",
"order":{
"type":"RO",
"header":{
"orderNumber":"mykTestRO1122",
"serviceAccount":null,
"accountingAccount":null,
"dmsStatus":null,
"status":"C",
"deptType":null,
"advisorNumber":null,
"advisorName":null,
"dealerAssociateUuid":"80c9166f65eecad91e3855555198156470d9cd3e5d7a95841c3a2a7086d1c87a",
"originalAssociateUUID":"80c9166f65eecad91e3855555198156470d9cd3e5d7a95841c3a2a7086d1c87a",
"appointmentNumber":null,
"tagNumber":null,
"mileageIn":null,
"mileageOut":null,
"orderDate":"2025-07-24",
"orderTime":"22:00:00",
"promisedDate":null,
"promisedTime":null,
"voidDate":null,
"closeDate":"2025-09-27",
"closeTime":"23:28:53",
"waiter":"N",
"rental":null,
"soldHours":null,
"actualHours":null,
"laborCost":null,
"laborSale":null,
"laborSaleCustomer":null,
"laborSaleInternal":null,
"laborSaleWarranty":null,
"partsCost":null,
"partsCostCustomer":null,
"partsCostInternal":null,
"partsCostWarranty":null,
"partsSale":null,
"partsSaleCustomer":null,
"partsSaleInternal":null,
"partsSaleWarranty":null,
"lubeSale":null,
"lubeSaleCustomer":null,
"lubeSaleInternal":null,
"lubeSaleWarranty":null,
"miscSale":null,
"miscSaleCustomer":null,
"miscSaleInternal":null,
"miscSaleWarranty":null,
"subletSale":null,
"subletSaleCustomer":null,
"subletSaleInternal":null,
"subletSaleWarranty":null,
"customerPayAmount":null,
"customerPayStateTax":null,
"warrantyPayStateTax":null,
"internalPayStateTax":null,
"internalPayAmount":null,
"warrantyPayAmount":null,
"invoiceURL":null,
"payTypes":"C--",
"description":null,
"printDate":null,
"printTime":null,
"deliveryAmount":null,
"estimate":null,
"localTaxAmountCustomer":null,
"localTaxAmountWarranty":null,
"localTaxAmountInternal":null,
"stockNumber":null,
"isInternal":null,
"isVoided":null,
"invoiceTotal":null,
"mykCreatedDate":"2025-09-27 23:28:53"
},
"vehicle":{
"uuid":"7nFurSTz5Y1L052dxjMuVnhmETXNgUCRM6kQc5iO_6w",
"vin":"1GD312CG0BF081737",
"make":"GMC",
"key":null,
"model":"Sierra 3500HD",
"color":null,
"licensePlate":null
},
"customer":{
"uuid":"GFRR8beBGW8agB5kTOIJtgM9XyGJGmZuye7PfCftGh4",
"key":null,
"firstName":"myKaarma",
"lastName":"Testing"
},
"jobs":[
{
"jobIdentifier":"A--TEST",
"jobNumberString":"A",
"lopSeqNumber":null,
"laborOpCode":"TEST",
"laborOpCodeDesc":"Test opcode",
"laborType":null,
"dmsLaborType":null,
"serviceType":null,
"jobTotal":"0.0",
"laborSale":null,
"soldHours":null,
"actualHours":null,
"partsSale":null,
"miscSale":null,
"shopCharge":null,
"bookerNo":null,
"dispatchLineStatus":null,
"techNos":null,
"campaignCode":null,
"parts":null,
"gog":null,
"techHours":null,
"comments":null,
"ccc":null,
"estimates":null,
"dispatchCode":null,
"complaintCode":null,
"addOnLine":"N",
"partsFlag":null,
"dispatchEstimatedDuration":null,
"comeBackFlag":null
}
],
"mls":null
}
}
'
}

How to test an order event

  1. Login to https://app.mykaarma.com using the user credentials provided to you.

  2. In the Customer tab, search for and select the customer you want to create an order for:

    Search Customer
  3. At the top right corner, click on the Create RO button:

    Create RO Button
  4. Fill in the RO details (advisor DMS ID is mandatory), then click Save:

    Advisor DMS ID field
  5. The screen should show the order number of the created Repair Order, and you should also receive an event on your webhook URL for the same order.

Multipoint Inspection (MPI) Event

The MPI event will be fired every time an MPI is created or updated in myKaarma. The event will include the model of MPI object that third-party partners can read.

Example Payload

{
"id": "952fcf6d-5b68-41b0-ae8e-872f88bc882e",
"dealeruuid": "cb731d36fd635ddd6ef8dd43500892b0c0249d1c01a46dbcc445a809c0a8e3b2",
"timestamp": 1759040934147,
"type": "mpis",
"payload": '
{
"allowedRecommendationWorkStatuses": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
},
"approvedTotal": 0,
"assignees": [
{
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
}
],
"attachments": [
{
"audioUrl": "string",
"captionsUrl": "string",
"createdOn": "date",
"hasAudio": "string",
"info": "string",
"link": "string",
"source": "string",
"type": "string",
"updatedOn": "date",
"uuid": "string",
"videoLength": 0,
"visibility": "string"
}
],
"createdOn": "date",
"customerIdentifiers": {
"company": "string",
"customerKey": "string",
"customerName": "string",
"customerUUID": "string",
"isBuisness": true
},
"dealerAssociateIdentifiers": {
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
},
"dealerDepartmentUUID": "string",
"dealerIdentifiers": {
"dealerName": "string",
"dealerPhoneNumber": "string",
"dealerUUID": "string"
},
"fieldOptionsMapping": [
{
"fieldType": "string",
"options": [
{
"sortOrder": 0,
"state": "string",
"value": "string"
}
]
}
],
"inspectionTypeUuid": "string",
"labels": [
"string"
],
"mpiCounts": {
"approveCount": 0,
"completeCount": 0,
"declineCount": 0,
"laborIncompleteCount": 0,
"laborRequestedCount": 0,
"notNeededCount": 0,
"partsIncompleteCount": 0,
"partsPendingSaleCount": 0,
"partsRequestedCount": 0,
"populatedByPartners": [
"string"
],
"requiredChecksUnfilledCount": 0,
"totalManualImageCount": 0,
"totalManualVideoCount": 0,
"totalRecommendationCount": 0
},
"mpiFlags": {
"autoSendFailureDescription": "string",
"customerNotifiedByEmailOn": "date",
"customerNotifiedByTextOn": "date",
"isComplete": true,
"isNotNeeded": true,
"mode": "FULL_MPI",
"sentMedium": "string",
"sentStatus": "string",
"sentToCustomerOn": "date",
"sentToName": "string",
"sentToNumber": "string",
"uploadedMediaCount": 0,
"version": 0
},
"mpiSecondaryFlags": {
"captionsRequested": true,
"customerLinkViewCount": 0,
"customerSeenOn": "date",
"estimateOverDue": true,
"isRequestedFullMPI": true,
"isfeedbackDone": true,
"mediaUploadStatus": "string",
"sendToCustomerOverDue": true,
"statusOverDue": true,
"videoOnlySendFailureDescription": "string",
"videoOnlySentMedium": "string",
"videoOnlySentStatus": "string",
"videoOnlySentToCustomerOn": "date",
"videoOnlySentToName": "string",
"videoOnlySentToNumber": "string",
"videoOnlyViewCount": 0
},
"mpiSections": [
{
"checks": [
{
"attachments": [
{
"audioUrl": "string",
"captionsUrl": "string",
"createdOn": "date",
"hasAudio": "string",
"info": "string",
"link": "string",
"source": "string",
"type": "string",
"updatedOn": "date",
"uuid": "string",
"videoLength": 0,
"visibility": "string"
}
],
"createdOn": "date",
"description": "string",
"dmsLaborType": "string",
"fieldList": [
{
"description": "string",
"sortOrder": "string",
"state": "string",
"type": "string",
"unit": "string",
"value": "string"
}
],
"inspectionState": {
"isEligibleToSkip": true,
"isSkipped": true
},
"isCustom": true,
"isEstimateRequired": true,
"isRequired": true,
"isSafetyQuestion": true,
"isValid": true,
"laborOpCode": "string",
"laborType": "string",
"laborTypeCustomerText": "string",
"lastUpdatedBy": {
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
},
"name": "string",
"notes": "string",
"originalLaborCost": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"originalPartsCost": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"originalShopFees": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"originalTax": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"originalTotal": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"pdrUuid": "string",
"populatedByPartner": "string",
"recommendations": [
{
"amount": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"approvalReason": "string",
"approvalState": "string",
"attachments": [
{
"audioUrl": "string",
"captionsUrl": "string",
"createdOn": "date",
"hasAudio": "string",
"info": "string",
"link": "string",
"source": "string",
"type": "string",
"updatedOn": "date",
"uuid": "string",
"videoLength": 0,
"visibility": "string"
}
],
"createdOn": "date",
"defaultPartsPriceEtaStatus": "string",
"description": "string",
"discount": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"externalEstimator": {
"daUuid": "string",
"departmentUuid": "string",
"fName": "string",
"lName": "string",
"role": "string"
},
"hasShopFees": true,
"hasTax": true,
"isApprovedDeclinedByDealerAssociate": true,
"isCustom": true,
"isDefaultPartsPriceAvailable": true,
"isEstimateHidden": true,
"isEstimateRequired": true,
"isPartsAddedToDms": true,
"isPartsNeeded": true,
"isRequested": true,
"isValid": true,
"laborHours": 0,
"laborPricing": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"laborType": "string",
"lastUpdatedBy": {
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
},
"miscAmount": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"note": "string",
"opCodes": [
"string"
],
"parts": [
{
"addedToServiceLine": true,
"binLocation": "string",
"corePrice": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"description": "string",
"eta": "date",
"etaStatus": "string",
"isAvailable": true,
"mfrCode": "string",
"name": "string",
"number": "string",
"onHoldQuantity": 0,
"price": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"quantity": 0,
"splStatusStr": "string",
"status": "string"
}
],
"partsInfo": "string",
"partsPricing": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"serviceType": "string",
"shopFees": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"showZeroEstimateToCustomer": true,
"status": "string",
"tax": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"updatedOn": "date",
"uuid": "string",
"version": 0,
"workStatus": "string"
}
],
"serviceLineDetails": {
"comebackFlag": true,
"completeErrorMessageFromDms": "string",
"counterPerson": {
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
},
"dispatchCode": "string",
"errorDescription": "string",
"estimatedDuration": 0,
"fortellisRequestId": "string",
"fortellisSubscriptionId": "string",
"isPricingFetchedFromOpcodeOnce": true,
"jobIdentifier": "string",
"jobNumber": "string",
"opCode": "string",
"opCodeDescription": "string",
"opCodeFromMpiTemplate": "string",
"originalJobNumber": "string",
"pushStatus": "string",
"pushStatusUpdateTs": "date",
"retryAttempts": 0
},
"sortOrder": 0,
"totalApproved": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"type": "string",
"updatedOn": "date",
"uuid": "string",
"version": 0
}
],
"description": "string",
"isValid": true,
"name": "string",
"sortOrder": 0,
"type": "string",
"uuid": "string",
"version": 0
}
],
"ocrList": [
"string"
],
"orderDetails": {
"promiseDate": "string",
"promiseTime": "string"
},
"orderIdentifiers": {
"dmsStatus": "string",
"isWaiter": true,
"orderDate": "string",
"orderNumber": "string",
"orderStatus": "string",
"orderUUID": "string",
"originalEstimate": "string",
"tagNumber": "string"
},
"partsRepresentativeIdentifiers": {
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
},
"populatedByPartners": [
"string"
],
"recommendedTotal": 0,
"shopFeesAndTaxSettings": {
"applyTaxToShopFees": true,
"maxShopFees": 0,
"minShopFees": 0,
"shopFeesLaborPercentage": 0,
"shopFeesPartsPercentage": 0,
"shopfeesAlias": "string",
"taxLaborPercentage": 0,
"taxPartsPercentage": 0
},
"status": "string",
"statusUpdatedOn": "date",
"technicianIdentifiers": [
{
"dealerAssociateName": "string",
"dealerAssociateUUID": "string"
}
],
"totalPrices": {
"approvedOriginalRecommendedTotal": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"approvedOtherRecommendedTotal": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"approvedTotal": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"originalTotal": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"shopFees": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"totalCost": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
},
"totalTax": {
"amount": 0,
"createdOn": "date",
"unit": "string",
"updatedOn": "date"
}
},
"type": "string",
"updatedOn": "date",
"uuid": "string",
"vehicleIdentifiers": {
"estimatedMileage": "string",
"vehicleMake": "string",
"vehicleModel": "string",
"vehicleUUID": "string",
"vehicleYear": "string",
"vin": "string"
},
"version": 0,
"workflowDetails": {
"currentNodeUuid": "string",
"executedEvents": [
{
"affectedDealerAssociateUuids": [
"string"
],
"checkUuid": "string",
"eventName": "string"
}
],
"pendingEvents": [
{
"affectedDealerAssociateUuids": [
"string"
],
"checkUuid": "string",
"eventName": "string"
}
],
"version": 0,
"workflowUuid": "string"
}
}
'
}

How to test an MPI event

  1. Login to https://app.mykaarma.com using the user credentials provided to you.

  2. In the Customer tab, search for and select the customer you want to create an MPI for:

    Search Customer
  3. At the top right corner, click on the Create RO button:

    Create RO Button
  4. Fill in the RO details (advisor DMS ID is mandatory), select OPEN in Status and add MPI opcode, then click Save:

    Advisor DMS ID field
  5. Go to Inspect tab, and you should find an MPI created under Not Assigned status with RO number identical to the order just created. You should receive an event on your webhook URL for the same MPI.

    Newly created MPI
  6. Make any changes to the MPI and you should receive corresponding MPI events on your webhook URL.

Questions

Which appointment update events will be sent to the third party?

All appointment updates for the dealers that the third party subscribes to in the context of myKaarma webhooks.

What if the partner needs more information than what is given in the event such as detailed customer info?

Third-party partners will have to call myKaarma’s APIs post receiving events for further information, if needed.

Why am I receiving multiple appointment events for a single create/update?

  • For a single appointment update from myKaarma, you will receive two appointment events over the webhook.
  • This happens because every time an appointment is created/updated from myKaarma, the latest details are pushed to DMS, prompting DMS to send another update event, which triggers the second event over the webhook.
  • When an appointment is created from myKaarma, you will receive a SCHEDULED event (due to myKaarma creation) and an UPDATED event (due to the DMS update), for example, when an appointment key is provided by DMS.

Are customer events 1:1 in terms of customer updates?

Not always, as explained in "The architecture for customer creation and update pushes events via an indexer job, which runs once per second.".