Skip to main content
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of August 24, 2026

Highlight

A workflow can call your own system. Workflows decide and then act — apply a dispatch strategy, tag the order, notify the team, hand a step to an agent. Every one of those actions lands inside Nash. But the next step in an operation usually isn’t: mark the order picked in the warehouse system, open a ticket, tell the ERP the delivery failed. That handoff has been yours to build — a webhook subscriber, a queue, a service to keep running — even when the decision that triggered it was already made in Nash.The Send HTTP request action makes the call from inside the workflow. It comes in two halves on purpose.
  • An administrator owns the connection. A connection holds the HTTPS origin, the credentials, which methods are allowed, the path prefix requests have to sit under, and the names of the request fields a workflow may set. Credentials are write-only: they never appear in a workflow’s definition, and they’re kept out of request logs and error reporting. So the person wiring up a workflow doesn’t need — and never sees — the secret.
  • A workflow author shapes the request. On the node you set a relative path, query parameters, headers, a JSON body, a timeout, and what the workflow does when the call fails. Templates work here like anywhere else, so the body can carry the order’s own values.
  • The branch after it reads the answer. Pull a value out of the response with a JSON Pointer and downstream filters see it alongside the HTTP status, how long the call took, and any failure detail — so the workflow can act on what your system actually said, not just on whether it answered.
  • Background and best-effort, deliberately. One attempt, carrying a stable idempotency key so your endpoint can recognize a repeat. It’s a signal your system can act on, not a durable queue, and it can’t hold up a synchronous run.
See Call your own system.

New & improved

Orchestration
  • Four triggers that fire against an order’s own windows: order_pickup_start_time, order_pickup_end_time, order_dropoff_start_time, and order_dropoff_end_time, each with a direction and an offset in minutes — “30 minutes before the dropoff window ends”. These are the triggers for the order that hasn’t moved: a pickup due shortly with no provider on it, a dropoff window closing on a store that hasn’t packed. Move the window and Nash re-arms against the new time. See Fire against a pickup or dropoff window.
  • One vocabulary for every message a workflow sends. Email, SMS, Slack, Teams, and voice-agent actions now read the same template catalog the notification triggers use — customer contact and address, pickup and dropoff ETAs, instructions, proof-of-delivery and tracking links, the assigned provider’s Slack destination, the customer feedback link. The catalog hydrates the destination and the subject as well as the body, so a Teams channel or an SMS recipient can be a variable instead of a hard-coded address, and the editor suggests only variables that could plausibly address the channel you’re filling in. See Writing text with variables.
  • Conditions on dates and times work as dates and times. Datetime fields carry their own operators, including relative windows and comparing one datetime field against another, and evaluation is time zone aware — conditions that had been quietly evaluating false now resolve. A dispatch strategy is a field you can branch on, and a variable with no value hydrates to empty text rather than the literal word None. See Comparing times.
  • Point a workflow at a custom event definition instead of typing its name. customEventDefinitionId is accepted on a workflow trigger, on the emit_custom_event action, and on POST /v1/order/{id}/events and its job equivalent — Nash stamps the definition’s key as the event name, so the catalog entry and the string the runtime matches on can’t drift apart. A definition something is still listening for can’t be archived, whether the listener is a workflow or a plain notification. See Match an event from your catalog.
Dispatch
  • Hold a delivery’s price at the fee you first accepted. A dispatch strategy can cap every later quote for the same work at the fee selected on the first assignment, across single deliveries, batches, and routes. A reassignment can come in cheaper and the ceiling stays where it was, so a delivery reassigned twice can’t ratchet its way up; a refused quote is recorded with its reason rather than disappearing. (Opt-in, per dispatch strategy.) See Cost controls.
Fleet
  • Keep your driver roster in step from your own system. PUT /v1/fleet/drivers/upsert creates or updates a driver keyed on your own externalIdentifier — no separate create and update to choose between, and a field you leave out keeps the value it had. The same call links vehicles, store locations, and driver groups, and provisions a driver-app login when you send an email address. Take a driver off the road by upserting isShiftActive: false. See Upsert Driver.
  • Drivers on routes see their pay. The delivery card in the driver app showed stops, distance, and duration but no pay for drivers on routes, which batch drivers had all along. The same figure is now on the REST job response as bonusPayCents, where webhooks already carried it.
  • A driver’s package list says which stop it belongs to. The routes package list carries a Stop 4 — <customer name> header, so a driver scanning a shelf knows whose order they’re holding.
  • Set the Start Route gate from the Portal. The number of minutes before the earliest pickup a driver can start a route is now editable under My Fleet and per driver group, rather than needing someone at Nash to set it. Leave it off and there’s no gate.
  • Set geofence auto-arrival distances per driver group. The pickup and dropoff arrival radiuses now sit under Fleet › Driver Group › Features › Geofence in plain meters, instead of arriving through a CSV an engineer had to upload. Leave one blank and it stays unconfigured.
  • Maps stop working when they aren’t on screen. The route map kept rendering and tracking location behind stop details, the item list, the scan view, and navigation — two maps alive at once in the worst case. Drivers reported hot phones and battery drain; the map now freezes when it isn’t visible.
Platform API
  • GET /v1/routes is in the API reference. List and search routes by date, status, driver, or free text, with pagination and a payload slim enough for a list view. See List Routes.
Integrations
  • Frayt requests are paced to the 60 requests per second Frayt allows, and a throttled response is handled as throttling rather than logged as a failure.
  • DoorDash receives the weighted price you set for it. A per-provider valueCentsPerMeasurementUnit on an inventory item’s provider configuration was being read from the base item instead, so DoorDash quoted the base rate for weighted goods.
Portal
  • Driver calls appear on the delivery timeline. A call a driver places from a stop — to the customer, the pickup, or support — is recorded as an event and shows on the delivery timeline, so a support conversation about “did anyone try to reach them” has an answer. Calls from the routes stop sheet were the ones going unrecorded.
  • Edit a job that’s been sent to a provider or manifested. Both statuses sit in the same pre-running family as the ones the Portal already let you edit, and the server never refused the edit — only the Portal did.
  • A dispatch-and-manifest activity row says which store and carrier it was for. The row used to read 61 orders and nothing else; it now leads with the store location and the provider, and the store filter reaches it.
  • Choose whether duplicating a job carries its dispatch strategy over. A new organization preference controls it; leave it alone and a duplicate inherits the source job’s strategy the way it always has.
Nash Agent
  • Send a scheduled report into a Microsoft Teams channel. Pick a connected team and channel as a report destination and Nash uploads the report’s files there and posts them as an attachment. Teams connections made before this need to be reconnected once, because their stored permission doesn’t cover uploading files.
  • Answers cite their sources. When Nash reads a web page to answer you, the message carries a Sources list of the URLs it used.

Fixes

Dispatch
  • A route’s job dispatches on the strategy its contract names. A route optimized onto a shift and pinned to that shift’s contract could still be won by a different provider, and a sibling batch that split into single deliveries could find no provider at all — leaving the orders stranded.
  • A dispatch-and-manifest batch that couldn’t manifest every order is reported as failed. One order failing out of sixty-one finished green, and the activity’s terminal status notified nobody — so a trigger watching for a failed manifest run had never fired.
  • Moving an order between routes doesn’t blank its route. Detaching an order from a route it had already left cleared the pointer to the route that actually owned it, leaving a dispatched order with no route on it.
  • An order that reports its own total volume keeps it. A package with no per-item dimensions fell back to Nash’s default box, so orders carrying an aggregate volume were measured as that default and failed contract size and weight eligibility.
Platform
  • An order that supplied its own pickup address keeps it. Re-validating an order without resending the address — on autodispatch, on a delivery-window booking, on a workflow revalidation — replaced the caller’s address block and coordinates with the store location’s own, so the job dispatched to the registered store address rather than the one the order named.
  • A manifest sent late can’t move a finished delivery backwards. Re-manifesting a batch after its shipments had been delivered rewrote them to Manifested, cleared the delivery description, and emitted a post-delivery manifested webhook.
  • Every delivery in a batch gets an ETA, even when one stop is mid-reassignment. A stop whose task had no delivery yet stopped the ETA refresh for the entire batch, so the Portal kept showing stale times for all of them.
  • Metadata containing double quotes is stored as you sent it. The REST path rewrote inner " to ' on jobMetadata, orderMetadata, packageMetadata, and several other JSON fields.
  • Metadata written to a package reaches its order. A key added to a package after dispatch stayed on the package.
  • Two not-dispatched reminders fire at their own times. An organization with a 60-minute and a 30-minute order not dispatched trigger had both fire at the 60-minute mark and nothing at 30.
  • A workflow filter accepts a fractional number. Comparing a weight or dimension field against a value like 226.8 was legal per the published schema but unrepresentable, so a workflow built through the API took the false branch every time and said nothing about it. Workflows built in the Portal were unaffected.
  • A shift template saved without a cadence generates daily. It was stored as daily and run hourly, which produced a duplicate shift every hour of every day.
  • Completing a return closes the route. A return marked complete from the Portal’s job page reopened the finished return stop and reopened the route with it, so the driver app never cleared the route and the Portal kept showing the return as pending.
Portal
  • Driver groups list for organizations whose internal fleet is run by a separate provider organization. Fleet › Driver Groups rendered empty for them, and a group created there vanished on save.
  • An organization preference can be zero. A numeric preference set to 0 rendered as an empty field, which matters where zero and unset mean different things.
  • A stop’s delay is measured in the right time zone. A stop that arrived 39 minutes early could read as more than two hours late, off by the viewer’s own UTC offset — and the late text is now legible in both light and dark themes.
  • The shift-template CSV preview accepts the columns the upload accepts. A valid file showed a wall of validation errors and then uploaded successfully, which is worse than either outcome on its own.
  • Expanding Package details doesn’t remount the page. The content region flashed its loading state and re-rendered, which read as the dashboard reloading.
Integrations
  • Couriers Please bookings produce their manifest. The manifest call was failing on a missing pickup time and swallowing the error, so it returned no documents and marked nothing manifested — a wrong answer rather than a visible failure. A booking with no pickup time is now refused outright.
  • Uber deliveries that end in a timeout after dropoff arrival, or in a merchant cancellation, are marked inactive. Three final-status branches settled the status without clearing the active flag, so the delivery read as still running.
  • CBD webhooks reach their delivery again. A change to the reference Nash sends on each stop broke both lookup keys at once, so status updates from CBD were dropped from 20 August until this fix.
  • A split Shopify cart is quoted once. Shopify prices a multi-location cart by asking per group and summing the answers, so a cart split three ways showed the customer three times the fee — and a free-delivery threshold was measured against one group rather than the whole cart, so carts over the threshold were charged.
  • A Shopify pickup order uses the buyer’s phone number. Pickup orders fell back to the store’s own number, so notifications went to the merchant instead of the customer.
  • DeliveryApp deliveries that end in a cancellation, failure, expiry, or return pick up their final pricing. The delayed pricing refresh only ran for completed dropoffs, so later fee changes on every other outcome were missed.
Fleet
  • The routes list refreshes after you unassign a delivery. The screen kept showing the route as assigned until something else refetched it.
  • A stop shows the order’s external ID when it has no reference ID. Stop details rendered neither, so an order identified only by its external ID showed nothing to identify it by.
Nash Agent
  • Elapsed times are computed against one clock. Two parts of the agent’s own instructions disagreed about which timestamp counted as “now”, so it could subtract a store-local time from a UTC clock and report an age off by the store’s offset — differently from one run to the next.
  • A scheduled watch serves a check that arrives mid-run. A wake landing while the watch’s first run was still working was recorded and never served, so the follow-up waited out the full interval instead of running when it was due; stale ones are now swept up rather than left sitting.
  • An agent named for the thing it does can finish its run. Guardrail keyword matching read an agent whose name contains a word like refund or cancel as taking a customer action and parked its own internal submission behind a confirmation nobody could answer, until the run ran out of time.
  • A question or confirmation card stays at the end of the turn it belongs to, with its explanation above it, and answers you’ve already submitted survive the card re-rendering.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of August 17, 2026

Highlight

Execute, for one store. Execute shows the routes that are on the road right now, which makes it the page a store manager most wants and has been least able to get. Access to it was organization-wide: to watch the routes leaving your own store, you needed a role that could see every route in the business, and most organizations reasonably decline to hand that out. So the person closest to the problem asked someone further away to look.Store-scoped access is now a role you can grant.
  • The page is the same page. A user scoped to a store location opens the Execute they’d see anywhere else — the queue, the filters, the date control, the route detail panel — narrowed to the routes that touch their store. The scope is applied on the server, including the counts in the header, so a link to a route outside it returns an error rather than a partly-filled screen.
  • Two permissions, granted from a role. execute.view opens the page and reads a route; execute.act changes one. An admin grants either from the Add role and Edit role drawers, and the rows appear once your organization has Execute turned on. What a scoped user can do is still their role’s decision, not a consequence of the scope.
  • Reassign the courier without escalating. A store operator with execute.act can move a route to a different courier from Execute. Vehicle assignment stays with unscoped users.
  • Record what actually happened. The route events an operator on the ground is the first to know about — a breakdown, an ad-hoc break, an overweight or oversize load, a refuel, a late departure, a customer not home, a catchment or break-compliance violation — can be logged by the person who saw them instead of relayed to an org admin.
See Who can open Execute.

New & improved

Platform API
  • POST /v1/inventory commits the rows it can. A row naming a product or store location Nash doesn’t have is skipped and returned in the same array with errorCode and errorMessage set, while the rest of the batch writes — so a per-store feed carrying one stale SKU updates the store instead of being rejected whole. Discriminate on errorCode being non-null, and match rows back by the externalProductId / externalStoreLocationId pair. See Store catalog.
  • A quoted or ID search in the Deliveries workspace reaches four more identifiers — the job, task, and delivery IDs, and the job’s short reference code — so pasting a reference someone sent you finds the delivery more often than it used to.
  • Event payload examples render again in the webhook event-type reference. delivery.*, task.*, and several other families had been showing an empty example box, which made a live schema look like a missing one.
Orchestration
  • A workflow action can link to the order’s packing slip. {{order.packing_slip_pdf_url}} interpolates the rendered PDF — the one a warehouse or partner kitchen can open and print — and {{order.packing_slip_zpl_url}} the raw label payload for a ZPL printer. Both resolve to nothing on an order with no slip.
Integrations
  • Uber dropoff notes can carry a standing marker. DROPOFF_INSTRUCTION_PREFIX sits ahead of the customer’s own instructions so it survives truncation when they run long, and NOTES_SEPARATOR controls what joins the segments — set it to an empty string when the note carries a token something downstream parses rather than prose a driver reads. (Opt-in, per provider configuration.)
  • Roadie can price a multi-component order as one parcel. A contract option collapses the components into a single manifest item with the package’s own dimensions, weight, and value, so an assembled gift is quoted on the box that ships rather than on each piece inside it. (Opt-in, per contract.)
  • Samsara route dispatch binds the vehicle as well as the driver, scoped to the shift window — so the truck arrives already assigned, and nothing outranks a pin an operator set in the Samsara dashboard outside that window.
  • Shipday deliveries pick up the assigned courier’s name, phone, and ID from routine refreshes, not only from webhooks. A courier Shipday assigned quietly now shows on the job.
  • CBD manifest stops carry your package’s external identifier as the source reference, so the stop is filed under the order number you’d quote when you call about it.
Portal
  • Driver notes on a route stop show in Execute. A note a driver added on a stop appears beside that stop in the route detail timeline, the same way the batch view already showed it.
  • Correct a dropoff address before dispatch. Edit Delivery gained Package, Pickup, and Dropoff tabs, and the dropoff address can be edited component by component when geocoding split a rural, PO Box, or otherwise ambiguous address the wrong way — which previously took an API call. Components lock once a task has a winning quote.
  • Driver and vehicle pickers on Execute open only for routes you’re running with your own fleet. A route with an external provider shows the assignment read-only, because it’s the provider’s to set, and a route with no provider chosen yet reads Assign provider.
  • Searching Deliveries costs one query instead of several. The box waits a full second before it searches, names what you can search by, and stops the 30-second background refresh while a search is on screen.
  • Cancelling a whole batch looks like what it is: a warning treatment, a button that reads Cancel batch, and a line stating how many remaining deliveries it covers. Single-delivery cancels are unchanged.
Nash Agent
  • In a Slack channel, Nash answers when you mention it — and only then. Follow-ups inside a thread Nash is already in need @Nash too. A thread that turns into a side conversation, or a message tagging a colleague, no longer wakes the agent. Direct messages are unchanged. See Talk to Nash in Slack.
  • Slack replies render as Slack’s own blocks. Tables stay tables, an entity Nash looked up comes back as a card, and a chart renders where the data supports one — each with a plain-text version behind it.
  • Preview a CSV without leaving the panel, and share where you are. The artifact panel renders a bounded table of a generated CSV, and the open artifact now lives in the URL, so a link you paste to a colleague reopens on the same file.
  • Attach a gzipped dataset. .gz files upload as data and mount in the code sandbox, instead of having to be pasted into the prompt.
Fleet
  • Hold Start Route until the pickup window is close. A new organization preference sets how many minutes before the earliest pickup a driver can start; until then the button shows a countdown and says when it opens. Drivers who get a route hours early no longer arrive before the store is ready for them. Leave it unset and nothing changes. (Opt-in.)
  • The barcode scanner reads inside the brackets. The scan camera draws a guide on the preview and accepts a barcode only when it sits inside — so a driver scanning one package on a full shelf doesn’t pick up its neighbor. Move a rejected barcode into the brackets and it registers immediately. Applies to every scan flow in the app.

Fixes

Dispatch
  • Every order on a route with a mid-route pickup is dispatched. When a route picked up twice, dropoffs belonging to the first pickup but sequenced after the second matched neither leg and were dropped — silently, with the dispatch reported as a success. Dropoffs are now assigned by which pickup’s manifest they belong to, and an order that can’t be placed fails the dispatch instead of disappearing from it.
  • A dispatched route reports the distance and duration it actually has. Routes created from a partner’s batch could show 0 mi / 0 min because the batch’s driving metrics were computed before the route existed to receive them.
  • An autodispatch that failed is reported as failed. The Orders page treated the returned job identifier as success, announced the order as dispatched, and linked to a delivery that was never created. It now reads the job’s activity, and shows the unsupported package requirements when that’s the reason.
  • Dispatch activity results say what went wrong. A failed dispatch lists the orders, routes, and deliveries involved with the reason for each, linked to the records, rather than reporting only that something failed.
  • Cancelling a batch dispatched through NashLink resolves the items on it and clears its return stop. The cancellation itself went through, so the mutation looked fine, while the items stayed pending.
Platform
  • A delivery keeps its ETAs through a pick milestone. PICKING_COMPLETE and PICK_COMPLETE weren’t counted among the running statuses, so the next status change cleared both the pickup and dropoff ETAs on an order whose items had just been picked. On a route, the two pre-departure milestones now read the pickup stop as arrived — consistently, whether the stop carries one order or several — and PICK_COMPLETE completes it. See The three pick milestones.
  • An order created from a job carries the package’s tags. Tags your integration set on the package — the ones naming the storefront an order came from — stopped at the package and never reached the order.
  • A shift-template upload keeps the hours in the file. A CSV row naming a service window uploaded cleanly and then produced a template on the default 6am–2pm window instead.
  • An item a merchant removes from a Shopify pickup fulfillment isn’t reported as prepared. Setting an item’s fulfillment quantity to 0 still marked the whole fulfillment order ready.
  • A refund request is filed against the delivery attempt that reached a provider. On a job that was reassigned, the request could land on a superseded attempt that never had one and fail — including when the identifier you passed names exactly one package on a multi-package job.
  • Creating an API key explains what’s wrong with the request. A key submitted with organizations selected but no feature groups returned only “an unknown error occurred”; the same applied to clearing every group on an existing key.
  • Opening an order or job that lives in another region shows the record. A detail read fans out across regions, and the expected “not mine” answer from a region that doesn’t own the record could overwrite the answer from the one that does.
  • Canadian organizations can set up a pre-authorized debit mandate for invoices again.
Integrations
  • Uber receives merchant-approved substitutes as a substitution. A preference value Uber’s payload spells differently than Nash does fell through to a default that asked the courier to phone the customer — on items where the merchant had already supplied the replacements.
  • Purolator shipments are dated from the pickup, not the dropoff. Purolator reads that field as the date the shipment is handed over and validates it against a ten-day window, so an order that waited overnight before dispatch was rejected with a date already in the past.
  • One oversized instruction or underweight carton no longer takes down a TGE manifest. TGE validates a manifest as a single document, so a single bad field rejected every shipment in it; per-item weights are floored and instructions are capped before they’re sent.
  • Australia Post manifest timestamps record when Australia Post created the manifest, rather than when Nash’s request landed.
Portal
  • A route you renamed shows the name you gave it. The route drawer and the move-stop dialog prefixed every label with “Route”, so WMT Delivery - Dock Door 5 displayed as Route WMT Delivery - Dock Door 5. Unnamed routes still fall back to the prefixed identifier.
  • Contract version history lists newer versions. Opening version 2 of a contract that has a version 3 showed only the versions before it, so a contract’s later revisions were unreachable from any but the newest one.
  • A delivery in a terminal status is locked wherever its status dropdown appears. The organization preference that locks terminal statuses was enforced on the Deliveries table but not on the route drawer’s stop timeline.
  • Shopify settings toggles announce the state they just applied, instead of reporting every change — on or off — as “disabled”.
Nash Agent
  • A session view survives a card status the browser doesn’t recognize. One unmapped status on a pending action took down the whole session view rather than the card.
  • A download chip comes back after a dropped connection. The chip was sent once and only once, so a viewer whose stream reconnected at the wrong moment lost the download permanently — with the file itself intact the whole time. It’s now replayed from the stored artifact.
  • A table whose values are all null reads as no data, rather than as a blank preview that looks broken. A real 0 is still shown as a 0.
  • You can send a message into your own session while it’s parked on your confirmation. Doing so returned a conflict, and the banner explaining it blamed a teammate — then disabled the Confirm and Cancel buttons that would have cleared it.
  • An intake started in Slack can be answered. Nash asked its questions, then closed the turn as done, leaving nothing to answer and no way to resume; the questions now appear in the thread with a link into the session, and answering them continues the run.
  • A Slack confirmation runs even when the card can’t be updated first. A failure updating the message to “Processing” stopped the confirmation itself from executing.
  • Slack turns that aren’t about a report don’t come with report tooling attached. Asking about a delivery could return an answer mentioning report template files, because the branded report kit was mounted on every turn that could run code.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of August 10, 2026

Highlight

A quieter Execute page. Execute is where a dispatcher spends the day — the list of routes that are out on the road right now, and the place you go when one of them stops behaving. It has picked up a lot of surface over the last year, and the feedback was consistent: for a team running twelve routes, the page shows the machinery of a team running twelve hundred. This week it got narrower rather than larger.
  • The day starts on today. Execute used to open on the whole month, which meant every visit began by narrowing to the day you actually care about. It now opens on today, matching Deliveries. The date control leads with Today, Yesterday, Tomorrow, and This week, each applying the moment you pick it, and Custom opens a calendar that doesn’t move the queue until you apply it. A link that carries its own dates, and a saved view, both still win.
  • Filters grouped the way a dispatcher decides. The filter panel used to have one catch-all Route bucket. It’s now split into route operations, assignment, and orders and locations, with package filters kept to genuinely package-level things. The question you’re asking — who’s carrying this, where is it going, what’s in it — now maps to a section.
  • Filter by driver group or courier. Two filters that were missing, on the panel, the queue, the downloads, and the URL. An operation that splits its day across driver groups can give each dispatcher a link that opens on their own routes.
  • The filter lists match the routes in front of you. Tags, city, state, business name, shift, and optimization strategy were drawn from a list built for the Plan page, which deliberately excludes orders on dispatched routes — the exact routes Execute lists. So the options and the table disagreed, which read as the filters being broken. They come from the routes on the page now.
  • See whether the driver is actually moving. Each assigned driver carries a location freshness reading under their name, in the table and in the route panel: live through 15 minutes, then shown as not live with its age, the same rule the delivery map already used. Select it and a small map opens at their last known position, so “where are they” doesn’t cost you a page change.
  • Turn off the parts you don’t use. The map view, the timeline view, and the KPI cards can each be switched off for the whole organization under Organization settings → Products → Execute. All three stay on unless you turn them off, and a link to a view you’ve disabled falls back to the table rather than failing.
See Watching routes on the Execute page.

New & improved

Orchestration
  • Ask a workflow whether a field is there at all. Is set and Is missing take no comparison value, so a condition can branch on presence — a metadata key your integration only sometimes sends, a tip nobody entered. Only null and genuinely absent values count as missing: 0, an empty string, and an empty list are all set, so a deliberate zero isn’t mistaken for a blank. Checking optional context the order doesn’t have yet resolves to missing rather than failing the step. See Branching on whether a field is there.
  • Five more fields to branch on, for the decisions that turn on a number rather than a status. Drive Time and Minutes Until Pickup on the order and its packages, Package Count and Total Package Value on the job (delivery), and Task Attempt Number for the case where a second failure should escalate rather than reassign again. The workflow editor reads the field catalog live, so they were there the moment the platform published them. See Fields worth branching on.
  • Hold an order’s price or tip inside a bound instead of overwriting it. Modify order price or tip gains At least and At most: a floor raises anything below it and leaves higher amounts alone, a cap does the reverse. Both are idempotent, so a workflow that runs twice doesn’t compound — which is what made the old pattern of pairing a filter with a set action awkward to get right.
Nash Agent
  • Choose which entity an alert-triggered agent actually works on. The event that starts a run and the entity the run follows are now set separately: a delivery, task, or job alert can run against the parent job, while a route alert runs against the route. An agent that rebooks a failed drop-off can therefore start from the delivery event and still see — and act on — the whole job on every later pass. If the chosen scope can’t be resolved from the payload, Nash refuses the run instead of starting the agent against the wrong thing. See What the run works on.
  • See which agents are watching, and what they last concluded. An agent that watches an order, route, or job now shows its latest assessment on that record’s detail view, with a link back to the run that produced it, and Routes on Execute can carry it as a column. Agent activity is kept out of the ordinary event timeline so it doesn’t crowd the operational history.
Portal
  • One page for how the Portal reads. Organization defaults, branding, and the Orders and Routes column labels you’ve overridden now sit together under Settings → Preferences, instead of being split across an organization preferences tab and a separate customization screen. Column labels gained a searchable editor, per-row reset, and a count of what you’ve changed. See Display preferences.
  • Customer and provider analytics live at one address. /analytics resolves the view from your organization type, with an explicit switch for organizations that are both. The old provider path redirects.
  • Stop timing reads in three rows at most. The dropoff window, then a single ETA slot — the planned ETA until the route is running, the live one while it is, back to planned once the driver has arrived — and the arrival time once there is one. Shared by the Execute route panel, the Deliveries drawer, and the Plan route panel.
  • Organizations billed in Great Britain can reach the Stripe customer portal from an empty billing state, which is where Direct Debit setup lives.
Dispatch
  • Split a batch when a provider cancels it — available to every organization now, not only on request. When a provider hands back a whole batch, Nash can break it into single deliveries and send those to a dispatch strategy you nominate, rather than hunting for one provider willing to take the batch again. Find it under advanced options on the dispatch strategy. See Failover and reassignment.

Fixes

Orchestration
  • A workflow no longer starts from an event that has gone stale. Workflow-backed notification triggers are now checked against the same ten-minute staleness guard the other notification paths use, so a geolocation event that arrives late can’t kick off a run — or send a message about a delivery that finished half an hour ago. The scheduler also claims the executions it picks up, rather than repeatedly selecting the same pending batch.
  • A notification trigger whose type Nash has no payload mapping for is skipped rather than raising, so it can no longer take down the whole batch of notifications queued behind it.
  • Stuck-status triggers fire when their timing parameters are explicitly null, instead of quietly doing nothing.
  • Delivery status filters using is one of and is not one of apply instead of erroring, so switching an existing condition to a multi-value operator no longer drops you on an error page.
  • Custom events reach the event timeline whatever the casing your system sends them in. Order Ready At Store and order_ready_at_store are now read as the same event — which also means an agent reading that timeline to decide whether a store has signalled ready gets the right answer.
Dispatch
  • An order whose autodispatch runs out of options is reported as a dispatch failure, including when every quote came in over the strategy’s maximum delivery fee. Previously the first delivery on a job could stay sitting in created with nothing to indicate it had stopped.
  • A route that dispatched successfully isn’t reported as failed afterwards. A second, fallback dispatch path could run after the route had already gone out and report its own inability to find a contract as the route’s outcome.
  • Dispatching a large wave of routes reports each route’s real outcome. The lock covering the wave was scoped to the whole batch rather than to a route, so a long batch could exhaust its own lease and report routes as failed that had in fact dispatched — with the customer notifications that follow never sent.
Fleet
  • A batch ETA no longer routes the courier back through stops they’ve already served. A dropoff that failed at the door and moved to return anchored the remaining-stop chain, pulling completed stops back into it, and every later dropoff ETA inherited that detour.
  • A pickup scan advances the stop it belongs to, and not every other delivery on the job. On a consolidated pickup that could be a hundred-odd deliveries, including orders belonging to other stops on the same route.
  • Courier check-in, check-out, and pickup-summary forms are chosen by the driver group the route was dispatched to, rather than by every group the assigned driver happens to belong to. Drivers who belong to several groups were seeing another group’s form.
  • A masked phone call connects without asking the caller for a code. The driver app already sends the extension as tones; the prompt asked for something nobody had to do.
  • Return-parking check-in timestamps are readable — returnParkingLocationUpdatedAt was written under a misspelled key and so was always null.
  • Revoking or expiring a delivery window works on routes containing a break stop, which previously returned an error.
  • Optimization keeps a vehicle type open-ended when it declares no end depot, even if another type in the same run does declare one. Before, one type’s end depot pulled every route in the run back to it.
  • Driver pay totals tolerate a stop with no delivery — an order canceled seconds into a dispatched route left the rest of the route’s stops unable to load in the driver app.
  • On the driver app: long item names wrap and row actions stay aligned on the routes package list; an order canceled mid-pick reads as failed rather than picked; and the stop sheet shows the action button where the driver can act — a pending dropoff whose pickup is done is workable, and a pending dropoff whose pickup isn’t says so.
Portal
  • The order details edit form shows delivery windows in your own timezone rather than UTC.
  • The public tracking page shows the dropoff ETA it has, instead of falling back to “Arriving soon” — the timestamp was arriving without a timezone marker and being read as local.
  • Duplicating a job keeps the saved pickup and dropoff store locations, instead of submitting them as free-form addresses and producing a package with no store attached.
  • The Add to Route drawer closes and confirms once the order is actually on the route, and says so plainly when the route has already been dispatched.
  • The timezone switch offers your browser’s timezone again, alongside the resolved organization or personal one.
  • The Portal home and welcome pages load rather than erroring on a render loop.
  • Flags with no payload no longer render an empty box on the Execute page.
  • The API key form won’t let you submit with organizations selected but no permissions, and explains why — a key with no permissions can’t be issued, and the attempt used to fail with an empty error message.
  • Organizations billed in Great Britain can add a payment method again; the setup request named a payment type the account can’t use directly, and Stripe rejected the whole request, leaving the dialog blank.
Integrations
  • Toast order updates no longer overwrite a tip that came from somewhere Toast can’t see. A gratuity booked as a service charge or typed into the Portal used to be replaced with $0 on the next update.
  • Uber quotes read package weight as the weight of the package, not of each item in it — an order declaring a 50 kg package and eight items was being quoted as 400 kg.
  • Purolator quotes work for orders whose items carry no dimensions, rather than failing and blocking dispatch.
  • AlShrouq deliveries track: status updates from polling and from the webhook now apply, and cancellations reach the provider.
  • Leajlak cancellations are recognized on both the webhook and the polling path, so a canceled delivery stops looking active and doesn’t fall through to reassignment.
  • A DoorDash contract scoped to a business reports a missing store mapping by name at request time, rather than passing the request on and returning the provider’s opaque rejection.
Nash Agent
  • Stop stops the work. Stopping a session in the Portal is now a server-side transition rather than the browser hanging up: pending actions and scheduled ticks are revoked, and late tool results, artifacts, and status writes are refused. A first turn can be canceled too.
  • A session that failed stays failed, on reload and in the sidebar, rather than reappearing as completed — and progress messages match the outcome they describe, instead of a step that failed keeping its success copy.
  • Mentioning Nash in an existing Slack thread starts a conversation. Slack delivers a mention twice, and the delivery that arrived first was claiming the message and then discarding it.
  • Nash replies to external Slack Connect users in shared channels, instead of failing the run before the agent started.
  • An assessment an agent produces is retried when the write is lost to a transient failure, so the assessment — and any workflow waiting on it — isn’t silently dropped.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of August 3, 2026

Highlight

Hand a step of a workflow to an agent. A workflow is good at the decisions you can write down in advance: if the order is over $200, use the white-glove strategy. The ones you can’t write down have always gone to a person — read the note the customer left and decide whether this needs a call, look at what the provider has done for the last forty minutes and judge whether the delivery is still recoverable. This week a workflow node can hand that step to one of your custom agents, and the rest of the graph branches on what it reports back.
  • The agent arrives knowing the case. It receives the entity the workflow fired on, the trigger’s metadata, and the output of every node upstream of it. So the task context you write is about the judgment you want, not about re-explaining the delivery.
  • Branch on the finding, not on the fact that it ran. The full written report lands in the node’s own variable, and each field of the agent’s output format gets a variable of its own, at its own type — so a downstream filter compares a number, tests a boolean, or matches an enum exactly the way it would with any other field.
  • What it’s allowed to do is settled before it runs. Only report-only agents can be picked, so a node can’t quietly take an action on your behalf. An agent node can’t sit on a workflow that runs synchronously while an order is being created, because the order would wait on it. And each node carries its own timeout and its own answer for what the workflow does when the agent fails.
  • Or run one against the delivery in front of you. The delivery details page has an agent picker. Run works the agent against that delivery and streams it into the panel beside the page; Ask opens a chat session with the delivery already in context, for when you turned up with your own question.
Find it as Run Custom Agent in the workflow editor, or invoke_agent on the API. See Hand a step to an agent.

New & improved

Nash Agent
  • Answer an agent’s question in your own words. Every closed-choice question on a guided intake card carries a free-text Other row, so a question whose options don’t fit no longer leaves dismissing the card as the only way out. An agent can still close a set where the options have to resolve to real records, such as a notification group or a trigger.
  • Tools you bring reach the agent as you declared them. A connector built on your own endpoint publishes its real parameter schema instead of the agent inferring the shape from a description: required parameters are enforced, values are coerced to the declared types, and a call that can’t be made comes back with the reason. See Connectors.
Orchestration
  • An optimization strategy can route around water. A ferry leg costs the solver no more than ordinary driving, so it will send a truck across a sound whenever that’s the fastest line — and the result looks feasible while being undeliverable, because sailings are fixed, need booking, and cap height and weight. avoidFerries keeps the solver on the road. Any coastal operation can meet this, not just the one that reported it.
  • A workflow can turn a condition it detects into durable work on the Execute page: create, update, resolve, assign, or unassign a route flag. Repeat runs land on the same flag rather than stacking duplicates, a flag that comes back reopens and pages the route’s assignee the way the first occurrence did, and a flag a dispatcher has already acknowledged is left alone unless you choose otherwise. See Actions.
Platform API
  • Look up an order by the reference your own system uses. GET /v1/orders?referenceId= matches exactly and ignores the default date window, so an order from six months ago is still findable. It returns every match: reference IDs aren’t unique in Nash, and collapsing them to one would hide orders. The field is on the list response now too.
  • A delivery’s statusHistory carries where each scan happened. Carriers that move a parcel through a scan network report a facility or suburb per scan; that arrives as location on the history entry and in delivery.* webhooks, next to the status and its description. It’s null for point-to-point couriers, which have no scan points. See Where a scan happened.
  • A quote rejected on package requirements says which requirement. Failed quotes carry an errorCode and an errorDetails object naming the requirements the provider wouldn’t take. When every eligible provider rejects the package, the delivery carries a quoteFailure summary and a normalized failureCode, and dispatching it returns a 422 instead of a generic failure. See Order requirements.
  • Pick-and-pack orders can ask the shopper to call. contact joins refund and substitute as a substitution preference: rather than Nash deciding for the customer when an item isn’t on the shelf, the shopper reaches them and agrees a replacement. Support depends on the pick-and-pack provider. See Pick and pack.
  • The dispatched webhook can be replayed for a route dispatch, not only for delivery-window and optimized-order dispatch. A customer who missed that message can be resent it from the Portal rather than by hand.
Fleet
  • Let drivers skip item marking. (Opt-in.) For operations where ticking off each item isn’t part of the job, the stop sheet hides the package list and shows a read-only item count instead; the driver takes proof of delivery and completes the stop, and Nash resolves the items behind it. A dropoff still can’t deliver an item that was never picked up. Turn it on in My Fleet → Features → Delivery & Returns, with a per-driver-group override.
  • Route offers reach the routes driver app. Drivers see the same offer card, countdown, and accept / decline / expire behavior the batch app has, so an operation that assigns work by offer can move onto routes.
Portal
  • Arabic, and a portal that reads right to left. Arabic joins the portal languages, selectable as your organization’s default or as your own display preference, and layout, navigation, controls, charts, and drag-and-drop follow the direction of the language rather than staying pinned left to right.
  • Name your own columns. Orders and Routes column labels can be overridden per organization from Portal Customization, so a team dispatching technicians isn’t reading “Pickup Location” and “Order Value”. The labels you set show to everyone in the organization, in every language.
  • Define the custom events your organization uses. (Opt-in.) A catalog under Orchestrate holds each event’s key and name, and the delivery Add Event dialog offers the active ones while still accepting a free-form event. Keys can be dotted now — order.ready, store.order.packed — so the catalog can describe the vocabulary your integrations already send.
  • The Deliveries table shows package weight beneath value and item count, and in the package tooltip.
  • The Orders table gains a Dropoff Zip column you can sort on, for operations that group a day’s work by postal code.
  • A refund larger than the original order value is flagged where it’s decided and in refund history. The warning doesn’t block the refund; the insurance cap still does its own job.
Integrations
  • A Grubhub contract can carry the sub-brand name Nash sends, instead of it being derived from the seller ID on each order.

Fixes

Platform API
  • A request comfortably inside your rate limit is no longer rejected as though it were over it. Counting requests is now a single atomic operation, so a counter that expired mid-count can’t be left in a state that turns away the next caller.
  • Notifications that depend on a zone geofence are evaluated without backing up everything queued behind them, so alerts land when they’re supposed to.
Fleet
  • Item actions on the same route are applied one at a time, so two updates that arrive together can’t overwrite each other’s item states.
  • An item action that fails on several items reports every failure, not only the first one.
  • A failed stop gives the reason its own status carries, rather than always reporting the stop as unattempted.
  • Proof-of-delivery photo checks read unpackaged store goods as delivered items, and treat a house number or a courier in frame as supporting evidence rather than a requirement. A photo that plainly shows the delivery on a doorstep passes instead of being flagged.
Integrations
  • Shopify pickup orders carry the tags you configured, the same as the rest of your orders.
Nash Agent
  • An artifact Slack refuses is reported instead of vanishing, and a file an agent uploads to Slack from outside a chat session arrives.
  • A run notification’s body is cut on a markdown boundary, so a truncated message doesn’t end mid-formatting.
  • A provider failure is recorded as a failed run and retried, rather than recorded as a run that succeeded and returned nothing.
  • A chat turn survives a worker being recycled instead of being killed mid-answer.
  • A watch tick is never scheduled in the past, and a tick that fails is retried and reported.
  • In Slack, the right task chip resolves when an agent makes several tool calls at once, and a run’s message links back to its session.
Portal
  • The Execute route panel keeps the data it did receive when part of a response fails, instead of showing a skeleton that never resolves.
  • The delivery map draws the dropoff_complete marker.
  • Tracking customization saves instead of silently refusing when an earlier preference is stale.
  • On the tracking map, the store pin stays visible behind other markers, past ETAs stop being shown as if they were still ahead, and the map stops polling while it’s in a background tab.
  • An agent session opened from a link after it ended shows its transcript and its files rather than an empty page.
  • Switching organizations queries the region that organization actually lives in.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of July 27, 2026

Highlight

Your units follow you. Organization-wide display defaults landed earlier this month: one language, one timezone, one set of formats and units for everybody. This week, each person can override those defaults for themselves. Teammates in different timezones can open the same delivery in the format they use without changing what anyone else sees.
  • An Account page of your own. Every signed-in role now has Account in the avatar menu. It holds your profile details, which you can edit yourself, and your own display preferences. It’s separate from organization settings, and you don’t need permission on those to reach it.
  • Eight preferences, each independent. Language, timezone, date format, time format, currency, and your weight, distance, and dimension units. Override the ones you care about and inherit the rest, so you can keep your organization’s currency and still use your own clock.
  • Defaults that stay defaults. Organization settings now read Organization Defaults, because that’s what they’ve become. Change one and everyone inheriting it moves with you; anyone who set their own keeps it.
  • Nothing quietly misread. A value Nash can’t use, such as an unsupported currency or a timezone the browser doesn’t know, falls through to the next layer instead of being applied, so a bad organization default can’t propagate to everyone. If you switch your weight or dimension unit while an order form is open, the numbers already typed are converted rather than reinterpreted: 10 kg becomes 22.05 lb, not 10 lb.
Find it under your avatar, in Account. See Display preferences.

New & improved

Nash Agent
  • Reports an agent produces come back as branded PDFs with your logo and colors, consistent typography, and a real chart vocabulary for trends, rankings, comparisons, and shares, rather than whatever the model improvised that run. It applies to reports asked for in chat as well as scheduled runs.
  • Ask for a revision and you get a version, not a second file. Artifacts built across turns of one session under the same filename are grouped as one deliverable with a v2/3 chip, and selecting one opens a side panel that previews it inline instead of downloading it.
  • Notify only when the result is worth reading. A succeeded run’s notification can be gated on the agent’s own structured output: is_fraud came back true, status is one of the values you list, confidence is at or above 0.8. Number fields take comparisons, not just membership. See Notify only when the result is worth reading.
  • Try an event-triggered agent on part of your live traffic. Run it on a percentage of matching events, stop it after a fixed number of runs, or both. This gives you a setting between off and full production. See Try an event trigger on part of your traffic.
  • Long chat sessions have a timeline rail: hover to scrub through turns and preview them, select one to jump.
Orchestration
  • A dispatch strategy you choose by hand stays chosen. Nash now records whether an order’s strategy came from you or from your automations, so an unrelated edit, such as a time-window change or a save followed by a dispatch, no longer re-runs the rules and replaces your pick. An automation-managed order shows Via Workflow in the picker instead of a strategy that isn’t actually pinned to it. See When you pick a strategy yourself.
  • Dropoff ETA estimates skip days the origin is closed, so a Saturday pickup from a site that’s shut for the weekend is measured from Monday instead of landing two days early. Closed weekdays and specific dates such as holidays both count. (Opt-in.)
  • Shift-based route optimization can be anchored to the shift itself: start a set number of minutes before pickup and re-optimize on an interval, rather than re-running on every scheduler tick. (Opt-in.)
  • Orders created from an ingested email resolve their pickup to your saved store location.
Platform API
  • Test a saved workflow before you activate it. POST /v1/workflows/{id}/test evaluates it against a real job or order and reports per-node status, so you can confirm which filters matched without turning the workflow on. Actions preview by default. See Test a workflow before you activate it.
  • Items you send without an id get one. Nash generates a stable identifier for any item or sub-item that arrives without one, so a courier can mark it picked, delivered, or returned. Previously, item-level actions skipped those items entirely.
  • The per-package weight ceiling is now 50,000 kg, up from 3,000. Freight-weight orders are accepted instead of failing validation and quietly becoming ineligible.
  • A route stop’s serviceTime, distanceFromPrevious, and durationFromPrevious are typed as integers rather than decimals. The values were always whole seconds and meters, and now the schema says so.
Fleet
  • The driver pay report moved in-product and gained a fee breakdown: wait fees, tolls, and return fees as their own columns, a column picker, and an itemized mode that lists each route and delivery instead of aggregating per courier. Totals are computed server-side, and the CSV export matches what you see.
  • Route names appear as a column in the Execute queue, so a renamed route is identifiable without opening it.
  • Set a route’s status by hand from the Execute route drawer, the same way you already can from the delivery drawer.
  • Edit a vehicle’s capabilities and tags in place from the Vehicles list alongside the existing bulk editing. Hover the cell and pick from your organization’s vocabulary. A marker shows when a vehicle overrides its type’s presets.
  • Create a driver without an email address. Supplied addresses are still validated.
  • Provider and customer-provider organizations get merchant and fee columns on their route views.
Portal
  • The optimization flow has a new interface across engine selection, settings, dispatch confirmation, order information, and results, including its scheduled and in-progress states.
Integrations
  • Roadie deliveries report that no driver is assigned yet from the moment they’re created, rather than after the first status poll.
  • Senpex’s scheduled-delivery status maps to “no driver assigned” instead of being misread.
  • Returns from a third-party delivery channel carry their reason through to Nash.
  • Just Eat pickup-phase statuses are polled until they settle, so a pickup update that never arrives by webhook still lands.
  • Australia Post tracking requests are split into batches of the size Australia Post accepts, so a large tracking pull completes instead of being rejected.
  • Otter and Flipdish orders resolve their pickup to your saved store location.
  • Medzoomer deliveries carry their batch identifier, and a Medzoomer pickup-arrived update is reflected on the delivery.
  • Shopify fulfillments are created for orders that move between fulfillment orders and for orders that carry no line items.

Fixes

Orchestration
  • A pinned contract is quoted only by the provider that owns it, so a shift route auto-dispatches to its own driver group rather than to whichever provider happened to quote.
  • An automatic re-offer leaves a delivery a driver has already accepted or started alone, so the same delivery can’t go live on two drivers’ apps at once.
  • Splitting a job recomputes the driving metrics on the batch that remains.
Fleet
  • Retrying an item action that already succeeded reports success instead of an error, so a driver app draining its offline queue after a dropped connection doesn’t stall on work it already did. This covers picking, delivering, and returning an item.
  • Failing an ID check on a stop that mixes age-restricted and ordinary items fails the whole stop when partial delivery is turned off, rather than delivering the rest of it.
  • The already-scanned message in the routes scan flow names the stop the barcode belongs to.
  • The driver app reads your branding and unit preferences correctly when one of those fields is left unset.
Nash Agent
  • A run’s notification email arrives even when a generated attachment can’t be sent. The attachment is dropped; the message isn’t.
  • A date given without a year is read against the run’s own date instead of being guessed.
  • Long pasted context is accepted in chat.
  • A report asked for in chat comes back branded, and a report the agent revises while answering produces one file rather than two.
  • A PDF report sent to Slack arrives instead of timing out.
Portal
  • Report Incident rejects a note that’s only whitespace instead of accepting an empty one.
  • The Orders filter panel opens and closes reliably.
  • PDFs render in the artifact viewer.
  • The Execute triage queue keeps the rows it did receive when part of a response fails, instead of emptying.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of July 20, 2026

Highlight

Decide what happens to an order that arrives after you close. Every operation has a version of this problem. An order lands at 11pm for a store that opens at 8am, or a provider drops a delivery on a Sunday when nobody is there to catch it. Until now the answer was the same for everyone: dispatch it and sort it out later. This week you get to choose — and the choice for a brand-new order doesn’t have to match the choice for a delivery that just lost its driver.
  • Say when you’re open, once. Set a default opening time, closing time, and pickup cutoff, then add overrides only for the days that differ. A shop that’s open 9–5 with late Thursdays and closed Sundays needs one default and two exceptions — not seven rows to keep in sync.
  • Two decisions, not one. Initial dispatch can allow an out-of-hours order through or reschedule it to the next open day. Reassignment gets a third option: prevent it, so a delivery that needs a new provider at 2am stops and waits for a person instead of quietly going out. Both default to allow, so nothing changes until you change it.
  • Keep your on-time numbers honest. When an order reschedules to the next open day, you decide whether its on-time baseline moves with it or stays pinned to what you originally promised. Either answer is defensible; the point is that it’s yours, and it’s explicit.
Find it in Organization settings → Operations. See Dispatching outside your operating hours.

New & improved

Orchestration
  • Run a workflow across the orders you’ve selected. Pick them on the Orders page, choose Run Workflow, and Nash starts one run per order with a result you can open individually. See Running a workflow by hand.
  • A workflow that’s switched off can still be run by hand. inactive now means “doesn’t fire on its own” rather than “can’t run at all” — useful for testing a change before you turn it back on.
Platform API
  • Orders can declare their units. Send weightUnit as lbs or lengthUnit as in and Nash converts to the kilograms and centimeters it stores, rather than rejecting the order or taking the number at face value. An unrecognized unit comes back as a clear error instead of a surprise. See Order validations.
  • Strings containing quotes, backslashes, or JSON survive a REST request intact instead of arriving double-escaped.
Fleet
  • Give a route a name a dispatcher recognizes. Rename it from the Execute page — including after it’s dispatched — or name a route as you split stops into it, and that name leads on printed handoffs and in the Portal. See Naming a route.
  • Filter Execute routes by the provider assigned to them, or by having no provider assigned yet.
  • Route orders on the Execute page carry their package reference fields, so a dispatcher can match a physical parcel to a stop without opening it.
Nash Agent
  • Ask about products and inventory in chat and the answer comes back as a browsable widget — a product carousel with images rather than a list of SKUs.
  • Agents can embed proof-of-delivery photos in the files they produce, so a PDF an agent writes up carries the photo evidence inline. New agents have it on; existing agents keep their current setting, and it’s a per-agent toggle in the agent’s tool settings.
Portal
  • Dates, times, durations, numbers, weights, and prices follow your organization’s preferences across the Portal, so a kilogram org and a pound org each see their own units in the same table.
  • Creating a child organization asks for its country up front, which is what routes its billing correctly from the start.
  • Order and route activity, and webhook replay, are gated on permissions, so read-only roles can look without being able to re-fire anything.

Fixes

Orchestration
  • A delivery whose reassignment fails raises the Tasks Attempts Exhausted notification trigger instead of going quiet, so the delivery that needs a person gets one.
  • Australian PO Box addresses resolve to the right city rather than failing to parse.
  • Shifts no longer offer optimization strategies that were deleted.
  • A workflow’s version history is listed in version order.
Fleet
  • Routes report their travel metrics — distance and duration — including per-package driving metrics on batch dispatch.
Portal
  • The Report Incident drawer opens instead of crashing the page.
  • Date-range presets stay relative when you switch between saved views, so “last 7 days” still means last 7 days tomorrow. Picking one end of a range no longer briefly reads “Invalid Date”.
  • Automation conditions show your organization’s currency rather than always a dollar sign.
  • Map pin tooltips name the business at the stop, not the customer’s account.
  • Wix stores get their own onboarding steps.
Integrations
  • Uber pick manifests accept items with no substitutes listed.
  • Quotes from ANC and Team Global Express stay valid longer, so a quote picked later in a planning cycle is still good when you dispatch it.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of July 13, 2026

Highlight

Tracking that works before there’s a courier. The tracking link is the first thing a customer looks for after they order. Until this week, following one before the order dispatched got them an error page — the link was live, but there was no delivery behind it yet, so there was nothing to show. Now the same URL covers the whole journey, starting the moment you take the order.
  • One URL, two phases. While the order waits for a provider, Nash serves an order-received screen with your branding. As soon as the delivery is created, the same link becomes the live-tracking view — nothing to swap out in your confirmation emails, texts, or order pages.
  • Say what you want in the gap. Add up to 280 characters of your own copy to that screen — what happens next, when to expect an update, who to contact. Leave it blank and customers see the standard order-received message.
  • Check both states before you publish. Tracking customization has a before-dispatch / delivery switcher, so you can see each phase exactly as a customer will.
Turn it on in Customization → Tracking. It’s off until you do, and links behave exactly as they do today until then. See Tracking before dispatch.

New & improved

Nash Agent
  • Give an agent’s notifications their own title. It becomes the email subject and the opening line in Slack and text, and takes the same {{variable}} placeholders as the body — so Late deliveries — {{status}} reads usefully in an inbox without anyone opening it. See Notifications.
  • Turn a single action off for one agent. Alongside auto and confirm-first, an action can now be disabled outright — the agent can’t take it and there’s no card to approve. See Guardrails.
  • Keep an interval schedule inside working hours. An agent that runs every hour can be bounded to a start and end hour instead of running around the clock. See Set up a schedule.
  • Put an agent in your own product. A custom agent’s new Embed tab generates a snippet that drops a chat widget into your web app — a tracking page, an order-status page — so customers can ask about their delivery without contacting anyone. Embedded conversations are read-only no matter how the agent is configured, and each one starts from a token your own backend mints. See Embedded chat.
  • Agent answers that are really reports now render as report blocks — headline figures, tables, and charts laid out as cards rather than a wall of text.
  • A chat session shows which agent produced it, so a session you come back to a week later identifies itself.
Platform API
  • Webhook consumers can stop retries for one message or disable an endpoint directly from their webhook response. See Webhooks for the response header and behavior.
  • Public tracking URLs accept an order ID, not just a job or package ID — the addressing behind tracking before dispatch.
  • A product can carry different images per provider. Set imageUrls inside a product’s providerConfigs entry and a provider that shows your catalog to shoppers uses the image you picked for it. See Create or update products.
Portal
  • Choose which metadata fields show on a delivery’s page. An admin picks the keys worth surfacing and labels them, and they render as chips at the top of the job — the same control routes already had. Fields holding JSON are unwrapped and readable rather than printed as an escaped string.
  • The Automations screen shows the default dispatch and optimization strategy on the main view, so you can see what an unmatched order falls back to without opening a rule.
  • Merchant refunds can be filtered by date range and by provider.
  • Delivery and order pages lead with your own references rather than Nash’s internal ID tags.
Fleet
  • Route and order drawers on the Execute page show a real activity timeline — what happened, when, and who did it.
  • The Execute routes table has a wider filter set, and custom events you emit now appear in the route Activities view. The Exceptions filter group starts collapsed so the panel opens on the filters most dispatchers reach for first.
  • In the driver app, stop details show the delivery window; pull-to-refresh works on the stop list, stop details, and items list; and a driver correcting a crate count is no longer forced to pick a reason.
  • Drivers can adjust item quantities while offline — the changes queue per stop and sync when the device is back on a signal.
Integrations
  • Australia Post consignments record every scan on the delivery timeline instead of only the most recent one, so the tracking history matches what the carrier actually reported. Weights are sent at gram precision.
  • Autolane receives the customer’s name and email on quote and delivery-create calls.

Fixes

Nash Agent
  • A scheduled agent runs at the local time you picked. A 5am schedule in your time zone fires at 5am local, holds through daylight-saving changes, and catches up safely after an interruption rather than being skipped.
  • A dropped connection to a tool server no longer ends a chat run mid-answer.
  • Chatting with a custom agent holds its execution mode and session for the whole conversation, and an agent whose time zone was never set says so instead of showing a blank.
Orchestration
  • Updating an order with an explicit dispatch strategy honors that strategy, and swapping it re-quotes against the new one instead of keeping the earlier quotes.
  • Recipients on a multi-stop route get the notification for their own delivery, once — not a neighbor’s, and not twice.
  • Toast store prep times are read as minutes, so pickup times are no longer set days out.
  • GoShare deliveries hold their status instead of flipping back to a pre-pickup state when a poll and a webhook disagree.
Fleet
  • A failed or missing dropoff leaves the remaining item quantities alone instead of resetting them.
  • A completed pickup stays completed when a sibling delivery on the same route fails and starts a return.
  • Signatures a driver captures at a stop reach the delivery record as proof.
  • Australia Post consignments no longer log a second “manifested” entry when the carrier echoes a location-only update, and pickups are booked against the local despatch date.
Portal
  • Clearing a time window saves as cleared instead of silently keeping the old value.
  • Selecting a tracking status while configuring a notification trigger no longer freezes the page.
  • Switching organizations mid-load lands in the organization you picked.
  • Links between deliveries carry the right delivery’s context, so following one from a job opens that job and not the one you came from.
  • Routes fall back to the customer’s name when a delivery has no business name, and a drawer’s close button no longer sits on top of the Dispatch action.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of July 6, 2026

Highlight

See why an agent run failed — and fix it on the spot. When you hand work to an automated agent, the worst thing it can report back is nothing. A run that ends in a bare “failed” leaves you guessing whether a provider timed out for a moment or the agent was pointed at the wrong thing. This week, Nash Agent tells you what happened.
  • A plain-language reason on every failed run. A failed run now shows what went wrong, in plain language, along with a suggested fix — in the run history and when you hover a failed run. It applies to past failures too, so a run that failed last week explains itself now. That’s usually enough to tell a transient hiccup from a misconfigured trigger at a glance.
  • Re-run on demand. A Run now button in the agent’s header starts a fresh run immediately. Fix the setup, run it again, and confirm the agent is healthy without waiting for its next scheduled run.
Read more in Scheduling and execution.

New & improved

Nash Agent
  • Run history separates an agent’s automated runs from your chat sessions with it, so its run count, activity sparkline, and status badges reflect the work it did on its own.
  • Reorder the fields in a custom agent’s structured output by dragging them into the order you want.
  • Set up a results destination — email or Slack — without leaving the agent editor, see the exact recipients each destination resolves to, and open a finished agent straight from its confirmation card.
  • Nash Agent chat answers are formatted for easier reading, and entity references render as clickable chips instead of plain text.
Platform API
  • Set a zone’s geographic boundary through the API: Create a zone (POST /v1/zones) and Update a zone (PATCH /v1/zones/{id}) now accept a polygon field. See Zones.
  • Nash now supports Spain as a delivery country, with euro pricing and local address handling.
Integrations
  • Australia Post senders that print their own labels can skip Nash label creation, so merchant-allocated shipments manifest without a duplicate-label error. (Opt-in.)
Portal
  • The My Fleet settings page is redesigned with search, a category sidebar, and grouped setting cards, so a long list of fleet settings is faster to navigate.
  • The Activities view recognizes dispatch-and-manifest runs and opens a results drawer with per-order status and the manifest PDFs.
Fleet
  • The Execute route table shows each route’s current stop status — for example, “drop-off en route” — and new Route Status and Stop Status filters narrow the table to what you’re looking for. (The route label “In Transit” is now “In Progress.”)
  • Download the routes you’re viewing on the Execute page as a CSV.
  • Notes a driver adds to a stop now appear in the Portal, in the route’s stop list and the driver details card.
  • Select routes on the Orders → Routes tab to dispatch, archive, optimize, or create them in bulk.
  • On pickup and return runs, the driver app can show per-item counts — picked against ordered, with failed items kept out of the completion total — and mark an item “package not found” so the stop resolves as missing without creating a return. (Opt-in.)

Fixes

Nash Agent
  • Scheduled report agents that do heavy, high-volume work no longer time out before they finish, and a report that used to arrive blank now carries the agent’s findings — with the notification showing the agent’s complete written report, tables included, rather than a one-line summary.
  • A webhook-triggered agent runs when its event fires, and the raw webhook payload — including Zapier’s format — is passed into the agent’s prompt.
  • Turning an agent off reliably stops it, including agents started by an alert, a webhook, or a file upload.
  • Creating an agent by describing it now keeps an email recipient you name in the same request instead of dropping it.
  • Nash Agent chat no longer repeats a mid-run follow-up, and rich text you paste keeps its formatting.
  • When saving a custom agent fails, the message explains why — for example, that an event-triggered agent needs at least one trigger.
  • When the Nash Agent voice agent handles a call about an order that was automatically reassigned to a new provider, it works from the live delivery attempt — so the status it reports and the reschedule it makes are for the active delivery, not a superseded one.
Integrations
  • Purolator shipments with longer drop-off instructions are no longer rejected.
  • FULFLLD deliveries show a live, updating drop-off ETA instead of a frozen one.
  • Addison Lee accepts scheduled orders whose pickup is near-term instead of rejecting them.
  • Medzoomer proof-of-delivery photos now appear on the delivery.
  • GoShare deliveries move to en route when the driver sets off, not only once they reach the pickup.
Orchestration
  • Deliveries to UK, Canadian, and Dutch postcodes entered without a space are no longer wrongly rejected as out of area.
  • Stale, unaccepted driver offers expire and re-dispatch instead of leaving a delivery stuck without a driver.
  • Merchants reliably receive the sent-to-provider and manifested webhooks on large batched dispatches.
Fleet
  • The live-tracking map keeps following the driver after a batch stop is completed, instead of freezing at the first drop.
  • The delivery timeline no longer shows each barcode scan twice.
  • Editing a driver group — adding or removing drivers — no longer silently reverts your first change.
  • Completed and canceled routes no longer offer a provider-reassign action that always failed.
  • A route that ends with every stop failed or returned now shows as complete in the activity feed, and a returned delivery emits its full return sequence — return in progress, arrived, returned — even when no arrival was scanned.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of June 29, 2026

Highlight

Talk to your custom agents. Custom agents have always worked for you in the background — a schedule fires, the agent runs, a report lands. This week, conversation became the way to work with them in both directions: chat with any agent you’ve built, and build new ones by describing them.Open a live conversation with an agent and it answers as the specialist you briefed — your instructions, your data scope, your rules about what it can touch:
  • Two ways in. Select New chat on an agent’s page, or type @ in the message box and pick the agent. Either way the conversation is bound to that agent from the first message and labeled with its name.
  • It knows its own setup. Ask an agent what it watches, when it runs, or what it’s allowed to change, and it answers from its live configuration — useful for auditing an agent you set up months ago.
  • Its execution mode holds in chat. A report-only agent’s conversation stays advisory — it investigates and tells you what it would do, but can’t make changes, no matter how the request is phrased. An auto-execute agent can act mid-conversation, with sensitive actions pausing for your approval as always.
Read more in Chat with a custom agent.Building an agent works the same way — describe what you want, answer a couple of questions, and Nash assembles it for you:
  • Describe it, and Nash builds it. Tell the agent what you want in plain language — “watch for late pickups each morning and flag anything trending the wrong way” — and it asks a short set of questions, each with a recommended default, then assembles the agent so you don’t have to fill out the builder by hand.
  • Turn a conversation into a standing report. When a chat session has done something worth repeating, choose Schedule as a report from the session menu. Nash turns it into a scheduled agent, drafting the name, cadence, time zone, and recipients into a card you edit and confirm.
  • Author skills by describing them. Describe a playbook you want your agents to follow and Nash drafts the skill — its name, its when-to-use trigger, and the procedure — then shows a confirmation card before saving, and a field-by-field diff when you’re updating one.
The builder you fill in by hand got shorter too — see below.

New & improved

Nash Agent
  • The agent builder is now organized into three steps — Basics, Execution, and Output — with less-common settings tucked into an Advanced section, so the common path is shorter.
  • A new Only notify on certain results control lets an agent notify you only when a result matches a condition you set — for example, only when a check comes back failing — instead of on every run.
  • Custom agents now run on a model Nash picks for the job, so there’s no model to choose — the model selector is gone from the builder.
  • Agent descriptions are written for you from the agent’s name and instructions, so there’s no description to fill in.
  • Notification templates can reference {{agent_response}} to drop the agent’s written response into the message.
  • A quick-nav rail in agent chat lets you jump between your messages in a long conversation.
  • The Nash Agent voice call can now tell a caller what canceling a delivery would cost, and what was charged on one that’s already canceled.
Workflows
  • The Driver Stacking alert can be set to fire only when the same driver is booked across different providers, so intentional single-provider batching no longer triggers it. (Opt-in.)
Orchestration
  • Nash can hold a delivery whose pickup store is already past closing time, rather than reassigning it to a provider that can’t complete the pickup. (Opt-in.)
Integrations
  • Added Australia Post as a delivery provider in Australia for merchant-allocated shipments — Nash creates and manifests the shipment and forwards your article IDs, barcodes, packaging type, and email tracking. (Opt-in.)
Portal
  • Route activities now show forms submitted at the route level, not only per-job submissions.
Fleet
  • The driver app groups the package list by stop on pickup and return runs — items sit under their destination stop, with the stop number, recipient, and a count — so drivers load and hand off stop by stop.
  • Drivers can complete a custom check-in form your organization has configured, rendered in the app at check-in. (Opt-in.)

Fixes

Nash Agent
  • Agent notifications no longer repeat the report body — emails and Slack posts show it once — and markdown tables render as real tables instead of raw text.
  • Agents reason from the correct current time, so elapsed-time and SLA calculations come out right.
  • You can approve, reject, or dismiss a pending action straight from the agent’s Needs review card, so the count clears even when there’s no chat thread to open.
  • A custom agent’s detail header shows a single On/Off switch that matches whether the agent is actually paused, instead of an “Off” label next to a Pause button.
  • A notification trigger attached to a custom agent now turns on automatically, so the agent starts running as soon as you connect it.
Workflows
  • The Job Tags workflow filter matches the tags you set on your orders, so conditions built on it fire as expected.
Integrations
  • JustEat orders in the EU, including Spain, dispatch reliably — Nash no longer sends fields the market rejects and always includes the required order identifier.
  • Uber pick-pack-and-pay grocery orders record a pickup update when the courier finishes shopping, so that status and its webhook arrive on time.
Portal
  • The Invoices card no longer shows a “Billed monthly” label for organizations on other billing cycles.
  • Text that was unreadable in light mode now renders correctly — provider support details, tooltips, and status and error messages.
  • Opening an optimization run or route map no longer fails when a stop has invalid coordinates, and meal and break stops are labeled as breaks rather than dropoffs.
Fleet
  • Map links from the driver app open directly in driving-directions mode instead of dropping a plain map pin.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of June 22, 2026

Highlight

Trigger Nash on your own events. Your operation has milestones Nash doesn’t define on its own — a quality check clears, a customer confirms a delivery window, an item comes back damaged. Until now you could react to Nash’s built-in delivery statuses, but not to the events specific to how you run.Now you can. Post a custom event to an order — the event name is yours — and a workflow that listens for it runs. Build the workflow around your event with an event trigger, then let it do the work: branch on the order’s attributes, apply a dispatch strategy, modify the order, send a notification, hand off to a Nash Agent to investigate and act, or emit the next event in your own process. The events that used to live only in your systems can now drive Nash automations end to end.

New & improved

Nash Agent
  • Agent settings as code. View, edit, and download a custom agent’s full configuration as JSON from the agent editor — preview the diff before you save a change, and create or share an agent by pasting a definition back in.
  • Agent run notifications now carry an attribution footer that links the agent and the exact session that produced the message, across email, Slack, and webhook destinations, with a per-agent toggle to turn it off. (On by default.)
  • Org skills now appear in the chat slash menu, and skill error messages read in plain language instead of raw error text.
  • Custom agents show their chosen icon in the sidebar, so a workspace with several agents is easier to scan.
Workflows
  • The order-modified trigger now lets you choose exactly which order fields fire it — pickup or dropoff time, location, contact, instructions, items, tip, or order value — instead of firing on every change.
  • Filter workflows on driving distance for an order or package, and reference a delivery’s own ID as a workflow variable.
Integrations
  • Added Autolane as a delivery provider, including live status updates over webhooks.
Portal
  • Choose which route metadata fields appear in the route side pane and as columns in the routes table, with suggestions drawn from the open route’s own metadata and a live value preview.
  • The Activities page has a new Skipped filter.
  • Product details now show a product’s dropoff service time alongside its handling specs.
Tracking
  • A new Driver Location After Delivery setting keeps a delivery’s last-known driver location visible on the public tracking page after it completes — useful for support teams confirming a driver arrived. (Opt-in; off by default. The return-to-store leg stays hidden either way.)
Fleet
  • Driver app: in routes mode, a single barcode scan can complete the whole delivery, accepting all of its items at once. (Opt-in, per driver group.)

Fixes

Nash Agent
  • When a tool returns an unexpected result, the Agent reports the real cause instead of inventing one — it no longer, for example, falsely blames a permissions problem.
  • The Agent side panel no longer carries a previous chat session into a new one.
Orchestration
  • A delivery that falls back to a backup dispatch strategy now switches on every reassignment, not only the first — so repeated provider cancellations keep escalating to the configured backup.
  • Optimizing orders whose contract has no eligible vehicle types now returns a clear “no eligible routes” error instead of failing opaquely.
Tracking
  • A batch delivery with a single remaining stop and no live driver location now shows an ETA estimated from drive time, instead of perpetually reading “arriving now.”
Integrations
  • Shopify orders build the dropoff address from Shopify’s structured address fields, so apartment and suite numbers are preserved instead of being dropped during geocoding.
  • Shopify packing slips reflect order discounts in line totals and the subtotal, reconciling to the order total.
  • The Toast dining-options selector keeps your selection instead of resetting it.
  • Purolator shipments that haven’t been scanned yet refresh cleanly and fetch the shipping label, instead of erroring until the first scan lands.
  • Fulfilld deliveries that fail are reported as failed, not as completed.
  • Uber pick-pack-and-pay orders with a $0 pickup payment now dispatch instead of being rejected.
  • Provider-reported wait fees are kept when a delivery completes, instead of being overwritten to zero.
Portal
  • A slow or unreachable region no longer freezes the org picker or sign-in.
  • Large CSV uploads that hit a transient database drop on the final write retry and keep their summary and failed-rows download, instead of being marked as a timeout with the counts lost.
  • The refund requests table shows the correct page count.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Week of June 15, 2026

Highlight

Edit live routes without starting over. Once a route is out the door, the day keeps changing — a stop has to move, an order jumps the queue, one route is suddenly overloaded. Until now, adjusting a dispatched route meant canceling and rebuilding it. This week you can reshape live routes in place.From the route drawer, move a delivery stop from one active route to another, with a side-by-side comparison of candidate routes — driver, vehicle, capacity, store match, and open exceptions — and a map preview before you confirm. Resequence the stops on a live route by dragging them into the order you want, with keyboard and touch support; if a driver completes a stop while you’re mid-edit, the view stays accurate instead of overwriting their progress.The result: dispatchers adjust to the shift as it actually unfolds, without tearing a route down and starting over.

New & improved

Nash Agent
  • Create and update custom scheduled agents directly from chat — describe the report or watch you want, and the Agent sets up the schedule and email delivery, confirming before it saves.
  • A single custom agent can now run on multiple schedules (for example, a morning and an evening report) without cloning it.
  • Draft prompts are reviewed before you save an agent, flagging instructions that belong in enforced settings — scope, output schema, guardrails, cost caps — with suggested fixes you can apply or undo.
  • Analytics queries can export the complete result set as a downloadable CSV or Excel file, delivered in chat or attached to scheduled runs, instead of a capped preview.
  • Chat now accepts Word (.docx) and PowerPoint (.pptx) uploads, reading their text so you can ask the Agent about documents and decks.
  • Administrators can switch the Sessions list between their own chats and all users’ chats across the organization, with an owner label on each session.
  • Custom agents and org defaults pinned to an older model tier now run on the latest model in the same tier automatically. The “Most capable” option tracks the latest model in that tier, and new custom agents default to the Balanced tier. You can still choose any model.
  • Insight stat changes are colored by whether the change is good or bad for your operation — a falling cost or error rate reads positive — rather than by raw direction.
  • Insights render inline, full-size charts and support sorting, filtering by impact and category, a “has chart” filter, and load-more pagination.
  • Pulse charts (runs per day, trend, and outcome donuts) are interactive with hover tooltips.
  • Follow-ups sent while the Agent is mid-answer are folded into the current run and shown as separate chat bubbles, and continuing a teammate’s shared session loads the full conversation history.
  • Nash Agent reads relative dates like “last week” or “yesterday” in your local time zone instead of UTC, so a Monday request for “last week” returns your week rather than a U.S. one.
  • Approve or cancel an agent’s confirmation-gated actions — like canceling a delivery — directly from Slack, with the same confirm step as the web app.
  • Structured results from a custom agent run now render inline in the chat session, right under the message they came from, instead of only on the Outputs dashboard.
Orchestration
  • When a manual reassign targets a dispatch strategy with a single allowed provider, the order automatically gets fresh quotes and dispatches, instead of waiting for manual quote selection.
  • Route triage labels internal-fleet assignments and quotes with their driver-group name instead of a generic “Internal Provider.”
  • Reoptimizing a route asks for confirmation to prevent an accidental recalculation.
  • Manually assigning a delivery to a single driver makes it visible in their Active tab and notifies them immediately, overriding the dispatch-before-pickup timer.
  • Batch deliveries left without an assigned provider are now swept and re-dispatched automatically.
Integrations
  • Several provider integrations now set the provider’s trackingUrl on GET /v1/jobs/{id}, the jobs list, and webhook payloads, alongside the existing Nash tracking link.
  • Shopify packing slips refresh as soon as finalized tax and shipping totals are available, instead of waiting for the lagging order-updated webhook.
  • Axis orders now forward the dropoff phone number, shipment weight, and line items.
Platform API
  • Query zones in bulk: a new endpoint returns zones in a paginated {data, meta} envelope, filterable by IDs and external IDs — replacing per-zone GET loops.
  • New POST /v2/orders/upsert/bulk returns a {results, summary} envelope with per-row success and failure outcomes and error details.
  • A new endpoint removes a route-based order from dispatch, freeing its package external identifier for re-dispatch and returning the updated order.
  • The Driver Geolocation notification trigger now accepts a deliveryStatusIncludes array, so one trigger can fire across several delivery statuses.
  • Bulk delivery updates now accept packageExternalIdentifier as a key for matching deliveries.
  • The public delivery-feedback endpoint now returns deliveryId, score, and comment.
Fleet
  • Driver item acceptance now appears across the Portal: per-stop picked, delivered, and returned counts on routes, item events on the route timeline, per-item rows on the delivery timeline, and return condition and notes on returned items.
  • Search the fleet vehicle list by name, type, make, model, license plate, or external ID.
  • New Route Card Fields settings under My Fleet let you hide price, status, metrics, addresses, or stops on driver-app route cards.
  • Route maps number each stop and show richer depot tooltips.
  • Driver app: pinch-to-zoom while capturing a proof-of-delivery photo.
  • Driver app: a grouped pickup and return item list, configurable per org.
  • Driver app: the route name or external ID now appears in the route subtitle.
Portal
  • A Shift column (hidden by default) on the Orders table and CSV export shows the shift code for both routed and delivery-window orders.
  • Item and sub-item details now show each item’s Category.
  • Delivery details show when a driver adjusted an item’s quantity at pickup, with the original count struck through next to the new count.
  • Redesigned Billing settings: a clearer payment-methods view with expiry warnings, an invoices list with open-balance cues and Pay, Receipt, and PDF actions, and a hosted billing-portal fallback for accounts where a payment method can’t be added in-app. Organizations billed outside of Stripe now see their custom billing report here.
  • Find a notification trigger or destination by pasting its ID into the Notifications search.
  • Activities is now a standalone page, available to every org with Orders enabled — an Activities button opens it in place of the inline drawer on the Orders and Routes tables, and existing ?activityId= links redirect to it.
  • The Triage workspace is now called Routes.
  • Bulk-select and delete delivery-window and shift templates from their list views.
  • Set a per-contract timeout for how long a job may wait without an assigned driver, configurable in the contract editor.

Fixes

Nash Agent
  • A single agent with an invalid saved configuration no longer takes down the whole agents list — it degrades gracefully while the rest stay available.
  • Disabling an agent or stopping an entity watch clears its outstanding confirmation prompts so they no longer linger in the Needs Attention queue.
  • Files the Agent generates in Slack (Excel, CSV, PDF) are reliably saved and delivered as downloads.
  • Run-count labels on the Pulse and runs-per-day charts are no longer clipped.
Platform API
  • Orders created without a description or vehicle size apply package defaults reliably instead of failing pre-dispatch quote requests.
  • Dispatch-strategy swaps regenerate quotes against the new strategy and clear any stale selection, so orders ship on the correct provider.
  • Route stops keep stable, unique IDs across copy, split, and upsert, and a route completes automatically when its last open order is removed.
  • Manually-added job and order events trigger matching event-type workflows.
  • Address sync no longer overwrites merchant-owned provider store names.
  • Creating a courier with workRelationship or dateOfBirth set succeeds instead of returning a 400.
  • Dispatching an order with missing pickup or dropoff time windows returns a clear TASK_MISSING_TIME_WINDOW error.
  • Re-creating a package for the order that already owns it no longer raises a false duplicate-identifier error; genuine cross-order duplicates still return RESOURCE_ALREADY_EXISTS.
  • Auto reassign-on-failure evaluates provider eligibility against the fallback strategy’s allowed providers.
  • AU PO Box dropoff addresses validate when the geocoder omits the postcode, and request-log search recovers records that were indexed with a null external identifier.
  • An order pointing at a soft-deleted dispatch strategy is recovered automatically when that is its only validation error.
  • Provider webhooks and quotes tolerate non-JSON content types and fractional-second timestamps.
  • Quote and provider type values always serialize as strings (for example, PICK_AND_PACK).
  • Webhook notifications that exceed the size limit are now retried automatically instead of failing.
Integrations
  • Shopify subscription delivery orders with unmapped shipping codes are now created instead of skipped.
  • Gophr pickups that fail at collection now report as a failed delivery.
Fleet
  • Individual pickup and dropoff markers reappear on the deliveries history map when zoomed in, with scheduled time and ETA back in the tooltips.
  • Changing items on a dispatched order reconciles per-item pick states, so added items become trackable and removed items no longer appear as phantom pending items in the driver app. Removing an order from dispatch resets its item pick states.
  • Drivers are no longer blocked from finishing a route after it’s split mid-delivery — stop actions stay available.
  • The driver app captures proof-of-delivery photos in-app, resolving a camera crash on Android and iOS.
  • Route map markers render on iOS 26.5 without hanging the app.
  • A driver who acts on a route after one of its stops was removed now sees a clear “stop removed” dialog instead of a stale action.
Portal
  • Workflow filters using “starts with” and “ends with” save and apply reliably.
  • Drawing zone, coverage, and route-restriction polygons works again.
  • Route times render in the depot’s time zone across the Plan panel and the simulation drawer.
Nash AgentPlatform APIPortalNewImproved

Multiplayer Agents, Testable Workflows, and Smarter Route Control

Multiplayer Nash Agent sessions, mid-run steering, and code execution with file artifacts. Plus testable workflows, a new Customers workspace, post-dispatch route edits, and routing that respects vehicle dimensions.

New features

Nash Agent
  • Collaborative sessions: Multiple teammates can join the same Nash Agent session live, see each other’s messages, and work through investigations together in a single shared thread.
  • Mid-run steering: Send a follow-up while Nash Agent is still working and it folds the new direction into the current turn, with no cancellation or restart required.
  • Code execution with file artifacts: Nash Agent can run analyses on the fly and stream Excel, CSV, and chart files back into the chat as it works.
  • Per-session token safety limits: Admins can stop each Nash Agent session after a configured maximum number of tokens, set at the org level with tighter per-Custom Agent overrides. This safety control limits oversized runs; it does not set the price.
  • Webhook-triggered custom agents: External systems can kick off custom agent runs via a webhook authenticated by a Nash API key, with no user login required.
Workflows & automation
  • Workflow simulation: A new Test surface in the workflow builder runs an entire workflow or a single step against mock data, validates channels and variable interpolation, and tags executions so they’re easy to distinguish from real events.
  • API workflow trigger: Any workflow can be invoked directly through POST /v1/workflows/{id}/trigger, with optional input data and both synchronous and asynchronous execution modes.
Portal
  • Customers workspace: A new Customers section in the Portal lists every customer in your org, with a detail view showing lifetime stats, recent orders, last-meter preferences, a 7×24 delivery-times heatmap, and recent proofs of delivery.
Optimization
  • Exception status lifecycle: Route exceptions move through clear open, in-progress, resolved, and dismissed states, with consistent badges across the Portal so dispatch teams can track investigations.

Improvements

Dispatch & route control
  • Post-dispatch route edits: Operators can modify routes after they’ve been dispatched without canceling and recreating them, controlled by a new org preference.
  • Auto-dispatch on route creation: Newly created routes can be auto-dispatched the moment they’re created (including via the routes API), and a failed dispatch attempt no longer blocks the route itself from being created.
  • Configurable return routing: Returns routing is configurable per store, so each location can pick the approach that matches its operations.
Driver app navigation
  • Default navigation app per driver: Drivers can pick their preferred map app from a per-user setting, with Nash’s in-app navigation available behind a per-fleet toggle.
  • In-app navigation polish: The map stays active throughout a trip, supports pinch-to-zoom and free panning, and shows a destination pin with which side of the road the dropoff is on.
Portal & API
  • Searchable activities: The Activities screen has searchable display names, filter counts on every facet, and a new Store Location filter for faster triage.
  • New webhook & API surfaces: Custom form submissions emit a webhook event, order items are exposed in webhook payloads, and route assignments are available via GraphQL.
  • Inbound delivery update API: Internal fleets and Nash-connected partners can drive their delivery state (status, coordinates, proof of delivery, courier identity, and failures) via single or bulk PATCH /v1/fleet/deliveries endpoints authenticated by their org API key.
Optimization
  • Vehicle dimensions in route planning: The routing engine factors vehicle height, weight, length, and width into route plans, so trucks and vans avoid road segments — including low bridges — they can’t legally or safely use.
Nash AgentPlatform APIFleetPortalNewImprovedFixed

Smarter Optimization, Multi-Session Agents, and Stronger Driver Tools

A new Review & Dispatch surface for optimized routes, a replayable optimization workspace, and parallel Nash Agent sessions. The driver app gains route search, WhatsApp messaging, and route flags.

New features

Optimization & dispatch
  • Optimization review: A new Review & Dispatch surface in the Optimize Orders drawer separates routes that need attention from those safe to dispatch, with toggleable Table, Map, and Timeline views.
  • Replayable optimization workspace: A new Portal app lets teams replay past route plans with adjustable parameters to compare outcomes and tune dispatch strategies.
Nash Agent
  • Multi-session Nash Agent: Manage multiple Nash Agent sessions in parallel, making it easier to track several investigations at once.
  • Chat cards for Nash objects: Nash Agent renders driver, order, and route information as rich, in-conversation cards for faster context.
  • User-level Agent permissions: Admins can scope Nash Agent access to specific users for finer-grained governance over who runs AI workflows.
Driver app
  • Route search and filtering: Drivers can search routes by customer name or phone and group routes by merchant for faster trip selection.
  • WhatsApp messaging: Drivers can message customers via WhatsApp directly from the driver app, in addition to SMS.
  • Route flags: Dispatchers can flag routes that need attention, making it easier to track and triage problematic deliveries.

Improvements

API & webhooks
  • A new route.stops_updated webhook event fires whenever a route’s stops change, keeping integrations in sync with mid-route adjustments.
  • House photos in create-order API: Drivers see a photo of the customer’s dropoff location at the stop when a house-photo link is included on order creation.
  • Report when a status change actually happened: Status updates can carry the time the change occurred, so late-arriving updates are recorded at the right moment.
  • Return condition tracking: Drivers can mark returned items as good or damaged in the Driver App, and each update fires a webhook for downstream systems.
Portal refinements
  • Redesigned org switcher: A search-first org picker on sign-in and in the sidebar, plus static sidebar chrome when toggling between main and settings views.
  • Type-to-confirm reassignment: A new confirmation dialog protects post-pickup driver reassignments from accidental clicks.
Driver app polish
  • Redesigned route card: The driver app route card shows the delivery window more clearly and groups stops by merchant for at-a-glance trip planning.

Fixes

  • The optimization results drawer no longer shows the wrong contract when opened from an activity link.
  • Portal shift links use path segments instead of query parameters, so the right shift opens consistently when shared.
Nash AgentPortalNewImprovedFixed

Smarter Coordination, Stronger Privacy, and More Control Across Workflows

New AI Agents for staggered arrivals and face masking, a clearer prompt-to-response activity timeline, and smarter dispatch controls.

New features

  • Staggered Arrivals AI Agent: Coordinates staggered arrival times to keep delivery scheduling efficient and reduce congestion at pickup and dropoff locations. Fully configurable from the Portal.
  • Face Masking AI Agent: Automatically detects and pixelates faces in proof-of-delivery photos to protect the privacy of people involved in deliveries.
  • Structured prompt-to-response timeline: The activity timeline groups prompts, tool calls, and responses into cohesive conversation cycles, making AI-driven workflows easier to follow and audit.
  • Grouped tool calls under phases: Tool calls are visually nested under phase updates (for example, “Investigating” or “Implementing”) for a clearer progression of work.
  • Compact passing quality checks: Multiple passed quality-check rows condense into a single summary, reducing timeline clutter.
  • Refund request experience: The refund submission page displays separate Original, Requested, and Approved amounts, giving providers and customers more transparency at every step of review.
  • Route optimization analytics: Performance tracking for route optimization, including usage data and simulation insights.

Improvements

Smarter dispatch controls
  • Dynamic Dispatch: Settings include advanced customization of dispatch strategies and presets like “Balanced” and “Promise-Based.”
  • The Bird’s Eye map view includes dropoff and pickup time tags and business information for faster operational decisions.
Messaging & notifications
  • Custom notification configurations are available in additional sandbox environments for testing real-world use cases.
  • Improved timing instrumentation across the notification pipeline.
  • Support for custom SMS sender settings, including Twilio accounts and alphanumeric sender IDs.
  • Notification pipelines support asynchronous webhook processing, reducing delays and improving throughput.
Consistency
  • Improved timeline icons: A standardized icon system across the platform for better readability and consistency.

Fixes

  • Delivery rescheduling workflows and timeline evaluations run reliably.
  • Notifications are no longer delayed by cache connection issues.
  • Dashboards load faster, and report data that was missing now appears.
Looking for releases before 2026? Earlier entries are archived on the Nash website release notes.