FleetbaseFleetbase

Editing Orders

Change a placed Storefront order — its items, delivery address, contact, time and notes — re-price it, settle the difference and tell the customer and the driver.

Editing Orders

A placed order can still change: the customer calls to add an item, an item turns out to be unavailable, the address is wrong. Click Edit in the order panel (or the action on an alert) to open the edit form. Editing needs the storefront update order permission.

The form has five sections, each marked Changed once you touch it:

SectionWhat you can do
Delivery addressPick one of the customer's saved places or another address, or create a new one. Not shown for pickup orders.
CustomerChange the name, phone or email, either for this order only (a gift or another recipient; the profile stays as it is) or on the customer's profile, used for this and future orders.
ItemsChange quantities, remove a line (with Undo), or Add products with their variants and addons.
WhenAs soon as possible, or a scheduled date and time.
NotesThe order's notes.

As you change things the form prices the edit, shows the old and new totals, and says how the difference will be settled. Click Save changes to apply it or Discard to leave the order as it was.

What can change at each status

How far the order has gone decides what can still change. The form says which rule applies and blocks changes it doesn't allow:

StageOrder statusesWhat can change
Opencreated, pending, accepted, confirmed, preparingEverything. Item changes made while the order is preparing are flagged to the store.
Readyready, pickup_readyAddress, contact and notes. Items can only be removed or reduced, and the time can only move earlier.
With the driverAny status after readyAddress (the driver is rerouted and told), contact and notes. Items and time are locked.
Finishedcompleted, picked_up, canceled, expired, failedNothing.

An order needs at least one item; to remove everything, cancel the order instead.

Fleet-Ops applies the same stages to edits made through its own API and console — see Order Changes.

How the edit is priced

Only item and address changes re-price the order; contact, time and note changes keep its prices.

  • Items are priced the way checkout prices them, from the product's current price, variants and addons. Lines you didn't touch keep the price they were sold at.
  • Promotions are evaluated again on the new items, without counting this order's own use against the promotion's limits. A promotion that no longer applies is released.
  • A new address gets a new delivery quote from the store's delivery rates. When no rate covers the new address, the delivery fee stays as it was and the form warns you.
  • Percentage tips follow the new subtotal; fixed tips stay the same.

If a product on the order is no longer sold by the store, the edit is refused until that line is removed or replaced.

Settling the difference

When the new total differs from the old one, the form proposes how to settle it. Where there is a choice, pick it before saving:

SituationDefaultAlternative
Total goes down, paid by card through StripeRefund the difference to the cardStore credit
Total goes down, paid through QPayRefund only when the whole remaining payment goes back (QPay refunds whole payments); otherwise store credit—
Total goes down, any other online methodStore credit—
Total goes up, paid onlinePayment link: a Stripe Payment Link or a QPay invoice for the balance, sent to the customerDriver collects the balance in cash on delivery
Cash on delivery, not yet collectedUpdate cash to collect by the difference, up or down—

The money moves first. If the gateway refuses a refund or a link can't be created, the edit fails with the gateway's message and the order stays as it was. A link that the gateway can't issue leaves the balance due on the order, shown as an alert in the panel.

A balance paid through the link is recorded as paid by itself: QPay calls Storefront back when its invoice is paid, Stripe Payment Links are checked every five minutes (storefront:check-balance-payments), and Check payment on the order's alert checks right away. The payment is always confirmed with the gateway, the link is closed, and the customer gets the order_balance_paid receipt. A balance the driver collects is recorded as paid when the order is completed.

Every refund, credit, extra charge and cash change is recorded on the order and as a transaction; see Payment Status.

Telling the customer and the driver

Two checkboxes above Save changes decide who is told:

  • Tell customer name what changed sends the customer the order_updated notification: a summary of the change (for example Fries 1→2 · Drop-off changed to 12 King St) and what it means for their money — the refund, the store credit code to use next time, or the balance to pay with its link.
  • Tell the driver (shown when a driver is assigned) pushes the change to the driver's Navigator app when it concerns them: the route, items, schedule, notes or cash to collect. This needs Fleet-Ops v0.6.72.

Either way, the edit is broadcast as an order.changed event, which the Storefront app uses to show an Order updated notice and Navigator v3 uses to show This order changed. See Order Changes.

Prices that moved while you were editing

Saving sends the total the form showed. If prices or promotions changed between the preview and the save, the server refuses the edit with the new total instead of charging an amount you didn't see. Review the new total and save again.

What else an edit does

  • Items added or removed take or return stock for products that track it.
  • A new address closes an open wrong-address request.
  • The edit is recorded in the order's activity with who made it, what changed and the price difference.

Internal API

Custom merchant terminals can use the same endpoints as the console, authenticated as a Fleetbase user:

EndpointPurpose
POST /storefront/int/v1/orders/{id}/edit/previewPrice an edit without applying it: proposed totals, difference, settlement options, changes, the stage's locks, violations and warnings
PATCH /storefront/int/v1/orders/{id}/editApply the edit

Both take the same body; send only the parts that change:

{
  "items": [
    { "entity": "entity_8Kd2mQ1", "quantity": 2 },
    { "product": "product_4Hx9zL2", "quantity": 1, "variants": [], "addons": [], "note": "No onions" },
    { "product": "product_7Pq3wN5", "quantity": 1, "substitutes": "entity_2Lm8vR4" }
  ],
  "dropoff": { "place": "place_9Qs1tY6" },
  "contact": { "phone": "+15555550123", "scope": "order" },
  "scheduled_at": "2026-10-14T18:30:00Z",
  "notes": "Ring twice",
  "settlement": "store_credit",
  "notify_customer": true,
  "notify_driver": true,
  "confirm_total": 2650
}
  • items is the full list: existing lines by entity, new lines by product; lines left out are removed. substitutes names the line a new product replaces.
  • dropoff is a saved place (place) or address fields (street1, city, postal_code, location, …); add save_place_to_customer: true to keep a new address on the customer.
  • contact.scope is order (default) or profile.
  • settlement is one of refund, store_credit, payment_link, collect or cod_update; when it's left out or not offered for this order, the default from the table above is used.
  • confirm_total is optional. When it doesn't match the new total the edit is refused with 409 and the proposed totals.

Applying a change the order's stage doesn't allow is refused with 422 and violations per field; an edit that changes nothing is refused with 422 as well.

Editing Orders | Fleetbase