Skip to main content

Webhook Events

The webhook events we currently support are listed below

Each webhook event payload schema will match the event object format.

move.created

The move has been created in our system. This will be triggered regardless of the source (API, CSV Upload, or interactive web portal).

move.dispatched

The move has been dispatched out and subsequently assigned to a driver.

move.pickup.started

The driver has departed their location and is in route to the pickup location.

move.pickup.arrived

The driver has arrived at the pickup location and started the pickup inspection workflow.

move.pickup.successful

The driver has completed the pickup workflow and received signature from the signer.

move.delivery.started

The driver has departed the pickup location driving the vehicle to the delivery location.

move.delivery.arrived

The driver has arrived at the delivery location and started the delivery insepection process.

move.delivery.successful

The driver has completed the delivery workflow and received signature from the signer. The move is considered complete.

move.cancel.pending

A request has been made to cancel this vehicle move request. Based on it's current status, a HopDrive associate will determine whether it can be canceled fully (no charges), partially (with some charges), or not at all (because the vehicle has already been delivered).

move.cancel.succeeded

A cancelation request was processed and it was determined that the move was able to be canceled completely without incuring any charges.

move.cancel.partial

A cancelation request was processed and it was determined that the move was unable to be canceled completely. However the delivery of the vehicle was able to be prevented. Typically this means there will be a charge incurred on the move in the form of a partial accessorial charge.

move.cancel.failed

A cancelation request was processed and it was determined that the the move has progressed enough that cancelation was not an option. Typically this means the vehicle was already delivered to the delivery location. No additional charges related to the cancelation request will be recorded on the move.

move.rescheduled

The move has been attempted, but needs to be rescheduled to a new date. This event will be emitted when the move has successfully been rescheduled.The payload will contain the original move object and the newMove object.

move.return.ready

After a concierge move has been successfully delivered to a dealership for service an unspecified amount of time may go by as that service work is performed. Once completed, some dealerships may be able to indicate on that completed move that the service work has been completed, that they are ready for someone to drive the vehicle back to the customer.

move.charges.settled

Once a move has settled, meaning no additional charges will be added to the move. Until this event is emitted it is not safe to pay for this move as additional charges may be added.

invoice.charges.settled

The invoice has been settled and no additional charges or moves will be added to the invoice. Until this event is emitted it is not safe to pay for this invoice as additional charges or moves may be added.

photo.status.changed

The status of a photo has been changed. This event will be emitted when a photo is uploaded.

Appointment Events

Appointment webhook payloads carry the appointment object under data.appointment. The hopdrive-event header uses underscores (e.g. appointment_canceled) and indicates which specific lifecycle transition occurred. The body always reflects the current state of the appointment.

Each appointment lifecycle transition is delivered as a distinct, specific event. There is no generic appointment.updated catch-all — subscribe to exactly the events you care about. A single database update that triggers more than one named event (for example, status changing to canceled at the same time as appointment_time changes) will produce one delivery per matching event type.

appointment.created

An appointment has been recorded in HopDrive. This will be triggered regardless of the source (API, inbound webhook sync from a scheduler integration, or the dealer portal).

appointment.canceled

The appointment's status has transitioned to canceled. Use the data.appointment.move_id field if a move was already created; the existing move cancellation path will run independently and emit its own move.cancel.* events.

appointment.status.changed

The appointment's internal status has changed to any non-canceled value (e.g. newpending, pendingready, readypaid). Cancellation is delivered separately as appointment.canceled and is not duplicated here.

appointment.upgraded

The appointment's transportation type has changed (e.g. waitervalet, waitermobile_service). The new value is on data.appointment.transport_type.

appointment.rescheduled

The appointment time has changed. The new time is on data.appointment.appointment_time.

appointment.move.created

A move has been created from this appointment, indicating conversion from a staging appointment to an active transportation request. The data.appointment.move_id field contains the ID of the created move. Use GET /v1/moves/:id to fetch full move details — the appointment webhook payload does not include denormalized move data.

appointment.offered

The appointment link has been sent to the consumer via SMS (consumer-pay path).