Plan a whole day
POST
/rounds/plan-day
const url = 'https://example.com/rounds/plan-day';const options = { method: 'POST', headers: { cookie: 'bottle.session_token=<bottle.session_token>', 'Content-Type': 'application/json' }, body: '{"roundDate":"2026-04-15"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/rounds/plan-day \ --header 'Content-Type: application/json' \ --cookie bottle.session_token=<bottle.session_token> \ --data '{ "roundDate": "2026-04-15" }'Every driver with somewhere to start and no round yet that day gets one from their patch, in name order. Says how many orders nobody’s patch covered, and which drivers were passed over for having no start.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
roundDate
required
string format: date
Examplegenerated
{ "roundDate": "2026-04-15"}Responses
Section titled “Responses”Planned
Media typeapplication/json
object
rounds
required
Array<object>
object
id
required
UUID v7
string format: uuid
roundDate
required
string format: date
vehicleId
required
UUID v7
string | null format: uuid
vehicleName
required
string | null
driverUserId
required
string | null
driverName
required
string | null
startLocationId
required
UUID v7
string | null format: uuid
endLocationId
required
UUID v7
string | null format: uuid
status
required
string
issuedAt
required
string | null format: date-time
loadConfirmedAt
required
string | null format: date-time
van
required
object
latitude
required
number
longitude
required
number
seenAt
required
string format: date-time
distanceMetres
required
integer | null
durationSeconds
required
integer | null
departsAt
required
string | null
fit
required
object
loadKg
required
number | null
payloadKg
required
integer | null
loadLitres
required
integer | null
volumeLitres
required
integer | null
unweighedItems
required
integer
totalSeconds
required
integer | null
departsAt
required
string | null
backAt
required
string | null
shiftEnd
required
string | null
over
required
Array<string>
geometry
required
string | null
routedBy
required
string | null
notes
required
string | null
stops
required
Array<object>
object
id
required
UUID v7
string format: uuid
orderId
required
UUID v7
string format: uuid
sequence
required
integer
latitude
required
number | null
longitude
required
number | null
pin
object
latitude
required
number
longitude
required
number
etaSeconds
required
integer | null
etaAt
required
string | null
serviceSeconds
required
integer | null
waitSeconds
required
integer | null
outsideHours
required
boolean
proof
required
object
kind
required
string
signedBy
required
string | null
note
required
string | null
url
required
string
createdAt
required
string format: date-time
lines
required
Array<object>
object
orderLineId
required
UUID v7
string format: uuid
productId
required
UUID v7
string format: uuid
productName
required
string
quantity
required
integer
deliveredQuantity
required
integer
cancelledQuantity
required
integer
collect
required
Array<object>
object
productId
required
UUID v7
string format: uuid
productName
required
string
quantity
required
integer
paymentMethod
required
On_account: billed later, nothing to collect. link: a payment link raised in the accounting system. cash: the driver takes it at the door.
string
amountDuePence
required
integer
cashTakenPence
required
integer
paidAt
required
string | null format: date-time
leaveInstruction
required
string | null
leaveDetail
required
string | null
shortfallReason
required
string | null
issue
required
string | null
issueNote
required
string | null
completedAt
required
string | null format: date-time
failedAt
required
string | null format: date-time
failureReason
required
string | null
failureNote
required
string | null
customerName
required
string | null
deliverTo
required
Name, address and postcode in one line.
string | null
summary
required
string
orderStatus
required
string
version
required
string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
waiting
required
Array<object>
object
orderId
required
UUID v7
string format: uuid
customerName
required
string | null
reason
required
string
skipped
required
Array<string>
noVan
required
Array<string>
closed
required
string | null
Example
{ "rounds": [ { "id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "vehicleId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "startLocationId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "endLocationId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "status": "planned", "departsAt": "07:30", "fit": { "departsAt": "07:30", "backAt": "07:30", "shiftEnd": "07:30", "over": [ "weight" ] }, "stops": [ { "id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "orderId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "etaAt": "07:30", "proof": { "kind": "signature" }, "lines": [ { "orderLineId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "productName": "19kg propane" } ], "collect": [ { "productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "productName": "19kg propane" } ], "paymentMethod": "on_account", "leaveInstruction": "none", "shortfallReason": "not_on_vehicle", "issue": "wrong_product", "failureReason": "nobody_in", "summary": "3 × 19kg propane", "orderStatus": "placed" } ] } ], "waiting": [ { "orderId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "reason": "noPatch" } ]}Not signed in
Media typeapplication/json
object
error
required
string
message
required
string
Example
{ "error": "not_found", "message": "Customer not found"}Not a member, or without the permission this needs
Media typeapplication/json
object
error
required
string
message
required
string
Example
{ "error": "not_found", "message": "Customer not found"}Validation failed
Media typeapplication/json
object
error
required
string
message
required
string
issues
required
Array<object>
object
path
required
string
message
required
string
Example
{ "error": "validation", "issues": [ { "path": "email", "message": "Invalid email" } ]}