addedInput schema / $defs / EmissionsFuel
Added value: +{
+ "description": "What a vehicle burns, in clean-air-zone scheme terms.",
+ "oneOf": [
+ {
+ "const": "petrol",
+ "description": "Petrol, including petrol hybrids (schemes rate a hybrid by its\ncombustion engine's approval).",
+ "type": "string"
+ },
+ {
+ "const": "diesel",
+ "description": "Diesel, including diesel hybrids.",
+ "type": "string"
+ },
+ {
+ "const": "electric",
+ "description": "Battery-electric.",
+ "type": "string"
+ },
+ {
+ "const": "hydrogen",
+ "description": "Hydrogen fuel cell.",
+ "type": "string"
+ },
+ {
+ "const": "gas",
+ "description": "LPG or CNG; rated as petrol by every scheme in the dataset.",
+ "type": "string"
+ }
+ ]
+}
addedInput schema / $defs / EmissionsSpec
Added value: +{
+ "description": "A vehicle's emission declaration, for clean-air / low-emission zone\nassessment.",
+ "properties": {
+ "euro_standard": {
+ "description": "Its Euro emission standard, 1–6. Heavy-duty approvals are written\nin Roman numerals (Euro VI); declare Euro VI as `6`. Required for\nany combustion fuel — without it no zone can be resolved, and a\nhalf-declared vehicle is indistinguishable from an undeclared one.\nOptional only for `electric` or `hydrogen`.",
+ "format": "uint8",
+ "maximum": 255,
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "fuel": {
+ "$ref": "#/$defs/EmissionsFuel",
+ "description": "What it burns."
+ },
+ "vehicle_category": {
+ "$ref": "#/$defs/EmissionsVehicleCategory",
+ "description": "What kind of vehicle this is, in scheme terms."
+ }
+ },
+ "required": [
+ "vehicle_category",
+ "fuel"
+ ],
+ "type": "object"
+}
addedInput schema / $defs / EmissionsVehicleCategory
Added value: +{
+ "description": "What a vehicle is, in clean-air-zone scheme terms.\n\nDeclaring this turns \"charge depends on vehicle emissions\" into an\nanswer. Without it a zone can only be named, never priced.",
+ "oneOf": [
+ {
+ "const": "car",
+ "description": "A private car.",
+ "type": "string"
+ },
+ {
+ "const": "van",
+ "description": "A van or light goods vehicle up to 3.5 tonnes.",
+ "type": "string"
+ },
+ {
+ "const": "minibus",
+ "description": "A minibus (typically 8+ passenger seats, up to 5 tonnes).",
+ "type": "string"
+ },
+ {
+ "const": "hgv",
+ "description": "A heavy goods vehicle over 3.5 tonnes.",
+ "type": "string"
+ },
+ {
+ "const": "bus",
+ "description": "A bus over 5 tonnes.",
+ "type": "string"
+ },
+ {
+ "const": "coach",
+ "description": "A coach over 5 tonnes.",
+ "type": "string"
+ },
+ {
+ "const": "taxi",
+ "description": "A licensed hackney carriage.",
+ "type": "string"
+ },
+ {
+ "const": "phv",
+ "description": "A private hire vehicle.",
+ "type": "string"
+ },
+ {
+ "const": "motorcycle",
+ "description": "A motorcycle, moped or tricycle.",
+ "type": "string"
+ },
+ {
+ "const": "motorhome",
+ "description": "A motor caravan or campervan.",
+ "type": "string"
+ }
+ ]
+}
addedInput schema / $defs / OptimiseVehicleSpec / properties / reloads
Added value: +{
+ "anyOf": [
+ {
+ "$ref": "#/$defs/ReloadsSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Let this vehicle return to a depot, reload and go out again — the\nwaste-collection tipping round, the van that comes back for a\nsecond wave of parcels."
+}
addedInput schema / $defs / OptimiseVehicleSpec / properties / territory_ids
Added value: +{
+ "description": "Ids of the request's `territories` this vehicle may work in.\nOmitted or empty, the vehicle is UNRESTRICTED and may serve any\ntask, inside a territory or outside every one of them. Listed, the\nvehicle may serve a task only if that task sits inside at least one\nof the named territories.",
+ "items": {
+ "type": "string"
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+}
addedInput schema / $defs / RelaxSpec
Added value: +{
+ "description": "What the caller is willing to give up if the first solve leaves work\nunassigned. At least one field is required.",
+ "properties": {
+ "allow_overtime_s": {
+ "description": "Extend every vehicle's shift END by this many seconds. Shift starts\nare never moved earlier — a driver cannot begin before they begin.",
+ "format": "int64",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "time_windows_by_s": {
+ "description": "Widen every task time window by this many seconds at EACH end. A\n09:00–12:00 window with 1800 becomes 08:30–12:30.",
+ "format": "int64",
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+}
addedInput schema / $defs / ReloadsSpec
Added value: +{
+ "description": "A vehicle's multi-trip reload plan.",
+ "properties": {
+ "depot": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/LatLon"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Where the vehicle reloads. Omitted, its own `start` is used (or its\n`end` if it declared only that)."
+ },
+ "max_trips": {
+ "description": "How many trips this vehicle may run in its shift, 2–5. A BUDGET,\nnot a prediction: the shift is cut into that many fixed windows\nbefore the solve, so asking for five trips on a shift that supports\nthree shrinks every window to a fifth and can make the whole day\nworse. Ask for the number of trips you actually expect to run.",
+ "format": "uint32",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "reload_time_s": {
+ "description": "Seconds at the depot between trips — tipping, reloading, the\nweighbridge. Held out of the shift before it is partitioned, so it\nis never accidentally spent driving.",
+ "format": "uint32",
+ "minimum": 0,
+ "type": [
+ "integer",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "max_trips"
+ ],
+ "type": "object"
+}
addedInput schema / $defs / TerritorySpec
Added value: +{
+ "description": "One named territory: a polygon that bounds which vehicle may serve\nwhich stop.",
+ "properties": {
+ "id": {
+ "description": "Caller-chosen id, echoed back and referenced by\n`vehicles[].territory_ids`. Must be unique within the request.",
+ "type": "string"
+ },
+ "polygon": {
+ "description": "The outer ring as GeoJSON `[lon, lat]` positions — longitude\nFIRST. Closed or open; an unclosed ring is closed for you.",
+ "items": {
+ "items": {
+ "format": "double",
+ "type": "number"
+ },
+ "maxItems": 2,
+ "minItems": 2,
+ "type": "array"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "id",
+ "polygon"
+ ],
+ "type": "object"
+}
addedInput schema / properties / avoid_zones
Added value: +{
+ "description": "Keep the optimisation's travel-time matrix out of every zone the\ndeclared vehicle would be charged or banned in. Requires\n`emissions`.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+}
addedInput schema / properties / emissions
Added value: +{
+ "anyOf": [
+ {
+ "$ref": "#/$defs/EmissionsSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The fleet's emission declaration, for UK clean-air / low-emission\nzone assessment. On its own it annotates: the response's `zones`\nblock names every zone containing one of the problem's own\nlocations and what this vehicle would pay there. With\n`avoid_zones` it also steers the internal travel-time matrix away\nfrom those zones, so the plan itself changes."
+}
addedInput schema / properties / relax_if_unassigned
Added value: +{
+ "anyOf": [
+ {
+ "$ref": "#/$defs/RelaxSpec"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Re-solve ONCE with these relaxations if the first solve leaves work\nunassigned, and say honestly which plan came back. At most one\nsecond solve, never beyond the caps you state, and the relaxed plan\nis returned only if it assigns MORE work than the first — giving\naway constraints for nothing is strictly worse than not giving them\naway. Breaks are never widened, nor are capacities, skills,\nterritories or task caps: only time windows move, and only by the\nstated amounts. Bills as two solves when the second one runs."
+}
addedInput schema / properties / territories
Added value: +{
+ "description": "Fleet territories: named polygons that bound which vehicle may\nserve which stop, referenced by `vehicles[].territory_ids`. These\nare request data — caller-drawn rounds, validated per call and\nnever stored. Nothing to do with clean-air zones or with the\noffline map packages of the same word.",
+ "items": {
+ "$ref": "#/$defs/TerritorySpec"
+ },
+ "type": [
+ "array",
+ "null"
+ ]
+}
addedOutput schema / properties / relaxation
Added value: +{
+ "description": "The relaxation report: the caps requested, whether a second solve\nran, whether ITS plan is the one returned, what was widened, and\nwhat is still unassigned. Present only when `relax_if_unassigned`\nwas declared.\n\nAlways read `second_solve` and `relaxed_plan_used` before telling\nanyone the day fits. A plan produced under relaxation has had\npromises moved, and the block is what says so."
+}
addedOutput schema / properties / reloads
Added value: +{
+ "description": "The multi-trip split: each vehicle's trips, their windows, the\ndepot each returns to, and the stated approximation. Present only\nwhen a vehicle declared `reloads`.\n\nRead the `basis` inside it before quoting arrival times. The trip\nwindows are fixed BEFORE the solve, so a lorry that tips early\ncannot lend the spare time to its next trip: stops can come back\nunassigned that a truly sequential model would have served. The\nplan is feasible, never optimistic — it cannot put a vehicle in two\nplaces at once — but it is not optimal. Re-plan after each tip\nthrough `replan_routes` for the tighter answer."
+}
addedOutput schema / properties / territories
Added value: +{
+ "description": "How the territories bound the plan: which vehicle was eligible for\nwhat, and any task no eligible vehicle existed for. Present only\nwhen `territories` was declared."
+}
addedOutput schema / properties / zones
Added value: +{
+ "description": "Clean-air / low-emission zones touching the problem's own\nlocations, and what the declared vehicle pays in each. Present only\nwhen `emissions` was declared."
+}