Endpoints

This API has one endpoint, which can be accessed using


curl "http://api.tarotrouting.com/v0.35/vrp" \
        -H "Content-Type: application/json" \
        --data "@examples/ex1.json"
                    

Request Body

RoutingProblem

The request body is a Vehicle Routing Problem object (a RoutingProblem)
Each RoutingProblem is comprised of:

  • "drivers": a list of Driver objects (described below)
  • "jobs": a list of Job objects (described below)
  • "settings": a Settings object (described below)

    {
        "drivers": [...], 
        "jobs": [...], 
        "settings": {...}
    }
                    

Driver

The Driver object represents a Driver/Field Worker and/or the Vehicle they are in.

attribute type required note
unique_id string Yes Must allow you to uniquely identify this object
location Location object Yes See location object definition below
shift_start float OR string Yes* The earliest time this Driver may begin their shift. Time of day as float (e.g. 13.75) or as string (e.g. "13:45") in 24h time
shift_end float OR string Yes* The latest time this Driver may end their shift. Time of day as float (e.g. 13.75) or as string (e.g. "13:45") in 24h time
capacity integer No** This is the number of units this driver/vehicle can hold. Units are whatever you define, e.g. cubic metres, number of bread rolls, number of passengers etc. This must use the same units as the Jobs' size attribute. If ANY jobs has a size, then ALL drivers must have a capacity > 0
spec_type string OR array No If drivers have different skills or vehicle types etc, and some jobs can only be served by certain drivers, you can set a spec_type. e.g. "plumber". A Driver can have more than one spec_type, which can be provided as a comma-separated string, or an array. e.g. "plumber,electrician" OR ["plumber", "electrician"]. A job can only be served by a driver that has at least one spec_type in common.

Minimal example:


    {
      "unique_id": "unique_driver_id_1",
      "location": {...}
    }
                                

Exhaustive example


{
  "unique_id": "drvid1",
  "location": {
    "lat": -33.84948962,
    "lon": 151.1274823
  },
  "shift_start": 9.5,
  "shift_end": 18.5
}
                                

Job

Job objects represent tasks, delivery points, customers etc.

They are provided in a list as the "jobs" attribute of a routing problem.

attribute type required note
unique_id string Yes Must allow you to uniquely identify this object
location Location object Yes See location object definition below
duration float Yes* The number of minutes the driver must spend at this job (including parking, doing the job, getting back to the vehicle, etc)
arrive_after float OR string No The earliest time the driver may begin this Job. Time of day as float (e.g. 13.75) or as string (e.g. "13:45") in 24h time
leave_by float OR string No The latest time the Driver may finish working on this Job. Time of day as float (e.g. 13.75) or as string (e.g. "13:45") in 24h time
size integer No The cumulative sizes of jobs are matched against each driver's capacity to ensure that a driver/vehicle does not exceed its capacity. Units can be whatever you which, but must be consistent between all Job's sizes and Driver's capacities. If ANY job has a size, ALL drivers must have a capacity.
spec_type string OR array No If drivers have different skills or vehicle types etc, and some jobs can only be served by certain drivers, you can set a spec_type. e.g. "plumber". A Job can have more than one spec_type, which can be provided as a comma-separated string, or an array. e.g. "plumber,electrician" OR ["plumber", "electrician"]. A job can only be served by a driver that has at least one spec_type in common.

Minimal example:


    {
      "unique_id": "unique_job_id_1",
      "location": {...}
    }
                            

Exhaustive example


    {
      "unique_id": "unique_job_id_2",
      "duration": 10,
      "arrive_after": "10:00",
      "leave_by": "16:30",
      "location": {
        "lat": -33.84948962,
        "lon": 151.1274823
      },
    }
                            

Settings

A Settings object is used to convey routing settings and default values

attribute type required note
single_run bool No [default: false] Is the routing problem is just single run (TSP) or multi-run (VRP)
runs_only bool No [default: false] If true, the API returns a list of Runs (described below). If false, it returns Drivers and Jobs in the same format they were input, except with routing information in each object (e.g. run, seq, eta, etd)
lunch_time float OR string No* You can set a default value here which will apply to all drivers (unless they have a different value specified)
lunch_duration float No* You can set a default value here which will apply to all drivers (unless they have a different value specified)
job_duration float No* You can set a default value here which will apply to all drivers (unless they have a different value specified)
shift_start float OR string No* You can set a default value here which will apply to all drivers (unless they have a different value specified)
shift_end float OR string No* You can set a default value here which will apply to all drivers (unless they have a different value specified)

Minimal example:


    {}
                            

Exhaustive example


    {
      "single_run": false,
      "runs_only": true,
      "lunch_time": "12:45",
      "lunch_duration": 45,
      "job_duration": 3,
      "shift_start": "8:00",
      "shift_end": "17:30"
    }
                            

Location

Location objects define a physical location, i.e. where a driver is, or where a job is

attribute type required note
lat float Yes Latitude
lon float Yes Longitude

Minimal example:


    {
      "lat": -33.88066125, 
      "lon": 151.1830961
    }
                            

Exhaustive example


    {
      "lat": -33.88066125, 
      "lon": 151.1830961
    }
                            

Examples

You can call this example directly using


curl http://tarotrouting.com/static/api/ex1.json | \
curl http://api.tarotrouting.com/v0.35/vrp \
        -H "Content-Type: application/json" \
        -d @-
                    

Request body


{
  "drivers": [
    {
      "unique_id": "drvid1",
      "location": {
        "lat": -33.86779863,
        "lon": 151.1662566
      }
    }
  ],
  "jobs": [
    {
      "unique_id": "uid1",
      "location": {
        "lat": -33.84948962,
        "lon": 151.1274823
      }
    },
    {
      "unique_id": "uid2",
      "location": {
        "lat": -33.88066125,
        "lon": 151.1830961
      }
    },
    {
      "unique_id": "uid3",
      "location": {
        "lat": -33.91316848,
        "lon": 151.2622676
      }
    }
  ],
  "settings": {
    "job_duration": 2,
    "shift_start": 8,
    "shift_end": 17,
    "lunch_time": 11.25,
    "lunch_duration": 1.25,
    "single_run": false,
    "runs_only": true
  }
}                    
                

Response body




{
    "runs": [
        [
            {
                "location": {
                    "lat": -33.86779863,
                    "lon": 151.1662566
                },
                "shift_start": 8.0,
                "shift_end": 17.0,
                "lunch_time": 11.25,
                "lunch_duration": 1.25,
                "capacity": null,
                "run": 1,
                "seq": 0,
                "unique_id": "drvid1"
            },
            {
                "location": {
                    "lat": -33.84948962,
                    "lon": 151.1274823
                },
                "duration": 2.0,
                "arrive_after": null,
                "leave_by": null,
                "size": null,
                "run": 1,
                "seq": 1,
                "eta": "08:14",
                "etd": "08:16",
                "decimal_eta": 8.25,
                "decimal_etd": 8.28,
                "unique_id": "uid1"
            },
            {
                "location": {
                    "lat": -33.91316848,
                    "lon": 151.2622676
                },
                "duration": 2.0,
                "arrive_after": null,
                "leave_by": null,
                "size": null,
                "run": 1,
                "seq": 2,
                "eta": "08:52",
                "etd": "08:54",
                "decimal_eta": 8.88,
                "decimal_etd": 8.91,
                "unique_id": "uid3"
            },
            {
                "location": {
                    "lat": -33.88066125,
                    "lon": 151.1830961
                },
                "duration": 2.0,
                "arrive_after": null,
                "leave_by": null,
                "size": null,
                "run": 1,
                "seq": 3,
                "eta": "09:19",
                "etd": "09:21",
                "decimal_eta": 9.32,
                "decimal_etd": 9.35,
                "unique_id": "uid2"
            }
        ]
    ],
    "unserved_jobs": [],
    "settings": {
        "single_run": false,
        "allocate_fairly": true,
        "runs_only": true,
        "lunch_duration": 1.25,
        "lunch_time": 11.25,
        "job_duration": 2.0,
        "verbose": false,
        "shift_end": 17,
        "shift_start": 8,
        "iterative": false,
        "single_day": true
    }
}
                

You can call this example directly using


curl http://tarotrouting.com/static/api/ex2.json | \
curl http://api.tarotrouting.com/v0.35/vrp \
    -H "Content-Type: application/json" \
    -d @-
                

Request body


{
  "drivers": [
     {"unique_id": "drvid1", "location":  {"lat":  -33.84948962, "lon": 151.1274823, "address": "1 ABBOTSFORD PARADE, ABBOTSFORD, NSW"}, "shift_start": 9.5, "shift_end": 18.5}, 
     {"unique_id": "drvid2", "location":  {"lat":  -33.84948962, "lon": 151.1274823, "address": "1 ABBOTSFORD PARADE, ABBOTSFORD, NSW"}, "shift_start": 9.5, "shift_end": 18.5}
  ],
  "jobs": [
     {"unique_id": "jobid2", "duration":6, "location":  {"lat":  -33.88066125, "lon": 151.1830961, "address": "10 HEGARTY STREET, GLEBE, NSW"}}, 
     {"unique_id": "jobid3", "duration":19, "location":  {"lat":  -33.91316848, "lon": 151.2622676, "address": "7 MUNDARRAH STREET, CLOVELLY, NSW"}}, 
     {"unique_id": "jobid4", "duration":19, "location":  {"lat":  -33.88968324, "lon": 151.1956939, "address": "72 IVY STREET, DARLINGTON, NSW"}}, 
     {"unique_id": "jobid5", "duration":10, "location":  {"lat":  -33.97041993, "lon": 151.24981, "address": "9 BILGA CRESCENT, MALABAR, NSW"}}, 
     {"unique_id": "jobid6", "duration":5, "location":  {"lat":  -33.90496915, "lon": 151.2541725, "address": "1 MACPHERSON STREET, WAVERLEY, NSW"}}, 
     {"unique_id": "jobid7", "duration":19, "location":  {"lat":  -33.89504158, "lon": 151.2082703, "address": "57 WALKER STREET, REDFERN, NSW"}}, 
     {"unique_id": "jobid8", "duration":7, "location":  {"lat":  -33.89345082, "lon": 151.2022818, "address": "117 GEORGE STREET, REDFERN, NSW"}}, 
     {"unique_id": "jobid9", "duration":15, "location":  {"lat":  -33.85326391, "lon": 151.1766157, "address": "6 GOW LANE, BALMAIN, NSW"}}, 
     {"unique_id": "jobid10", "duration":14, "location":  {"lat":  -33.86071164, "lon": 151.1818182, "address": "108 PALMER STREET, BALMAIN, NSW"}}, 
     {"unique_id": "jobid11", "duration":14, "location":  {"lat":  -33.88220174, "lon": 151.204102, "address": "777 GEORGE STREET, HAYMARKET, NSW"}}, 
     {"unique_id": "jobid12", "duration":5, "location":  {"lat":  -33.90415429, "lon": 151.2642999, "address": "3 ST THOMAS STREET, BRONTE, NSW"}}, 
     {"unique_id": "jobid13", "duration":10, "location":  {"lat":  -33.90284297, "lon": 151.2424541, "address": "123 DARLEY ROAD, RANDWICK, NSW"}}, 
     {"unique_id": "jobid14", "duration":9, "location":  {"lat":  -33.90033308, "lon": 151.2001501, "address": "176 BOTANY ROAD, ALEXANDRIA, NSW"}}, 
     {"unique_id": "jobid15", "duration":14, "location":  {"lat":  -33.87164158, "lon": 151.2399018, "address": "14 EASTBOURNE ROAD, DARLING POINT, NSW"}}, 
     {"unique_id": "jobid16", "duration":12, "location":  {"lat":  -33.85549928, "lon": 151.1600317, "address": "22 PARK AVENUE, DRUMMOYNE, NSW"}}, 
     {"unique_id": "jobid17", "duration":9, "location":  {"lat":  -33.88409964, "lon": 151.1651582, "address": "18 RESERVE STREET, ANNANDALE, NSW"}}, 
     {"unique_id": "jobid18", "duration":12, "location":  {"lat":  -33.88298214, "lon": 151.2380535, "address": "304 JERSEY ROAD, WOOLLAHRA, NSW"}}, 
     {"unique_id": "jobid19", "duration":7, "location":  {"lat":  -33.91220169, "lon": 151.2040449, "address": "25 DUNNING AVENUE, ROSEBERY, NSW"}}, 
     {"unique_id": "jobid20", "duration":7, "location":  {"lat":  -33.89411814, "lon": 151.1748914, "address": "15 BISHOPGATE STREET, NEWTOWN, NSW"}}, 
     {"unique_id": "jobid21", "duration":19, "location":  {"lat":  -33.93797078, "lon": 151.2163502, "address": "3 COWPER AVENUE, PAGEWOOD, NSW"}}, 
     {"unique_id": "jobid22", "duration":19, "location":  {"lat":  -33.94644728, "lon": 151.2361177, "address": "86 FITZGERALD AVENUE, MAROUBRA, NSW"}}, 
     {"unique_id": "jobid23", "duration":8, "location":  {"lat":  -33.89534559, "lon": 151.2470514, "address": "78 BIRRELL STREET, BONDI JUNCTION, NSW"}}, 
     {"unique_id": "jobid24", "duration":20, "location":  {"lat":  -33.87677224, "lon": 151.1522766, "address": "26 CHARLES STREET, LEICHHARDT, NSW"}}, 
     {"unique_id": "jobid25", "duration":7, "location":  {"lat":  -33.87263959, "lon": 151.1396341, "address": "40 CRANE AVENUE, HABERFIELD, NSW"}}, 
     {"unique_id": "jobid26", "duration":5, "location":  {"lat":  -33.8751611, "lon": 151.2574656, "address": "37 SALISBURY ROAD, ROSE BAY, NSW"}}, 
     {"unique_id": "jobid27", "duration":20, "location":  {"lat":  -33.95763343, "lon": 151.230528, "address": "488 BUNNERONG ROAD, MATRAVILLE, NSW"}}, 
     {"unique_id": "jobid28", "duration":11, "location":  {"lat":  -33.84460102, "lon": 151.2843276, "address": "9 MILITARY ROAD, WATSONS BAY, NSW"}}, 
     {"unique_id": "jobid29", "duration":11, "location":  {"lat":  -33.88269454, "lon": 151.2785647, "address": "6 GOULD STREET, NORTH BONDI, NSW"}}, 
     {"unique_id": "jobid30", "duration":12, "location":  {"lat":  -33.93929316, "lon": 151.2430273, "address": "133 GALE ROAD, MAROUBRA, NSW"}}, 
     {"unique_id": "jobid31", "duration":12, "location":  {"lat":  -33.86198477, "lon": 151.1732528, "address": "6 BRUCE STREET, ROZELLE, NSW"}}, 
     {"unique_id": "jobid32", "duration":7, "location":  {"lat":  -33.88146201, "lon": 151.1473833, "address": "84 FOSTER STREET, LEICHHARDT, NSW"}}, 
     {"unique_id": "jobid33", "duration":7, "location":  {"lat":  -33.94594604, "lon": 151.1997281, "address": "2 RAMSGATE STREET, BOTANY, NSW"}}, 
     {"unique_id": "jobid34", "duration":16, "location":  {"lat":  -33.88101339, "lon": 151.2095235, "address": "52 RESERVOIR STREET, SURRY HILLS, NSW"}}, 
     {"unique_id": "jobid35", "duration":16, "location":  {"lat":  -33.91311646, "lon": 151.2645353, "address": "377 CLOVELLY ROAD, CLOVELLY, NSW"}}, 
     {"unique_id": "jobid36", "duration":8, "location":  {"lat":  -33.89693206, "lon": 151.2425586, "address": "3 BIRRELL LANE, QUEENS PARK, NSW"}}, 
     {"unique_id": "jobid37", "duration":9, "location":  {"lat":  -33.87880448, "lon": 151.2744521, "address": "23 NARELLE STREET, NORTH BONDI, NSW"}}, 
     {"unique_id": "jobid38", "duration":7, "location":  {"lat":  -33.89258368, "lon": 151.1823636, "address": "22 SUSAN STREET, NEWTOWN, NSW"}}, 
     {"unique_id": "jobid39", "duration":17, "location":  {"lat":  -33.9014655, "lon": 151.18112, "address": "13 MUNNI STREET, NEWTOWN, NSW"}}, 
     {"unique_id": "jobid40", "duration":17, "location":  {"lat":  -33.85989158, "lon": 151.2799333, "address": "749 OLD SOUTH HEAD ROAD, VAUCLUSE, NSW"}}, 
     {"unique_id": "jobid41", "duration":14, "location":  {"lat":  -33.91653072, "lon": 151.2573716, "address": "152 ARDEN STREET, COOGEE, NSW"}}, 
     {"unique_id": "jobid42", "duration":17, "location":  {"lat":  -33.9567952, "lon": 151.2246109, "address": "30 BEAUCHAMP ROAD, HILLSDALE, NSW"}}, 
     {"unique_id": "jobid43", "duration":6, "location":  {"lat":  -33.8961259, "lon": 151.2066051, "address": "165 PHILLIP STREET, WATERLOO, NSW"}}, 
     {"unique_id": "jobid44", "duration":15, "location":  {"lat":  -33.87288331, "lon": 151.1389571, "address": "43 LOUDON AVENUE, HABERFIELD, NSW"}}, 
     {"unique_id": "jobid45", "duration":5, "location":  {"lat":  -33.90421251, "lon": 151.2473289, "address": "11 MARKET STREET, RANDWICK, NSW"}}, 
     {"unique_id": "jobid46", "duration":5, "location":  {"lat":  -33.95993638, "lon": 151.230315, "address": "138 PERRY STREET, MATRAVILLE, NSW"}}, 
     {"unique_id": "jobid47", "duration":12, "location":  {"lat":  -33.89603296, "lon": 151.2638402, "address": "4 PHILIP STREET, BONDI, NSW"}}, 
     {"unique_id": "jobid48", "duration":12, "location":  {"lat":  -33.8746599, "lon": 151.1820315, "address": "46 ALLEN STREET, GLEBE, NSW"}}, 
     {"unique_id": "jobid49", "duration":10, "location":  {"lat":  -33.96842821, "lon": 151.2051551, "address": "7 PENRHYN ROAD, BOTANY BAY, NSW"}}, 
     {"unique_id": "jobid50", "duration":7, "location":  {"lat":  -33.88511715, "lon": 151.1634807, "address": "23 SOUTH AVENUE, LEICHHARDT, NSW"}}, 
     {"unique_id": "jobid1", "duration":19, "location":  {"lat":  -33.9679205, "lon": 151.2485454, "address": "59 AUSTRAL STREET, MALABAR, NSW"}}, 
     {"unique_id": "jobid2", "duration":14, "location":  {"lat":  -33.87589038, "lon": 151.2134011, "address": "22 FRANCIS STREET, DARLINGHURST, NSW"}}, 
     {"unique_id": "jobid3", "duration":6, "location":  {"lat":  -33.9139494, "lon": 151.173349, "address": "57 MARY STREET, ST PETERS, NSW"}}, 
     {"unique_id": "jobid4", "duration":20, "location":  {"lat":  -33.85783755, "lon": 151.1754089, "address": "1 BARR STREET, BALMAIN, NSW"}}, 
     {"unique_id": "jobid5", "duration":8, "location":  {"lat":  -33.88996046, "lon": 151.212109, "address": "41 HIGH HOLBORN STREET, SURRY HILLS, NSW"}}, 
     {"unique_id": "jobid6", "duration":6, "location":  {"lat":  -33.88474901, "lon": 151.1779137, "address": "102 PYRMONT BRIDGE ROAD, CAMPERDOWN, NSW"}}, 
     {"unique_id": "jobid7", "duration":8, "location":  {"lat":  -33.90945074, "lon": 151.2214311, "address": "86 TODMAN AVENUE, KENSINGTON, NSW"}}, 
     {"unique_id": "jobid8", "duration":6, "location":  {"lat":  -33.8676491, "lon": 151.2796285, "address": "9 PEEL STREET, DOVER HEIGHTS, NSW"}}, 
     {"unique_id": "jobid9", "duration":15, "location":  {"lat":  -33.86643187, "lon": 151.114536, "address": "11 RENOWN STREET, CANADA BAY, NSW"}}, 
     {"unique_id": "jobid10", "duration":12, "location":  {"lat":  -33.87790681, "lon": 151.2241739, "address": "108 WOMERAH AVENUE, DARLINGHURST, NSW"}}, 
     {"unique_id": "jobid11", "duration":10, "location":  {"lat":  -33.85529509, "lon": 151.1745931, "address": "9 HAMPTON STREET, BALMAIN, NSW"}}, 
     {"unique_id": "jobid12", "duration":5, "location":  {"lat":  -33.90066922, "lon": 151.2514029, "address": "19 HENRY STREET, QUEENS PARK, NSW"}}, 
     {"unique_id": "jobid13", "duration":18, "location":  {"lat":  -33.88556368, "lon": 151.2620077, "address": "31 BENELONG CRESCENT, BELLEVUE HILL, NSW"}}, 
     {"unique_id": "jobid14", "duration":18, "location":  {"lat":  -33.87823187, "lon": 151.2602431, "address": "29 LATIMER ROAD, BELLEVUE HILL, NSW"}}, 
     {"unique_id": "jobid15", "duration":18, "location":  {"lat":  -33.88084653, "lon": 151.1720786, "address": "31 VIEW STREET, ANNANDALE, NSW"}}, 
     {"unique_id": "jobid16", "duration":8, "location":  {"lat":  -33.90868253, "lon": 151.2388871, "address": "17 CHURCH STREET, RANDWICK, NSW"}}, 
     {"unique_id": "jobid17", "duration":10, "location":  {"lat":  -33.855187, "lon": 151.1310574, "address": "188 HAMPDEN ROAD, ABBOTSFORD, NSW"}}, 
     {"unique_id": "jobid18", "duration":13, "location":  {"lat":  -33.88276155, "lon": 151.1543675, "address": "16 CROMWELL STREET, LEICHHARDT, NSW"}}, 
     {"unique_id": "jobid19", "duration":20, "location":  {"lat":  -33.89218589, "lon": 151.2062541, "address": "90 GREAT BUCKINGHAM STREET, REDFERN, NSW"}}, 
     {"unique_id": "jobid20", "duration":16, "location":  {"lat":  -33.93930481, "lon": 151.2416933, "address": "92 GARDEN STREET, MAROUBRA, NSW"}}, 
     {"unique_id": "jobid21", "duration":17, "location":  {"lat":  -33.88827396, "lon": 151.2270493, "address": "286 MOORE PARK ROAD, PADDINGTON, NSW"}}, 
     {"unique_id": "jobid22", "duration":16, "location":  {"lat":  -33.87718597, "lon": 151.1671798, "address": "37 EDNA STREET, LILYFIELD, NSW"}}, 
     {"unique_id": "jobid23", "duration":13, "location":  {"lat":  -33.86729, "lon": 151.1741998, "address": "22 QUIRK STREET, ROZELLE, NSW"}}, 
     {"unique_id": "jobid24", "duration":11, "location":  {"lat":  -33.98086729, "lon": 151.2356954, "address": "15 ADINA AVENUE, PHILLIP BAY, NSW"}}, 
     {"unique_id": "jobid25", "duration":18, "location":  {"lat":  -33.86752421, "lon": 151.282999, "address": "7 GEORGE STREET, DOVER HEIGHTS, NSW"}}, 
     {"unique_id": "jobid26", "duration":8, "location":  {"lat":  -33.85532175, "lon": 151.1860013, "address": "19 TROUTON STREET, BALMAIN, NSW"}}, 
     {"unique_id": "jobid27", "duration":16, "location":  {"lat":  -33.90256238, "lon": 151.191998, "address": "156 MITCHELL ROAD, ALEXANDRIA, NSW"}}, 
     {"unique_id": "jobid28", "duration":5, "location":  {"lat":  -33.92685386, "lon": 151.2458478, "address": "23 ELLEN STREET, RANDWICK, NSW"}}, 
     {"unique_id": "jobid29", "duration":19, "location":  {"lat":  -33.89407639, "lon": 151.1751419, "address": "42 CHELMSFORD STREET, NEWTOWN, NSW"}}, 
     {"unique_id": "jobid30", "duration":19, "location":  {"lat":  -33.89277092, "lon": 151.2726815, "address": "64 CAMPBELL PARADE, BONDI BEACH, NSW"}}, 
     {"unique_id": "jobid31", "duration":14, "location":  {"lat":  -33.86698089, "lon": 151.2716138, "address": "778 NEW SOUTH HEAD ROAD, ROSE BAY, NSW"}}, 
     {"unique_id": "jobid32", "duration":5, "location":  {"lat":  -33.85804149, "lon": 151.1544175, "address": "20 THOMPSON STREET, DRUMMOYNE, NSW"}}, 
     {"unique_id": "jobid33", "duration":11, "location":  {"lat":  -33.90037586, "lon": 151.1701343, "address": "243 ENMORE ROAD, ENMORE, NSW"}}, 
     {"unique_id": "jobid34", "duration":18, "location":  {"lat":  -33.90001957, "lon": 151.1663016, "address": "20 SEBASTOPOL STREET, ENMORE, NSW"}}, 
     {"unique_id": "jobid35", "duration":8, "location":  {"lat":  -33.89740847, "lon": 151.1769648, "address": "165 PROBERT STREET, NEWTOWN, NSW"}}, 
     {"unique_id": "jobid36", "duration":5, "location":  {"lat":  -33.96114373, "lon": 151.2212086, "address": "77 BEAUCHAMP ROAD, MATRAVILLE, NSW"}}, 
     {"unique_id": "jobid37", "duration":17, "location":  {"lat":  -33.91872143, "lon": 151.2576563, "address": "149 DOLPHIN STREET, COOGEE, NSW"}}, 
     {"unique_id": "jobid38", "duration":13, "location":  {"lat":  -33.88448761, "lon": 151.2380279, "address": "129 JERSEY ROAD, WOOLLAHRA, NSW"}}, 
     {"unique_id": "jobid39", "duration":14, "location":  {"lat":  -33.94775672, "lon": 151.2418133, "address": "10 ASTORIA CIRCUIT, MAROUBRA, NSW"}}, 
     {"unique_id": "jobid40", "duration":15, "location":  {"lat":  -33.85957259, "lon": 151.2838746, "address": "8 MARNE STREET, VAUCLUSE, NSW"}}, 
     {"unique_id": "jobid41", "duration":15, "location":  {"lat":  -33.87298099, "lon": 151.2751708, "address": "5 STRICKLAND STREET, ROSE BAY, NSW"}}, 
     {"unique_id": "jobid42", "duration":13, "location":  {"lat":  -33.89009099, "lon": 151.166737, "address": "95 MACAULAY ROAD, STANMORE, NSW"}}, 
     {"unique_id": "jobid43", "duration":15, "location":  {"lat":  -33.88271513, "lon": 151.2698831, "address": "353 OLD SOUTH HEAD ROAD, NORTH BONDI, NSW"}}, 
     {"unique_id": "jobid44", "duration":12, "location":  {"lat":  -33.87029494, "lon": 151.1556252, "address": "17 CHURCH STREET, LILYFIELD, NSW"}}, 
     {"unique_id": "jobid45", "duration":5, "location":  {"lat":  -33.8884627, "lon": 151.2284555, "address": "43 BENT STREET, PADDINGTON, NSW"}}, 
     {"unique_id": "jobid46", "duration":9, "location":  {"lat":  -33.85306999, "lon": 151.1815787, "address": "137 ROWNTREE STREET, BIRCHGROVE, NSW"}}, 
     {"unique_id": "jobid47", "duration":13, "location":  {"lat":  -33.84549651, "lon": 151.1465506, "address": "341 VICTORIA PLACE, DRUMMOYNE, NSW"}}, 
     {"unique_id": "jobid48", "duration":10, "location":  {"lat":  -33.91015156, "lon": 151.2038055, "address": "32 EPSOM ROAD, ZETLAND, NSW"}}, 
     {"unique_id": "jobid49", "duration":11, "location":  {"lat":  -33.88009534, "lon": 151.1963143, "address": "314 WATTLE STREET, ULTIMO, NSW"}}, 
     {"unique_id": "jobid50", "duration":6, "location":  {"lat":  -33.88763008, "lon": 151.1986112, "address": "97 ABERCROMBIE STREET, CHIPPENDALE, NSW"}}, 
     {"unique_id": "jobid51", "duration":6, "location":  {"lat":  -33.87752213, "lon": 151.132852, "address": "25 WALKER AVENUE, HABERFIELD, NSW"}}
  ],
  "settings": {
    "job_duration": 2,
    "shift_start": 8,
    "shift_end": 17,
    "lunch_time": 11.25,
    "lunch_duration": 0,
    "single_run": false,
    "runs_only": true
  }
}