Docs
  • Solver
  • Models
    • Field Service Routing
    • Employee Shift Scheduling
    • Pick-up and Delivery Routing
  • Platform
Try models
  • Pick-up and Delivery Routing
  • User guide
  • Output datasets
  • Model output

Pick-up and Delivery Routing

    • Introduction
    • Getting started: Hello world
    • User guide
      • Terminology
      • Use case guide
      • Planning AI concepts
      • Integration
      • Constraints
      • Understanding the API
      • Demo datasets
      • Input datasets
        • Model configuration
        • Model input
        • Planning window
      • Input validation
      • Output datasets
        • Metadata
        • Model output
        • Input metrics
        • Key performance indicators (KPIs)
      • Routing with Timefold’s maps service
      • Metrics and optimization goals
    • Driver resource constraints
      • Lunch breaks and personal appointments
      • Route optimization
      • Shift hours and overtime
    • Job service constraints
      • Time windows and opening hours
      • Skills
      • Movable stops and multi-day schedules
      • Dependencies between stops
      • Priority jobs and optional jobs
      • Stop service level agreement (SLA)
      • Job requirements and tags
        • Job required drivers
        • Job pooling
        • Prohibit job combinations
        • Maximum time burden
        • Driver capacity
        • Tags
    • Recommendations
      • Job time window recommendations
      • Stop time window recommendations
    • Real-time planning
      • Real-time planning: pinning stops
    • Changelog
    • Upgrading to the latest versions
    • Feature requests

Model output

The modelOutput object of the output dataset includes the drivers and unassignedJobs objects.

unassignedJobs includes the IDs of any jobs and stops that could not be assigned during solving:

{
  "modelOutput": {
    "unassignedJobs": [
      {
        "id": "Job A",
        "unassignedStops": [
          "A1",
          "A2"
        ]
      }
    ]
  }
}

drivers includes the drivers that were included in the input dataset and their shifts. shifts includes the shift startTime, the itinerary which includes the visits they have been assigned for that shift, and the metrics for the individual shift which breakdown how the driver will spend their time during the shift.

metrics are also included for the entire schedule.

In the following dataset, Ann has been assigned two stops from a single job, and Beth has not been assigned any stops.

{
  "modelOutput": {
    "drivers": [
      {
        "id": "Ann",
        "shifts": [
          {
            "id": "Ann Mon",
            "startTime": "2027-02-01T09:00:00Z",
            "itinerary": [
              {
                "id": "B1",
                "arrivalTime": "2027-02-01T09:31:59Z",
                "startServiceTime": "2027-02-01T09:31:59Z",
                "departureTime": "2027-02-01T09:51:59Z",
                "effectiveServiceDuration": "PT20M",
                "travelTimeFromPreviousStandstill": "PT31M59S",
                "travelDistanceMetersFromPreviousStandstill": 33381,
                "load": [],
                "kind": "STOP"
              },
              {
                "id": "B2",
                "arrivalTime": "2027-02-01T10:45:44Z",
                "startServiceTime": "2027-02-01T10:45:44Z",
                "departureTime": "2027-02-01T11:05:44Z",
                "effectiveServiceDuration": "PT20M",
                "travelTimeFromPreviousStandstill": "PT53M45S",
                "travelDistanceMetersFromPreviousStandstill": 62123,
                "load": [],
                "kind": "STOP"
              }
            ],
            "metrics": {
              "totalTravelTime": "PT1H54M35S",
              "travelTimeFromStartLocationToFirstStop": "PT31M59S",
              "travelTimeBetweenStops": "PT53M45S",
              "travelTimeFromLastStopToEndLocation": "PT28M51S",
              "totalTravelDistanceMeters": 127047,
              "travelDistanceFromStartLocationToFirstStopMeters": 33381,
              "travelDistanceBetweenStopsMeters": 62123,
              "travelDistanceFromLastStopToEndLocationMeters": 31543,
              "endLocationArrivalTime": "2027-02-01T11:34:35Z"
            }
          }
        ]
      },
      {
        "id": "Beth",
        "shifts": [
          {
            "id": "Beth Mon",
            "startTime": "2027-02-01T09:00:00Z",
            "itinerary": [],
            "metrics": {
              "totalTravelTime": "PT0S",
              "travelTimeFromStartLocationToFirstStop": "PT0S",
              "travelTimeBetweenStops": "PT0S",
              "travelTimeFromLastStopToEndLocation": "PT0S",
              "totalTravelDistanceMeters": 0,
              "travelDistanceFromStartLocationToFirstStopMeters": 0,
              "travelDistanceBetweenStopsMeters": 0,
              "travelDistanceFromLastStopToEndLocationMeters": 0
            }
          }
        ]
      }
    ]
  }
}

Next

  • See the full API spec or try the online API.

  • Learn about Input metrics.

  • © 2026 Timefold BV
  • Timefold.ai
  • Documentation
  • Changelog
  • Send feedback
  • Privacy
  • Legal
    • Light mode
    • Dark mode
    • System default