addedInput schema / anyOf
Added value: +[
+ {
+ "required": [
+ "stops",
+ "days"
+ ]
+ },
+ {
+ "required": [
+ "id"
+ ]
+ }
+]
changedInput schema / properties / days / description
Previous value: -"Optional day-by-day itinerary, one entry per day of the trip in order. When present it renders as a tappable day view over the map; when absent the map shows the route alone."New value: +"The day-by-day itinerary: one entry per calendar day of the trip, in order, each with a title and the day's activities. It renders as a tappable day view over the map, and selecting a day highlights that day's driving. Expected on any call that sends `stops`; when it is missing the map falls back to bare day titles worked out from the route, with no activities."
addedInput schema / properties / guests / properties / children
Added value: +{
+ "description": "How many children, for when their ages aren't known. Ignored when `childrenAges` is given.",
+ "type": "integer"
+}
changedInput schema / properties / guests / properties / childrenAges / description
Previous value: -"Age of each child (drives hotel/ticket pricing)."New value: +"Age of each child, e.g. [7, 11]. Preferred over `children`, because hotel and ticket pricing depends on the ages."
changedInput schema / properties / id / description
Previous value: -"Id of a trip returned by an earlier call, identifying which trip this call applies to. With it, that same trip is updated rather than a new one created: the map link stays the same, and edits the traveller made on the map survive — a re-sent stop keeps the position they dragged it to (instead of the coordinates given here), and stops or waypoints they added on the map but absent from `stops` are kept, while a stop previously present and now omitted is removed. Without it, a separate new trip is created and any such map edits are not carried over. Supplied alone, with no `stops`, it returns the trip's current state."New value: +"Optional. Id of a trip returned by an earlier call, identifying which trip this call applies to. With it, that same trip is updated rather than a new one created: the map link stays the same, and edits the traveller made on the map survive — a re-sent stop keeps the position they dragged it to (instead of the coordinates given here), and stops or waypoints they added on the map but absent from `stops` are kept, while a stop previously present and now omitted is removed. Without it, a separate new trip is created and any such map edits are not carried over. Supplied alone, with no `stops`, nothing is modified — the trip comes back exactly as saved; changing a trip means sending `id` together with the full updated stop list."
changedInput schema / properties / stops / description
Previous value: -"The route in driving order (first stop = origin). 1–40 stops."New value: +"The route in driving order, 1 to 40 entries (the first is the origin). Required for a normal call — the only call that omits it is `id` on its own, which re-reads a saved trip unchanged. Each entry needs `name`; every other field is optional."
changedInput schema / properties / stops / items / properties / arriveBy / description
Previous value: -"How the traveller reaches this stop from the previous one. Defaults to a road leg (drive) when absent; 'flight' marks a real flight leg between two stops."New value: +"Optional. How the traveller reaches this stop from the previous one. Defaults to a road leg (drive) when absent; 'flight' marks a real flight leg between two stops."
changedInput schema / properties / stops / items / properties / lat / description
Previous value: -"Decimal latitude. When omitted, the stop is geocoded from its name, which is slower and less exact."New value: +"Optional decimal latitude. When omitted, the stop is geocoded from its name, which is slower and less exact."
changedInput schema / properties / stops / items / properties / lon / description
Previous value: -"Decimal longitude. When omitted, the stop is geocoded from its name, which is slower and less exact."New value: +"Optional decimal longitude. When omitted, the stop is geocoded from its name, which is slower and less exact."
changedInput schema / properties / stops / items / properties / nights / description
Previous value: -"Nights at this stop: 0 = pass-through / day stop, 1–3 = overnight."New value: +"Optional. Nights at this stop: 0 = pass-through / day stop, 1 or more = overnight. Defaults to 1 when absent."
changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "assumed": {
+ "description": "Stops placed from their name alone because no coordinates were given — approximate pins.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "days": {
+ "description": "The day-by-day itinerary, when one was supplied.",
+ "items": {
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "editToken": {
+ "description": "Capability token that permits editing this trip; used by the map widget to save the traveller's changes.",
+ "type": "string"
+ },
+ "id": {
+ "description": "The trip's id. Pass it back as the `id` argument to apply a later change to this same trip.",
+ "type": "string"
+ },
+ "keptByTraveller": {
+ "description": "Stops left where the traveller placed them on the map, so the coordinates supplied in this call were not applied.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "trip": {
+ "description": "The trip as rendered, after geocoding and (on a continuation) merging the traveller's own map edits.",
+ "properties": {
+ "guests": {
+ "properties": {
+ "adults": {
+ "type": "integer"
+ },
+ "childrenAges": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ },
+ "maxKmPerDay": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "startDate": {
+ "description": "ISO yyyy-mm-dd, when one was given.",
+ "type": "string"
+ },
+ "stops": {
+ "description": "Final stops in driving order, each with resolved coordinates.",
+ "items": {
+ "properties": {
+ "arriveBy": {
+ "type": "string"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ },
+ "nights": {
+ "type": "integer"
+ },
+ "sub": {
+ "type": "string"
+ },
+ "waypoint": {
+ "description": "True for a shaping point the traveller dragged out of the route line, not a destination.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "name",
+ "lat",
+ "lon"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "name",
+ "stops"
+ ],
+ "type": "object"
+ },
+ "unchanged": {
+ "description": "True when the call only read the saved trip and changed nothing — an `id` sent with no `stops`.",
+ "type": "boolean"
+ },
+ "url": {
+ "description": "Link that opens this trip on the map at stopful.com.",
+ "type": "string"
+ },
+ "warnings": {
+ "description": "Stops whose supplied coordinates are far from where their name resolves, with the distance and the resolved position.",
+ "items": {
+ "properties": {
+ "km": {
+ "type": "number"
+ },
+ "lat": {
+ "type": "number"
+ },
+ "lon": {
+ "type": "number"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "url",
+ "trip"
+ ],
+ "type": "object"
+}