EasyRoutes API

API Changelog

New features, improvements, and fixes in the EasyRoutes API.

rev 0c189ef
10schema1endpoint

Schema changes

Added Shopify metadata and source tracking to stop items

You can now track whether stop items originate from custom inputs or Shopify orders, alongside associated Shopify product, variant, line item, and fulfillment IDs.

TagsRoutes · Stops
Changed

Added optional request field source to indicate whether an item came directly from custom input (CUSTOM) or a Shopify order (SHOPIFY_ORDER).

Changed

Added optional request field shopifyLineItemId to identify the Shopify line item ID for order items.

Changed

Added optional request field shopifyFulfillmentId to identify the associated Shopify fulfillment ID for order items.

Changed

Added optional request field shopifyVariantId to identify the Shopify product variant ID for order items.

Changed

Added optional request field shopifyProductId to identify the Shopify product ID for order items.

Changed

Added source to responses to indicate whether an item originated from a custom addition (CUSTOM) or a Shopify order (SHOPIFY_ORDER).

Changed

Added shopifyLineItemId to responses to return the Shopify line item ID for order items, or 0 otherwise.

Changed

Added shopifyFulfillmentId to responses to return the Shopify fulfillment ID for items taken from an order fulfillment, or 0 otherwise.

Changed

Added shopifyVariantId to responses to return the Shopify product variant ID for order items, or 0 otherwise.

Changed

Added shopifyProductId to responses to return the Shopify product ID for order items, or 0 otherwise.

33 affected endpoints
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
PATCH/routes/{routeId}
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
PATCH/routes/{routeId}/end/location
PUT/routes/{routeId}/end/tasks
POST/routes/{routeId}/resync-orders
POST/routes/{routeId}/shopify-orders
PATCH/routes/{routeId}/start/location
PUT/routes/{routeId}/start/tasks
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
GET/routes/{routeId}/stops/{stopId}
PATCH/routes/{routeId}/stops/{stopId}
PUT/routes/{routeId}/stops/{stopId}/items
PATCH/routes/{routeId}/stops/{stopId}/location
PUT/routes/{routeId}/stops/{stopId}/position
PUT/routes/{routeId}/stops/{stopId}/shopify-order-items
PUT/routes/{routeId}/stops/{stopId}/tasks
DELETE/routes/{routeId}/vehicle
PUT/routes/{routeId}/vehicle
GET/stops/imports
POST/stops/imports
GET/stops/imports/{id}
PATCH/stops/imports/{id}
PUT/stops/imports/{id}/items
PATCH/stops/imports/{id}/location
PUT/stops/imports/{id}/tasks

Endpoint changes

Added endpoint to update route stop Shopify order items

Added the PUT /routes/{routeId}/stops/{stopId}/shopify-order-items endpoint to allow updating the Shopify order line items delivered by a stop.

TagsStops
Added

Added the PUT /routes/{routeId}/stops/{stopId}/shopify-order-items endpoint to update which Shopify order line items a stop delivers from unfulfilled items or a specific fulfillment.

AffectsPUT/routes/{routeId}/stops/{stopId}/shopify-order-items

rev 044e69a
4endpoint

Endpoint changes

Added endpoint to add Shopify orders to a route

Introduced the POST /routes/{routeId}/shopify-orders endpoint, allowing you to add Shopify orders directly to an existing route as stops without importing them first.

TagsStops
Added

Added the POST /routes/{routeId}/shopify-orders endpoint to add up to 200 Shopify orders as stops to the end of a route.

AffectsPOST/routes/{routeId}/shopify-orders

Stops created from Shopify orders can now be updated

You can now update stops created from Shopify orders (stops with a shopifyOrderId) with the same endpoints you use for imported stops. Previously these endpoints only accepted stops with an importedStopId.

TagsStops
Changed

PATCH /routes/{routeId}/stops/{stopId} now accepts stops created from Shopify orders. For these stops, updateMask can only include note, timeWindows, priority, deliveryDate, duration, and type. The other fields come from the Shopify order, and the endpoint rejects them with INVALID_ARGUMENT.

Changed

PATCH /routes/{routeId}/stops/{stopId}/location now accepts stops created from Shopify orders. The new location is kept when you resync the route's orders with ResyncRouteOrders.

Changed

PUT /routes/{routeId}/stops/{stopId}/tasks now accepts stops created from Shopify orders.

3 affected endpoints
PATCH/routes/{routeId}/stops/{stopId}
PATCH/routes/{routeId}/stops/{stopId}/location
PUT/routes/{routeId}/stops/{stopId}/tasks

rev d80ab85
41endpoint

Endpoint changes

Added rate limiting to the API

Requests are now rate limited per API client, with a steady allowance of 10 requests per second and bursts of up to 120 requests. See our guide for more details.

TagsDrivers · Routes · Stops · Vehicles · Webhooks
Changed

Requests that exceed the rate limit are now rejected with a 429 Too Many Requests response.

Changed

Added the RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset response headers.

Changed

Added the Retry-After response header on 429 responses.

41 affected endpoints
GET/drivers
GET/drivers/{id}
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
PATCH/routes/{routeId}
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
PATCH/routes/{routeId}/end/location
PUT/routes/{routeId}/end/tasks
POST/routes/{routeId}/resync-orders
PATCH/routes/{routeId}/start/location
PUT/routes/{routeId}/start/tasks
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
GET/routes/{routeId}/stops/{stopId}
PATCH/routes/{routeId}/stops/{stopId}
PUT/routes/{routeId}/stops/{stopId}/items
PATCH/routes/{routeId}/stops/{stopId}/location
PUT/routes/{routeId}/stops/{stopId}/position
PUT/routes/{routeId}/stops/{stopId}/tasks
DELETE/routes/{routeId}/vehicle
PUT/routes/{routeId}/vehicle
GET/stops/imports
POST/stops/imports
DELETE/stops/imports/{id}
GET/stops/imports/{id}
PATCH/stops/imports/{id}
PUT/stops/imports/{id}/items
PATCH/stops/imports/{id}/location
GET/stops/imports/{id}/routes
PUT/stops/imports/{id}/tasks
GET/stops/shopify/{id}/routes
GET/vehicles
GET/vehicles/{id}
GET/webhooks
POST/webhooks
DELETE/webhooks/{id}

rev bb5086d
1endpoint

Endpoint changes

Added endpoint to resync route orders

Added the POST /routes/{routeId}/resync-orders endpoint to refresh order-backed stops from Shopify with the latest fulfillment statuses, item updates, notes, and tags.

TagsRoutes
Added

Added the POST /routes/{routeId}/resync-orders endpoint to resync Shopify order data across a route's stops and return the updated route.

AffectsPOST/routes/{routeId}/resync-orders

rev 559604c
28endpoint

Endpoint changes

Added idempotency support to mutating endpoints

You can now safely retry route, stop, and webhook requests using idempotency headers. See our guide for more details.

TagsRoutes · Stops · Webhooks
Changed

Added the optional Idempotency-Key request header.

Changed

Added the Idempotency-Key response header on 200 responses.

Changed

Added the Idempotency-Replayed response header on 200 responses.

28 affected endpoints
POST/routes
POST/routes/{id}/reoptimize
PATCH/routes/{routeId}
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
PATCH/routes/{routeId}/end/location
PUT/routes/{routeId}/end/tasks
PATCH/routes/{routeId}/start/location
PUT/routes/{routeId}/start/tasks
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
PATCH/routes/{routeId}/stops/{stopId}
PUT/routes/{routeId}/stops/{stopId}/items
PATCH/routes/{routeId}/stops/{stopId}/location
PUT/routes/{routeId}/stops/{stopId}/position
PUT/routes/{routeId}/stops/{stopId}/tasks
DELETE/routes/{routeId}/vehicle
PUT/routes/{routeId}/vehicle
POST/stops/imports
DELETE/stops/imports/{id}
PATCH/stops/imports/{id}
PUT/stops/imports/{id}/items
PATCH/stops/imports/{id}/location
PUT/stops/imports/{id}/tasks
POST/webhooks
DELETE/webhooks/{id}

rev cc6f98e
5schema1endpoint

Schema changes

Added order reference URL to imported stops

You can now view an external order reference URL on imported stops.

TagsStops
Changed

Added orderReferenceUrl to provide a reference HTTPS URL for the order associated with the stop, such as a link to an order management system.

7 affected endpoints
GET/stops/imports
POST/stops/imports
GET/stops/imports/{id}
PATCH/stops/imports/{id}
PUT/stops/imports/{id}/items
PATCH/stops/imports/{id}/location
PUT/stops/imports/{id}/tasks

Imported stop update support for order reference URLs

You can now update the order reference URL for an imported stop.

TagsStops
Changed

Added the optional orderReferenceUrl request field to update the HTTPS reference link to the order in your external order management system.

AffectsPATCH/stops/imports/{id}

Added order reference URL to RouteStop

You can now view an external order reference link directly on imported route stops.

TagsRoutes · Stops
Changed

Added optional orderReferenceUrl field providing a link to the order associated with the stop in an external system for imported stops.

23 affected endpoints
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
PATCH/routes/{routeId}
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
PATCH/routes/{routeId}/end/location
PUT/routes/{routeId}/end/tasks
PATCH/routes/{routeId}/start/location
PUT/routes/{routeId}/start/tasks
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
GET/routes/{routeId}/stops/{stopId}
PATCH/routes/{routeId}/stops/{stopId}
PUT/routes/{routeId}/stops/{stopId}/items
PATCH/routes/{routeId}/stops/{stopId}/location
PUT/routes/{routeId}/stops/{stopId}/position
PUT/routes/{routeId}/stops/{stopId}/tasks
DELETE/routes/{routeId}/vehicle
PUT/routes/{routeId}/vehicle

Added order reference URL when updating route stops

You can now update the external order reference URL for an existing stop on a route.

TagsStops
Changed

Added the optional orderReferenceUrl request field to update the stop's external order reference URL, such as a link to the order in your order management system (must be a valid HTTPS URL).

AffectsPATCH/routes/{routeId}/stops/{stopId}

Added order reference URL to imported stops

You can now include an external order reference link when importing stops.

TagsStops
Changed

Added the optional orderReferenceUrl field to link an imported stop to an external order management system via an HTTPS URL.

AffectsPOST/stops/imports

Endpoint changes

Route sorting updates

You can now sort routes by their scheduled date and time.

TagsRoutes
Changed

Added the SCHEDULED_AT option to the sortKey query parameter.

AffectsGET/routes

rev 90e013a
6schema5endpoint

Schema changes

Imported Stop Update

You can now update additional stop details including timing, sequencing, and custom disclosures.

TagsStops
Changed

Add a duration to the stop.

Changed

Specify an order name.

Changed

Set a delivery date.

Changed

Define the stop type.

Changed

Include a custom signature disclosure.

AffectsPATCH/stops/imports/{id}

Route

You can now access vehicle information directly within route details.

TagsRoutes · Stops
Changed

Includes the assigned vehicle.

18 affected endpoints
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
PATCH/routes/{routeId}
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
PATCH/routes/{routeId}/end/location
PUT/routes/{routeId}/end/tasks
PATCH/routes/{routeId}/start/location
PUT/routes/{routeId}/start/tasks
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
PUT/routes/{routeId}/stops/{stopId}/position
DELETE/routes/{routeId}/vehicle
PUT/routes/{routeId}/vehicle

Endpoint changes

Unassign route vehicle

A new endpoint has been added to unassign a vehicle from a route by its ID. The response returns the updated route without an assigned vehicle.

TagsRoutes
Added

The endpoint DELETE /routes/{routeId}/vehicle has been added.

AffectsDELETE/routes/{routeId}/vehicle

List vehicles

Fetch a paginated list of vehicles associated with the shop.

TagsVehicles
Added

Added the GET /vehicles endpoint to retrieve a paginated list of vehicles.

AffectsGET/vehicles

Get vehicle

Fetch a single vehicle by ID.

TagsVehicles
Added

Added the GET /vehicles/{id} endpoint to fetch a single vehicle by ID.

AffectsGET/vehicles/{id}

Assign route vehicle

Assigns a vehicle to a route by route ID. The response will include the updated route with the new vehicle assigned.

TagsRoutes
Added

Added the PUT /routes/{routeId}/vehicle endpoint to assign a vehicle to a specific route.

AffectsPUT/routes/{routeId}/vehicle

Update imported stop tasks

Updates the tasks on an existing imported stop by ID, without needing to re-send the full stop payload via ImportStops. This is a full replacement: the entire list of tasks on the stop is replaced with the task templates provided in the request body.

TagsStops
Added

Added the PUT /stops/imports/{id}/tasks endpoint to allow full replacement of tasks on an imported stop record.

AffectsPUT/stops/imports/{id}/tasks

rev dae72f5
3schema4endpoint

Schema changes

Imported stop updates

You can now update time windows, attributes, and priority levels for imported stops.

TagsStops
Changed

Add optional time windows to the update request.

Changed

Include custom attributes when updating a stop.

Changed

Set or modify the priority level for the stop.

AffectsPATCH/stops/imports/{id}

Endpoint changes

Update imported stop location

Updates the address and/or coordinates for an imported stop by ID. This partial update modifies the imported stop record itself using a provided update mask.

TagsStops
Added

Added the UpdateImportedStopLocation endpoint to allow partial updates to an imported stop's address or coordinates.

AffectsPATCH/stops/imports/{id}/location

Update route end tasks

Updates the tasks required to complete a route by route ID. This is a full replacement: the entire list of tasks on the route end is replaced with the task templates provided in the request body, so existing tasks not included in the request will be removed. Task and item IDs are always regenerated by the server, and any existing completion state, input, or timestamps are cleared, since only the driver (via the driver app) can mark a task or item complete or provide input. The route must have an end location and must not be archived. The response returns the full updated route.

TagsRoutes
Added

Added the UpdateRouteEndTasks endpoint to replace tasks on a route's end location.

AffectsPUT/routes/{routeId}/end/tasks

Update route start tasks

Updates the tasks required before starting a route by route ID. This is a full replacement: the entire list of tasks on the route start is replaced with the task templates provided in the request body, so existing tasks not included in the request will be removed. Task and item IDs are always regenerated by the server, and any existing completion state, input, or timestamps are cleared, since only the driver (via the driver app) can mark a task or item complete or provide input. The route must not be archived. The response returns the full updated route.

TagsRoutes
Added

Added the PUT /routes/{routeId}/start/tasks endpoint.

AffectsPUT/routes/{routeId}/start/tasks

Update imported stop items

Updates the items on an existing imported stop by ID. This is a full replacement of the item list and supports both the EasyRoutes ID or a client-provided ID.

TagsStops
Added

Added the PUT /stops/imports/{id}/items endpoint to allow full replacement of items on an imported stop record.

AffectsPUT/stops/imports/{id}/items

rev 3a7e902
3endpoint

Endpoint changes

Update imported stop

Updates top-level fields on an existing imported stop by ID without requiring a full payload. This partial update applies only the fields specified in the update mask.

TagsStops
Added

Added the PATCH /stops/imports/{id} endpoint to allow partial updates to imported stops using an update mask.

AffectsPATCH/stops/imports/{id}

Update route end location

A new endpoint has been added to update the address or coordinates for a route's end location. This partial update affects distances, ETAs, and optimization status.

TagsRoutes
Added

Added the PATCH /routes/{routeId}/end/location endpoint to update or set a route's end location.

AffectsPATCH/routes/{routeId}/end/location

Update route start location

Updates the address and/or coordinates for a route's start location by route ID. This partial update requires an updateMask for address or coordinates and results in recalculated distances and ETAs.

TagsRoutes
Added

Added the PATCH /routes/{routeId}/start/location endpoint to update a route's start location address or coordinates.

AffectsPATCH/routes/{routeId}/start/location

rev 39a5531
7schema

Schema changes

RouteUpdate

You can now configure additional constraints and preferences when updating a route.

TagsRoutes
Changed

Added optional maxDuration property.

Changed

Added optional maxStops property.

Changed

Added optional maxItemCount property.

Changed

Added optional maxKilograms property.

Changed

Added optional avoidTolls property.

Changed

Added optional avoidUTurns property.

Changed

Added optional speedFactor property.

AffectsPATCH/routes/{routeId}

rev a2a8e35
1endpoint

Endpoint changes

Update route

Updates top-level fields on a route by route ID. This is a partial update: provide the fields to change in route and list their paths in updateMask. Only the paths listed in updateMask are applied; omitted fields are left unchanged. The route must not be archived. The response returns the full updated route.

TagsRoutes
Added

Added the UpdateRoute endpoint to allow partial updates to route fields using a PATCH request.

AffectsPATCH/routes/{routeId}

rev e45bc94
7schema

Schema changes

Route

Access new route constraints and routing preferences.

TagsRoutes · Stops
Changed

Added maxDuration to specify the maximum allowed time for a route.

Changed

Added maxStops to limit the number of stops on a route.

Changed

Added maxItemCount to define the maximum number of items allowed.

Changed

Added maxKilograms to set the maximum weight capacity.

Changed

Added avoidTolls to indicate if toll roads should be bypassed.

Changed

Added avoidUTurns to indicate if U-turns should be restricted.

Changed

Added speedFactor to adjust travel time calculations.

11 affected endpoints
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
PUT/routes/{routeId}/stops/{stopId}/position

rev 702a824
2endpoint

Endpoint changes

Update route stop tasks

Updates the tasks for an imported stop on a route. Allows you to set or replace the list of driver tasks for a stop that was previously imported via ImportStops.

TagsStops
Added

Added the PUT /routes/{routeId}/stops/{stopId}/tasks endpoint to allow full replacement of driver tasks for imported stops.

AffectsPUT/routes/{routeId}/stops/{stopId}/tasks

Imported stops

Retrieve a list of imported stop locations.

TagsStops
Breaking

The limit parameter now requires a minimum value of 1.

AffectsGET/stops/imports

rev ef74bb4
2schema

Schema changes

Route

Access route-level tags and default stop durations.

TagsRoutes · Stops
Changed

Added optional tags to the Route.

Changed

Added an optional default stop duration.

11 affected endpoints
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
PUT/routes/{routeId}/stops/{stopId}/position

rev 7d39caf
1schema

Schema changes

Route

You can now view additional notes associated with your routes.

TagsRoutes · Stops
Changed

Includes an optional note.

11 affected endpoints
GET/routes
POST/routes
GET/routes/{id}
POST/routes/{id}/reoptimize
DELETE/routes/{routeId}/dispatch
POST/routes/{routeId}/dispatch
DELETE/routes/{routeId}/driver
PUT/routes/{routeId}/driver
POST/routes/{routeId}/stops
DELETE/routes/{routeId}/stops/{stopIds}
PUT/routes/{routeId}/stops/{stopId}/position