Wsf Terminals API (1.0.0)

Download OpenAPI specification:

Wsf Terminals API - Washington State Department of Transportation APIs

cache-flush-date-terminals

Cache invalidation timestamp for static wsf-terminals data.

Get cache flush timestamp for static terminals data.

Responses

Request samples

import { fetchCacheFlushDateTerminals } from 'ws-dottie/wsf-terminals/core';

const data = await fetchCacheFlushDateTerminals({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

"2025-11-15T17:45:00.477Z"

terminal-basics

Essential terminal details including identification, amenities, and regional assignments.

List basic information for all terminals.

Responses

Request samples

import { fetchTerminalBasics } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalBasics({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 20 total)

[
  • {
    }
]

Get basic information for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalBasicsByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalBasicsByTerminalId({
  params: {
    "TerminalID": 1
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 1,
  • "TerminalSubjectID": 111,
  • "RegionID": 1,
  • "TerminalName": "Anacortes",
  • "TerminalAbbrev": "ANA",
  • "SortSeq": 10,
  • "OverheadPassengerLoading": true,
  • "Elevator": false,
  • "WaitingRoom": true,
  • "FoodService": true,
  • "Restroom": true
}

terminal-bulletins

Service alerts and notifications for ferry terminals.

List bulletins and alerts for all terminals.

Responses

Request samples

import { fetchTerminalBulletins } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalBulletins({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 20 total)

[
  • {
    }
]

Get bulletins and alerts for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalBulletinsByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalBulletinsByTerminalId({
  params: {
    "TerminalID": 3
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 3,
  • "TerminalSubjectID": 103,
  • "RegionID": 4,
  • "TerminalName": "Bainbridge Island",
  • "TerminalAbbrev": "BBI",
  • "SortSeq": 40,
  • "Bulletins": [ ]
}

terminal-locations

Geographical location data for ferry terminals.

List location information for all terminals.

Responses

Request samples

import { fetchTerminalLocations } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalLocations({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 20 total)

[
  • {
    }
]

Get location information for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalLocationsByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalLocationsByTerminalId({
  params: {
    "TerminalID": 5
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 5,
  • "TerminalSubjectID": 112,
  • "RegionID": 2,
  • "TerminalName": "Clinton",
  • "TerminalAbbrev": "CLI",
  • "SortSeq": 20,
  • "Latitude": 47.9754,
  • "Longitude": -122.349581,
  • "AddressLineOne": "64 South Ferrydock Road",
  • "AddressLineTwo": null,
  • "City": "Clinton",
  • "State": "WA",
  • "ZipCode": "98236",
  • "Country": "USA",
  • "Directions": "Highway 20 on Whidbey Island turns into Highway 525 S which leads directly to the Clinton terminal.<br><p>\r\n<b>Dropping off or picking up?</b><br>\r\nThe ferry terminal pick up or drop off point is prior to the toll booth on Ferry Dock Road.<p> ",
  • "DispGISZoomLoc": [
    ]
}

terminal-sailing-space

Real-time sailing space availability for upcoming departures.

List sailing space availability for all terminals.

Responses

Request samples

import { fetchTerminalSailingSpace } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalSailingSpace({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 13 total)

[
  • {
    }
]

Get sailing space availability for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalSailingSpaceByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalSailingSpaceByTerminalId({
  params: {
    "TerminalID": 7
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 7,
  • "TerminalSubjectID": 101,
  • "RegionID": 4,
  • "TerminalName": "Seattle",
  • "TerminalAbbrev": "P52",
  • "SortSeq": 20,
  • "DepartingSpaces": [
    ],
  • "IsNoFareCollected": null,
  • "NoFareCollectedMsg": null
}

terminal-transports

Transportation options and parking information for terminals.

List transportation information for all terminals.

Responses

Request samples

import { fetchTerminalTransports } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalTransports({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 20 total)

[
  • {
    }
]

Get transportation information for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalTransportsByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalTransportsByTerminalId({
  params: {
    "TerminalID": 10
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 10,
  • "TerminalSubjectID": 115,
  • "RegionID": 1,
  • "TerminalName": "Friday Harbor",
  • "TerminalAbbrev": "FRH",
  • "SortSeq": 50,
  • "ParkingInfo": "There is no parking at the Friday Harbor terminal. There is limited short term on street parking available.",
  • "ParkingShuttleInfo": null,
  • "AirportInfo": null,
  • "AirportShuttleInfo": null,
  • "MotorcycleInfo": "While motorcycles are not, by Washington Administrative Code (WAC 468-300-700), a preferential loading category of users, they are often loaded prior to automobiles for operational and staging purposes. Arrival at the dock after vehicle load has commenced requires motorcycles to wait until all cars have been loaded for the next motorcycle loading opportunity. Motorcycles should proceed, while on the dock, at no more than 10 mph. Use caution when car decks are wet. The following information details specific staging for this terminal:<p> \r\n\r\n<b>Motorcycle Fare Purchase/Redemption</b><br>\r\nTickets are required for International travel to Sidney, B.C. Canada.<p>\r\n\r\n<b>Motorcycle Entry/Staging</b><br>\r\nMotorcycles are staged on the yellow curb lane in front of Cannery Landing.<p>\r\n\r\n<b>Motorcycle Loading</b><br>\r\nLoading order: bicycles, motorcycles, vehicles, late arriving motorcycles as space permits.<p> \r\n\r\n<b>Motorcycle Special Communication</b><br>\r\nRecommended arrival time is 20 minutes prior to scheduled sailing time.<br>\r\nOn high traffic sailings, vessel overloads may occur for travel to Anacortes. To avoid missing a desired sailing, motorcyclists should arrive an hour prior to scheduled sailing.<p>\r\n\r\nInter-island tickets may be used between any two islands, they are not destination specific and fare payment is required traveling westbound only. Motorcyclists travel free eastbound. ",
  • "TruckInfo": "WSF requires trucks with a gross vehicle weight of over 80,000 lbs and/or over 8’6” wide to have “travel approval” before crossing any of our routes. Vessels on this route have a limited height clearance and trucks may be loaded out of sequence.<p>\r\nTrucks that have a gross vehicle weight of over 80,000 lbs but are hauling less than 80,000 lbs will need to provide a weight slip.<p>\r\nPlease fill out our <A HREF=\"https://wsdot.wa.gov/ferries/rider-information/trucks\" class=\"content_text\">Oversized/Overweight Vehicle Travel</A> form and email it to wsfinfo@wsdot.wa.gov. Please allow three business days for completion and approval. You can contact us at anytime for status updates at (206)464-6400.</p>\r\n",
  • "BikeInfo": "Bicyclists load through the passenger terminal and should bypass the vehicle holding lanes. Bicyclists should arrive 20 minutes prior to departure time to be loaded at the beginning of vehicle loading. If a bicyclist arrives after vehicle loading has begun, they will be loaded at the end of the load. The terminal has bicycle racks near the terminal along Front Street. Bicyclists are asked to walk on and walk off the vessel. The Agent will notify bicyclists when they may ride while offloading.",
  • "TrainInfo": null,
  • "TaxiInfo": null,
  • "HovInfo": null,
  • "TransitLinks": [ ]
}

terminal-verbose

Comprehensive terminal information combining all terminal data types.

List comprehensive information for all terminals.

Responses

Request samples

import { fetchTerminalVerbose } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalVerbose({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 20 total)

[
  • {
    }
]

Get comprehensive information for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalVerboseByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalVerboseByTerminalId({
  params: {
    "TerminalID": 4
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 4,
  • "TerminalSubjectID": 102,
  • "RegionID": 4,
  • "TerminalName": "Bremerton",
  • "TerminalAbbrev": "BRE",
  • "SortSeq": 30,
  • "OverheadPassengerLoading": true,
  • "Elevator": true,
  • "WaitingRoom": true,
  • "FoodService": true,
  • "Restroom": true,
  • "Bulletins": [
    ],
  • "Latitude": 47.561847,
  • "Longitude": -122.624089,
  • "AddressLineOne": "211 1st Street",
  • "AddressLineTwo": null,
  • "City": "Bremerton",
  • "State": "WA",
  • "ZipCode": "98337",
  • "Country": "USA",
  • "Directions": "Northbound on Highway 3: Exit SR 3 onto SR 304 which is marked Bremerton and features a ferry icon. Follow SR 304 (which becomes Callow) to Burwell (still SR 304)and follow signs to terminal.<p>\r\nSouthbound on Highway 3: Exit SR 3 at Kitsap Way (SR 310). Continue on SR 310 as it becomes 6th street. Turn right onto Pacific Ave, then left to 1st street which leads directly to tollbooths.<p>\r\nPost-Tunnel Construction: The 959-foot-long tunnel routes off-loading vehicle traffic from the ferry terminal to Burwell Street, resulting in improved pedestrian safety and reduced congestion in Bremerton's waterfront area.<p>\r\n<b>Exiting from the Bremerton Ferry</b><p>\r\nTo Downtown Bremerton: exit the tunnel, go right on Park ave., and go right on 4th Ave.<p>\r\nTo SR 3 Silverdale/Port Orchard: exit the tunnel, continue west on SR304/Burwell St., follow signs to SR 3/Silverdale/Port Orchard.<p>\r\nTo East Bremerton: exit the tunnel, go right on Warren Ave.<p>\r\n<b>No pedestrians or bicycles allowed in tunnel.</b><p>\r\n<b>Dropping off or picking up?</b><br>\r\nThe pick up or drop off points are located on 1st street and 2nd street just north of the terminal. ",
  • "DispGISZoomLoc": [
    ],
  • "IsNoFareCollected": null,
  • "NoFareCollectedMsg": null,
  • "ParkingInfo": "There are many parking lots near the Bremerton terminal. All are within 3.5 blocks of the terminal. Time and price options are posted at each lot. All offer 24-hour rates for overnight or extended stays. Parking is also available under the Bremerton Hotel/Conference Center and city garage three blocks north of terminal. For more information contact Impark Parking Services at 360-616-4808 or at the <a href=\"http://www.ci.bremerton.wa.us/453/Parking\" class=\"content_text\"><strong>City of Bremerton</a></strong> website.<p>\r\n\r\nThe Kitsap Transit bus routes to the Bremerton Ferry Terminal are 11, 15, 20, 21, 22, 24, 25, & 26. For more detailed bus information, please visit Kitsap Transit's <a href=\"http://www.kitsaptransit.com/rider-resources/bus-transfer-centers\" class=\"content_text\"><strong>Rider Resources</a></strong> page. <p>\r\n\r\nPickup and dropoff information at the Bremerton Transit Center is available <a href=\"http://www.kitsaptransit.com/uploads/images/staging/crbdisabledparkingmap.gif\"\r\n<a href=\"\"class=\"content_text\">here</a>.",
  • "ParkingShuttleInfo": null,
  • "AirportInfo": null,
  • "AirportShuttleInfo": "The <a href=\"http://www.kitsapairporter.com/\" class=\"content_text\">Kitsap Airporter</a> provides bus service from Sea-Tac International Airport to the Kitsap Peninsula.<p>\r\n ",
  • "MotorcycleInfo": "While motorcycles are not, by Washington Administrative Code (WAC 468-300-700), a preferential loading category of users, they are often loaded prior to automobiles for operational and staging purposes. Arrival at the dock after vehicle load has commenced requires motorcycles to wait until all cars have been loaded for the next motorcycle loading opportunity. Motorcycles should proceed, while on the dock, at no more than 10 mph. Use caution when car decks are wet. The following information details specific staging for this terminal:<p>\r\n<b>Motorcycle Fare Purchase/Redemption</b><br>\r\nPurchase tickets at the auto tollbooths, at the kiosk inside the terminal waiting room, or online in advance.<p>\r\n<b>Motorcycle Entry/Staging</b><br>\r\nQueue with automobiles prior to tollbooth. Sales and fare collection occur at tollbooth main window, no transactions through back window. Staging varies by time of day and slip in use, ask the ticket sellers or traffic attendants where to stage.<p>\r\n<b>Motorcycle Loading</b><br>\r\nLoading order: Bicycles, motorcycles, vehicles, late arriving motorcycles as space permits.<br>\r\nDuring commute hours, a motorcycle mid-load may occur.<p>\r\n<b>Motorcycle Special Communication</b><br>\r\nFor motorcycles arriving after vehicle load concludes, space availability will determine ability to board sailing.\r\n",
  • "TruckInfo": "WSF requires trucks with a gross vehicle weight of over 80,000 lbs and/or over 8’6” wide to have “travel approval” before crossing any of our routes. Vessels on this route have a limited height clearance and trucks may be loaded out of sequence.<p>\r\nTrucks that have a gross vehicle weight of over 80,000 lbs but are hauling less than 80,000 lbs will need to provide a weight slip.<p>\r\nPlease fill out our <A HREF=\"https://wsdot.wa.gov/ferries/rider-information/trucks\" class=\"content_text\">Oversized/Overweight Vehicle Travel</A> form and email it to wsfinfo@wsdot.wa.gov. Please allow three business days for completion and approval. You can contact us at anytime for status updates at (206)464-6400.</p>",
  • "BikeInfo": "There is no payment for passengers or bicycles traveling from Bremerton to Seattle. Bicyclists may bypass the line of vehicle traffic to get onto the ferry dock. A rider does not need to stop at the tollbooth traveling eastbound. Bicyclists should arrive 20 minutes prior to departure time to be loaded at the beginning of loading process. If a bicyclist arrives after vehicle loading has begun, they will be loaded at the end of the load. There are five racks at the terminal which hold 28 bikes.<p>\r\n \r\n",
  • "TrainInfo": null,
  • "TaxiInfo": null,
  • "HovInfo": "Carpool/Vanpools must be ticketed and in line 10 minutes before scheduled sailing time to receive preferential loading. If you are late, you will be loaded on a space available basis at the end of the loading. \r\nFor information or to register for our rideshare program see our<a href=\"https://wsdot.wa.gov/ferries/rider-information/groups-events/carpools-vanpools\" class=\"content_text\">carpools and vanpools</a> page. </p>",
  • "TransitLinks": [],
  • "WaitTimes": [
    ],
  • "RealtimeIntroMsg": null,
  • "AdditionalInfo": null,
  • "LostAndFoundInfo": "If you lose something on this route, it will be taken to the customer information booth at the Seattle Ferry Terminal (Colman Dock). The booth is open every day from 9:00 a.m. to 7:00 p.m. Any lost items will be kept for 30 days.<p>\r\n\r\nYou can call (206) 515-3439 or email WSFLost_Found@wsdot.wa.gov for help from 9:00 a.m. to 5:00 p.m., Monday to Friday. If you contact us outside these hours, we will reply the next business day.<p>\r\n\r\nOur Information Agents are also available to help with lost and found questions from 7:00 a.m. to 5:30 p.m. every day at (206) 464-6400 or 1-888-808-7977. ",
  • "SecurityInfo": "WSF has implemented a U.S. Coast Guard approved security plan, for more information please visit our <a href=\"https://wsdot.wa.gov/ferries/rider-information/safety\" class=\"content_text\"><strong>Safety and Security</a></strong> page.</p>",
  • "ConstructionInfo": null,
  • "FoodServiceInfo": "<b>Galley Hours <p>(Bremerton Route - Vessel #1)</b>\r\n<li>4:45 a.m. - 9:30 p.m. Daily</li><p>\r\n<b>Galley Hours <p>(Bremerton Route - Vessel #2)</b>\r\n<li>6:15 a.m. - 8:15 p.m. Daily</li>",
  • "AdaInfo": "For more details on how to drop off/pickup at the Bremerton Transit Center for disabled passengers please check <a href=\"http://kitsaptransit.com/uploads/images/staging/crbdisabledparkingmap.gif\"class=\"content_text\">Disabled Pick-Up/Drop-off Map.</a><p>\r\n",
  • "FareDiscountInfo": "We offer seniors (65+), persons with disabilities and passengers with a Medicare card, or other eligibility verification, travel at half the regular passenger fare rate. Children and youth under the age of 19 travel free, although teenagers behind the wheel of a motor vehicle must pay the adult vehicle and driver fare.<p>\r\nMulti-ride cards are good for 90 days from the date of purchase and are <b>non-refundable</b>.<p>For more information check <a href=\"http://www.wsdot.wa.gov/ferries/fares/\" class=\"content_text\"><strong>Fares.</a></strong><p>\r\n<b>Fare Purchase/Redemption</b><br>\r\nPurchase and redeem tickets at the auto tollbooths. Tickets may be purchased at the passenger booth, or at the kiosk inside the terminal waiting room, or online in advance.<br><p>\r\n<b>Pre-purchasing Wave2Go tickets does not guarantee a space on the vessel.</b>",
  • "TallySystemInfo": null,
  • "ChamberOfCommerce": {},
  • "FacInfo": "Contact the <a href=\"https://wsdot.wa.gov/ferries/about-us/community-participation\" class=\"content_text\">Ferry Advisory Committee</a> chair representing your community with suggestions or concerns about ferry service.</p>",
  • "ResourceStatus": null,
  • "TypeDesc": "Passenger and Car",
  • "REALTIME_SHUTOFF_FLAG": false,
  • "REALTIME_SHUTOFF_MESSAGE": "The Approximate Vehicle Spaces Available in Holding Area tool is currently unavailable due to technical issues. ",
  • "VisitorLinks": [ ]
}

terminal-wait-times

Wait time conditions and travel tips for vehicles and passengers.

List wait time information for all terminals.

Responses

Request samples

import { fetchTerminalWaitTimes } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalWaitTimes({
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API (showing first item of 20 total)

[
  • {
    }
]

Get wait time information for a specific terminal by ID.

Responses

Request samples

import { fetchTerminalWaitTimesByTerminalId } from 'ws-dottie/wsf-terminals/core';

const data = await fetchTerminalWaitTimesByTerminalId({
  params: {
    "TerminalID": 11
  },
  fetchMode: 'native',
  validate: true
});

console.log(data);

Response samples

Content type
application/json

Example of a successful response from the API

{
  • "TerminalID": 11,
  • "TerminalSubjectID": 116,
  • "RegionID": 2,
  • "TerminalName": "Coupeville ",
  • "TerminalAbbrev": "COU",
  • "SortSeq": 40,
  • "WaitTimes": [
    ]
}