Lead Webhook Export
In Dealer Studio, we can setup lead exports to third party endpoints using the schema defined below. Webhook exports are defined under dealership notifications.
To receive webhooks, a third party must provide an endpoint for third parties to be sent to. We also support the ability to send webhooks with API bearer token authentication.
Schema version v3 adds an appointments field and a boolean has_test_drives to the JSON body.
appointments: always present as an array—either empty, or one object per appointment on the lead cluster with purpose Test Drive, ordered by start time (earliest first).has_test_drives:trueif the lead cluster has at least one TestDrive record (lead_cluster.test_drives), otherwisefalse(including when the lead has no cluster). This is independent ofappointments: you can have test-drive appointments without a linked TestDrive, or test drives on the cluster with no matching appointment rows in the payload.
Each appointments element includes:
| Field | Description |
|---|---|
id | Appointment id. |
ai_generated | Whether the booking was created by AI. |
user_id | Assigned dealership user id. |
starts_at | Start time as a string in the dealership’s configured timezone (or Australia/Brisbane if the dealership has no timezone), formatted as YYYY-MM-DD HH:MM:SS. null if starts_at is not set. |
status | Appointment status (for example pending, completed, cancelled, no-show, interest_registered). |
length_in_minutes | Scheduled duration. |
note | Optional note; may be null. |
location_id | Optional location id; may be null. |
car_for_test_drive | When the appointment’s schedulable is a TestDrive with a stock car, the car’s display name (same as in the dashboard). When the test drive uses a generic car (car lead cluster only), "<car lead cluster name> (generic car)". When the appointment is not linked to a test drive record, or the schedulable is not a TestDrive, null. |
v1 and v2 webhooks do not include appointments or has_test_drives.
{ "id": 138559, "item": { "id": null, "km": null, "url": "https://www.orangesubaru.com.au/trade-in", "vin": null, "make": "subaru", "rego": "151vev", "type": "Car", "year": 2018, "badge": null, "model": "Forester", "price": null, "colour": null, "series": null, "status": null, "deposit": null, "car_type": null, "comments": null, "body_type": null, "spin_code": null, "build_date": null, "engine_size": null, "stock_number": null, "transmission": null, "interior_color": null, "third_party_integrations": [ { "service": "Loopit", "external_id": "12312" } ] }, "source": "Website", "created": "2025-09-16T00:30:52.297Z", "website": { "id": 794, "url": "https://www.orangemotorgroup.com.au", "name": "Orange Motor Group", "slug": "orange-motor-group" }, "category": "Sell My Car Enquiry", "comments": "comments here", "location": { "city": "Fake city", "state": "QLD", "street": "123 fake street", "postcode": 1234, "location_name": "Orange Motor Group" }, "prospect": { "dob": null, "email": "email@example.com", "title": null, "address": { "city": "Browns Plains", "state": "Queensland", "street": "4 Myola Street", "country": "Australia", "postcode": 4118, "state_long": "Queensland" }, "postcode": 1234, "last_name": "don", "first_name": "xcvxcvdcz", "middle_name": null, "mobile_phone": "041000000", "opt_in_to_marketing": true }, "provider": "Dealer Studio", "dealership": { "id": 3, "name": "Orange Motor Group", "slug": "orange-motor-group" }, "updated_at": "2025-09-16T00:30:52.297Z", "lead_events": [], "utm_campaign": null, "trade_in_data": { "kms": 210000, "make": "subaru", "rego": "151vev", "year": 2018, "badge": null, "model": "Forester", "state": null, "title": null, "series": null, "offer_price": null, "trade_price": 60900, "retail_price": null, "offer_accepted": false, "price_adjustment": null }, "subscription_plan": { "name": "Premium", "subscription_id": 4, "daily_price_for_car": 46.9, "weekly_price_for_car": 329, "monthly_price_for_car": 1425.7, "fortnightly_price_for_car": 658 }, "lead_cluster_id": 289, "marketing_source": "Unknown", "additional_details": { "range": 10405608, "additional_data": "test data" }, "lead_status_option": { "id": 138, "name": "new", "status_type": "new" }, "assigned_salesperson": { "id": null, "name": null, "email": null }, "subcategory": null, "booking_date": null, "booking_time": null, "offer_data": { "manufacturer": null, "offer_name": null }, "pipeline": { "id": 496, "name": "Sales" }, "has_test_drives": true, "appointments": [ { "id": 9041, "ai_generated": false, "user_id": 88, "starts_at": "2025-09-18 12:00:00", "status": "pending", "length_in_minutes": 30, "note": "Customer requested SUV demo", "location_id": 12, "car_for_test_drive": "2018 Subaru Forester Sport" }, { "id": 9042, "ai_generated": true, "user_id": 88, "starts_at": "2025-09-20 13:30:00", "status": "completed", "length_in_minutes": 45, "note": null, "location_id": null, "car_for_test_drive": "Toyota Corolla Ascent 2022 (generic car)" } ], "lost_reason_comment": null, "lost_reason": null}