Skip to navigation

Changelog

Returns after load

A cancel that arrives after the order is loaded can now bring the order back to the store instead of being refused. Returns are enabled per site; ask your Autolane contact to switch them on.

What changed

  • PATCH /dd/v1/deliveries/{external_delivery_id} with status: CANCELLED at LOADED, EN_ROUTE_TO_CUSTOMER, or ARRIVED_AT_CUSTOMER answers 200 with status: RETURN_IN_PROGRESS on sites with returns enabled, unless the trunk has already opened at the customer’s door, in which case the handoff wins instead. Sites without returns still get 409. The body accepts an optional cancellation_reason; any value is accepted, and an unrecognized or non-string value is recorded as OTHER.
  • Three new statuses, RETURN_IN_PROGRESS, RETURN_ARRIVED, RETURNED, on pickup_status.changed and on GET. They always arrive in that order and RETURNED is terminal. After RETURN_IN_PROGRESS a delivery never reports EN_ROUTE_TO_CUSTOMER, ARRIVED_AT_CUSTOMER, or COMPLETED.
  • New fields on the return statuses: return_reason, return_stall_id (sites with stall reporting), and return_fee_cents on RETURNED. estimated_arrival on RETURN_IN_PROGRESS is the arrival back at the store.
  • 409 DELIVERY_ALREADY_COMPLETED when a cancel lands after the handoff to the customer, or once the trunk has opened at the customer’s door.
  • A repeat cancel during or after a return answers 200 with the current status and sends no new webhook.
  • Sandbox. The portal’s Advance button steps a returning delivery through RETURN_ARRIVED (with an optional Return stall ID) and RETURNED.

Cancel accepts cleared instruction fields

A cancel through PATCH /dd/v1/deliveries/{external_delivery_id} no longer fails when the body also carries an instruction field set to null or an empty string.

What changed

  • PATCH /dd/v1/deliveries/{external_delivery_id} cancels the delivery when status is CANCELLED and any pickup_instructions or dropoff_instructions key present is null or an empty string. Those keys are ignored; a cancel never edits instructions.
  • An instruction field with any value other than null or an empty string next to status is still refused with 400, and status still accepts only CANCELLED.

Pickup and dropoff instructions

Deliveries now carry two notes: pickup_instructions for the store side and dropoff_instructions for the customer side.

What changed

  • POST /dd/v1/deliveries/quote accepts dropoff_instructions beside pickup_instructions. Both are optional, nullable, and up to 2000 characters.
  • PATCH /dd/v1/deliveries/{external_delivery_id} edits either note. Send one or both fields without status; null or an empty string clears a field, and an absent field is left unchanged. Edits are accepted until the delivery reaches COMPLETED, FAILED, CANCELLED, or EXPIRED. A cancel still sends status on its own.
  • POST /dd/v1/deliveries, GET /dd/v1/deliveries, and GET /dd/v1/deliveries/{external_delivery_id} return both fields on every delivery. The PATCH response returns them after an instructions edit.
  • pickup_instructions is shown to the driver from assignment until the order is loaded. dropoff_instructions is shown on the way to and at the customer.

Stall ID on store-arrival webhooks

Sites can now report the stall the vehicle is parked in at the store. Ask your Autolane contact to enable stall reporting for a site.

What changed

  • pickup_status.changed carries a new data.stall_id field on ARRIVED_AT_STORE, WAITING_FOR_LOAD, and LOADED for sites with stall reporting enabled. It is null when no stall was recorded for the arrival and is omitted on every other status and for every other site.
  • Corrections. If the stall changes while the delivery is at ARRIVED_AT_STORE or WAITING_FOR_LOAD, you receive another pickup_status.changed with previous_status equal to status and the new stall_id. The newest event by timestamp wins. A delivery that is already LOADED gets no correction event.
  • GET /dd/v1/deliveries/{external_delivery_id} returns stall_id under the same rule.
  • Sandbox. The portal’s Advance button offers an optional Stall ID when stepping into ARRIVED_AT_STORE, so you can exercise the populated shape.

Delivery status now reports the delivery lifecycle

The top-level status field on delivery responses now reports the delivery lifecycle — the same vocabulary emitted by pickup_status.changed webhooks — instead of the internal order state machine. This resolves a long-standing inconsistency where the GET endpoint could report PENDING while webhooks were progressing through ASSIGNED, EN_ROUTE_TO_STORE, and beyond.

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.

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).