New webhook event — pickup.vehicle_location.changed

Retailers can now subscribe to pickup.vehicle_location.changed to receive real-time vehicle position updates while a delivery is in transit. The pickup_status.changed payload has also been extended with an optional vehicle_location field for subscribers to the new event.

Added

pickup.vehicle_location.changed webhook event

Fired on two triggers while a delivery is in the active window (EN_ROUTE_TO_STORE through EN_ROUTE_TO_CUSTOMER):

  1. Movement-driven — the vehicle has moved approximately 50 meters since the previous emit.
  2. Heartbeat — at least 60 seconds have passed since the previous emit, even if the vehicle is stationary.

The event stops firing automatically once the delivery transitions to a terminal status (ARRIVED_AT_CUSTOMER, COMPLETED, FAILED, CANCELLED). No per-delivery cleanup is required on your end.

Payload:

1{
2 "event": "pickup.vehicle_location.changed",
3 "timestamp": "2026-05-11T15:00:30Z",
4 "data": {
5 "external_delivery_id": "ACME-12345",
6 "vehicle_location": {
7 "latitude": 30.2672,
8 "longitude": -97.7431,
9 "recorded_at": "2026-05-11T15:00:28Z"
10 }
11 }
12}

Subscribe by including the event in your registration or update call:

$curl -X PUT https://api.goautolane.com/dd/v1/webhooks \
> -H "Authorization: Bearer YOUR_API_KEY" \
> -H "Content-Type: application/json" \
> -d '{
> "events": [
> "pickup_status.changed",
> "tracking_link.created",
> "pickup.vehicle_location.changed"
> ]
> }'

Changed

pickup_status.changed now includes optional vehicle_location

If your webhook is subscribed to pickup.vehicle_location.changed, the pickup_status.changed payload now includes a vehicle_location field with the vehicle’s position at the moment of the status transition. The field is either an object (fresh fix within the last 5 minutes), null (subscribed but no fresh fix or no vehicle assigned yet), or omitted entirely (not subscribed to the location event).

1{
2 "event": "pickup_status.changed",
3 "timestamp": "2026-05-11T15:00:30Z",
4 "data": {
5 "external_delivery_id": "ACME-12345",
6 "status": "ARRIVED_AT_STORE",
7 "previous_status": "EN_ROUTE_TO_STORE",
8 "estimated_arrival": "2026-05-11T15:30:00Z",
9 "customer": { "phone": "+15551234567" },
10 "delivery_address": {
11 "street": "123 Main St",
12 "city": "Austin",
13 "state": "TX",
14 "zip": "78701"
15 },
16 "vehicle_location": {
17 "latitude": 30.2672,
18 "longitude": -97.7431,
19 "recorded_at": "2026-05-11T14:59:58Z"
20 }
21 }
22}

This is a non-breaking, additive change — existing integrations that haven’t subscribed to pickup.vehicle_location.changed see no change in payload shape.

Notes

  • Webhook delivery is at-least-once with no cross-type ordering guarantee. A pickup.vehicle_location.changed event may arrive shortly after a terminal pickup_status.changed for the same delivery — reconcile via the timestamp field rather than receive-order.
  • recorded_at inside vehicle_location may lag the outer event timestamp by a few seconds (it reflects when the GPS sample was taken on-vehicle, not when the webhook fired).

API endpoint paths moved to /dd/v1/*

The Direct Delivery API endpoints are now served under the /dd/v1/* prefix instead of /api/retailer/*. This is purely a URL change — request bodies, response shapes, headers, and authentication are unchanged.

What changed

The public API surface is now organized around versioned product prefixes (/dd/v1/* for Direct Delivery v1). The old /api/retailer/* paths are no longer reachable from api.goautolane.com.

Migration

If you were calling endpoints at /api/retailer/*, switch to /dd/v1/*:

BeforeAfter
POST /api/retailer/deliveries/quotePOST /dd/v1/deliveries/quote
POST /api/retailer/deliveriesPOST /dd/v1/deliveries
GET /api/retailer/deliveriesGET /dd/v1/deliveries
GET /api/retailer/deliveries/{external_delivery_id}GET /dd/v1/deliveries/{external_delivery_id}
PATCH /api/retailer/deliveries/{external_delivery_id}PATCH /dd/v1/deliveries/{external_delivery_id}
POST /api/retailer/webhooksPOST /dd/v1/webhooks
GET /api/retailer/webhooksGET /dd/v1/webhooks
PUT /api/retailer/webhooksPUT /dd/v1/webhooks
DELETE /api/retailer/webhooksDELETE /dd/v1/webhooks

If you’re using the generated SDK, regenerate it from the latest OpenAPI spec — no code changes required.

The base URL (https://api.goautolane.com), authentication (Authorization: Bearer <api_key>), and the x-retailer-id header remain unchanged.


v1.0.0 — Direct Delivery API GA

The Direct Delivery API is generally available. Retailers can now request quotes, submit deliveries, and subscribe to real-time status updates.

Added

Deliveries

  • POST /api/retailer/deliveries/quote — request a delivery quote with pickup ETA, delivery ETA, and a locked cost. Quotes are valid for 5 minutes.
  • POST /api/retailer/deliveries — consume a quote to create a delivery.
  • GET /api/retailer/deliveries — list deliveries for your retailer.
  • GET /api/retailer/deliveries/{external_delivery_id} — fetch a single delivery by your external ID.
  • PATCH /api/retailer/deliveries/{external_delivery_id} — update a delivery (cancellation supported in v1).

Webhooks

  • POST /api/retailer/webhooks — register a webhook URL. The signing secret is returned only once on creation.
  • GET /api/retailer/webhooks — view current configuration.
  • PUT /api/retailer/webhooks — update the URL or subscribed events.
  • DELETE /api/retailer/webhooks — remove the subscription.

Supported events:

  • pickup_status.changed — fires on each pickup status transition: ASSIGNED, EN_ROUTE_TO_STORE, ARRIVED_AT_STORE, WAITING_FOR_LOAD, LOADED, EN_ROUTE_TO_CUSTOMER, ARRIVED_AT_CUSTOMER, COMPLETED, FAILED, CANCELLED.
  • tracking_link.created — fires when a customer-facing tracking link is generated for a delivery.

Authentication

  • Bearer authentication using an API key generated in the Autolane Portal, scoped to your organization with granular permissions.
  • x-retailer-id header required on every request — set to the site UUID from the Autolane Portal.