New Features for Release 1.76

Modified on Tue, 14 Apr at 5:01 PM

These features are available on your Test site on the evening of April 14 and released to your Production site on the evening of April 21.

New Features in This Release

  • Improved whitelist / blacklist capabilities and other Attribute enhancements
  • New public tracking page with live driver map and remaining stop count
  • Multiple attachment support on invoice emails
  • Ability for self-serve users to add or remove attachments on orders
  • Route planning & Auto-Dispatch enhancements
  • Enhanced metadata access for Developer Toolkit & Tenant API improvements

The release notes refer to different sections of the application. You can consult their definitions below :

Definitions — click to expand 
Back Office
Where Customer Service Representatives (CSR) create and edit orders, create accounts, review drivers, etc.
Dispatch Board
Where Dispatchers assign orders to drivers, get notifications for invalid orders, etc.
Auto-Dispatch
This section refers to the automated order assignment setup and its process.
Administration
This section is in the Back Office but refers to sections only an administrator will use like Settings and Pricing.
Customer Portal
Where account users log in to create orders, view their order history, enter a credit card, etc.
Tracking Site
Where customers enter a tracking number like the order ID or a reference number to view the status of their order.
OData
Data fields and variables saved in OData.
Account API
API provided to your accounts to create, update and get orders. For documentation, see api.dispatchscience.com.
Tenant API
API provided to you to create orders for your accounts, retrieve invoices and change invoice status. For documentation, see api.dispatchscience.com.
Table of Contents



BackOffice

Orders

Ability to set orders as Picked-Up & Delivered from the BackOffice order screen

New actions — Set Picked Up and Set Delivered — allow orders to be marked as picked up or delivered from the BackOffice order screen. Edit Proof of Pickup and Edit Proof of Delivery options are available after the fact.


This feature enables back-office intervention to update critical milestones (Picked Up and Delivered) and revise proof of pickup when discrepancies occur, helping maintain accurate tracking, compliance, and customer visibility.


Set Picked Up

Available when the order has not yet been picked up and is not cancelled.

  1. Open the order in BackOffice.
  2. From the order action menu, select Set Picked Up.
  3. Fill in the Proof of Pickup dialog box and confirm. Order status updates to Picked Up.

Set Delivered

  1. From the order action menu, select Set Delivered

  2. Fill in the Proof of Delivery dialog box and confirm. Order status updates to Delivered.

Edit Proof of Pickup / Edit Proof of Delivery

Once picked up or delivered, menu items change to allow editing the proof of pickup/delivery. A Remove Image option is available if a signature was captured.


Availability by Status

Order statusAvailable actions
Not picked up, not cancelledSet Picked Up & Set Delivered
Picked up, not yet deliveredEdit Proof of Pickup & Set Delivered
Delivered, not invoicedEdit Proof of Pickup & Edit Proof of Delivery
InvoicedNo actions shown
CancelledNo actions shown

Order Notification Usability Improvements

The Account Contact label in the Order Notification section is now Account Users. Hovering over the ℹ️ or phone icon now displays the full list of recipients (name and email/phone).


Drivers

Auto-Dispatch enhancement for auto-accept orders

Auto-dispatched orders now use the Auto-accept setting from the driver profile to allow bypassing a manual confirmation by the driver.


This ensures that auto-dispatched orders respect driver preferences, reducing unnecessary confirmations and speeding up the assignment process.


The Auto-accept option is in the driver profile under General Information:

  • Yes — order is assigned upon dispatch, no driver action required.
  • No — driver can accept or reject as usual.

This setting was already used for auto-suggested orders and now applies equally to auto-dispatched orders.

Driver History Permission Enforcement

Internal users without permission to view driver history now see an unauthorized access message instead of an error. No configuration change required.


Accounts

Multiple attachment support on invoice emails

Accounts can be configured with additional invoice templates. Its output is available in the invoice emails alongside the primary invoice via download links. It is also accessible from the Transactions list.


This enhancement ensures customers automatically receive all required supporting documents with their invoices, reducing follow-ups and improving clarity.

⚠️ If you don't see this feature in your environment but would like to have it, please contact our Support team.

How to Configure

  1. Open the account in BackOffice and click Edit in the Billing Options tab.
    If more than one invoice template is associated with the account, the list will show comma-separated.
  2. Locate the Additional Invoice Templates field.
  3. Click on Add template link to add a new field where you can select the additional invoice template.
    Add as many rows as needed and select the desired template.

  4. Save.
✅ If no additional template is configured, a dash is shown. Invoice behaviour is unchanged for those accounts.

Download Additional Reports

  1. Generate the invoices as usual.
  2. On the Transactions Details screen of an invoice, the Document button will now allow the user to download the additional invoice reports, if configured. The same is also possible from the Transactions Search screen via the Invoice icon.

✅ Invoice transactions generated before adding a new invoice template are not updated.
⚠️ When using additional invoice templates, invoice attachments are download links instead of attachments.

Ability to Copy Accounts

Accounts can be copied from the Account Details screen. See https://support.dispatchscience.com/a/solutions/articles/36000603462 for details.


This enables rapid onboarding of new accounts by duplicating existing configurations, helping maintain standardization, reducing data entry errors, and accelerating operational readiness.


Ability to Create New Account and Copy Account from Master Account

The master account screen gains two new features, Create New and Create from Existing, which allow faster sub-account creation. Refer to https://support.dispatchscience.com/a/solutions/articles/36000603463 for all the information.


Quickly set up new accounts by copying configurations directly from a Master Account, ensuring consistency across all accounts, reducing manual data entry, and getting new accounts operational faster.


Invoice attachments are now delivered as download links instead of file attachments. This keeps emails lighter and reduces the risk of attachments being blocked by spam filters.


Dispatch Board

Routes

Manual routes can be added to already-dispatched containers

When Allow Moving Orders to Dispatched Route is enabled on a Route Plan, dispatchers can create manual routes on already-dispatched containers.


This allows dispatchers to reorganize and optimize routes even after containers have been dispatched, improving flexibility and operational efficiency.

⚠️ Requires Allow Moving Orders to Dispatched Route to be enabled on the Route Plan (Settings › Route Plans).
  1. Open the dispatched Route Container on the Dispatch Board.
  2. Click Create new Route — now visible while the container is dispatched.
  3. Configure the new manual route.
  4. Move orders using Move to Route or drag and drop the orders to the new route.


⚠️ Create new Route disappears once the container is Closed.

Map Board

Map Board Performance Improvement

Map rendering has been optimized for drivers with a large number of stops — zooming and dragging the map is smoother and faster. Map marker clustering now scales progressively with zoom level, keeping the map smooth and responsive whether you're viewing a full city or navigating street by street, thus enabling faster decision-making and more accurate route management. 


Self-Serve Portal

Self-serve users can add and delete attachments on orders

Self-serve users can add and delete attachments on orders when the corresponding role permissions are enabled.


This feature empowers users to maintain accurate and complete order records on their own, improving control, transparency, and overall satisfaction.


To learn how self-serve users can use those new features, please review https://support.dispatchscience.com/support/solutions/articles/36000132337#Managing-Attachments.


Public Tracking Page

Improved public tracking page with live driver map and remaining stop count

The public tracking page can display a live map of the driver's position and the number of stops remaining before delivery. Configuration is done in the self-serve profile.


This feature allows configurable, profile-specific live tracking on the public page, giving customers up-to-the-minute information while supporting operational efficiency by reducing support calls and improving delivery predictability.


How to configure

  1. Go to BackOffice › Accounts › Profiles › Self-Serve Profiles and open the relevant profile.
  2. Click Edit in Web Options and locate the new Public Tracking Page Options section.
  3. Enable Show map and/or Show remaining stops.
  4. Choose between displaying them from the order picked up or based on a given number of remaining stops.
  5. Save.

The tracking page will then show the map and the remaining number of stops according to the configuration set on the account, and a number of other parameters. Refer to https://support.dispatchscience.com/a/solutions/articles/36000603335 for details.

⚠️ Options are configured per self-serve profile — different accounts can have different tracking page experiences.

Administration

New Permissions

Add, Edit & Delete Attachments on Orders for Self-Serve Users 

Self-serve users can add, edit and delete attachments on orders when the corresponding role permissions are enabled. All are off by default to keep current functionality.

Admin setup — enabling permissions

PermissionLocationDefault
Orders › Add AttachmentsSettings › Configurations › System › Roles → ActionsOff
Orders › Delete AttachmentsSettings › Configurations › System › Roles → ActionsOff
Orders › Edit AttachmentsSettings › Configurations › System › Roles → ActionsOff
  1. Go to Settings › Configurations > System > Roles and open the role to update.
  2. Under Orders, enable Add Attachments and/or Delete Attachments and/or Edit Attachments.
  3. Save.

To learn how self-serve users can use those new features, see https://support.dispatchscience.com/support/solutions/articles/36000132337#Managing-Attachments.


Copy Account for Internal Users

Internal users can now copy an account when the corresponding role permission is enabled. It is enabled by default for internal admins only.

Admin setup — enabling permissions

  1. Go to Settings › Configurations > System > Roles and open the role to update.
  2. Under Accounts, enable or disable Copy Account.
  3. Save


Attribute Enhancements featuring new availability options; Contact-level attributes, new dispatch triggers

Attributes can now be assigned directly to contacts, in addition to accounts and orders. Assigning an attribute to a contact or an account will display it on related orders. If either is later removed, the attribute is also removed from the order, ensuring accurate inheritance when accounts or contacts change.


A new dispatch trigger has also been added: previously, warnings or dispatch prevention applied only when an order had an attribute, but the driver did not. With this new feature, the same warning or prevention can also be applied when the attribute exists on both the order and the driver, allowing users to enforce rules such as blacklisting specific drivers from certain orders.

This enhancement allows attributes to be applied selectively and validated across entities, giving dispatchers control to warn or block orders if the required attribute is missing or misaligned, improving operational reliability, order accuracy, and adherence to business rules.


Attribute detail screen — new options

Go to Settings › Configurations › System › Attributes. For Order or Order & Driver type attributes:

Can be Assigned To — new checkboxes:

CheckboxEffect
AccountsSelectable on account
ContactsSelectable on account contact and account user contacts
OrdersSelectable directly on orders and order templates
Driver (read-only)Always checked for Order & Driver type


Dispatch option — two new values:

OptionTriggers when…
AllowNo message displayed on dispatch (existing)
Prevent dispatch, if only order has the attributeDriver does not have the attribute (existing)
Allow with warning, if only order has the attributeDriver does not have the attribute (existing)
Prevent dispatch, if both have the attributeDriver also has the attribute (new)
Allow with warning, if both have the attributeDriver also has the attribute (new)


Applying attributes to Account Contacts and Account User Contacts.

  1. Open an account, go to Contacts, and open a contact.
    Attributes can also be added to account user contacts by going to Users in the account and clicking on the contact icon () located to the right of the user. In the user contact list, open a contact.
  2. Scroll to the Attributes section.
  3. Add the relevant attributes and date information and save.


Attribute inheritance on orders

  • Attributes set on Accounts are automatically added to new orders and checked by default. Users can uncheck them; they remain listed unless the account or contact changes.
  • When the account or contact changes on an order or template, attributes from the previous account/contact that are not on the new one are removed. Attributes added directly on the order are kept.
Attributes are not updated on order templates if they are added to an account or contact afterwards. These added attributes will not be ticked by default when creating a new order based on such a template.



Dispatch prevention & warnings

All attribute rules are evaluated at dispatch time. Prevention blocks dispatch and lists all reasons. Warning shows a confirmation dialog box.


In the following example, the attribute "Blacklist - Alfie Wallace", set to "Prevent dispatch, if both have the attribute", was added on both the driver Alfie Wallace and on the pickup contact.


Scripts & Script Rules

Enhanced Metadata Access for Developer Toolkit

Scripted extra fees can read the metadata stored in their result via a new method in the script extra fee context, enabling more dynamic fee calculations.

A new method GetExistingMetadata() in the script extra fee context provides read access to the current extra fee's stored metadata as a key-value collection — same structure used when writing it.


This new method supports more complex, dynamic pricing logic while maintaining consistency and flexibility in fee computations.

Show code example — GetExistingMetadata()
    
    /// Example showing how to read metadata that was previously stored on the extra fee
    /// during an earlier calculation.
    ///
    /// Use case: a surcharge that is locked to its initially calculated price.
    /// When the fee is recalculated (e.g. on order update), the script reads back
    /// the original price from metadata and returns it instead of recalculating,
    /// preventing unexpected price changes after the first booking.

    public class UseExistingMetadataExtraFee : IExtraFeeScript
    {
        private const string MetadataKeyLockedUnitPrice = "lockedUnitPrice";
        private const string MetadataKeyCalculatedWeight = "calculatedWeightKg";

        public async Task<ExtraFeeScriptResult> GetExtraFeePriceInfo(OrderScriptInfo order, IScriptDataProvider data, ILogger logger)
        {
            var context = await data.GetContext();

            // Read metadata stored during a previous calculation of this extra fee.
            var existingMetadata = await context.ExtraFee!.GetExistingMetadata();

            if (existingMetadata is not null && existingMetadata.TryGetValue(MetadataKeyLockedUnitPrice, out var rawLockedPrice))
            {
                // The price was already calculated and locked on the first run — reuse it.
                var lockedPrice = Convert.ToDecimal(rawLockedPrice);
                logger.LogInformation("Returning locked unit price {Price} from previous calculation.", lockedPrice);

                return new ExtraFeeScriptResult
                {
                    Quantity = 1,
                    UnitPrice = lockedPrice,
                    Details = new ExtraFeeScriptResultDetails
                    {
                        TitlePrimary = "Weight Surcharge (locked)",
                        // Carry the metadata forward so it is preserved on subsequent recalculations.
                        Metadata = existingMetadata
                    }
                };
            }

            // First-time calculation: compute the price and store it in metadata.
            var totalWeightKg = order.OrderItemInfos.Sum(i => i.Weight ?? 0);
            const double includedWeightKg = 10.0;
            const decimal pricePerExtraKg = 0.50m;

            var billableWeight = Math.Max(0, totalWeightKg - includedWeightKg);
            var unitPrice = Convert.ToDecimal(billableWeight) * pricePerExtraKg;

            logger.LogInformation(
                "First calculation: total weight {Total} kg, billable {Billable} kg, unit price {Price}.",
                totalWeightKg, billableWeight, unitPrice);

            return new ExtraFeeScriptResult
            {
                Quantity = 1,
                UnitPrice = unitPrice,
                Details = new ExtraFeeScriptResultDetails
                {
                    TitlePrimary = "Weight Surcharge",
                    DescriptionPrimary = $"{billableWeight:F2} kg over {includedWeightKg} kg included",
                    Metadata = new Dictionary<string, object?>
                    {
                        [MetadataKeyLockedUnitPrice] = unitPrice,
                        [MetadataKeyCalculatedWeight] = totalWeightKg
                    }
                }
            };
        }
    }
✅ On the first run (no metadata yet), the method returns an empty collection — always handle the empty case.
⚠️ Metadata is scoped per extra fee instance on the order — each scripted extra fee has its own collection.

Tenant API

Full Attributes, VehicleType, and ServiceLevel CRUD via Tenant API

New endpoints have been added for attributes, vehicle types and service levels. Using these new endpoints, businesses can maintain consistent data across systems, automate setup and updates, and improve operational efficiency.


Full Attributes CRUD Endpoints

Attributes can be created, edited, archived and unarchived programmatically via the Tenant API, including attributes already in use.

MethodEndpointAction
GET/api/v1/attributesGet all attributes
POST/api/v1/attributesCreate an attribute
PUT/api/v1/attributes/{attributeId}Edit all information on an attribute
PATCH/api/v1/attributes/{attributeId}Partially edit information on an attribute
POST/api/v1/attributes/{attributeId}/archiveArchive an attribute
POST/api/v1/attributes/{attributeId}/unarchiveUnarchive an attribute


Create & Manage Vehicle Types

Vehicle types can be created and edited programmatically via the Tenant API, including vehicles already in use.

MethodEndpointAction
GET /api/v1/vehicletypesList all vehicle types
POST/api/v1/vehicletypesCreate a new vehicle type
GET/api/v1/vehicletypes/{id}Get vehicle by ID
PATCH/api/v1/vehicletypes/{id}Update an existing vehicle
GET/api/v1/vehicletypes/iconsList available vehicle icons


Create & Manage Service Levels

Service levels can be created, edited, archived and unarchived programmatically via the Tenant API, including service levels already in use.

MethodEndpointAction
GET /api/v1/serviceleveltypesList all service levels
POST/api/v1/serviceleveltypesCreate a new service level type
GET/api/v1/serviceleveltypes/{id}Get a service level type by ID
PATCH/api/v1/serviceleveltypes/{id}Update an existing service level type
POST/api/v1/servicelevels/{id}/archiveArchive an existing service level type
POST/api/v1/servicelevels/{id}/unarchiveUnarchive an existing service level type

Driver Pay Rate Fuel Surcharge Schedule on Accounts

Adding the Driver Pay Rate Fuel Surcharge Schedule on Accounts enables end-to-end automation of driver compensation logic by including the fuel surcharge schedule in account API endpoints. It ensures accurate and consistent application of fuel-related adjustments across integrated systems, reduces the risk of discrepancies, and supports scalable financial operations.


The Tenant API account endpoints now expose and accept the Driver Pay Rate Fuel Surcharge Schedule configuration (driverPayRateFuelSurchargeScheduleId).

  • GET /api/v1/accounts/{accountId} — now returns driverPayRateFuelSurchargeScheduleConfigurationId.
  • POST /api/v1/accounts — accepts driverPayRateFuelSurchargeScheduleConfigurationId (optional).
  • PATCH /api/v1/accounts/{accountId} — accepts the same field to update it.
The value must match an existing fuel surcharge schedule ID. If the feature is disabled on the tenant, the value will be set to null regardless of the value sent.

Zone Data Added to Order Endpoints 

Three existing order API endpoints now return zone information as part of the order response:

  • GET /api/v1/orders?ids=... (bulk fetch by IDs)
  • GET /api/v1/orders/{orderId} (single order fetch)
  • POST /api/v1/orders/quote (order quote)

When an order has zones assigned, the response now includes an embedded zones collection. Each entry contains:

FieldDescription
ZoneIdThe identifier of the zone
StopKindThe stop the zone is associated with (Pickup, Dropoff, or Warehouse)
ZoneTypesArray of zone type flags (e.g. Address, AutoDispatch, DriverPosition, Filtering, Taxes, Script, Other)


The zones collection is only present in the response when at least one zone is associated with the order.


Webhook Subscriptions for Late ETA Notifications

Two new webhook event types — OrderPickupLate and OrderDeliveryLate — will send notifications to subscribed URLs when an ETA update results in a projected stop time exceeding the defined time window.

Each subscription can be set up with the following options. The subscription payload will only be sent if all three options are enabled. If no configuration section is added, the subscription payload is sent immediately when a late event occurs.

FieldDescriptionTime
hoursInAdvanceSend if ETA minus the Optimization time <= value2 hours
gracePeriodInMinutesSend if ETA minus Window To >= value5 minutes
resendThresholdInMinutesOnly resend if ETA − previous ETA >= value15 minutes


These event types are only supported in the new subscriptions system, not in legacy webhooks. The payload includes the basic order payload plus the relevant address and ETA.

Order Status Endpoints – Idempotent Behavior Update 

In prior versions, a 409 (Conflict) response was returned when attempting to apply a status change to an order that was already in the requested state, including: 

  • Calling  POST /api/v1/orders/{orderId}/pickup on an order already in Pickup status 
  • Calling  POST /api/v1/orders/{orderId}/deliver  on an order already in Delivered status 
  • Calling  POST /api/v1/orders/{orderId}/cancel  on an order already Cancelled 
  • Calling  POST /api/v1/orders/{orderId}/unassign  on an order not currently assigned to a driver 

Because the order was already in the intended state, these responses generated avoidable conflicts. With this release, these endpoints now return 200 (OK) response when the requested status already matches the current order state. No updates will be applied to the order in these cases. If a change is needed, use the PATCH /api/v1/orders/{orderId} endpoint to update the specific fields.


Ad-Hoc Notification: Support for Additional Recipients

The POST /api/v1/notifications endpoint now accepts an optional AdditionalRecipients array, allowing callers to inject extra email recipients on a per-request basis alongside the template-defined ones.

{
  "NotificationTemplateId": 42,
  "Metadata": {
    "key": "value"
  },
  "AdditionalRecipients": [
    {
      "Name": "Jane Doe",
      "Email": "jane.doe@example.com"
    },
    {
      "Name": "John Smith",
      "Email": "john.smith@example.com"
    }
  ]
}


FieldTypeRequiredDescription
AdditionalRecipientsArrayNoOptional list of extra recipients to include for this notification only.
AdditionalRecipients[].NameStringYes (if entry present)Display name of the recipient.
AdditionalRecipients[].EmailStringYes (if entry present)Email address of the recipient. Must be a valid email address.


Notes:

  • Omitting the field or passing an empty array has no effect.
  • Additional recipients are merged with template-level and module-level recipients; duplicates are removed.
  • Notifications with different additional recipient sets are kept in separate batches.

OData

Support for Account Workflows

Four new tables are now available in OData to support account workflows:
AccountProfiles, Workflows, WorkflowSteps, and SelectionSteps.

These tables are linked together to define configurable workflows and their steps for each account profile.

  • AccountProfiles define the starting point
  • Workflows organize processes per profile
  • WorkflowSteps define execution logic
  • SelectionSteps optionally group steps together

Table Descriptions

AccountProfiles

Represents the entry point and configuration for workflows.

  • Id – Primary identifier
  • WorkflowId – Reference to a workflow
  • TitlePrimary / TitleSecondary
  • DescriptionPrimary / DescriptionSecondary

Workflows

Defines the workflows associated with an account profile.

  • Id – ID of the Workflow
  • AccountProfileId – Links to AccountProfiles.Id
  • Position – Order of execution
  • WorkflowType – (Pickup, AddItem, Delivery)

WorkflowSteps

Contains the individual steps within a workflow.

  • Id – ID of the WorkflowStep
  • WorkflowId – Links to Workflows.Id
  • SelectionStepId – Links to SelectionSteps.Id (if grouped)
  • TitlePrimary / TitleSecondary
  • DescriptionPrimary / DescriptionSecondary
  • DriverInstructionsPrimary / DriverInstructionsSecondary
  • CanSkip
  • WorkflowStepType / WorkflowStepState
  • Tag
  • SerializedData

SelectionSteps

Defines grouped steps within a workflow (optional grouping layer).

  • Id – ID of the SelectionStep
  • WorkflowId – Links to Workflows.Id
  • TitlePrimary / TitleSecondary
  • DescriptionPrimary / DescriptionSecondary


Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article