Skip to content

Take cash at a door

POST
/rounds/{id}/stops/{stopId}/cash
curl --request POST \
--url https://example.com/rounds/019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f/stops/019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f/cash \
--header 'Content-Type: application/json' \
--cookie bottle.session_token=<bottle.session_token> \
--data '{ "amountPence": 1, "occurredAt": "2026-04-15T12:00:00Z" }'

Notes handed over, before or apart from the drop being written up. Replaces whatever was said about cash at this door before, so a correction is the same call; nought takes it back. Covering what is owed marks the order paid; less leaves the rest owed. Recorded against the driver until the office counts it in. Only on a round that is out, and a driver may only do this on their own round.

id
required

UUID v7

string format: uuid
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f

UUID v7

stopId
required

UUID v7

string format: uuid
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f

UUID v7

Media typeapplication/json
object
amountPence
required
integer
<= 1000000
occurredAt

When it happened, by the device’s clock. Left out, now.

string format: date-time
Examplegenerated
{
"amountPence": 1,
"occurredAt": "2026-04-15T12:00:00Z"
}

The round as it now stands

Media typeapplication/json
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
Allowed values: planned out done
issuedAt
required
string | null format: date-time
loadConfirmedAt
required
string | null format: date-time
van
required
object
latitude
required
number
>= -90 <= 90
longitude
required
number
>= -180 <= 180
seenAt
required
string format: date-time
distanceMetres
required
integer | null
durationSeconds
required
integer | null
departsAt
required
string | null
/^([01]\d|2[0-3]):[0-5]\d$/
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
/^([01]\d|2[0-3]):[0-5]\d$/
backAt
required
string | null
/^([01]\d|2[0-3]):[0-5]\d$/
shiftEnd
required
string | null
/^([01]\d|2[0-3]):[0-5]\d$/
over
required
Array<string>
Allowed values: weight volume hours doorsShut
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
> 0
latitude
required
number | null
longitude
required
number | null
pin
object
latitude
required
number
longitude
required
number
etaSeconds
required
integer | null
etaAt
required
string | null
/^([01]\d|2[0-3]):[0-5]\d$/
serviceSeconds
required
integer | null
waitSeconds
required
integer | null
outsideHours
required
boolean
proof
required
object
kind
required
string
Allowed values: signature left_safe
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
> 0
deliveredQuantity
required
integer
cancelledQuantity
required
integer
collect
required
Array<object>
object
productId
required

UUID v7

string format: uuid
productName
required
string
quantity
required
integer
> 0
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
Allowed values: on_account link cash
amountDuePence
required
integer
cashTakenPence
required
integer
paidAt
required
string | null format: date-time
leaveInstruction
required
string | null
Allowed values: none neighbour safe_place
leaveDetail
required
string | null
shortfallReason
required
string | null
Allowed values: not_on_vehicle damaged refused other
issue
required
string | null
Allowed values: wrong_product access complaint other
issueNote
required
string | null
completedAt
required
string | null format: date-time
failedAt
required
string | null format: date-time
failureReason
required
string | null
Allowed values: nobody_in no_access refused wrong_address nothing_to_leave other
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
Allowed values: placed delivered cancelled
version
required
string
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
Example
{
"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"
}
]
}

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"
}

Not found

Media typeapplication/json
object
error
required
string
message
required
string
Example
{
"error": "not_found",
"message": "Customer not found"
}

The round has not left yet

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
Allowed values: validation
message
required
string
issues
required
Array<object>
object
path
required
string
message
required
string
Example
{
"error": "validation",
"issues": [
{
"path": "email",
"message": "Invalid email"
}
]
}