UNPKG

ws-dottie

Version:

Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration

947 lines 309 kB
{ "openapi": "3.0.0", "info": { "title": "Wsf Terminals API", "version": "1.0.0", "description": "Wsf Terminals API - Washington State Department of Transportation APIs" }, "servers": [ { "url": "https://www.wsdot.wa.gov/ferries/api/terminals/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." }, "FetchCacheFlushDateTerminalsOutput": { "type": "string", "description": "UTC datetime when static endpoint data was last updated, or undefined if no update has occurred.", "format": "date-time" }, "FetchTerminalBasicsByTerminalIdOutput": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Numeric ID of the terminal." }, "TerminalSubjectID": { "type": "integer", "description": "Numeric ID of the terminal in the WSF subject management system." }, "RegionID": { "type": "integer", "description": "Numeric ID of the geographical region where the terminal is located." }, "TerminalName": { "type": "string", "nullable": true, "description": "Display name of the terminal." }, "TerminalAbbrev": { "type": "string", "nullable": true, "description": "Abbreviation code for the terminal." }, "SortSeq": { "type": "integer", "description": "Display sort order; lower values appear first in lists." }, "OverheadPassengerLoading": { "type": "boolean", "description": "True if overhead passenger loading facility is available; otherwise false." }, "Elevator": { "type": "boolean", "description": "True if terminal has elevator access; otherwise false." }, "WaitingRoom": { "type": "boolean", "description": "True if terminal has waiting room facility; otherwise false." }, "FoodService": { "type": "boolean", "description": "True if terminal offers food service; otherwise false." }, "Restroom": { "type": "boolean", "description": "True if terminal has restroom facilities; otherwise false." } }, "required": [ "TerminalID", "TerminalSubjectID", "RegionID", "TerminalName", "TerminalAbbrev", "SortSeq", "OverheadPassengerLoading", "Elevator", "WaitingRoom", "FoodService", "Restroom" ], "description": "Basic terminal information including identification, amenities, and regional assignments." }, "FetchTerminalBulletinsByTerminalIdOutput": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Numeric ID of the terminal." }, "TerminalSubjectID": { "type": "integer", "description": "Numeric ID of the terminal in the WSF subject management system." }, "RegionID": { "type": "integer", "description": "Numeric ID of the geographical region where the terminal is located." }, "TerminalName": { "type": "string", "nullable": true, "description": "Display name of the terminal." }, "TerminalAbbrev": { "type": "string", "nullable": true, "description": "Abbreviation code for the terminal." }, "SortSeq": { "type": "integer", "description": "Display sort order; lower values appear first in lists." }, "Bulletins": { "type": "array", "items": { "type": "object", "properties": { "BulletinTitle": { "type": "string", "nullable": true, "description": "Title of the bulletin." }, "BulletinText": { "type": "string", "nullable": true, "description": "HTML-formatted content of the bulletin." }, "BulletinSortSeq": { "type": "integer", "description": "Display sort order for the bulletin; lower values appear first." }, "BulletinLastUpdated": { "type": "string", "nullable": true, "description": "UTC datetime when the bulletin was last updated.", "format": "date-time" }, "BulletinLastUpdatedSortable": { "type": "string", "nullable": true, "description": "Legacy sortable string representation of the bulletin update date.", "format": "date-time" } }, "required": [ "BulletinTitle", "BulletinText", "BulletinSortSeq", "BulletinLastUpdated", "BulletinLastUpdatedSortable" ], "description": "Bulletin information including title, HTML content, sort order, and update date." }, "description": "Array of bulletins and alerts associated with the terminal." } }, "required": [ "TerminalID", "TerminalSubjectID", "RegionID", "TerminalName", "TerminalAbbrev", "SortSeq", "Bulletins" ], "description": "Terminal information with associated bulletins and alerts." }, "FetchTerminalLocationsByTerminalIdOutput": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Numeric ID of the terminal." }, "TerminalSubjectID": { "type": "integer", "description": "Numeric ID of the terminal in the WSF subject management system." }, "RegionID": { "type": "integer", "description": "Numeric ID of the geographical region where the terminal is located." }, "TerminalName": { "type": "string", "nullable": true, "description": "Display name of the terminal." }, "TerminalAbbrev": { "type": "string", "nullable": true, "description": "Abbreviation code for the terminal." }, "SortSeq": { "type": "integer", "description": "Display sort order; lower values appear first in lists." }, "Latitude": { "type": "number", "nullable": true, "description": "Latitude of the terminal in decimal degrees." }, "Longitude": { "type": "number", "nullable": true, "description": "Longitude of the terminal in decimal degrees." }, "AddressLineOne": { "type": "string", "nullable": true, "description": "First line of the terminal street address." }, "AddressLineTwo": { "type": "string", "nullable": true, "description": "Second line of the terminal street address." }, "City": { "type": "string", "nullable": true, "description": "City where the terminal is located." }, "State": { "type": "string", "nullable": true, "description": "State code where the terminal is located." }, "ZipCode": { "type": "string", "nullable": true, "description": "Postal zip code for the terminal location." }, "Country": { "type": "string", "nullable": true, "description": "Country code where the terminal is located." }, "MapLink": { "type": "string", "nullable": true, "description": "URL to a map displaying the terminal location." }, "Directions": { "type": "string", "nullable": true, "description": "HTML-formatted driving directions to the terminal." }, "DispGISZoomLoc": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "ZoomLevel": { "type": "integer", "description": "GIS zoom level for map display." }, "Latitude": { "type": "number", "nullable": true, "description": "Latitude coordinate for this zoom level in decimal degrees." }, "Longitude": { "type": "number", "nullable": true, "description": "Longitude coordinate for this zoom level in decimal degrees." } }, "required": [ "ZoomLevel", "Latitude", "Longitude" ], "description": "GIS zoom level location information including zoom level and coordinates." }, "description": "Array of GIS zoom level locations for the terminal." } }, "required": [ "TerminalID", "TerminalSubjectID", "RegionID", "TerminalName", "TerminalAbbrev", "SortSeq", "Latitude", "Longitude", "AddressLineOne", "AddressLineTwo", "City", "State", "ZipCode", "Country", "MapLink", "Directions", "DispGISZoomLoc" ], "description": "Detailed terminal location information including coordinates, address, map link, driving directions, and GIS zoom level locations." }, "FetchTerminalSailingSpaceByTerminalIdOutput": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Numeric ID of the terminal." }, "TerminalSubjectID": { "type": "integer", "description": "Numeric ID of the terminal in the WSF subject management system." }, "RegionID": { "type": "integer", "description": "Numeric ID of the geographical region where the terminal is located." }, "TerminalName": { "type": "string", "nullable": true, "description": "Display name of the terminal." }, "TerminalAbbrev": { "type": "string", "nullable": true, "description": "Abbreviation code for the terminal." }, "SortSeq": { "type": "integer", "description": "Display sort order; lower values appear first in lists." }, "DepartingSpaces": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "Departure": { "type": "string", "description": "Date and time of departure, as a UTC datetime. E.g., '2025-11-02T21:35:00.000Z' for departure at 9:35 PM on November 2, 2025. Used for departure schedule display and space availability timing.", "format": "date-time" }, "IsCancelled": { "type": "boolean", "description": "Indicator whether departure is cancelled, as a boolean. E.g., false for active departures, true for cancelled departures. Used to determine if departure is operational." }, "VesselID": { "type": "integer", "description": "Unique identifier for vessel planned to service departure, as an integer ID. E.g., '69' for Samish vessel, '38' for Yakima vessel, '17' for Kaleetan vessel. Used to identify which vessel operates departure." }, "VesselName": { "type": "string", "nullable": true, "description": "Human-readable name of vessel planned to service departure, as a vessel name. E.g., 'Samish' for vessel 69, 'Yakima' for vessel 38, 'Kaleetan' for vessel 17, null when vessel name is unavailable. Provides vessel identification for display." }, "MaxSpaceCount": { "type": "integer", "description": "Maximum vehicle capacity on vessel making departure, as an integer count. E.g., '141' for Samish vessel capacity, '139' for Yakima vessel capacity, '197' for Tacoma vessel capacity. Used to calculate space availability percentage." }, "SpaceForArrivalTerminals": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Unique identifier for arrival terminal destination, as an integer ID. E.g., '10' for Friday Harbor terminal, '13' for Lopez Island terminal. Used to identify destination terminal for space availability." }, "TerminalName": { "type": "string", "nullable": true, "description": "Human-readable name of arrival terminal destination, as a terminal name. E.g., 'Anacortes -> Friday Harbor' for multi-destination sailing, 'Seattle' for single destination, null when terminal name is unavailable. Provides destination identification for display." }, "VesselID": { "type": "integer", "description": "Unique identifier for vessel planned to service departure, as an integer ID. E.g., '69' for Samish vessel, '38' for Yakima vessel, '17' for Kaleetan vessel. Used to identify which vessel operates departure." }, "VesselName": { "type": "string", "nullable": true, "description": "Human-readable name of vessel planned to service departure, as a vessel name. E.g., 'Samish' for vessel 69, 'Yakima' for vessel 38, 'Kaleetan' for vessel 17, null when vessel name is unavailable. Provides vessel identification for display." }, "DisplayReservableSpace": { "type": "boolean", "description": "Indicator whether reservable space information should be displayed, as a boolean. E.g., true for routes supporting reservations, false for routes without reservations. Used to determine if reservation space data should be shown." }, "ReservableSpaceCount": { "type": "integer", "nullable": true, "description": "Remaining reservable vehicle spaces available on vessel, as an integer count. E.g., '45' for 45 reservable spaces remaining, '36' for 36 reservable spaces, null when reservations are not supported or count is unavailable. Used for reservation availability display." }, "ReservableSpaceHexColor": { "type": "string", "nullable": true, "description": "Hex color code representing reservable space availability status, as a hex color. E.g., '#FFFF00' for yellow (limited availability), '#888888' for gray (not available), null when color is unavailable. Used for visual space availability indicators." }, "DisplayDriveUpSpace": { "type": "boolean", "description": "Indicator whether drive-up space information should be displayed, as a boolean. E.g., true for routes with drive-up space tracking, false when drive-up space is not tracked. Used to determine if drive-up space data should be shown." }, "DriveUpSpaceCount": { "type": "integer", "nullable": true, "description": "Remaining drive-up vehicle spaces available on vessel, as an integer count. E.g., '67' for 67 drive-up spaces remaining, '197' for 197 drive-up spaces, null when drive-up space is not tracked or count is unavailable. Used for drive-up availability display." }, "DriveUpSpaceHexColor": { "type": "string", "nullable": true, "description": "Hex color code representing drive-up space availability status, as a hex color. E.g., '#00FF00' for green (good availability), '#FFFF00' for yellow (limited availability), null when color is unavailable. Used for visual space availability indicators." }, "MaxSpaceCount": { "type": "integer", "description": "Maximum vehicle capacity on vessel making departure, as an integer count. E.g., '141' for Samish vessel capacity, '139' for Yakima vessel capacity, '197' for Tacoma vessel capacity. Used to calculate space availability percentage." }, "ArrivalTerminalIDs": { "type": "array", "nullable": true, "items": { "type": "integer" }, "description": "Array of arrival terminal IDs associated with this space count set, as terminal ID integers. E.g., array containing terminal 10 for single destination, array containing terminals 13, 10 for multi-destination sailing, null when terminal IDs are unavailable. Used to identify all destinations served by this space count." } }, "required": [ "TerminalID", "TerminalName", "VesselID", "VesselName", "DisplayReservableSpace", "ReservableSpaceCount", "ReservableSpaceHexColor", "DisplayDriveUpSpace", "DriveUpSpaceCount", "DriveUpSpaceHexColor", "MaxSpaceCount", "ArrivalTerminalIDs" ], "description": "Represents space availability information for arrival terminal destination including terminal/vessel identification, reservable space count and color, drive-up space count and color, maximum capacity, and arrival terminal IDs. E.g., Friday Harbor destination with 67 drive-up spaces (green) and 141 maximum capacity on Samish vessel. Used for real-time space availability display." }, "description": "Array of space availability information for one or more arrival terminal destinations, as space for arrival terminal objects. E.g., array containing Friday Harbor destination with space counts, array containing multiple destinations for multi-destination sailing, null when space information is unavailable. Used for real-time space availability display by destination." } }, "required": [ "Departure", "IsCancelled", "VesselID", "VesselName", "MaxSpaceCount", "SpaceForArrivalTerminals" ], "description": "Represents departing space information including departure time, cancellation status, vessel details, maximum capacity, and space availability for arrival terminals. E.g., departure at 9:35 PM with Samish vessel (ID 69, capacity 141) and space information for Friday Harbor destination. Used for real-time departure space availability display." }, "description": "Array of upcoming departures leaving terminal with space availability information, as departing space objects. E.g., array containing multiple departures with vessel and space details, null when departure information is unavailable. Used for real-time departure space availability display." }, "IsNoFareCollected": { "type": "boolean", "nullable": true, "description": "Indicator whether terminal is capable of collecting fares, as a boolean. E.g., null when fare collection status is unknown, false when terminal collects fares, true when terminal does not collect fares. Used to determine fare collection capability." }, "NoFareCollectedMsg": { "type": "string", "nullable": true, "description": "Optional message explaining how inability to collect fares affects terminal conditions data, as a message string. E.g., null when fare collection is available, message when fare collection affects space tracking accuracy. Used to inform users about data limitations." } }, "required": [ "TerminalID", "TerminalSubjectID", "RegionID", "TerminalName", "TerminalAbbrev", "SortSeq", "IsNoFareCollected", "NoFareCollectedMsg" ], "description": "Terminal sailing space information including terminal identification, upcoming departures with space availability, and fare collection status." }, "FetchTerminalTransportsByTerminalIdOutput": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Numeric ID of the terminal." }, "TerminalSubjectID": { "type": "integer", "description": "Numeric ID of the terminal in the WSF subject management system." }, "RegionID": { "type": "integer", "description": "Numeric ID of the geographical region where the terminal is located." }, "TerminalName": { "type": "string", "nullable": true, "description": "Display name of the terminal." }, "TerminalAbbrev": { "type": "string", "nullable": true, "description": "Abbreviation code for the terminal." }, "SortSeq": { "type": "integer", "description": "Display sort order; lower values appear first in lists." }, "ParkingInfo": { "type": "string", "nullable": true, "description": "HTML-formatted parking information for terminal, as parking details. E.g., 'Off-Peak rates effective October 1 through April 30, 2026...' for Anacortes parking rates, null when parking information is unavailable. HTML-formatted text for parking information display." }, "ParkingShuttleInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information about parking-related shuttles servicing terminal, as shuttle information. E.g., null when no parking shuttles, shuttle details when available. Used for parking shuttle information display." }, "AirportInfo": { "type": "string", "nullable": true, "description": "HTML-formatted tips for commuting to terminal from airport, as airport directions. E.g., 'From the Seattle-Tacoma International Airport, allow a minimum of 2 1/2 hours...' for Anacortes airport directions, null when airport information is unavailable. HTML-formatted text for airport commuter information." }, "AirportShuttleInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information about airport shuttles servicing terminal, as shuttle information. E.g., 'When traveling from Sea-Tac Airport to Anacortes there is a shuttle...' for Anacortes airport shuttle, null when airport shuttle information is unavailable. HTML-formatted text for airport shuttle information." }, "MotorcycleInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information for motorcycle travelers, as motorcycle tips. E.g., 'While motorcycles are not, by Washington Administrative Code...' for motorcycle staging and loading information, null when motorcycle information is unavailable. HTML-formatted text for motorcycle commuter information." }, "TruckInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information for truck travelers, as truck tips. E.g., 'Expect heavy truck traffic on the first 3 sailings in the morning...' for truck travel information, null when truck information is unavailable. HTML-formatted text for truck commuter information." }, "BikeInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information for bicycle travelers, as bicycle tips. E.g., 'Approaching the Anacortes Terminal, you will arrive at the vehicle tollbooths...' for bicycle staging information, null when bicycle information is unavailable. HTML-formatted text for bicycle commuter information." }, "TrainInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information about trains servicing terminal, as train information. E.g., null when no train service, train details when available. Used for train commuter information display." }, "TaxiInfo": { "type": "string", "nullable": true, "description": "HTML-formatted information about taxis servicing terminal, as taxi information. E.g., null when no taxi information, taxi details when available. Used for taxi commuter information display." }, "HovInfo": { "type": "string", "nullable": true, "description": "HTML-formatted tips for carpool/vanpool commuters, as HOV information. E.g., 'Carpool/Vanpools must be ticketed and in line 10 minutes before...' for Bainbridge Island HOV information, null when HOV information is unavailable. HTML-formatted text for carpool/vanpool commuter information." }, "TransitLinks": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "LinkURL": { "type": "string", "nullable": true, "description": "URL to transit agency website or service page, as a transit URL. E.g., 'http://www.skagittransit.org/' for Skagit Transit, 'http://www.kitsaptransit.com/service/routed-buses' for Kitsap Transit, null when transit link is unavailable. Used for accessing transit agency information." }, "LinkName": { "type": "string", "nullable": true, "description": "Human-readable name of transit agency, as a transit agency name. E.g., 'Skagit Transit' for Skagit Transit agency, 'Kitsap Transit' for Kitsap Transit agency, null when transit name is unavailable. Provides transit agency identification for display." }, "SortSeq": { "type": "integer", "nullable": true, "description": "Preferred sort order for transit link display, as an integer. E.g., null when sort order is not specified. Lower values appear first when sorting transit links in ascending order. Used for transit link display ordering." } }, "required": [ "LinkURL", "LinkName", "SortSeq" ], "description": "Represents transit link information including transit agency URL, name, and sort order. E.g., Skagit Transit link (http://www.skagittransit.org/). Used for displaying transit agency connections and links." }, "description": "Array of transit agency links servicing terminal, as transit link objects. E.g., array containing Skagit Transit link for Anacortes terminal, array containing Kitsap Transit link for Bainbridge Island terminal, null when transit links are unavailable. Used for displaying transit agency connections." } }, "required": [ "TerminalID", "TerminalSubjectID", "RegionID", "TerminalName", "TerminalAbbrev", "SortSeq", "ParkingInfo", "ParkingShuttleInfo", "AirportInfo", "AirportShuttleInfo", "MotorcycleInfo", "TruckInfo", "BikeInfo", "TrainInfo", "TaxiInfo", "HovInfo", "TransitLinks" ], "description": "Terminal transportation and commuter information including parking details, vehicle-specific tips, airport information, transit links, and HOV/carpool information." }, "FetchTerminalVerboseByTerminalIdOutput": { "allOf": [ { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Numeric ID of the terminal." }, "TerminalSubjectID": { "type": "integer", "description": "Numeric ID of the terminal in the WSF subject management system." }, "RegionID": { "type": "integer", "description": "Numeric ID of the geographical region where the terminal is located." }, "TerminalName": { "type": "string", "nullable": true, "description": "Display name of the terminal." }, "TerminalAbbrev": { "type": "string", "nullable": true, "description": "Abbreviation code for the terminal." }, "SortSeq": { "type": "integer", "description": "Display sort order; lower values appear first in lists." }, "OverheadPassengerLoading": { "type": "boolean", "description": "Indicator whether terminal supports overhead passenger loading from upper vehicle deck, as a boolean. E.g., true for terminals with overhead walkways like Anacortes and Bainbridge Island, false for terminals without overhead loading capability. Used to determine passenger boarding capabilities and accessibility features." }, "Elevator": { "type": "boolean", "description": "Indicator whether terminal has elevator access for passengers, as a boolean. E.g., false for terminals like Anacortes and Bainbridge Island without elevators, true for terminals with elevator access. Used to determine ADA accessibility and passenger mobility accommodations." }, "WaitingRoom": { "type": "boolean", "description": "Indicator whether terminal has indoor waiting room facility, as a boolean. E.g., true for terminals like Anacortes and Bainbridge Island with waiting rooms, false for terminals without waiting facilities. Used to determine passenger comfort amenities and sheltered waiting areas." }, "FoodService": { "type": "boolean", "description": "Indicator whether terminal offers food service facilities, as a boolean. E.g., true for terminals like Anacortes and Bainbridge Island with galleys or cafes, false for terminals without food service. Used to determine available amenities for passengers during wait times." }, "Restroom": { "type": "boolean", "description": "Indicator whether terminal has restroom facilities, as a boolean. E.g., true for terminals like Anacortes and Bainbridge Island with restrooms, false for terminals without restroom access. Used to determine passenger comfort amenities and basic facility availability." } }, "required": [ "TerminalID", "TerminalSubjectID", "RegionID", "TerminalName", "TerminalAbbrev", "SortSeq", "OverheadPassengerLoading", "Elevator", "WaitingRoom", "FoodService", "Restroom" ], "description": "Base terminal information including identification, naming, regional association, and display ordering." }, { "type": "object", "properties": { "Bulletins": { "type": "array", "items": { "type": "object", "properties": { "BulletinTitle": { "type": "string", "nullable": true, "description": "Title of the bulletin." }, "BulletinText": { "type": "string", "nullable": true, "description": "HTML-formatted content of the bulletin." }, "BulletinSortSeq": { "type": "integer", "description": "Display sort order for the bulletin; lower values appear first." }, "BulletinLastUpdated": { "type": "string", "nullable": true, "description": "UTC datetime when the bulletin was last updated.", "format": "date-time" }, "BulletinLastUpdatedSortable": { "type": "string", "nullable": true, "description": "Legacy sortable string representation of the bulletin update date.", "format": "date-time" } }, "required": [ "BulletinTitle", "BulletinText", "BulletinSortSeq", "BulletinLastUpdated", "BulletinLastUpdatedSortable" ], "description": "Bulletin information including title, HTML content, sort order, and update date." }, "description": "Active bulletins and alerts associated with terminal, as an array of bulletin objects. E.g., array containing vehicle reservation notices for Anacortes terminal, empty array for terminals without active bulletins. Used to display important terminal information, service changes, and passenger notifications." } }, "required": [ "Bulletins" ] }, { "type": "object", "properties": { "Latitude": { "type": "number", "nullable": true, "description": "Terminal latitude coordinate, in decimal degrees. E.g., 48.507351 for Anacortes terminal, 47.622339 for Bainbridge Island terminal, null when coordinate data is unavailable. Used for mapping, distance calculations, and geographic display." }, "Longitude": { "type": "number", "nullable": true, "description": "Terminal longitude coordinate, in decimal degrees. E.g., -122.677 for Anacortes terminal, -122.509617 for Bainbridge Island terminal, null when coordinate data is unavailable. Used for mapping, distance calculations, and geographic display." }, "AddressLineOne": { "type": "string", "nullable": true, "description": "Primary street address line for terminal location, as a street address. E.g., '2100 Ferry Terminal Road' for Anacortes terminal, '270 Olympic Drive SE' for Bainbridge Island terminal, null when address is unavailable. Used for navigation, mapping, and location identification." }, "AddressLineTwo": { "type": "string", "nullable": true, "description": "Secondary address line for terminal location, as an address supplement. E.g., null for most terminals without suite or building numbers, present when additional address details are needed. Used for complete address formatting when available." }, "City": { "type": "string", "nullable": true, "description": "City name where terminal is located, as a city name. E.g., 'Anacortes' for Anacortes terminal, 'Bainbridge Island' for Bainbridge Island terminal, null when city is unavailable. Used for location identification and address formatting." }, "State": { "type": "string", "nullable": true, "description": "State abbreviation where terminal is located, as a state code. E.g., 'WA' for Washington state terminals, null when state is unavailable. Used for location identification and address formatting." }, "ZipCode": { "type": "string", "nullable": true, "description": "Postal code for terminal location, as a zip code string. E.g., '98221' for Anacortes terminal, '98110' for Bainbridge Island terminal, null when zip code is unavailable. Used for location identification and address formatting." }, "Country": { "type": "string", "nullable": true, "description": "Country name where terminal is located, as a country code. E.g., 'USA' for United States terminals, null when country is unavailable. Used for location identification and international address formatting." }, "MapLink": { "type": "string", "nullable": true, "description": "URL link to external mapping service displaying terminal location, as a map URL. E.g., Google Maps link for Anacortes terminal, null when map link is unavailable. Used for providing direct navigation links to terminal location." }, "Directions": { "type": "string", "nullable": true, "description": "Driving directions to terminal from major routes, as HTML-formatted text. E.g., directions from Interstate 5 to Anacortes terminal, null when directions are unavailable. Used for navigation assistance and route planning." }, "DispGISZoomLoc": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "ZoomLevel": { "type": "integer", "description": "GIS zoom level for map display." }, "Latitude": { "type": "number", "nullable": true, "description": "Latitude coordinate for this zoom level in decimal degrees." }, "Longitude": { "type": "number", "nullable": true, "description": "Longitude coordinate for this zoom level in decimal degrees." } }, "required": [ "ZoomLevel", "Latitude", "Longitude" ], "description": "GIS zoom level location information including zoom level and coordinates." }, "description": "GIS map display coordinates for terminal at various zoom levels, as an array of zoom-level coordinates. E.g., array with 18 zoom levels for Anacortes terminal, null when zoom-level data is unavailable. Used for optimized map rendering at different zoom levels." } }, "required": [ "Latitude", "Longitude", "AddressLineOne", "AddressLineTwo", "City", "State", "ZipCode", "Country", "MapLink", "Directions", "DispGISZoomLoc" ] }, { "type": "object", "properties": { "DepartingSpaces": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "Departure": { "type": "string", "description": "Date and time of departure, as a UTC datetime. E.g., '2025-11-02T21:35:00.000Z' for departure at 9:35 PM on November 2, 2025. Used for departure schedule display and space availability timing.", "format": "date-time" }, "IsCancelled": { "type": "boolean", "description": "Indicator whether departure is cancelled, as a boolean. E.g., false for active departures, true for cancelled departures. Used to determine if departure is operational." }, "VesselID": { "type": "integer", "description": "Unique identifier for vessel planned to service departure, as an integer ID. E.g., '69' for Samish vessel, '38' for Yakima vessel, '17' for Kaleetan vessel. Used to identify which vessel operates departure." }, "VesselName": { "type": "string", "nullable": true, "description": "Human-readable name of vessel planned to service departure, as a vessel name. E.g., 'Samish' for vessel 69, 'Yakima' for vessel 38, 'Kaleetan' for vessel 17, null when vessel name is unavailable. Provides vessel identification for display." }, "MaxSpaceCount": { "type": "integer", "description": "Maximum vehicle capacity on vessel making departure, as an integer count. E.g., '141' for Samish vessel capacity, '139' for Yakima vessel capacity, '197' for Tacoma vessel capacity. Used to calculate space availability percentage." }, "SpaceForArrivalTerminals": { "type": "array", "nullable": true, "items": { "type": "object", "properties": { "TerminalID": { "type": "integer", "description": "Unique identifier for arrival terminal destination, as an integer ID. E.g., '10' for Friday Harbor terminal, '13' for Lopez Island terminal. Used to identify destination terminal for space availability." }, "TerminalName": { "type": "string", "nullable": true, "description": "Human-readable name of arrival terminal destination, as a terminal name. E.g., 'Anacortes -> Friday Harbor' for multi-destination sailing, 'Seattle' for single destination, null when terminal name is unavailable. Provides destination identification for display." }, "VesselID": { "type": "integer", "description": "Unique identifier for vessel planned to service departure, as an integer ID. E.g., '69' for Samish vessel, '38' for Yakima vessel, '17' for Kaleetan vessel. Used to identify which vessel operates departure." }, "VesselName": { "type": "string", "nullable": true, "description": "Human-readable name of vessel planned to service departure, as a vessel name. E.g., 'Samish' for vessel 69, 'Yakima' for vessel 38, 'Kaleetan' for vessel 17, null when vessel name is unavailable. Provides vessel identification for display." }, "DisplayReservableSpace": { "type": "boolean", "description": "Indicator whether reservable space information should be displayed, as a boolean. E.g., true for routes supporting reservations, false for routes without reservations. Used to determine if reservation space data should be shown." }, "ReservableSpaceCount": { "type": "integer", "nullable": true, "description": "Remaining reservable vehicle spaces available on vessel, as an integer count. E.g., '45' for 45 reservable spaces remaining, '36' for 36 reservable spaces, null when reservations are not supported or count is unavailable. Used for reservation availability display." }, "ReservableSpaceHexColor": { "type": "string", "nullable": true, "description": "Hex color code representing reservable space availability status, as a hex color. E.g., '#FFFF00' for yellow (limited availability), '#888888' for gray (not available), null when color is unavailable. Used for visual space availability indicators." }, "DisplayDriveUpSpace": { "type": "boolean", "description": "Indicator whether drive-up space information should be displayed, as a boolean. E.g., true for routes with drive-up space tracking, false when drive-up space is not tracked. Used to determine if drive-up space data should be shown." }, "DriveUpSpaceCount": { "type": "integer", "nullable": true, "description": "Remaining drive-up vehicle spaces available on vessel, as an integer count. E.g., '67' for 67 drive-up spaces remaining, '197' for 197 drive-up spaces, null when drive-up space is not tracked or count is unavailable. Used for drive-up availability display." }, "DriveUpSpaceHexColor": { "type": "string", "nullable": true, "description": "Hex color code representing drive-up space availability status, as a hex color. E.g., '#00FF00' for green (good availability), '#FFFF00' for yellow (limited availabil