Search docs ⌘K
esc
Type to search across all documentation pages
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' },
})
  1. Open Delivery and go to Orders
  2. Click Create Order
  3. Fill in customer, pickup and dropoff details, then click Save

deliveryOrderList

GET
typescript
const orders = await ss.delivery.orders.list()
  1. Open Delivery and go to Orders
  2. Browse or filter the order list

deliveryOrderGet

GET
typescript
const order = await ss.delivery.orders.get('ord_01')
  1. Open Delivery and go to Orders
  2. 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',
})
  1. Open Delivery and go to Orders
  2. 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',
})
  1. Open Delivery and go to Orders
  2. Click on an order and use the Status dropdown to transition it

deliveryOrderEventList

GET
typescript
const events = await ss.delivery.orders.events('ord_01')
  1. Open Delivery and go to Orders
  2. Click on an order, then open the Events tab

deliveryOrderDelete

GET
typescript
await ss.delivery.orders.delete('ord_01')
  1. Open Delivery and go to Orders
  2. 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,
})
  1. Open Delivery and go to Orders
  2. Click on a delivered order, then open Proof of Delivery
  3. 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',
})
  1. Open Delivery and go to Orders
  2. Click an order, go to the Proof tab
  3. 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)
}
  1. Open Delivery and go to Orders
  2. 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')
  1. Open Delivery and go to Orders
  2. Click an order, go to the Proof tab
  3. The proof details and photo preview are displayed inline

deliveryOrderProofDelete

GET
typescript
await ss.delivery.orders.deleteProof('ord_01', 'dprf_01')
  1. Open Delivery and go to Orders
  2. Click an order, go to the Proof tab
  3. 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',
})
  1. Open Delivery and go to Orders
  2. Click on an order, then click Add Stop
  3. Fill in stop details and click Save

deliveryStopList

GET
typescript
const stops = await ss.delivery.stops.list('ord_01')
  1. Open Delivery and go to Orders
  2. Click on an order to see its stops

deliveryStopGet

GET
typescript
const stop = await ss.delivery.stops.get('stop_01')
  1. Open Delivery and go to Orders
  2. 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',
})
  1. Open Delivery and go to Orders
  2. Click on an order, click a stop, edit the fields, then click Save

deliveryStopArrive

GET
typescript
await ss.delivery.stops.arrive('stop_01')
  1. Open Delivery and go to Orders
  2. Click on an order, click a stop, then click Arrive

deliveryStopComplete

GET
typescript
await ss.delivery.stops.complete('stop_01')
  1. Open Delivery and go to Orders
  2. Click on an order, click a stop, then click Complete

deliveryStopSkip

GET
typescript
await ss.delivery.stops.skip('stop_01')
  1. Open Delivery and go to Orders
  2. Click on an order, click a stop, then click Skip

deliveryStopDelete

GET
typescript
await ss.delivery.stops.delete('stop_01')
  1. Open Delivery and go to Orders
  2. Click on an order, click a stop, then click Delete