EasyRoutes API

Update route stop items

PUT
/routes/{routeId}/stops/{stopId}/items

Updates the items for an imported stop on a route. Allows you to set or replace the list of items for a stop that was previously imported via ImportStops. Only stops with an importedStopId can have their items updated through this endpoint. Stops created from Shopify orders, saved stops, or manually created stops cannot be updated via this RPC. The response will include the updated stop with the new items. The route will be marked as not optimized after updating items, so the caller should reoptimize the route if needed via ReoptimizeRoute. Items are validated to ensure they meet the following constraints: maximum 250 items per stop, item names up to 1500 characters, quantities up to 100,000, and weight up to 1,000,000,000 grams.

Authorization

bearerAuth
AuthorizationBearer <token>

Access token from /authenticate

In: header

Path Parameters

routeId*string

The ID of the route to update stop items.

stopId*string

The ID of the stop to update items for.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

[index: integer]?

An item to be delivered at a stop.

Response Body

application/json

application/json

curl -X PUT "https://example.com/routes/rte-123e4567-e89b-12d3-a456-426614174000/stops/rst-123e4567-e89b-12d3-a456-426614174000/items" \  -H "Content-Type: application/json" \  -d '[    {}  ]'
{  "id": "rst-123e4567-e89b-12d3-a456-426614174000",  "type": "DELIVERY",  "deliveryStatus": "ATTEMPTED_DELIVERY",  "breakStatus": "COMPLETED",  "updatedAt": "2019-08-24T14:15:22Z",  "duration": "string",  "plannedArrival": "2019-08-24T14:15:22Z",  "note": "Leave at door.",  "address": {    "address1": "123 Main St",    "address2": "Apt 3B",    "city": "New York",    "provinceCode": "NY",    "countryCode": "US",    "zip": "10001"  },  "contact": {    "firstName": "John",    "lastName": "Doe",    "company": "Roundtrip Systems Inc",    "phone": "+14265551000",    "email": "john.doe@roundtrip.ai"  },  "plannedCoordinates": {    "latitude": 0.1,    "longitude": 0.1  },  "items": [    {      "name": "Bananas",      "quantity": 5,      "grams": 500,      "sku": "BANANA-001"    }  ],  "source": "IMPORTED_STOP",  "shopifyOrderId": "6229749334323",  "savedStopId": "sst-123e4567-e89b-12d3-a456-426614174000",  "deliveredCoordinates": {    "latitude": 0.1,    "longitude": 0.1  },  "proofOfDeliveryNote": "Left at door.",  "proofOfDeliveryPhotos": [    {      "id": "att-123e4567-e89b-12d3-a456-426614174000",      "createdAt": "2019-08-24T14:15:22Z",      "url": "https://example.com/stop-attachment/attachment-2025-06-03-1"    }  ],  "proofOfDeliverySignatures": [    {      "id": "att-123e4567-e89b-12d3-a456-426614174000",      "createdAt": "2019-08-24T14:15:22Z",      "url": "https://example.com/stop-attachment/attachment-2025-06-03-1"    }  ],  "tasks": [    {      "id": "tsk-123e4567-e89b-12d3-a456-426614174000",      "title": "Delivery checklist",      "type": "TEXT_INPUT",      "items": [],      "input": {        "value": "020123456789",        "updatedAt": "2019-08-24T14:15:22Z",        "inputMethod": "SCANNED"      },      "requiredToMarkStopAsDelivered": true,      "requiredToMarkStopAsAttempted": true    }  ],  "priority": 8,  "importedStopId": "ist-123e4567-e89b-12d3-a456-426614174000",  "orderName": "#1234",  "distanceMeters": 123.45,  "updatedArrival": "2019-08-24T14:15:22Z",  "timeWindows": [    {      "start": {        "hours": 13,        "minutes": 37,        "seconds": 16      },      "end": {        "hours": 13,        "minutes": 37,        "seconds": 16      }    }  ],  "deliveryDate": {    "year": 2019,    "month": 11,    "day": 15  },  "attributes": [    {      "key": "delivery_date",      "value": "2025-12-16"    }  ],  "clientStopId": "test-order-1234",  "tags": [    "foo",    "bar"  ],  "attemptedReason": "NOT_AVAILABLE",  "attemptedNote": "Customer did not answer the door.",  "customerRating": {    "rating": 5,    "comment": "Excellent delivery",    "createdAt": "2019-08-24T14:15:22Z"  },  "customSignatureDisclosure": "I acknowledge that I have received this delivery.",  "shopifyOrder": {    "orderNote": "Customer has paid.",    "customerNote": "Leave at door."  },  "proofOfDeliveryBarcodes": [    {      "value": "string",      "createdAt": "2019-08-24T14:15:22Z"    }  ],  "proofOfDeliveryBarcodeIssues": [    {      "reason": "ITEM_MISSING",      "note": "Item was not packed.",      "createdAt": "2019-08-24T14:15:22Z"    }  ]}
{  "code": 0,  "message": "string",  "details": [    {      "@type": "string"    }  ]}