Delivery
Delivery Orders
Create, track, and manage delivery orders through their full lifecycle. Orders support multi-stop routes, driver assignment, status transitions, proof of delivery, and event logging. All routes live under /modules/delivery/* and require a token with delivery:read or delivery:write scope.
Order lifecycle: pending → assigned → accepted → in_transit → arrived_pickup → picked_up → in_delivery → arrived_dropoff → delivered. Orders can be cancelled from pending/assigned/accepted states, or marked as failed from picked_up/in_delivery/arrived_dropoff.
deliveryOrderCreate
GET
typescript
const order = await ss.delivery.orders.create({
customer_id: 'cust_01',
pickup: { lat: 40.75, lng: -73.99, address: '350 Fifth Ave' },
dropoff: { lat: 40.73, lng: -73.98, address: '23 Park Ave' },
})
- Open Delivery and go to Orders
- Click Create Order
- Fill in customer, pickup and dropoff details, then click Save
deliveryOrderList
GET
typescript
const orders = await ss.delivery.orders.list()
- Open Delivery and go to Orders
- Browse or filter the order list
deliveryOrderGet
GET
typescript
const order = await ss.delivery.orders.get('ord_01')
- Open Delivery and go to Orders
- Click on an order to view its details
deliveryOrderUpdate
GET
typescript
const updated = await ss.delivery.orders.update('ord_01', {
notes: 'Leave at front desk',
})
- Open Delivery and go to Orders
- Click on an order, edit the fields, then click Save
deliveryOrderTransition
GET
typescript
await ss.delivery.orders.transition('ord_01', {
status: 'in_transit',
driver_id: 'drv_01',
})
- Open Delivery and go to Orders
- Click on an order and use the Status dropdown to transition it
deliveryOrderEventList
GET
typescript
const events = await ss.delivery.orders.events('ord_01')
- Open Delivery and go to Orders
- Click on an order, then open the Events tab
deliveryOrderDelete
GET
typescript
await ss.delivery.orders.delete('ord_01')
- Open Delivery and go to Orders
- Click on an order, then click Delete
deliveryOrderProofCreate
GET
typescript
await ss.delivery.orders.addProof('ord_01', {
type: 'signature',
value: 'data:image/png;base64,iVBORw0KGgo...',
lat: 40.7128,
lng: -74.006,
})
- Open Delivery and go to Orders
- Click on a delivered order, then open Proof of Delivery
- Upload a photo or signature
deliveryOrderProofPhotoUpload
GET
typescript
const photo = await fs.readFile('./proof.jpg')
await ss.delivery.orders.uploadPhotoProof('ord_01', photo, 'image/jpeg', {
lat: 40.7128,
lng: -74.006,
filename: 'proof.jpg',
})
- Open Delivery and go to Orders
- Click an order, go to the Proof tab
- Click Upload Photo and select an image file
deliveryOrderProofList
GET
typescript
const { proofs } = await ss.delivery.orders.listProofs('ord_01')
for (const p of proofs) {
console.log(p.type, p.url)
}
- Open Delivery and go to Orders
- Click an order, go to the Proof tab to see all proof records
deliveryOrderProofGet
GET
typescript
const proof = await ss.delivery.orders.getProof('ord_01', 'dprf_01')
- Open Delivery and go to Orders
- Click an order, go to the Proof tab
- The proof details and photo preview are displayed inline
deliveryOrderProofDelete
GET
typescript
await ss.delivery.orders.deleteProof('ord_01', 'dprf_01')
- Open Delivery and go to Orders
- Click an order, go to the Proof tab
- Click the delete icon next to a proof record
Stops
Manage pickup, dropoff, and waypoint stops within an order.
deliveryStopCreate
GET
typescript
const stop = await ss.delivery.stops.create('ord_01', {
type: 'dropoff',
lat: 40.73,
lng: -73.98,
address: '23 Park Ave',
})
- Open Delivery and go to Orders
- Click on an order, then click Add Stop
- Fill in stop details and click Save
deliveryStopList
GET
typescript
const stops = await ss.delivery.stops.list('ord_01')
- Open Delivery and go to Orders
- Click on an order to see its stops
deliveryStopGet
GET
typescript
const stop = await ss.delivery.stops.get('stop_01')
- Open Delivery and go to Orders
- Click on an order, then click a stop to view its details
deliveryStopUpdate
GET
typescript
const updated = await ss.delivery.stops.update('stop_01', {
notes: 'Ring doorbell',
})
- Open Delivery and go to Orders
- Click on an order, click a stop, edit the fields, then click Save
deliveryStopArrive
GET
typescript
await ss.delivery.stops.arrive('stop_01')
- Open Delivery and go to Orders
- Click on an order, click a stop, then click Arrive
deliveryStopComplete
GET
typescript
await ss.delivery.stops.complete('stop_01')
- Open Delivery and go to Orders
- Click on an order, click a stop, then click Complete
deliveryStopSkip
GET
typescript
await ss.delivery.stops.skip('stop_01')
- Open Delivery and go to Orders
- Click on an order, click a stop, then click Skip
deliveryStopDelete
GET
typescript
await ss.delivery.stops.delete('stop_01')
- Open Delivery and go to Orders
- Click on an order, click a stop, then click Delete