The tour ETA notification now carries the estimates

September 30, 2026

The tour ETA notification now delivers the recalculated estimates itself, so an integration can apply them the moment they arrive instead of fetching them after every notification.

Until now tour.etas_recalculated1 only told you that a tour’s ETAs had changed, and you called Fetch estimated arrival times for stops2 to learn the new values — one round trip per notification, for every consumer. From this release the notification carries what that call would have returned, and the fetch can go.

What is in the payload

The event gains a route_estimates object with a stops array, in exactly the shape the estimates endpoint returns: for every stop still expecting an arrival, in route order, its id, expected_arrival_at and waiting_time_seconds. Completed stops are left out, since their estimates no longer change.

{
  "tour_id": "5b2d1a0e-…",
  "service_area_id": "9f1c4e77-…",
  "route_estimates": {
    "stops": [
      { "id": "c1786e3e-…", "expected_arrival_at": "2026-09-30T09:41:12.000Z", "waiting_time_seconds": 0 },
      { "id": "8ff7d0a0-…", "expected_arrival_at": "2026-09-30T10:02:47.000Z", "waiting_time_seconds": 180 }
    ]
  }
}

When route_estimates is null, fetch

The attribute is null in two situations: on large tours — more than 40 stops still expecting an arrival — where the full list would exceed the size a single notification can carry, and when the estimation was not available at the time of publishing. In both cases treat the notification as you do today and fetch the estimates from Fetch estimated arrival times for stops2 (or Fetch estimated arrival times for multiple bookings at once3 for several records at once). A non-null route_estimates is always complete, so the rule is simple: apply it when it is there, fetch when it is null. The same tour can move between the two as stops are added or completed, so handle both paths.

The booking notification is unchanged

booking.etas_recalculated4 keeps its payload as it is. Its unfinished_stops_info list already carries the next ten unfinished stops with their type, position and ETA, and that remains the place to read a booking’s estimates from — nothing to migrate there.

Please adjust your integration

If your integration reacts to the tour ETA notification by calling the estimates endpoint, please switch it to the delivered route_estimates and keep the call only as the fallback for the cases above. Every avoided round trip saves your integration a request per notification and reduces the load on the platform for everyone, and it puts the estimates in your hands the moment they are known.