ws-dottie
Version:
Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration
1,102 lines • 601 kB
JSON
{
"openapi": "3.0.0",
"info": {
"title": "Wsf Schedule API",
"version": "1.0.0",
"description": "Wsf Schedule API - Washington State Department of Transportation APIs"
},
"servers": [
{
"url": "https://www.wsdot.wa.gov/ferries/api/schedule/rest",
"description": "Production server"
}
],
"components": {
"schemas": {
"RoadwayLocation": {
"type": "object",
"properties": {
"Description": {
"type": "string",
"nullable": true,
"description": "Human-readable description of the roadway location, such as interchange names or cross streets."
},
"Direction": {
"type": "string",
"nullable": true,
"description": "Traffic direction designation: N, S, B, NB, or SB, indicating which side of the highway is affected."
},
"Latitude": {
"type": "number",
"description": "Latitude of the roadway location in decimal degrees."
},
"Longitude": {
"type": "number",
"description": "Longitude of the roadway location in decimal degrees."
},
"MilePost": {
"type": "number",
"description": "Milepost marker along the highway corridor, with 0 indicating route terminus."
},
"RoadName": {
"type": "string",
"nullable": true,
"description": "Highway or route designation code, such as '005' for I-5 or '090' for I-90."
}
},
"required": [
"Description",
"Direction",
"Latitude",
"Longitude",
"MilePost",
"RoadName"
],
"description": "Roadway location information including route, milepost, coordinates, and direction."
},
"FetchCacheFlushDateScheduleOutput": {
"type": "string",
"description": "UTC datetime when static endpoint data was last updated, or undefined if no update has occurred.",
"format": "date-time"
},
"FetchRouteDetailsByTripDateAndRouteIdOutput": {
"type": "object",
"properties": {
"RouteID": {
"type": "number",
"description": "Numeric ID of the route."
},
"RouteAbbrev": {
"type": "string",
"nullable": true,
"description": "Route abbreviation code for compact identification."
},
"Description": {
"type": "string",
"nullable": true,
"description": "Display name of the route."
},
"RegionID": {
"type": "number",
"description": "Numeric ID of the WSF region associated with route."
},
"VesselWatchID": {
"type": "number",
"description": "Numeric ID used to group routes for VesselWatch system."
},
"ReservationFlag": {
"type": "boolean",
"description": "True if route supports advance vehicle reservations; otherwise false."
},
"InternationalFlag": {
"type": "boolean",
"description": "True if route operates outside United States; otherwise false."
},
"PassengerOnlyFlag": {
"type": "boolean",
"description": "True if route services only passengers without vehicles; otherwise false."
},
"CrossingTime": {
"type": "string",
"nullable": true,
"description": "Estimated crossing time in minutes as string, or null if unavailable.",
"format": "date-time"
},
"AdaNotes": {
"type": "string",
"nullable": true,
"description": "ADA accessibility information in HTML format, or null if unavailable."
},
"GeneralRouteNotes": {
"type": "string",
"nullable": true,
"description": "Miscellaneous route information in HTML format, or null if unavailable."
},
"SeasonalRouteNotes": {
"type": "string",
"nullable": true,
"description": "Route notes specific to schedule season in HTML format, or null if unavailable."
},
"Alerts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"BulletinID": {
"type": "number",
"description": "Numeric ID of the alert bulletin."
},
"BulletinFlag": {
"type": "boolean",
"description": "True if alert is also used as bulletin; otherwise false."
},
"CommunicationFlag": {
"type": "boolean",
"description": "True if alert is also used as communications announcement; otherwise false."
},
"PublishDate": {
"type": "string",
"nullable": true,
"description": "UTC datetime when the alert was published.",
"format": "date-time"
},
"AlertDescription": {
"type": "string",
"nullable": true,
"description": "Brief route announcement text, or null if unavailable."
},
"DisruptionDescription": {
"type": "string",
"nullable": true,
"description": "Service disruption text associated with alert, or null if not disruption-specific."
},
"AlertFullTitle": {
"type": "string",
"description": "Full title of the alert."
},
"AlertFullText": {
"type": "string",
"nullable": true,
"description": "Full HTML-formatted alert text, or null if unavailable."
},
"IVRText": {
"type": "string",
"nullable": true,
"description": "Alert text formatted for Interactive Voice Response systems, or null if unavailable."
}
},
"required": [
"BulletinID",
"BulletinFlag",
"CommunicationFlag",
"PublishDate",
"AlertDescription",
"DisruptionDescription",
"AlertFullTitle",
"AlertFullText",
"IVRText"
],
"description": "Alert information including bulletin ID, flags, publish date, descriptions, and IVR text."
},
"description": "Array of alerts associated with route."
}
},
"required": [
"RouteID",
"RouteAbbrev",
"Description",
"RegionID",
"VesselWatchID",
"ReservationFlag",
"InternationalFlag",
"PassengerOnlyFlag",
"CrossingTime",
"AdaNotes",
"GeneralRouteNotes",
"SeasonalRouteNotes",
"Alerts"
],
"description": "Detailed route information including identification, flags, crossing time, notes, and alerts."
},
"FetchScheduleByTripDateAndRouteIdOutput": {
"type": "object",
"properties": {
"ScheduleID": {
"type": "number",
"description": "Numeric ID of the schedule season."
},
"ScheduleName": {
"type": "string",
"description": "Display name of the schedule season."
},
"ScheduleSeason": {
"anyOf": [
{
"type": "number",
"enum": [
0
]
},
{
"type": "number",
"enum": [
1
]
},
{
"type": "number",
"enum": [
2
]
},
{
"type": "number",
"enum": [
3
]
}
],
"description": "Code indicating season: 0 = Spring, 1 = Summer, 2 = Fall, 3 = Winter."
},
"SchedulePDFUrl": {
"type": "string",
"description": "URL to the schedule PDF document."
},
"ScheduleStart": {
"type": "string",
"description": "UTC datetime when the schedule season becomes effective.",
"format": "date-time"
},
"ScheduleEnd": {
"type": "string",
"description": "UTC datetime when the schedule season stops being effective.",
"format": "date-time"
},
"AllRoutes": {
"type": "array",
"items": {
"type": "number"
},
"description": "Array of route IDs included in this schedule."
},
"TerminalCombos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"DepartingTerminalID": {
"type": "number",
"description": "Numeric ID of the departing terminal."
},
"DepartingTerminalName": {
"type": "string",
"description": "Display name of the departing terminal.",
"format": "date-time"
},
"ArrivingTerminalID": {
"type": "number",
"description": "Numeric ID of the arriving terminal."
},
"ArrivingTerminalName": {
"type": "string",
"description": "Display name of the arriving terminal."
},
"SailingNotes": {
"type": "string",
"description": "Informational text for this terminal combination."
},
"Annotations": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of annotation strings assigned to departures in Times list."
},
"Times": {
"type": "array",
"items": {
"type": "object",
"properties": {
"DepartingTime": {
"type": "string",
"description": "UTC datetime of the departure.",
"format": "date-time"
},
"ArrivingTime": {
"type": "string",
"nullable": true,
"description": "UTC datetime of the arrival.",
"format": "date-time"
},
"LoadingRule": {
"anyOf": [
{
"type": "number",
"enum": [
1
]
},
{
"type": "number",
"enum": [
2
]
},
{
"type": "number",
"enum": [
3
]
}
],
"description": "Code indicating traveler types: 1 = Passenger, 2 = Vehicle, 3 = Both."
},
"VesselID": {
"type": "number",
"description": "Numeric ID of the vessel planned for this departure."
},
"VesselName": {
"type": "string",
"description": "Display name of the vessel planned for this departure."
},
"VesselHandicapAccessible": {
"type": "boolean",
"description": "True if vessel is ADA accessible; otherwise false."
},
"VesselPositionNum": {
"type": "number",
"description": "Position number of the vessel servicing all stops in journey."
},
"Routes": {
"type": "array",
"items": {
"type": "number"
},
"description": "Array of route IDs serviced by this departure."
},
"AnnotationIndexes": {
"type": "array",
"items": {
"type": "number"
},
"description": "Array of indexes into Annotations array that apply to this departure."
}
},
"required": [
"DepartingTime",
"ArrivingTime",
"LoadingRule",
"VesselID",
"VesselName",
"VesselHandicapAccessible",
"VesselPositionNum",
"Routes",
"AnnotationIndexes"
],
"description": "Scheduled departure detail with times, vessel, and loading rules."
},
"description": "Array of scheduled departure details for this terminal combination."
},
"AnnotationsIVR": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of annotation strings formatted for Interactive Voice Response systems."
}
},
"required": [
"DepartingTerminalID",
"DepartingTerminalName",
"ArrivingTerminalID",
"ArrivingTerminalName",
"SailingNotes",
"Annotations",
"Times",
"AnnotationsIVR"
],
"description": "Terminal combination schedule with terminal IDs and names, sailing notes, annotations, and departure times."
},
"description": "Array of terminal combination schedules with departure times."
}
},
"required": [
"ScheduleID",
"ScheduleName",
"ScheduleSeason",
"SchedulePDFUrl",
"ScheduleStart",
"ScheduleEnd",
"AllRoutes",
"TerminalCombos"
],
"description": "Complete schedule information including season details, routes, and terminal combination schedules with departure times."
},
"FetchScheduleValidDateRangeOutput": {
"type": "object",
"properties": {
"DateFrom": {
"type": "string",
"description": "UTC datetime when data becomes available (earliest valid trip date).",
"format": "date-time"
},
"DateThru": {
"type": "string",
"description": "UTC datetime when data stops being available (latest valid trip date).",
"format": "date-time"
}
},
"required": [
"DateFrom",
"DateThru"
],
"description": "Date range for which fares data is currently published and available."
}
},
"parameters": {}
},
"paths": {
"/activeseasons": {
"get": {
"summary": "List all active schedule seasons with dates and PDF URLs.",
"operationId": "fetchActiveSeasons",
"tags": [
"active-seasons"
],
"x-codeSamples": [
{
"lang": "JavaScript",
"source": "import { fetchActiveSeasons } from 'ws-dottie/wsf-schedule/core';\n\nconst data = await fetchActiveSeasons({\n fetchMode: 'native',\n validate: true\n});\n\nconsole.log(data);"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ScheduleID": {
"type": "number",
"description": "Numeric ID of the schedule season."
},
"ScheduleName": {
"type": "string",
"description": "Display name of the schedule season."
},
"ScheduleSeason": {
"anyOf": [
{
"type": "number",
"enum": [
0
]
},
{
"type": "number",
"enum": [
1
]
},
{
"type": "number",
"enum": [
2
]
},
{
"type": "number",
"enum": [
3
]
}
],
"description": "Code indicating season: 0 = Spring, 1 = Summer, 2 = Fall, 3 = Winter."
},
"SchedulePDFUrl": {
"type": "string",
"description": "URL to printable schedule PDF document."
},
"ScheduleStart": {
"type": "string",
"description": "UTC datetime when the schedule season becomes effective (typically 3:00 AM).",
"format": "date-time"
},
"ScheduleEnd": {
"type": "string",
"description": "UTC datetime when the schedule season stops being effective (typically 2:59 AM next day).",
"format": "date-time"
}
},
"required": [
"ScheduleID",
"ScheduleName",
"ScheduleSeason",
"SchedulePDFUrl",
"ScheduleStart",
"ScheduleEnd"
],
"description": "Schedule season information including identifier, name, season code, PDF URL, and effective date range."
}
},
"examples": {
"sampleResponse": {
"summary": "Sample response",
"description": "Example of a successful response from the API (showing first item of 2 total)",
"value": [
{
"ScheduleID": 193,
"ScheduleName": "Fall 2025",
"ScheduleSeason": 2,
"SchedulePDFUrl": "http://www.wsdot.wa.gov/ferries/pdf/2025Fall.pdf",
"ScheduleStart": "2025-09-21T07:00:00.000Z",
"ScheduleEnd": "2025-12-27T08:00:00.000Z"
}
]
}
}
}
}
}
}
}
},
"/sailings/{SchedRouteID}": {
"get": {
"summary": "List active sailings for specified scheduled route.",
"operationId": "fetchSailingsByRouteID",
"tags": [
"sailings"
],
"x-codeSamples": [
{
"lang": "JavaScript",
"source": "import { fetchSailingsByRouteID } from 'ws-dottie/wsf-schedule/core';\n\nconst data = await fetchSailingsByRouteID({\n params: {\n \"SchedRouteID\": 2401\n },\n fetchMode: 'native',\n validate: true\n});\n\nconsole.log(data);"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ScheduleID": {
"type": "number",
"description": "Numeric ID of the schedule season this sailing belongs to."
},
"SchedRouteID": {
"type": "number",
"description": "Numeric ID of the scheduled route this sailing belongs to."
},
"RouteID": {
"type": "number",
"description": "Numeric ID of the underlying route for sailing."
},
"SailingID": {
"type": "number",
"description": "Numeric ID of the sailing."
},
"SailingDescription": {
"type": "string",
"nullable": true,
"description": "Human-readable title describing sailing, or null if unavailable."
},
"SailingNotes": {
"type": "string",
"nullable": true,
"description": "Informational text associated with sailing, or null if unavailable."
},
"DisplayColNum": {
"type": "number",
"description": "Suggested number of columns for rendering departures on desktop webpage."
},
"SailingDir": {
"anyOf": [
{
"type": "number",
"enum": [
1
]
},
{
"type": "number",
"enum": [
2
]
}
],
"description": "Code indicating direction: 1 = Westbound, 2 = Eastbound."
},
"DayOpDescription": {
"type": "string",
"nullable": true,
"description": "Days of operation grouping for sailing, or null if unavailable."
},
"DayOpUseForHoliday": {
"type": "boolean",
"description": "True if sailing should apply for holidays; otherwise false."
},
"ActiveDateRanges": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"DateFrom": {
"type": "string",
"description": "UTC datetime when the sailing date range becomes active (typically 3:00 AM).",
"format": "date-time"
},
"DateThru": {
"type": "string",
"description": "UTC datetime when the sailing date range stops being active (typically 2:59 AM next day).",
"format": "date-time"
},
"EventID": {
"type": "number",
"nullable": true,
"description": "Numeric ID of the event associated with sailing date range, or null if none."
},
"EventDescription": {
"type": "string",
"nullable": true,
"description": "Human-readable explanation of sailing date range, or null if unavailable."
}
},
"required": [
"DateFrom",
"DateThru",
"EventID",
"EventDescription"
],
"description": "Active date range for sailing including start/end dates, event ID, and description."
},
"description": "Array of date ranges detailing when sailing is active, or null if unavailable."
},
"Journs": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"JourneyID": {
"type": "number",
"description": "Numeric ID of the journey."
},
"ReservationInd": {
"type": "boolean",
"description": "True if journey contains reservable departures; otherwise false."
},
"InternationalInd": {
"type": "boolean",
"description": "True if journey travels outside United States; otherwise false."
},
"InterislandInd": {
"type": "boolean",
"description": "True if journey operates primarily between islands; otherwise false."
},
"VesselID": {
"type": "number",
"description": "Numeric ID of the vessel planned to service journey."
},
"VesselName": {
"type": "string",
"nullable": true,
"description": "Display name of the vessel, or null if unavailable."
},
"VesselHandicapAccessible": {
"type": "boolean",
"description": "True if vessel is ADA accessible; otherwise false."
},
"VesselPositionNum": {
"type": "number",
"description": "Position number representing vessel servicing all stops in journey."
},
"TerminalTimes": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"JourneyTerminalID": {
"type": "number",
"description": "Numeric ID of the terminal time within journey."
},
"TerminalID": {
"type": "number",
"description": "Numeric ID of the terminal."
},
"TerminalDescription": {
"type": "string",
"nullable": true,
"description": "Display name of the terminal, or null if unavailable."
},
"TerminalBriefDescription": {
"type": "string",
"nullable": true,
"description": "Brief name for terminal, or null if unavailable."
},
"Time": {
"type": "string",
"nullable": true,
"description": "Departure or arrival time at terminal in UTC. Note: Date portion (1900-01-01) is placeholder, use time portion only. Null if journey does not stop at terminal.",
"format": "date-time"
},
"DepArrIndicator": {
"anyOf": [
{
"type": "number",
"enum": [
1
]
},
{
"type": "number",
"enum": [
2
]
},
{
"nullable": true
}
],
"description": "Code indicating stop type: 1 = Departure, 2 = Arrival. Null if journey does not stop at terminal."
},
"IsNA": {
"type": "boolean",
"description": "True if journey does not interact with this terminal (skips it); otherwise false."
},
"Annotations": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"AnnotationID": {
"type": "number",
"description": "Numeric ID of the annotation."
},
"AnnotationText": {
"type": "string",
"nullable": true,
"description": "Human-readable annotation content, or null if unavailable."
},
"AnnotationIVRText": {
"type": "string",
"nullable": true,
"description": "Annotation text formatted for Interactive Voice Response systems, or null if unavailable."
},
"AdjustedCrossingTime": {
"type": "number",
"nullable": true,
"description": "Adjusted crossing time override in minutes, or null if no override."
},
"AnnotationImg": {
"type": "string",
"nullable": true,
"description": "URL to image representing annotation, or null if unavailable."
},
"TypeDescription": {
"type": "string",
"nullable": true,
"description": "Logical grouping category for annotation, or null if unavailable."
},
"SortSeq": {
"type": "number",
"description": "Display sort order; lower values appear first."
}
},
"required": [
"AnnotationID",
"AnnotationText",
"AnnotationIVRText",
"AdjustedCrossingTime",
"AnnotationImg",
"TypeDescription",
"SortSeq"
],
"description": "Annotation information including ID, text, IVR text, crossing time override, image URL, type, and sort order."
},
"description": "Array of informational annotations associated with terminal time, or null if none."
}
},
"required": [
"JourneyTerminalID",
"TerminalID",
"TerminalDescription",
"TerminalBriefDescription",
"Time",
"DepArrIndicator",
"IsNA",
"Annotations"
],
"description": "Terminal time information within journey including terminal identification, time, indicator, skip flag, and annotations."
},
"description": "Array of terminal departures and arrivals made by same vessel, or null if unavailable."
}
},
"required": [
"JourneyID",
"ReservationInd",
"InternationalInd",
"InterislandInd",
"VesselID",
"VesselName",
"VesselHandicapAccessible",
"VesselPositionNum",
"TerminalTimes"
],
"description": "Journey information including ID, indicators, vessel details, and terminal times."
},
"description": "Array of journeys representing vessel stops at terminals, or null if unavailable."
}
},
"required": [
"ScheduleID",
"SchedRouteID",
"RouteID",
"SailingID",
"SailingDescription",
"SailingNotes",
"DisplayColNum",
"SailingDir",
"DayOpDescription",
"DayOpUseForHoliday",
"ActiveDateRanges",
"Journs"
],
"description": "Sailing information including IDs, description, direction, days of operation, holiday flag, active date ranges, and journeys."
}
},
"examples": {
"sampleResponse": {
"summary": "Sample response",
"description": "Example of a successful response from the API (showing first item of 2 total)",
"value": [
{
"ScheduleID": 193,
"SchedRouteID": 2401,
"RouteID": 9,
"SailingID": 7793,
"SailingDescription": "Leave Westbound",
"SailingNotes": "",
"DisplayColNum": 0,
"SailingDir": 1,
"DayOpDescription": "Daily",
"DayOpUseForHoliday": false,
"ActiveDateRanges": [
{
"DateFrom": "2025-09-21T07:00:00.000Z",
"DateThru": "2025-12-27T08:00:00.000Z",
"EventID": null,
"EventDescription": null
}
],
"Journs": [
{
"JourneyID": 166493,
"ReservationInd": false,
"InternationalInd": false,
"InterislandInd": false,
"VesselID": 38,
"VesselName": "Yakima",
"VesselHandicapAccessible": true,
"VesselPositionNum": 2,
"TerminalTimes": [
{
"JourneyTerminalID": 236797,
"TerminalID": 1,
"TerminalDescription": "Anacortes",
"TerminalBriefDescription": "Anacortes",
"Time": "1900-01-01T12:05:00.000Z",
"DepArrIndicator": 1,
"IsNA": false,
"Annotations": []
},
{
"JourneyTerminalID": 236798,
"TerminalID": 13,
"TerminalDescription": "Lopez Island",
"TerminalBriefDescription": "Lopez",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236799,
"TerminalID": 18,
"TerminalDescription": "Shaw Island",
"TerminalBriefDescription": "Shaw",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236800,
"TerminalID": 15,
"TerminalDescription": "Orcas Island",
"TerminalBriefDescription": "Orcas",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236801,
"TerminalID": 10,
"TerminalDescription": "Friday Harbor",
"TerminalBriefDescription": "Friday Harbor",
"Time": "1900-01-01T13:15:00.000Z",
"DepArrIndicator": 2,
"IsNA": false,
"Annotations": []
}
]
},
{
"JourneyID": 166494,
"ReservationInd": false,
"InternationalInd": false,
"InterislandInd": false,
"VesselID": 2,
"VesselName": "Chelan",
"VesselHandicapAccessible": true,
"VesselPositionNum": 1,
"TerminalTimes": [
{
"JourneyTerminalID": 236802,
"TerminalID": 1,
"TerminalDescription": "Anacortes",
"TerminalBriefDescription": "Anacortes",
"Time": "1900-01-01T13:30:00.000Z",
"DepArrIndicator": 1,
"IsNA": false,
"Annotations": []
},
{
"JourneyTerminalID": 236803,
"TerminalID": 13,
"TerminalDescription": "Lopez Island",
"TerminalBriefDescription": "Lopez",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236804,
"TerminalID": 18,
"TerminalDescription": "Shaw Island",
"TerminalBriefDescription": "Shaw",
"Time": "1900-01-01T15:05:00.000Z",
"DepArrIndicator": 1,
"IsNA": false,
"Annotations": [
{
"AnnotationID": 13332,
"AnnotationText": "Loads or unloads westbound traffic on eastbound sailing.",
"AnnotationIVRText": "Loads or unloads westbound traffic on eastbound sailing.",
"AdjustedCrossingTime": null,
"AnnotationImg": "https://www.wsdot.wa.gov/ferries/images/legends/circle_red.gif",
"TypeDescription": "Informational",
"SortSeq": 20
}
]
},
{
"JourneyTerminalID": 236805,
"TerminalID": 15,
"TerminalDescription": "Orcas Island",
"TerminalBriefDescription": "Orcas",
"Time": "1900-01-01T14:25:00.000Z",
"DepArrIndicator": 2,
"IsNA": false,
"Annotations": []
},
{
"JourneyTerminalID": 236806,
"TerminalID": 10,
"TerminalDescription": "Friday Harbor",
"TerminalBriefDescription": "Friday Harbor",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
}
]
},
{
"JourneyID": 166495,
"ReservationInd": false,
"InternationalInd": false,
"InterislandInd": false,
"VesselID": 69,
"VesselName": "Samish",
"VesselHandicapAccessible": true,
"VesselPositionNum": 3,
"TerminalTimes": [
{
"JourneyTerminalID": 236807,
"TerminalID": 1,
"TerminalDescription": "Anacortes",
"TerminalBriefDescription": "Anacortes",
"Time": "1900-01-01T14:15:00.000Z",
"DepArrIndicator": 1,
"IsNA": false,
"Annotations": []
},
{
"JourneyTerminalID": 236808,
"TerminalID": 13,
"TerminalDescription": "Lopez Island",
"TerminalBriefDescription": "Lopez",
"Time": "1900-01-01T15:10:00.000Z",
"DepArrIndicator": 1,
"IsNA": false,
"Annotations": []
},
{
"JourneyTerminalID": 236809,
"TerminalID": 18,
"TerminalDescription": "Shaw Island",
"TerminalBriefDescription": "Shaw",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236810,
"TerminalID": 15,
"TerminalDescription": "Orcas Island",
"TerminalBriefDescription": "Orcas",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236811,
"TerminalID": 10,
"TerminalDescription": "Friday Harbor",
"TerminalBriefDescription": "Friday Harbor",
"Time": "1900-01-01T15:45:00.000Z",
"DepArrIndicator": 2,
"IsNA": false,
"Annotations": []
}
]
},
{
"JourneyID": 166496,
"ReservationInd": false,
"InternationalInd": false,
"InterislandInd": true,
"VesselID": 66,
"VesselName": "Salish",
"VesselHandicapAccessible": true,
"VesselPositionNum": 4,
"TerminalTimes": [
{
"JourneyTerminalID": 236812,
"TerminalID": 1,
"TerminalDescription": "Anacortes",
"TerminalBriefDescription": "Anacortes",
"Time": "1900-01-01T08:00:00.000Z",
"DepArrIndicator": null,
"IsNA": true,
"Annotations": []
},
{
"JourneyTerminalID": 236813,
"TerminalID": 13,
"TerminalDescri