MPI Event
The MPI (Multipoint Inspection) event fires every time an MPI is created or updated in myKaarma. The payload mirrors the MPI object available via the myKaarma MPI API.
The MPI webhook payload schema is being updated. This change introduces two behaviour differences you must handle before the migration goes live:
1. Null fields are no longer serialized.
Fields that previously appeared as null in the JSON will now be omitted entirely from the payload. Do not check field === null; instead check whether the key is present at all (e.g. "field" in payload in JavaScript/TypeScript, payload.containsKey("field") in Java, or use optional chaining payload?.field). Treat a missing key the same as a null value.
2. New fields are added.
The updated schema adds isVideoFeedbackPositive, isMpiDeleted, mpiKpi, and linePunchDataList (documented below). Ensure your deserializer ignores unknown fields (e.g. @JsonIgnoreProperties(ignoreUnknown = true) in Java, or equivalent) so that future additions do not break your integration.
Field Reference
payloadTop-level payload for the MPI event.
uuidtypeinspectionTypeUuidstatusstatusUpdatedOncreatedOnupdatedOndealerDepartmentUUIDversionunreadMessageisMigratedisAssignedToPartsautoPushProcessedfieldOptionsUuidlabels[]ocrList[]statusWithCustomerLinkTemplate[]partsStatusListworkStatusListpopulatedByPartnerssurchargeRulesrecommendationUuidsInCart[]timeSpentInStatusallowedRecommendationWorkStatusesapprovedTotalrecommendedTotalvehicleIdentifiersorderIdentifiersorderDetailsdealerAssociateIdentifierstechnicianIdentifiers[]assignees[]partsRepresentativeIdentifierscustomerIdentifiersdealerIdentifiersmpiFlagsmpiCountsmpiSecondaryFlagstotalPricesworkflowDetailsattachments[]shopFeesAndTaxSettingsintegrationDatafieldOptionsMapping[]mpiSections[]isVideoFeedbackPositiveisMpiDeletedreportingStatusDataList[]mpiKpilinePunchDataList[]{
"id": "a7b9c1d3-e5f7-4891-ab23-cd45ef678901",
"timestamp": 1728542293678,
"dealeruuid": "7c1e5a9f3b7d1e5a9c3e7b1f5d9a3c7e1b5f9d3a7c1e5b9f3d7a1c5e9b3f7d1",
"departmentuuid": "3a7f1c9e2b5d8f0a4c6e9b1d3f5a7c0e2b4d6f8a1c3e5b7d9f0a2c4e6b8d0f2",
"type": "mpis",
"payload": {
"uuid": "Kd6eHsCqYnBr3iP8wXvOtFm4UjAzRgE0eLsDcQpNbW7",
"type": "FULL_MPI",
"inspectionTypeUuid": null,
"status": "Working - MPI & Diag.",
"statusUpdatedOn": 1778659065996,
"createdOn": 1778659065996,
"updatedOn": 1779381498630,
"dealerDepartmentUUID": "3a7f1c9e2b5d8f0a4c6e9b1d3f5a7c0e2b4d6f8a1c3e5b7d9f0a2c4e6b8d0f2",
"version": 3,
"unreadMessage": false,
"isMigrated": false,
"isAssignedToParts": false,
"autoPushProcessed": false,
"fieldOptionsUuid": null,
"labels": [],
"ocrList": [],
"statusWithCustomerLinkTemplate": [],
"partsStatusList": [],
"workStatusList": [],
"populatedByPartners": [],
"surchargeRules": {
"maxSurcharge": null,
"feeType": null,
"feeValue": null
},
"recommendationUuidsInCart": [],
"timeSpentInStatus": {},
"allowedRecommendationWorkStatuses": {},
"approvedTotal": 0,
"recommendedTotal": 0,
"vehicleIdentifiers": {
"vehicleUUID": "Jc5fGrDpXmAn2hO7vWuNsEl3TiBzQwR9dKkCeYpNaV6",
"vin": "1N4BL3AP7DC231234",
"vehicleMake": "Nissan",
"vehicleModel": "Altima",
"vehicleYear": null,
"estimatedMileage": null,
"stockNumber": null
},
"orderIdentifiers": {
"orderUUID": "Im4gFqCoWlZn1jN6uVtMrDk2ShBxPwQ8eJiCfYnMaU5",
"orderNumber": "mykdm9904427",
"orderStatus": "O",
"dmsStatus": "O",
"tagNumber": "T205",
"originalEstimate": null,
"orderDate": "2026-02-19",
"orderTime": "08:30:00",
"closeDate": null,
"isWaiter": false,
"dmsStatusPreInvoicedOn": 1771565906838,
"dmsStatusUpdatedOn": 1771566577373
},
"orderDetails": {
"promiseDate": "2026-02-19",
"promiseTime": "09:00:00"
},
"dealerAssociateIdentifiers": {
"dealerAssociateUUID": "9d3a7e1c5b9f3d7a1e5c9b3f7d1e5a9c3f7b1d5e9a3c7f1b5d9e3a7c1f5b9d3",
"dealerAssociateName": "Test Dealerassociate",
"dealerAssociateFName": "Test",
"dealerAssociateEmailId": "test.advisor@dealer.com",
"dealerAssociateUserUUID": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2"
},
"technicianIdentifiers": [
{
"dealerAssociateUUID": "4f8b2d6a0e4c8f2b6d0a4c8b2d6f0e4b8d2f6a0c4e8b2d6a0f4c8e2b6d0a4c8",
"dealerAssociateName": "Test Technician",
"dealerAssociateFName": "Tech",
"dealerAssociateEmailId": "tech@dealer.com",
"dealerAssociateUserUUID": "b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3"
}
],
"assignees": [
{
"dealerAssociateUUID": "c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4",
"dealerAssociateName": "Test Assignee",
"dealerAssociateFName": "Test",
"dealerAssociateEmailId": "assignee@dealer.com",
"dealerAssociateUserUUID": "d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5"
}
],
"partsRepresentativeIdentifiers": {
"dealerAssociateUUID": null,
"dealerAssociateName": null,
"dealerAssociateFName": null,
"dealerAssociateEmailId": null,
"dealerAssociateUserUUID": null
},
"customerIdentifiers": {
"customerUUID": "Ho3fEpBnVkYm0iM5tUsMqCj1RgAw9PxO7eIhDzNlbT4",
"customerName": "Automation Test-443651",
"customerKey": "CK139520",
"company": null,
"isBusiness": null
},
"dealerIdentifiers": {
"dealerUUID": "7c1e5a9f3b7d1e5a9c3e7b1f5d9a3c7e1b5f9d3a7c1e5b9f3d7a1c5e9b3f7d1",
"dealerName": "Mercedes-Benz of Silver lake",
"dealerPhoneNumber": "5624435567"
},
"mpiFlags": {
"version": 1,
"isComplete": false,
"isNotNeeded": false,
"sentStatus": null,
"sentToCustomerOn": null,
"sentToNumber": null,
"sentToName": null,
"autoSendFailureDescription": null,
"sentMedium": null,
"fullMpiSentAutomatically": false,
"customerNotifiedByTextOn": null,
"customerNotifiedByEmailOn": null,
"customerNotifiedByWhatsappOn": null,
"uploadedMediaCount": 2,
"mode": "FULL_MPI",
"thirdPartyEventType": null
},
"mpiCounts": {
"totalRecommendationCount": 5,
"approveCount": 2,
"declineCount": 1,
"notNeededCount": 0,
"completeCount": 2,
"undecidedCount": 2,
"laborIncompleteCount": 1,
"partsIncompleteCount": 0,
"laborRequestedCount": 0,
"partsRequestedCount": 0,
"partsPendingSaleCount": 0,
"requestedEstimateCount": 1,
"totalManualImageCount": 3,
"totalManualVideoCount": 1,
"shopNotesCount": 0,
"requiredChecksUnfilledCount": 0,
"populatedByPartners": []
},
"mpiSecondaryFlags": {
"customerLinkViewCount": 1,
"videoOnlyViewCount": 0,
"videoViewCount": 1,
"maxHierarchicalNumber": 3,
"mediaUploadStatus": "COMPLETE",
"videoUploadStatus": "COMPLETE",
"customerSeenOn": null,
"statusOverDue": false,
"estimateOverDue": false,
"sendToCustomerOverDue": false,
"videoOnlySentStatus": "unsent",
"videoOnlySendFailureDescription": null,
"videoOnlySentMedium": null,
"videoOnlySentToNumber": null,
"videoOnlySentToName": null,
"videoOnlySentToCustomerOn": null,
"videoOnlySentToCustomerOnText": null,
"videoOnlySentToCustomerOnEmail": null,
"videoOnlySentToCustomerOnWhatsapp": null,
"videoOnlySentAutomatically": false,
"isRequestedFullMPI": false,
"isfeedbackDone": false,
"isSummaryFeedbackDone": false,
"isVideoFeedbackPositive": null,
"isMpiDispatched": true,
"isWaiterStatusChangedManually": false,
"captionsRequested": false,
"linkedPreDiagUuid": null,
"nissanLifeCycleStatus": null
},
"totalPrices": {
"originalTotal": {
"amount": 149.99,
"unit": "dollar"
},
"approvedTotal": {
"amount": 99.99,
"unit": "dollar"
},
"approvedOriginalRecommendedTotal": {
"amount": 74.99,
"unit": "dollar"
},
"approvedOtherRecommendedTotal": {
"amount": 25,
"unit": "dollar"
},
"totalTax": {
"amount": 8.5,
"unit": "dollar"
},
"shopFees": {
"amount": 5,
"unit": "dollar"
},
"totalCost": {
"amount": 113.49,
"unit": "dollar"
}
},
"workflowDetails": {
"workflowUuid": "e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6",
"currentNodeUuid": "f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1",
"version": 2,
"pendingEvents": [
{
"eventName": "SEND_TO_CUSTOMER",
"checkUuid": null,
"affectedDealerAssociateUuids": []
}
],
"executedEvents": [
{
"eventName": "DISPATCH",
"checkUuid": null,
"affectedDealerAssociateUuids": [
"4f8b2d6a0e4c8f2b6d0a4c8b2d6f0e4b8d2f6a0c4e8b2d6a0f4c8e2b6d0a4c8"
]
}
]
},
"attachments": [
{
"uuid": "ATT_X9K2M4P7R1",
"type": "VIDEO",
"link": "https://media.mykaarma.com/v/abc123.mp4",
"visibility": "PUBLIC",
"info": null,
"source": "TECHNICIAN",
"audioUrl": null,
"hasAudio": "false",
"captionsUrl": null,
"summaryUrl": null,
"videoLength": 45,
"pauseCount": 0,
"isUploaded": true,
"isThumbnailUploaded": true,
"originalLanguage": "en",
"mediaUploaderUuid": "4f8b2d6a0e4c8f2b6d0a4c8b2d6f0e4b8d2f6a0c4e8b2d6a0f4c8e2b6d0a4c8",
"mediaUploaderDAName": "Test Technician",
"createdOn": "2026-02-19T09:15:00",
"updatedOn": "2026-02-19T09:15:00",
"translations": [
{
"language": "es",
"videoUrl": null,
"captionsUrl": null
}
]
}
],
"shopFeesAndTaxSettings": {
"shopfeesAlias": null,
"shopFeesPartsPercentage": 2.5,
"shopFeesLaborPercentage": 0,
"taxPartsPercentage": 8.25,
"taxLaborPercentage": 0,
"maxShopFees": null,
"minShopFees": null,
"applyTaxToShopFees": false,
"applyTaxToMiscForOcr": false,
"applyTaxToMiscForNonOcr": false
},
"integrationData": {
"signatureIdentifier": null,
"customerFName": "John",
"customerMName": null,
"customerLName": "Smith",
"customerPrefLanguage": "en",
"totalRedYellowRecs": 3,
"serviceAdvisorTag": null,
"saFName": "Test",
"saLName": "Advisor",
"technicianTag": null,
"techFName": "Test",
"techLName": "Tech",
"inspectionTypeName": "Full MPI",
"menuSalesPriceCode": null,
"initialRoPriceCode": null,
"initialRoAmount": null,
"recommendedServicesPriceCode": null,
"recommendedServicesTotalAmount": 149.99,
"recommendedAcceptedServicesPriceCode": null,
"acceptedServicesTotalAmount": 99.99,
"commentsTypeCode": null,
"operationCode": null,
"inspectionStatus": "COMPLETED",
"firstRecommMadeTime": "2026-02-19T09:30:00",
"lastCustomerActionTime": "2026-02-19T11:30:00"
},
"fieldOptionsMapping": [
{
"fieldType": "check-box",
"options": []
}
],
"mpiSections": [
{
"uuid": "M2KPNZ8DFRTXVQWE",
"name": "Vehicle Inspection",
"description": null,
"type": null,
"isValid": true,
"sortOrder": 1,
"version": 1,
"checks": [
{
"uuid": "L7HVMQ4BFNCRDKAJ",
"name": "Check Factory Maintenance Schedule",
"description": null,
"type": null,
"laborOpCode": null,
"laborType": "Customer Pay",
"laborTypeCustomerText": null,
"dmsLaborType": null,
"notes": null,
"conditionCode": null,
"isRequired": false,
"isEstimateRequired": false,
"isSafetyQuestion": false,
"isValid": true,
"isCustom": false,
"sortOrder": 1,
"version": 2,
"populatedByPartner": null,
"createdOn": 1778659065996,
"updatedOn": 1779381498546,
"shopNotes": [],
"lastUpdatedBy": {
"dealerAssociateUUID": "9d3a7e1c5b9f3d7a1e5c9b3f7d1e5a9c3f7b1d5e9a3c7f1b5d9e3a7c1f5b9d3",
"dealerAssociateName": "Test Technician",
"dealerAssociateFName": "Test",
"dealerAssociateEmailId": "tech@dealer.com",
"dealerAssociateUserUUID": null
},
"originalLaborCost": {
"amount": 25,
"unit": "dollar"
},
"originalPartsCost": {
"amount": 24.99,
"unit": "dollar"
},
"originalTax": {
"amount": 0,
"unit": "dollar"
},
"originalShopFees": {
"amount": 0,
"unit": "dollar"
},
"originalTotal": {
"amount": 49.99,
"unit": "dollar"
},
"totalApproved": {
"amount": 49.99,
"unit": "dollar"
},
"initialLaborCost": {
"amount": 25,
"unit": "dollar"
},
"initialPartsCost": {
"amount": 24.99,
"unit": "dollar"
},
"fieldList": [
{
"type": "check-box",
"description": "Verified",
"sortOrder": "1",
"value": null,
"state": null,
"unit": null
}
],
"inspectionState": {
"isEligibleToSkip": true,
"isSkipped": null
},
"serviceLineDetails": {
"jobNumber": "A",
"originalJobNumber": "A",
"jobIdentifier": null,
"opCode": "30KSVC",
"opCodeDescription": "30K Service",
"comebackFlag": false,
"dispatchCode": null,
"estimatedDuration": null,
"pushStatus": null,
"pushStatusUpdateTs": null,
"errorDescription": null,
"completeErrorMessageFromDms": null,
"retryAttempts": 0,
"opCodeFromMpiTemplate": null,
"isPricingFetchedFromOpcodeOnce": false
},
"recommendations": [
{
"uuid": "REC_F7X3K9M2P1N8",
"description": "Replace cabin air filter",
"approvalState": null,
"approvalReason": null,
"status": "incomplete",
"workStatus": null,
"isValid": true,
"isRequested": false,
"isCustom": false,
"laborHours": null,
"note": null,
"opCodes": [
"AIR"
],
"amount": {
"amount": 49.99,
"unit": "dollar"
},
"laborPricing": {
"amount": 25,
"unit": "dollar"
},
"partsPricing": {
"amount": 24.99,
"unit": "dollar"
},
"shopFees": {
"amount": 0,
"unit": "dollar"
},
"tax": {
"amount": 0,
"unit": "dollar"
},
"discount": {
"amount": 0,
"unit": "dollar"
},
"showZeroEstimateToCustomer": false,
"parts": [],
"partsInfo": "",
"isPartsNeeded": true,
"partsSalesHover": "Parts sales amount was pre-approved as part of an Original Customer Request",
"lastUpdatedBy": {
"dealerAssociateUUID": "80c9166f65eecad91e3855555198156470d9cd3e5d7a95841c3a2a7086d1c87a",
"dealerAssociateName": "Donald Dunkin"
}
}
]
}
]
}
],
"isVideoFeedbackPositive": null,
"isMpiDeleted": false,
"reportingStatusDataList": [
{
"uuid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
"status": "Unassigned",
"assigneeName": "Donald Dunkin",
"timeSpentInStatus": 120000,
"changelogUUID": null
}
],
"mpiKpi": {
"uuid": "6a042efbc71e7f12e78b34a1",
"mpiUuid": "Kd6eHsCqYnBr3iP8wXvOtFm4UjAzRgE0eLsDcQpNbW7",
"dealerUuid": "7c1e5a9f3b7d1e5a9c3e7b1f5d9a3c7e1b5f9d3a7c1e5b9f3d7a1c5e9b3f7d1",
"dealerDepartmentUuid": "3a7f1c9e2b5d8f0a4c6e9b1d3f5a7c0e2b4d6f8a1c3e5b7d9f0a2c4e6b8d0f2",
"createdOn": 1778659067.694,
"updatedOn": 1779381498.787,
"markAsCompleteBtnClickedTime": null,
"firstVideoAttachedTime": null,
"rocreatedTime": 1778659065,
"RODispatchTime": null,
"firstRecommMadeTime": 1779381498.687,
"videoOnlySentTime": null,
"fullMpiSentTime": null,
"firstCustomerApprovalTime": null,
"firstCustomerDeclineTime": null,
"firstCustomerActionTime": null,
"lastCustomerActionTime": null,
"unassignedTagFireTime": null,
"dispatchedTagFireTime": null,
"techInspectionStartTime": null,
"inspectionCompleteTime": null,
"reviewInspectionAndEstimatesTime": null,
"customerApprovalTagFireTime": null,
"partsReadyTagFireTime": null,
"servicePerformTime": null,
"qualityCheckTime": null,
"vehiclePickupTime": null,
"requiredQuestionsFilledTime": 1778659067.606,
"videoViewedTimeStamp": [],
"incompleteOrNotNeededRecsSentWithInspection": 1,
"recsSentWithInspection": 5,
"requestEstimateClickCount": 0,
"requestedEstimateCompletedCount": 2,
"videoUploadTimeInSec": 45,
"timeToVideoViewedFromSendInSec": 900
},
"linePunchDataList": [
{
"uuid": "LP_A1B2C3D4E5",
"mpiUuid": "Kd6eHsCqYnBr3iP8wXvOtFm4UjAzRgE0eLsDcQpNbW7",
"orderUuid": "Im4gFqCoWlZn1jN6uVtMrDk2ShBxPwQ8eJiCfYnMaU5",
"orderNumber": "mykdm9904427",
"checkUuid": "L7HVMQ4BFNCRDKAJ",
"checkName": "Check Factory Maintenance Schedule",
"dealerAssociateUuid": "4f8b2d6a0e4c8f2b6d0a4c8b2d6f0e4b8d2f6a0c4e8b2d6a0f4c8e2b6d0a4c8",
"dealerUuid": "7c1e5a9f3b7d1e5a9c3e7b1f5d9a3c7e1b5f9d3a7c1e5b9f3d7a1c5e9b3f7d1",
"dealerDepartmentUuid": "3a7f1c9e2b5d8f0a4c6e9b1d3f5a7c0e2b4d6f8a1c3e5b7d9f0a2c4e6b8d0f2",
"punchInTime": 1778659065996,
"punchOutTime": null,
"elapsedTime": 1500000
}
]
}
}In the actual webhook delivery, payload is a stringified JSON string (not an object). The example above shows it as a parsed object for readability.
Handling the Payload
// Signature verification omitted for brevity — see "Signature Token Verification".
app.post('/webhook', express.raw({ type: '*/*' }), (req, res) => {
const event = JSON.parse(req.body.toString());
if (event.type !== 'mpis') {
return res.sendStatus(200);
}
// payload is delivered as a JSON string — parse it first
const mpi = typeof event.payload === 'string'
? JSON.parse(event.payload)
: event.payload;
// Respond 200 immediately — myKaarma retries if it doesn't receive 2xx within 5 s
res.sendStatus(200);
// Process asynchronously so the response is not blocked
setImmediate(() => {
// Fields with null values are omitted — use optional chaining or defaults
const status = mpi.status ?? 'unknown';
const isMpiDeleted = mpi.isMpiDeleted ?? false;
const isVideoFeedbackPos = mpi.isVideoFeedbackPositive ?? null;
const vehicleVin = mpi.vehicleIdentifiers?.vin ?? null;
const linePunches = mpi.linePunchDataList ?? [];
console.log('MPI ' + mpi.uuid + ' — status: ' + status + ', VIN: ' + vehicleVin);
});
});How to Test an MPI Event
Login to https://app.mykaarma.com using the user credentials provided to you.
In the Customer tab, search for and select the customer you want to create an MPI for:

At the top right corner, click on the Create RO button:

Fill in the RO details (advisor DMS ID is mandatory), select
OPENin Status and add theMPIopcode, then click Save:
Go to the Inspect tab. You should find an MPI created under
Not Assignedstatus with an RO number matching the order you just created. You should receive a webhook event for this MPI creation:
Make any changes to the MPI and you should receive corresponding MPI events on your webhook URL.