{  "openapi": "3.1.0",  "info": {    "title": "JOURNEYS",    "description": "Zipabout Journeys API",    "version": "1.1.22"  },  "paths": {    "/journey/{journeyId}": {      "summary": "Actions associated with a specific journey.",      "description": "Retrieval addition or deletion of specific journey information.",      "get": {        "summary": "Retrieve specific journey information.",        "description": "Retreives information relative to given journey id.",        "parameters": [          {            "name": "timezoneId",            "in": "query",            "required": false,            "description": "Unique identifier for timezone output preference, defaults to 'Europe/London'",            "schema": {              "type": "string",              "description": "Unique identifier to timezone"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request",            "schema": {              "type": "string",              "description": "Unique identifier to trace request"            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "$ref": "#/components/schemas/JourneyStatus"                }              }            }          },          "204": {            "description": "Journey ID exists, but no status information is available."          },          "400": {            "description": "Resource not found, journey ID does not exist"          }        }      },      "put": {        "summary": "Update journey information",        "description": "Updates information relative to given journey id. Requires ID to already exist for update to occur.",        "parameters": [          {            "name": "timezoneId",            "in": "query",            "required": false,            "description": "Unique identifier for timezone output preference, defaults to 'Europe/London'",            "schema": {              "type": "string",              "description": "Unique identifier to timezone"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request",            "schema": {              "type": "string",              "description": "Unique identifier to trace request"            }          }        ],        "requestBody": {          "description": "JSON object containing journey data",          "content": {            "application/json": {              "schema": {                "$ref": "#/components/schemas/JourneyPostData"              }            }          }        },        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "array",                  "items": {                    "$ref": "#/components/schemas/DataProcessingInfo"                  }                }              }            }          },          "400": {            "description": "Resource not found, journey ID does not exist"          }        }      },      "delete": {        "summary": "Delete specific journey.",        "description": "Deletes information relative to a given journey id.",        "parameters": [          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request",            "schema": {              "type": "string",              "description": "Unique identifier to trace request"            }          }        ],        "responses": {          "200": {            "description": "OK"          },          "400": {            "description": "Resource not found, journey ID does not exist"          }        }      },      "parameters": [        {          "name": "journeyId",          "in": "path",          "required": true,          "description": "Journey identifier for requested journey to retrieve.",          "schema": {            "type": "string",            "description": "Journey identifier for requested journey to retrieve."          }        }      ]    },    "/journey/{journeyId}/notification": {      "summary": "Actions associated with setting notifications on a specific journey.",      "description": "Enabling or disabling notifications for specific journeys",      "put": {        "summary": "Set notification for specific journey.",        "description": "Set true or false for receiving notifications on a specific journey.",        "parameters": [          {            "name": "notification",            "in": "query",            "required": false,            "description": "Set notification state on a journey, defaults to true (receive notifications)",            "schema": {              "type": "boolean",              "description": "Setting to true opts in to notifications for this journey"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request",            "schema": {              "type": "string",              "description": "Unique identifier to trace request"            }          }        ],        "responses": {          "200": {            "description": "OK"          },          "400": {            "description": "Resource not found, journey ID does not exist"          }        }      },      "parameters": [        {          "name": "journeyId",          "in": "path",          "required": true,          "description": "Journey identifier for requested journey to update.",          "schema": {            "type": "string",            "description": "Journey identifier for requested journey to update."          }        }      ]    },    "/journey/{journeyId}/simulation/init": {      "summary": "Initialisation of a journey status.",      "description": "This endpoint must be called prior to setting the first simulated status",      "post": {        "summary": "Initialisation of a journey status.",        "description": "This endpoint must be called prior to setting the first simulated status",        "parameters": [          {            "name": "journeyId",            "in": "path",            "required": true,            "description": "Journey Id for which status is to be simulated",            "schema": {              "type": "string",              "description": "Journey Id for which status is to be simulated note that the id should be URL encoded"            },            "example": "2d8dfdce-81de-4ee8-8be2-8c5549ab41cc%7C28041084-0601-4cea-84eb-fc77ca17e423"          },          {            "name": "userId",            "in": "query",            "required": true,            "description": "Unique user identifier relative to sourceId. This is used to verify given journeyId is associated with given userId.",            "schema": {              "type": "string",              "description": "Unique user identifier relative to sourceId."            }          },          {            "name": "expectedArrivalTime",            "in": "query",            "required": true,            "description": "Expected arrival time in the format hh:mm",            "schema": {              "type": "string",              "description": "Expected arrival time in the format hh:mm"            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "object",                  "properties": {                    "statusCode": {                      "type": "number",                      "description": "The status code returned"                    }                  }                }              }            }          }        }      }    },    "/journey/{journeyId}/simulation/cancelled": {      "summary": "Setting a stop to be cancelled status.",      "description": "Set the status of a stop to cancelled",      "post": {        "summary": "Set the status of a stop to cancelled.",        "description": "Set the status of a stop to cancelled",        "parameters": [          {            "name": "journeyId",            "in": "path",            "required": true,            "description": "Journey Id for which status is to be simulated",            "schema": {              "type": "string",              "description": "Journey Id for which status is to be simulated note that the id should be URL encoded"            },            "example": "2d8dfdce-81de-4ee8-8be2-8c5549ab41cc%7C28041084-0601-4cea-84eb-fc77ca17e423"          },          {            "name": "userId",            "in": "query",            "required": true,            "description": "Unique user identifier relative to sourceId. This is used to verify given journeyId is associated with given userId.",            "schema": {              "type": "string",              "description": "Unique user identifier relative to sourceId."            }          },          {            "name": "stopId",            "in": "query",            "required": true,            "description": "stopId of the stop to be set to cancelled status (CRS code for train stations)",            "schema": {              "type": "string",              "description": "stopId of the stop to be set to cancelled status (CRS code for train stations)"            }          },          {            "name": "reasonCode",            "in": "query",            "required": false,            "description": "Reason code for the cancellation",            "schema": {              "type": "number",              "description": "Reason code for the cancellation"            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "object",                  "properties": {                    "statusCode": {                      "type": "number",                      "description": "The status code returned"                    }                  }                }              }            }          }        }      }    },    "/journey/{journeyId}/simulation/platform": {      "summary": "Change of platform at destination",      "description": "Change of platform at destination",      "post": {        "summary": "Change of platform at destination",        "description": "Change of platform at destination",        "parameters": [          {            "name": "journeyId",            "in": "path",            "required": true,            "description": "Journey Id for which status is to be simulated",            "schema": {              "type": "string",              "description": "Journey Id for which status is to be simulated note that the id should be URL encoded"            },            "example": "2d8dfdce-81de-4ee8-8be2-8c5549ab41cc%7C28041084-0601-4cea-84eb-fc77ca17e423"          },          {            "name": "userId",            "in": "query",            "required": true,            "description": "Unique user identifier relative to sourceId. This is used to verify given journeyId is associated with given userId.",            "schema": {              "type": "string",              "description": "Unique user identifier relative to sourceId."            }          },          {            "name": "platform",            "in": "query",            "required": true,            "description": "The number of the new platform at the destination",            "schema": {              "type": "number",              "description": "The number of the new platform at the destination"            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "object",                  "properties": {                    "statusCode": {                      "type": "number",                      "description": "The status code returned"                    }                  }                }              }            }          }        }      }    },    "/journey/{journeyId}/simulation/arrival": {      "summary": "Setting the new arrival time for a delay.",      "description": "Setting the new arrival time for a delay",      "post": {        "summary": "Setting the new arrival time for a delay",        "description": "Setting the new arrival time for a delay",        "parameters": [          {            "name": "journeyId",            "in": "path",            "required": true,            "description": "Journey Id for which status is to be simulated",            "schema": {              "type": "string",              "description": "Journey Id for which status is to be simulated note that the id should be URL encoded"            },            "example": "2d8dfdce-81de-4ee8-8be2-8c5549ab41cc%7C28041084-0601-4cea-84eb-fc77ca17e423"          },          {            "name": "userId",            "in": "query",            "required": true,            "description": "Unique user identifier relative to sourceId. This is used to verify given journeyId is associated with given userId.",            "schema": {              "type": "string",              "description": "Unique user identifier relative to sourceId."            }          },          {            "name": "expectedArrivalTime",            "in": "query",            "required": true,            "description": "Expected arrival time in the format hh:mm",            "schema": {              "type": "string",              "description": "Expected arrival time in the format hh:mm"            }          },          {            "name": "stopId",            "in": "query",            "required": true,            "description": "CRS of the stop with new arrival time",            "schema": {              "type": "string",              "description": "CRS of the stop with new arrival time"            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "object",                  "properties": {                    "statusCode": {                      "type": "number",                      "description": "The status code returned"                    }                  }                }              }            }          }        }      },      "parameters": [        {          "name": "journeyId",          "in": "path",          "required": true,          "description": "Journey identifier for requested journey to retrieve.",          "schema": {            "type": "string",            "description": "Journey identifier for requested journey to retrieve."          }        }      ]    },    "/journey/{journeyId}/history": {      "summary": "Previous actions related to a specific journey.",      "description": "Actions associated with specific journey history and actions performed related to that journey.",      "get": {        "summary": "Retrieve message history for given journey.",        "description": "Retrieves message history for a given journey id and metadata for triggers that led to messages.",        "parameters": [          {            "name": "dateFrom",            "in": "query",            "required": false,            "description": "Retrieve messages that were delivered on or after this date. ISO-8601 date (YYYY-MM-DD)",            "schema": {              "type": "string",              "description": "Date that messages were delivered must be on or after this date."            },            "example": "2020-09-07"          },          {            "name": "dateTo",            "in": "query",            "required": false,            "description": "Retrieve messages that were delivered before this date. ISO-8601 date (YYYY-MM-DD)",            "schema": {              "type": "string",              "description": "Date that messages were delivered must be before this date."            },            "example": "2020-09-07"          },          {            "name": "timezoneId",            "in": "query",            "required": false,            "description": "Unique identifier for timezone output preference, defaults to 'Europe/London'",            "schema": {              "type": "string",              "description": "Unique identifier to timezone"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request",            "schema": {              "type": "string",              "description": "Unique identifier to trace request"            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "$ref": "#/components/schemas/JourneyMessageHistory"                }              }            }          }        }      },      "parameters": [        {          "name": "journeyId",          "in": "path",          "required": true,          "description": "Journey identifier for requested journey to retrieve.",          "schema": {            "type": "string",            "description": "Journey identifier for requested journey to retrieve."          }        }      ]    },    "/journey/{journeyId}/checkin": {      "summary": "Actions associating user with a journey in progress.",      "description": "Actions associated with specific journey and user registering as alighting on that service.",      "post": {        "summary": "Register user on this journey",        "description": "Register user as alighting on this journey",        "parameters": [          {            "name": "userId",            "in": "query",            "required": true,            "description": "Unique user identifier relative to sourceId. This is used to verify given journeyId is associated with given userId.",            "schema": {              "type": "string",              "description": "Unique user identifier relative to sourceId."            }          },          {            "name": "sourceId",            "in": "query",            "required": true,            "description": "The source identifier for this query. This value is provided by Zipabout and should be static for each data set.",            "schema": {              "type": "string",              "description": "The source identifier for this query."            },            "example": "1"          },          {            "name": "platform",            "in": "query",            "required": false,            "description": "Platform identifier to differentiate between multiple sources. A source ID could opt-in through various platforms from the same source. Value provided by Zipabout for 3rd party integrations. Defaults to Zipabout.",            "schema": {              "type": "string",              "description": "Platform identifier."            }          },          {            "name": "status",            "in": "query",            "required": false,            "description": "Defines if user is/isn't checked into service. Defaults to true.",            "schema": {              "type": "boolean",              "description": "Defines if user is/isn't checked into service."            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request.",            "schema": {              "type": "string",              "description": "Unique identifier to trace request."            }          }        ],        "requestBody": {          "description": "JSON object containing journey data.",          "content": {            "application/json": {              "schema": {                "$ref": "#/components/schemas/CheckInPostData"              }            }          }        },        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "array",                  "items": {                    "$ref": "#/components/schemas/DataProcessingInfo"                  }                }              }            }          }        }      },      "parameters": [        {          "name": "journeyId",          "in": "path",          "required": true,          "description": "Journey identifier for requested journey to retrieve.",          "schema": {            "type": "string",            "description": "Journey identifier for requested journey to retrieve."          }        }      ]    },    "/user/{userId}": {      "get": {        "summary": "Get journey data for given user.",        "description": "Get known journey data associated with given Zipabout ID.",        "parameters": [          {            "name": "platform",            "in": "query",            "required": false,            "description": "Platform identifier to differentiate between multiple sources. A sourceId could opt-in through various platforms from the same source, e.g. either Whatsapp or Facebook from the same website. Value provided by Zipabout for 3rd party integrations. Defaults to Zipabout.",            "schema": {              "type": "string",              "description": "Platform identifier."            }          },          {            "name": "journeyId",            "in": "query",            "required": false,            "description": "Linked journey id that this journey is a part of.",            "schema": {              "type": "string",              "description": "Linked journey id that this journey is a part of, in order to filter journeys."            }          },          {            "name": "dateFrom",            "in": "query",            "required": false,            "description": "Date that this journey occurs on (from its origin) must be on or after this date. Defaults to today. ISO-8601 date (YYYY-MM-DD)",            "schema": {              "type": "string",              "description": "Date that this journey occurs on must be after this date."            },            "example": "2020-09-07"          },          {            "name": "dateTo",            "in": "query",            "required": false,            "description": "Date that this journey occurs on (from its origin) must be before this date. ISO-8601 date (YYYY-MM-DD)",            "schema": {              "type": "string",              "description": "Date that this journey occurs on must be before this date."            },            "example": "2020-09-07"          },          {            "name": "timezoneId",            "in": "query",            "required": false,            "description": "Unique identifier for timezone output preference, defaults to 'Europe/London'",            "schema": {              "type": "string",              "description": "Unique identifier to timezone"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request.",            "schema": {              "type": "string",              "description": "Unique identifier to trace request."            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "array",                  "items": {                    "$ref": "#/components/schemas/Journey"                  }                }              }            }          }        }      },      "post": {        "summary": "Add journey for given user",        "description": "Add a journey and assign to an existing user.",        "parameters": [          {            "name": "sourceId",            "in": "query",            "required": true,            "description": "The source identifier for this query. This value is provided by Zipabout and should be static for each data set.",            "schema": {              "type": "number",              "description": "The source identifier for this opt-in."            },            "example": "1"          },          {            "name": "platform",            "in": "query",            "required": false,            "description": "Platform identifier to differentiate between multiple sources. A source ID could opt-in through various platforms from the same source. Value provided by Zipabout for 3rd party integrations. Defaults to Zipabout.",            "schema": {              "type": "string",              "description": "The platform which this user ID is relevant for."            },            "example": "facebook"          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request.",            "schema": {              "type": "string",              "description": "Unique identifier to trace request."            }          }        ],        "requestBody": {          "description": "JSON object containing journey data.",          "content": {            "application/json": {              "schema": {                "$ref": "#/components/schemas/JourneyPostData"              }            }          }        },        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "array",                  "items": {                    "$ref": "#/components/schemas/DataProcessingInfo"                  }                }              }            }          }        }      },      "parameters": [        {          "name": "userId",          "in": "path",          "required": true,          "schema": {            "type": "string"          }        }      ]    },    "/user/{userId}/upcoming": {      "get": {        "summary": "Get upcoming journey data for given user.",        "description": "Get known future journeys associated with given Zipabout ID.",        "parameters": [          {            "name": "platform",            "in": "query",            "required": false,            "description": "Platform identifier to differentiate between multiple sources. A sourceId could opt-in through various platforms from the same source, e.g. either Whatsapp or Facebook from the same website. Value provided by Zipabout for 3rd party integrations. Defaults to Zipabout.",            "schema": {              "type": "string",              "description": "Platform identifier."            }          },          {            "name": "journeyId",            "in": "query",            "required": false,            "description": "Linked journey id that this journey is a part of.",            "schema": {              "type": "string",              "description": "Linked journey id that this journey is a part of, in order to filter journeys."            }          },          {            "name": "dateFrom",            "in": "query",            "required": false,            "description": "Datetime that this journey occurs on (from its origin) must be on or after this date. Only fixed one-off journeys are filtered (not regular journeys). ISO-8601 date (YYYY-MM-DDTHH:mm)",            "schema": {              "type": "string",              "description": "Datetime that this journey occurs on must be after this date/time."            },            "example": "2020-09-07T11:00"          },          {            "name": "dateTo",            "in": "query",            "required": false,            "description": "Datetime that this journey occurs on (from its origin) must be before this date. Only fixed one-off journeys are filtered (not regular journeys). ISO-8601 date (YYYY-MM-DDTHH:mm)",            "schema": {              "type": "string",              "description": "Datetime that this journey occurs on must be before this date/time."            },            "example": "2020-09-07T12:00"          },          {            "name": "timezoneId",            "in": "query",            "required": false,            "description": "Unique identifier for timezone output preference, defaults to 'Europe/London'",            "schema": {              "type": "string",              "description": "Unique identifier to timezone"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request.",            "schema": {              "type": "string",              "description": "Unique identifier to trace request."            }          }        ],        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "array",                  "items": {                    "$ref": "#/components/schemas/UpcomingJourneyStatus"                  }                }              }            }          }        }      },      "parameters": [        {          "name": "userId",          "in": "path",          "required": true,          "schema": {            "type": "string"          }        }      ]    },    "/user/{userId}/optout": {      "put": {        "summary": "Opt out user of all journeys",        "description": "Opt-out a user from all journeys they are following so no further notifications are received",        "parameters": [          {            "name": "optout",            "in": "query",            "required": false,            "description": "Opt user in or out of journeys, defaults to true (opt out)",            "schema": {              "type": "boolean",              "description": "Setting to true opts out the user from all journeys, false opts back in"            }          },          {            "name": "traceId",            "in": "query",            "required": false,            "description": "Unique identifier to trace request",            "schema": {              "type": "string",              "description": "Unique identifier to trace request"            }          }        ],        "requestBody": {          "description": "Empty body",          "content": {            "application/json": {              "schema": {                "type": "object",                "description": "Empty/ignored body"              }            }          }        },        "responses": {          "200": {            "description": "OK",            "content": {              "application/json": {                "schema": {                  "type": "array",                  "items": {                    "$ref": "#/components/schemas/DataProcessingInfo"                  }                }              }            }          },          "404": {            "description": "Resource not found, user ID does not exist/no journeys found"          }        }      }    }  },  "components": {    "schemas": {      "JourneyPostData": {        "type": "object",        "required": [          "origin",          "destination",          "startTime",          "legs"        ],        "description": "Journey data to store against user for future notifications.",        "properties": {          "origin": {            "$ref": "#/components/schemas/Place",            "description": "Object describing origin of journey."          },          "destination": {            "$ref": "#/components/schemas/Place",            "description": "Object describing destination of journey."          },          "startTime": {            "type": "number",            "description": "Unix epoch time (in seconds) representing start of journey ."          },          "timeZone": {            "type": "string",            "description": "Time zone of the place as an offset to UTC on the given day of travel (as defined by startTime), in the form [-]HH:mm, e.g. -08:00. Defaults to London time zone offset for given startTime."          },          "departAtTime": {            "type": "boolean",            "description": "If the journey plan was a depart at time (true) or an arrive at time (false). Defaults to true."          },          "monitoringWindow": {            "type": "number",            "description": "Window for how many minutes to monitor either side of this journey. Defaults to 0."          },          "regularity": {            "type": "array",            "description": "When this journey is taken regularly. Each array item represents a day of the week and whether the journey is taken regularly on that day. Index starting from Sunday. Defaults to single journey (not regular).",            "items": {              "type": "boolean"            }          },          "legs": {            "type": "array",            "description": "Array of legs representing each section of the journey.",            "items": {              "$ref": "#/components/schemas/Leg"            }          },          "isReturn": {            "type": "boolean",            "description": "If journeys provided include a single journey (false) or a return (true). Defaults to false."          },          "customData": {            "type": "object",            "description": "Free form object to store against this journey, may include required user data properties per-platform."          }        }      },      "Place": {        "type": "object",        "required": [          "name",          "stopCode",          "stopCodeType"        ],        "description": "Definition of location within a journey.",        "properties": {          "name": {            "type": "string",            "description": "Free text display name for location."          },          "stopCode": {            "type": "string",            "description": "Standard stop identifier value (e.g. CRS/ATCO/NAPTAN/GEOHASH code)."          },          "stopCodeType": {            "type": "string",            "description": "Code type of stopCode value (e.g. CRS/ATCO/NAPTAN)."          },          "countryCode": {            "type": "string",            "description": "3 letter country code identifier using ISO_3166-1 (alpha-3) standard. Defaults to GBR."          },          "nodeType": {            "type": "string",            "description": "Node type of this place (e.g. RAIL/BUS/SUBWAY)."          },          "platform": {            "type": "object",            "required": [              "current"            ],            "description": "Platform history for boarding/alighting at this transport node location.",            "properties": {              "current": {                "type": "string",                "description": "Current specified platform for this location."              },              "previous": {                "type": "array",                "description": "History of platform numbers defined for location. Most recent update last. null entry implies active service but no platform announced yet.",                "items": {                  "type": "string"                }              }            }          }        }      },      "Leg": {        "type": "object",        "required": [          "name",          "stopCodeOrigin",          "stopCodeDestination",          "stopCodeType",          "legIndex",          "travelMode"        ],        "description": "Definition of a leg (section) of a journey.",        "properties": {          "name": {            "type": "string",            "description": "Free text display name for location."          },          "stopCodeOrigin": {            "type": "string",            "description": "Standard stop identifier value for origin (e.g. CRS/ATCO/NAPTAN code)."          },          "stopCodeDestination": {            "type": "string",            "description": "Standard stop identifier value for destination (e.g. CRS/ATCO/NAPTAN code)."          },          "stopCodeType": {            "type": "string",            "description": "Code type of stopCodeOrigin/stopCodeDestination value (e.g. CRS/ATCO/NAPTAN). If the origin/destination have different types, use stopCodeTypeDestination for the destination."          },          "stopCodeTypeDestination": {            "type": "string",            "description": "Code type of stopCodeDestination value, if different to the type for the stopCodeOrigin value (e.g. CRS/ATCO/NAPTAN). If omitted, it is assumed they are the same."          },          "legIndex": {            "type": "number",            "description": "Zero indexed value representing position of this leg within an overall journey. Indexes may be used more than once when journey includes return as specified by isOutbound field."          },          "isOutbound": {            "type": "boolean",            "description": "Outbound (true) or inbound (false), for when a part of a return journey. Always outbound (true) when a single journey. Defaults to true."          },          "travelMode": {            "type": "string",            "description": "Mode of transport for leg of journey. Acceptable values: TRANSIT, RAIL, TRAM, BUS, GONDOLA, SUBWAY, FERRY, WALK, BICYCLE, CAR."          },          "startTime": {            "type": "number",            "description": "Epoch time (in seconds) for departure in UTC (no timezone information). One of start time or end time is required."          },          "endTime": {            "type": "number",            "description": "Epoch time (in seconds) for arrival in UTC (no timezone information). One of start time or end time is required."          },          "customData": {            "type": "object",            "description": "Free-form JSON containing additional data custom to specific client/use-case for this journey."          }        }      },      "Journey": {        "type": "object",        "required": [          "userId",          "journeyId",          "channelId",          "platform",          "active",          "optedOut",          "notification",          "isReturn",          "isOutbound",          "schedule",          "origin",          "destination",          "travelMode",          "legIndex",          "created",          "modified"        ],        "description": "Definition of a leg (section) of a journey.",        "properties": {          "userId": {            "type": "string",            "description": "Unique Zipabout user identifier."          },          "journeyId": {            "type": "string",            "description": "Unique identifier for this journey."          },          "channelId": {            "type": "string",            "description": "Identifier representing channel that this journey was created within."          },          "platform": {            "type": "string",            "description": "Software platform that this journey was created within (Facebook, Whatsapp, etc)."          },          "active": {            "type": "boolean",            "description": "Represents if journey is active within system."          },          "optedOut": {            "type": "boolean",            "description": "Marked true if user has opted out for journey notifications on a global level."          },          "notification": {            "type": "boolean",            "description": "Marked false if user has turned off notifications for an individual journey."          },          "isReturn": {            "type": "boolean",            "description": "Reflects if journey is part of a return."          },          "isOutbound": {            "type": "boolean",            "description": "Reflects if this is the outbound part of a journey. If a single (not a return), this will always be true."          },          "schedule": {            "$ref": "#/components/schemas/JourneySchedule",            "description": "Object describing user selected journey schedule for this leg."          },          "regularity": {            "type": "array",            "description": "Array containing days of week representing when this journey is taken regularly. Mon-Sun.",            "items": {              "type": "boolean"            }          },          "origin": {            "$ref": "#/components/schemas/Place",            "description": "Object describing origin of journey."          },          "destination": {            "$ref": "#/components/schemas/Place",            "description": "Object describing destination of journey."          },          "travelMode": {            "type": "string",            "description": "Mode of transport for leg of journey. Acceptable values: TRANSIT, RAIL, TRAM, BUS, GONDOLA, SUBWAY, FERRY, WALK, BICYCLE, CAR."          },          "legIndex": {            "type": "number",            "description": "Zero indexed value representing nth segment of the journey."          },          "isFinalLeg": {            "type": "boolean",            "description": "True if this is the last leg of an outbound or return part of a journey. Return journeys will contain two final legs."          },          "created": {            "type": "string",            "description": "Date that this journey was created. ISO 8601 (with timezone)"          },          "modified": {            "type": "string",            "description": "Date that this journey was last updated. ISO 8601 (with timezone)"          },          "customData": {            "type": "object",            "description": "Free-form JSON containing additional data custom to specific client/use-case."          }        }      },      "JourneySchedule": {        "type": "object",        "required": [          "departAtTime",          "time"        ],        "description": "Definition of a user selected journey schedule. Supports both regular journeys without a specific date, and one-off journeys.",        "properties": {          "departAtTime": {            "type": "boolean",            "description": "Specifies whether the scheduled time is for a departure time, if false it implies the time represents the desired time of arrival. This is intended for combination with monitoring window field. If the journey is a specific service then departAtTime will be true."          },          "time": {            "type": "string",            "description": "Human readable time of outbound journey in HH:mm format. In local time for departure location (or arrival location if departAtTime is false)."          },          "scheduledDepartureDateTime": {            "type": "string",            "description": "Date/time that this journey is scheduled to depart its origin, optional as it is not used for regular journeys. ISO 8601 (with timezone)."          },          "scheduledArrivalDateTime": {            "type": "string",            "description": "Date/time that this journey is scheduled to arrive at its destination, optional as it is not used for regular journeys. ISO 8601 (with timezone)."          },          "monitoringWindow": {            "type": "number",            "description": "Window for how many minutes to monitor either side of this journey scheduled departure/arrival. Defaults to 0."          }        }      },      "JourneyMessageHistory": {        "type": "object",        "required": [          "message"        ],        "description": "Details of message delivered to a user",        "properties": {          "triggerData": {            "allOf": [              {                "$ref": "#/components/schemas/Journey"              }            ],            "description": "Journey data object related to this message"          },          "messages": {            "type": "array",            "description": "Array of messages sent related to this journey.",            "items": {              "$ref": "#/components/schemas/JourneyMessage"            }          }        }      },      "JourneyMessage": {        "type": "object",        "required": [          "messageType",          "platform",          "channelId",          "senderId",          "dataMappings",          "payload",          "created"        ],        "description": "Details of message delivered to a user",        "properties": {          "vehicleId": {            "type": "string",            "description": "Identifier representing vehicle that message was related to."          },          "messageType": {            "type": "string",            "description": "Type of message sent to user."          },          "platform": {            "type": "string",            "description": "Software platform that this message was generated for (facebook, whatsapp, etc)."          },          "channelId": {            "type": "string",            "description": "Identifier representing channel that this message was sent within."          },          "journeyId": {            "type": "string",            "description": "Identifier representing journey that this message was associated with."          },          "senderId": {            "type": "string",            "description": "Human readable identifier representing channel that message was sent to a user by."          },          "dataMappings": {            "type": "object",            "description": "JSON key value pairs reprsenting data used to construct message payload."          },          "payload": {            "type": "object",            "description": "JSON payload delivered to external messaging system (if applicable)."          },          "deliveryResponse": {            "type": "object",            "description": "Payload response returned by 3rd party for message delivery attempt."          },          "created": {            "type": "string",            "description": "Date/time that this message delivery attempt was made. ISO 8601 (with timezone)."          },          "customData": {            "type": "object",            "description": "Free-form JSON containing additional data custom to specific client/use-case."          }        }      },      "JourneyStatus": {        "type": "object",        "required": [          "journeyId",          "userId",          "vehicleId",          "origin",          "destination",          "stops",          "stopsCodeType",          "status",          "lastUpdated"        ],        "description": "",        "properties": {          "journeyId": {            "type": "string",            "description": "Unique identifier for this journey."          },          "userId": {            "type": "string",            "description": "Unique Zipabout user identifier."          },          "vehicleId": {            "type": "string",            "description": "Identifier representing vehicle that journey is associated with."          },          "origin": {            "$ref": "#/components/schemas/Place",            "description": "Object describing origin of journey."          },          "destination": {            "$ref": "#/components/schemas/Place",            "description": "Object describing origin of journey."          },          "stops": {            "type": "array",            "description": "Array of stops points for journey, stopsCodeType defines the code type used in this array.",            "items": {              "$ref": "#/components/schemas/JourneyStopStatus"            }          },          "stopsCodeType": {            "type": "string",            "description": "Code type used by stops array."          },          "scheduledDepartureDateTime": {            "type": "string",            "description": "Scheduled departure date time from origin. ISO 8601 (with timezone)."          },          "scheduledArrivalDateTime": {            "type": "string",            "description": "Scheduled arrival date time at destination. ISO 8601 (with timezone)"          },          "estimatedDepartureDateTime": {            "type": "string",            "description": "Estimated departure date time from origin, based on schedule if live data is unavailable. ISO 8601 (with timezone)."          },          "estimatedArrivalDateTime": {            "type": "string",            "description": "Estimated arrival date time at destination, based on schedule if live data is unavailable. ISO 8601 (with timezone)"          },          "status": {            "type": "string",            "description": "Represents status of train relative to schedule, values can be any of: 'on-time', 'delayed', 'early', 'cancelled', 'suppressed', 'unknown'."          },          "departurePlatform": {            "type": "array",            "description": "History of platform numbers defined for departure at origin. Most recent update last. null entry implies active service but no platform announced yet.",            "items": {              "type": "string"            }          },          "arrivalPlatform": {            "type": "array",            "description": "History of platform numbers defined for arrival at destination. Most recent update last.",            "items": {              "type": "string"            }          },          "delayReasonCode": {            "type": "number",            "description": "Integer representing reason code supplied for delay."          },          "delayReasonText": {            "type": "string",            "description": "Curated text translating delay reason code into something usable in a message."          },          "cancelReasonCode": {            "type": "number",            "description": "Integer representing reason code supplied for cancellation."          },          "cancelReasonText": {            "type": "string",            "description": "Curated text translating cancellation reason code into something usable in a message."          },          "lastUpdated": {            "type": "string",            "description": "Date that this journey status was last updated. ISO 8601 (with timezone)."          },          "customData": {            "type": "object",            "description": "Free-form JSON containing additional data custom to specific client/use-case."          }        }      },      "JourneyStopStatus": {        "type": "object",        "required": [          "stopId"        ],        "description": "Data regarding the current status of a journey stop",        "properties": {          "stopId": {            "type": "string",            "description": "stopCode for this journey stop, the type of the stop is described in stopsCodeType field of JourneyStatus object."          },          "scheduledDepartureDateTime": {            "type": "string",            "description": "Scheduled departure time at this stop on the service. ISO 8601 (with timezone)."          },          "scheduledArrivalDateTime": {            "type": "string",            "description": "Scheduled arrival time at this stop on the service. ISO 8601 (with timezone)."          },          "estimatedDepartureDateTime": {            "type": "string",            "description": "Estimated departure time at this stop on the service. ISO 8601 (with timezone)."          },          "estimatedArrivalDateTime": {            "type": "string",            "description": "Estimated arrival time at this stop on the service. ISO 8601 (with timezone)."          },          "isDelayed": {            "type": "boolean",            "description": "Delayed status for this stop. If set to 'true', any delay presented to the end user should NOT provide a precise predicted departure and/or arrival time. If set to 'false' the estimated departure/arrival time can be displayed to the end user."          },          "cancelled": {            "type": "boolean",            "description": "Cancellation status for this stop. True implies that the departure from this stop is cancelled."          }        }      },      "UpcomingJourneyStatus": {        "type": "object",        "required": [          "journeyData",          "vehicleId",          "estimatedDepartureDateTime",          "estimatedArrivalDateTime",          "status",          "lastUpdated"        ],        "description": "",        "properties": {          "journeyData": {            "$ref": "#/components/schemas/Journey",            "description": "."          },          "vehicleId": {            "type": "string",            "description": "Identifier representing vehicle that journey is associated with."          },          "serviceDestination": {            "$ref": "#/components/schemas/Place",            "description": "Object describing destination of service."          },          "serviceIdentifer": {            "type": "string",            "description": "Identifier to represent service, i.e. bus number/train route name"          },          "estimatedDepartureDateTime": {            "type": "string",            "description": "Estimated departure date time at origin, based on schedule if live data is unavailable. ISO 8601 (with timezone)."          },          "estimatedArrivalDateTime": {            "type": "string",            "description": "Estimated arrival date time at destination, based on schedule if live data is unavailable. ISO 8601 (with timezone)."          },          "status": {            "type": "string",            "description": "Represents status of vehicle relative to schedule, values can be any of: 'on-time', 'delayed', 'early', 'cancelled', 'suppressed', 'unknown'."          },          "legStatus": {            "type": "string",            "description": "Represents status of leg, values can be any of: 'future', 'in-progress', 'complete'."          },          "lastUpdated": {            "type": "string",            "description": "Date that this journey status was last updated. ISO 8601 (with timezone)."          }        }      },      "CheckInPostData": {        "type": "object",        "description": "Data related to user check in on service.",        "properties": {          "customData": {            "type": "object",            "description": "Free form object to store against this journey containing custom data related to check in on service."          }        }      },      "DataProcessingInfo": {        "type": "object",        "required": [          "uniqueDataId",          "status"        ],        "description": "Status representing acceptance of data processed.",        "properties": {          "uniqueDataIds": {            "type": "array",            "description": "GUIDs for data received in order to trace if required.",            "items": {              "type": "string"            }          },          "status": {            "type": "string",            "description": "text status representing ability or inability process. \"ok|error\""          },          "message": {            "type": "string",            "description": "Detail relating to any errors."          }        },        "example": {          "uniqueDataIds": [            "0024fece-7de0-42ec-aed7-94aafefe3e3a"          ],          "status": "ok"        }      }    }  }}