Add an unplanned stop
const url = 'https://example.com/rounds/019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f/sales';const options = { method: 'POST', headers: { cookie: '__Host-bottle.session_token=<__Host-bottle.session_token>', 'Content-Type': 'application/json' }, body: '{"customerId":"019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f","surchargeChoice":"usual","deliverToName":"example","deliverToAddress":"example","deliveryAddressId":"019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f","newDeliveryAddress":{"name":"example","line1":"example","line2":"example","city":"example","postcode":"example","notes":"example","leaveInstruction":"none","leaveDetail":"example","dropLatitude":1,"dropLongitude":1,"placeToken":"example"},"fulfilment":"delivery","pricingAudience":"consumer","paymentMethod":"cash","lines":[{"productId":"019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f","quantity":1}],"collect":[{"productId":"019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f","quantity":1}]}'};
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/019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f/sales \ --header 'Content-Type: application/json' \ --cookie __Host-bottle.session_token=<__Host-bottle.session_token> \ --data '{ "customerId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "surchargeChoice": "usual", "deliverToName": "example", "deliverToAddress": "example", "deliveryAddressId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "newDeliveryAddress": { "name": "example", "line1": "example", "line2": "example", "city": "example", "postcode": "example", "notes": "example", "leaveInstruction": "none", "leaveDetail": "example", "dropLatitude": 1, "dropLongitude": 1, "placeToken": "example" }, "fulfilment": "delivery", "pricingAudience": "consumer", "paymentMethod": "cash", "lines": [ { "productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "quantity": 1 } ], "collect": [ { "productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "quantity": 1 } ] }'Somebody flags the van down, a door wants more, or asks the driver to take cylinders away. Becomes an order and a stop on the end of this round. A collection-only stop has no sale or payment. Paying by link raises the invoice and makes the link straight away where the business can take card payments. Only on a round that is out. A driver may only do this on their own round.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”UUID v7
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8fUUID v7
Request Bodyrequired
Section titled “Request Bodyrequired”object
UUID v7
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8fUUID v7
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8fobject
Consumer: use consumer list prices. trade: use trade prices where set. Agreed rates, customer price lists and price rules still take priority.
object
UUID v7
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8fobject
UUID v7
Example
019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8fResponses
Section titled “Responses”The round with the new stop on the end
object
UUID v7
UUID v7
UUID v7
UUID v7
UUID v7
object
Use sentOverLimit.note.
object
object
object
object
object
object
UUID v7
UUID v7
UUID v7
Set on a stop that collects the round’s own stock from one of your yards: cylinders kept there rather than where the van loads. It has no order and no transfer; orderId carries the stop’s own id.
object
UUID v7
UUID v7
object
object
object
object
UUID v7
UUID v7
object
UUID v7
On_account: billed later, nothing to collect. link: a payment link raised in the accounting system. cash: the driver takes it at the door.
Bottle: Bottle owns invoicing and payment. shop: the connected shop owns both, so Bottle must only fulfil the order. elsewhere: the business invoiced or took payment outside Bottle, so Bottle only fulfils the order.
object
UUID v7
The same as driverNotes, for apps before 1.2.8. Never the customer record’s notes.
Name, address and postcode in one line.
object
UUID v7
UUID v7
object
UUID v7
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", "yardId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "status": "planned", "departsAt": "07:30", "fit": { "departsAt": "07:30", "backAt": "07:30", "shiftEnd": "07:30", "over": [ "weight" ] }, "deliveryWindowHours": 1, "stops": [ { "id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "orderId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "transferId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "transferLeg": "collection", "loadLocationId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "collectFrom": { "usualYardId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "locationId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f" }, "placement": "drop", "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" } ], "fulfilment": "delivery", "paymentMethod": "on_account", "billingOwner": "bottle", "leaveInstruction": "none", "shortfallReason": "not_on_vehicle", "issue": "wrong_product", "failureReason": "nobody_in", "customerContacts": [ { "id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "phone": "07700 900123", "kind": "normal", "relationship": "Accounts" } ], "summary": "3 × 19kg propane", "orderStatus": "placed" } ], "onVan": [ { "stopId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "yardId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f", "lines": [ { "productId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f" } ] } ]}Not signed in
object
Example
{ "error": "not_found", "message": "Customer not found"}Not a member, or without the permission this needs
object
Example
{ "error": "not_found", "message": "Customer not found"}Not found
object
Example
{ "error": "not_found", "message": "Customer not found"}The round has not left yet
object
Example
{ "error": "not_found", "message": "Customer not found"}Validation failed
object
object
Example
{ "error": "validation", "issues": [ { "path": "email", "message": "Invalid email" } ]}