Skip to main content

How to create an appointment with trip

This document explains how to create an appointment along with a pickup and delivery (PnD) trip in a single API call. This is useful when you want to schedule a service appointment and simultaneously set up a pickup/delivery trip for the customer's vehicle.

To create an appointment with trip, 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.

Request

HTTP request

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

Parameters

Path parameter:

Parameter NameValueDescriptionRequired
dealerUuidStringUnique identifier of dealerYes

Query parameters:

Parameter NameValueDescriptionRequired
mobileServiceApptUuidStringUUID of an existing mobile service appointment to delete after creating the new appointment with tripNo
regularServiceApptUuidStringUUID of an existing regular service appointment to delete after creating the new appointment with tripNo

Authorization

This request requires the following authorization scopes:

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

Request Body

The request body is a SaveAppointmentWithTripRequest object containing two main parts:

Property NameValueDescriptionRequired
savePickupDeliveryTripEventRequestObjectDetails of the pickup and delivery trip event to be createdYes
createAppointmentWithTripRequestObjectDetails of the appointment to be created, including trip metadataYes

savePickupDeliveryTripEventRequest

Property NameValueDescriptionRequired
pickupDeliveryTripEventObjectThe pickup and delivery trip event detailsYes
requesterUserUUIDStringUUID of the user making the request. Passed as the user token to the PnD service for validation.Yes
dealerDepartmentUUIDListList<String>List of dealer department UUIDs associated with this tripYes
sourceStringSource of the request. Possible values: DEALER_APP, WEB, PND_API, EXTERNAL_CONTROLLER. If WEB, some validations (e.g., assignedByDealerAssociateUUID) are relaxed.No (defaults to DEALER_APP)

pickupDeliveryTripEvent

This is the core trip event object. Below are the key fields:

Note: The sendMessageToCustomer and isValid fields are overridden by the system (forced to false) during trip creation regardless of what the caller sends. The trip is marked valid later during the SAR-Trip mapping step.

Property NameValueDescriptionRequired
appointmentTimeStringThe scheduled time for the trip. Format: yyyy-MM-dd'T'HH:mm:ssZ (ISO 8601 with timezone offset, e.g., 2024-10-25T11:15:00-0700). Validated by the PnD service.Yes
rideTypeStringType of ride. Must be one of: PICKUP_CUSTOMER, PICKUP_VEHICLE, DROPOFF_CUSTOMER, DROPOFF_VEHICLE, LOANER_SWAP, MISCELLANEOUS, RIDE_SHARE. Validated by the PnD service.Yes
dealerUUIDStringUUID of the dealerYes
dealerDepartmentUUIDStringUUID of the dealer department. Used for customer lookup and trip creation internally.Yes
customerUUIDStringUUID of the customer for this trip. Required for all ride types except MISCELLANEOUS (where a system customer is used if absent).Conditional
assignedByDealerAssociateUUIDStringUUID of the dealer associate who assigned the trip. Required unless source is WEB.Conditional
customerFirstNameStringFirst name of the customer. Automatically set from customer data if not provided.No
customerLastNameStringLast name of the customer. Automatically set from customer data if not provided.No
vehicleIdentifiersObjectIdentifiers for the customer's vehicleNo
roNumberStringRepair order number associated with the tripNo
dealerOrderUUIDStringUUID of the dealer orderNo
originAddressStringPickup address for the tripNo
originLocationLatDoubleLatitude of the pickup locationNo
originLocationLonDoubleLongitude of the pickup locationNo
destinationAddressStringDelivery address for the tripNo
destLocationLatDoubleLatitude of the delivery locationNo
destLocationLonDoubleLongitude of the delivery locationNo
loanerVehicleRequiredBooleanWhether a loaner vehicle is required. Cannot be true simultaneously with isDropCar.No
isDropCarBooleanWhether this is a drop car trip. Cannot be true simultaneously with loanerVehicleRequired.No (defaults to false)
loanerVehicleUuidStringUUID of the loaner vehicle. For LOANER_SWAP, cannot be the same as swappedLoanerVehicleUuid.No
swappedLoanerVehicleUuidStringUUID of the swapped loaner vehicle (for LOANER_SWAP ride type only)No
loanerDescriptionStringDescription of the loaner vehicleNo
serviceAdvisorUUIDStringUUID of the service advisorNo
serviceAdvisorNameStringName of the service advisorNo
primaryDriverUUIDStringUUID of the primary driver. For PICKUP_VEHICLE/DROPOFF_VEHICLE, cannot be blank if secondaryDriverUUID is present.Conditional
secondaryDriverUUIDStringUUID of the secondary driver. Cannot be the same as primaryDriverUUID.No
tripStatusStringStatus of the trip. If set to DRAFT or AUTO_DRAFT, customer messaging is suppressed.No
linkedAppointmentUuidStringUUID of a linked appointmentNo
linkedTripUuidsList<String>UUIDs of linked trips. Each must correspond to a valid existing trip.No
subTripsList<Object>List of sub-trips associated with this trip eventNo
optionalFieldsMap<String, String>Additional optional key-value pairsNo

createAppointmentWithTripRequest

This object extends the standard appointment request body. It contains all fields from the create appointment request along with additional trip metadata.

Property NameValueDescriptionRequired
customerUuidStringUnique token assigned to each customer in myKaarmaYes
appointmentInformationObjectSpecific details of the appointment to be createdYes
vehicleInformationObjectDetails of the vehicle for which appointment is to be created such as vin, vehicleKey, vehicleUuidNo
appointmentMetaDataObjectMeta data of the appointmentNo
pickupDeliveryTripMetadataObjectMeta data of the pickup and delivery trip. If not provided, automatically created by the system with the trip UUID.No
localeStringCustomer's manually selected language (e.g., en-CA, fr-CA)No

Note: The customerAppointmentPreference object inside appointmentInformation is required. The API accesses textConfirmation and emailConfirmation fields directly from this object.

Important: The appointment date-time format is different from the trip's appointmentTime format:

  • Appointment: yyyy-MM-dd'T'HH:mm:ss (no timezone, e.g., 2024-10-25T11:15:00)
  • Trip: yyyy-MM-dd'T'HH:mm:ssZ (with timezone offset, e.g., 2024-10-25T11:15:00-0700)

For details on vehicleInformation, appointmentInformation, and other standard appointment fields, please refer to the create appointment page.

Key appointmentInformation fields

Property NameValueDescriptionRequired
appointmentStartDateTimeStringThe preferred start date-time. Format: yyyy-MM-dd'T'HH:mm:ss (e.g., 2024-10-25T11:15:00). Strict parsing, no timezone.Yes
appointmentEndDateTimeStringThe preferred end date-time. Same format as start. If not provided, auto-computed from dealer configuration. Must be the same date as start.No
customerAppointmentPreferenceObjectPreferences for customer communication. Must be provided (can be empty {}).Yes
assignedUserObjectDealer associate to whom the appointment is assigned. If not provided, system auto-assigns based on department configuration.No
serviceListList<Object>List of services/opcodes for the appointmentNo
transportOptionObjectTransport option detailsNo
commentsStringCustomer-facing notes for the appointmentNo
internalNotesStringInternal notes for dealership personnel onlyNo
pushToDmsBooleanWhether the appointment should be pushed to DMSNo (defaults to true)
recallBooleanWhether the appointment includes a recallNo

pickupDeliveryTripMetadata

Property NameValueDescriptionRequired
tripUUIDStringUnique token assigned to a pickup and delivery trip in myKaarma. Automatically set by the system after trip creation.No
subTransportOptionRequestObjectDetails of the sub transport optionNo

subTransportOptionRequest

Property NameValueDescriptionRequired
transportationStringName of transport option (e.g., Loaner)No
transportOptionUuidStringUnique token assigned to each transport option in myKaarmaNo
altTransportationStringCustom name for the transport optionNo
bookingIDStringThird party booking ID. Only valid for LoanersNo
bookInThirdPartyBooleanIndicator if booking was made in third party. Only valid for LoanersNo

Response

The response is a SaveAppointmentWithTripResponse object:

Property NameValueDescription
eventUUIDStringUUID of the created pickup and delivery trip event
appointmentUUIDStringUUID of the created appointment
statusCodeIntegerHTTP status code of the response
errorsList<Object>List of errors, if any
warningsList<Object>List of warnings, if any

Minimal Curl (required fields only)

curl --location --request POST 'https://api.mykaarma.com/appointment/v2/dealer/{{dealer_uuid}}/appointment-trip' \
--header 'Authorization: Basic {{basic_auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"savePickupDeliveryTripEventRequest": {
"pickupDeliveryTripEvent": {
"appointmentTime": "2024-10-25T11:15:00-0700",
"rideType": "PICKUP_CUSTOMER",
"dealerUUID": "{{dealer_uuid}}",
"dealerDepartmentUUID": "{{department_uuid}}",
"customerUUID": "{{customer_uuid}}"
},
"requesterUserUUID": "{{requester_uuid}}",
"dealerDepartmentUUIDList": ["{{department_uuid}}"],
"source": "WEB"
},
"createAppointmentWithTripRequest": {
"customerUuid": "{{customer_uuid}}",
"appointmentInformation": {
"appointmentStartDateTime": "2024-10-25T11:15:00",
"customerAppointmentPreference": {}
}
}
}'

Complete Curl

curl --location --request POST 'https://api.mykaarma.com/appointment/v2/dealer/{{dealer_uuid}}/appointment-trip' \
--header 'Authorization: Basic {{basic_auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"savePickupDeliveryTripEventRequest": {
"pickupDeliveryTripEvent": {
"appointmentTime": "2024-10-25T11:15:00-0700",
"rideType": "PICKUP_CUSTOMER",
"dealerUUID": "{{dealer_uuid}}",
"dealerDepartmentUUID": "{{department_uuid}}",
"customerUUID": "{{customer_uuid}}",
"customerFirstName": "John",
"customerLastName": "Doe",
"assignedByDealerAssociateUUID": "{{da_uuid}}",
"serviceAdvisorUUID": "{{advisor_uuid}}",
"originAddress": "123 Customer Street, City, State 12345",
"originLocationLat": 34.0522,
"originLocationLon": -118.2437,
"destinationAddress": "456 Dealer Avenue, City, State 12345",
"destLocationLat": 34.0622,
"destLocationLon": -118.2537,
"loanerVehicleRequired": false,
"isDropCar": false
},
"requesterUserUUID": "{{requester_uuid}}",
"dealerDepartmentUUIDList": ["{{department_uuid}}"],
"source": "WEB"
},
"createAppointmentWithTripRequest": {
"customerUuid": "{{customer_uuid}}",
"vehicleInformation": {
"vehicleUuid": "{{vehicle_uuid}}"
},
"appointmentInformation": {
"appointmentStartDateTime": "2024-10-25T11:15:00",
"appointmentEndDateTime": "2024-10-25T11:29:59",
"transportOption": {
"transportOptionUuid": "{{transport_option_uuid}}"
},
"assignedUser": {
"uuid": "{{advisor_uuid}}",
"deptUUID": "{{department_uuid}}"
},
"comments": "",
"internalNotes": "",
"serviceList": [
{
"title": "{{labor_opcode}}",
"operationUuid": "{{operation_uuid}}",
"operationType": "OPCODE",
"isCustomConcern": false
}
],
"customerAppointmentPreference": {
"emailConfirmation": false,
"textConfirmation": false,
"emailReminder": false,
"textReminder": false,
"notifyCustomer": true,
"sendCommunicationToDA": true
},
"status": null,
"recall": false,
"pushToDms": true
},
"pickupDeliveryTripMetadata": {
"subTransportOptionRequest": {
"transportOptionUuid": "{{transport_option_uuid}}"
}
}
}
}'

Response Example

{
"eventUUID": "abc12345-def6-7890-ghij-klmnopqrstuv",
"appointmentUUID": "xyz98765-uvw4-3210-abcd-efghijklmnop",
"statusCode": 200,
"errors": null,
"warnings": null
}