Get Passage
Get full details for a specific sailing passage
Legacy — not maintained. Passages are a dormant data set generated in February 2026 and no longer updated. Many titles are generic ("Anchorage to Anchorage"), an embedded location name is often null, and some endpoints have since been merged into other locations without the geometry being recomputed. For passages boats were actually observed sailing, with measured times, use ais_passages on Get Location.
Endpoint
Description
Retrieve full details for a sailing passage, including route variants submitted by users, departure/arrival location details with images, and nearby POIs at each end.
Supports a direction parameter to view the return route (swaps departure and arrival). A passage is only served while both of its locations are published; otherwise it answers 404.
Authentication
Send X-API-Key: YOUR_API_KEY on every call from outside charter.boats — without it Cloudflare bot protection answers with an HTML 403 page, not JSON. Call it from your server: this route sends no CORS headers. See Authentication. Signed-in users of the site additionally see their own variant votes.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
slug | string | Route slug (URL-friendly identifier) |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
direction | string | No | Set to return to view the passage in reverse |
Example Request
Return Direction
Example Response
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Route ID (UUID) |
from_location_id / to_location_id | number | Departure / arrival location IDs |
slug | string | URL slug |
title | string | Route title |
description | string|null | Route description |
distance_nm | number|null | Distance in nautical miles |
difficulty | string|null | Difficulty level |
typical_duration_hours | number|null | Estimated sailing time |
rating | number|null | Average rating |
rating_count | number | Number of ratings |
variant_count | number|null | Number of route variants |
geojson | object|null | Default route geometry as a GeoJSON Feature (geometry + properties) |
created_at / updated_at | string | Row timestamps |
from_location | object | Departure location: id, name (stored name — can be null), country, country_code, lat, lon, harbour_category, image_url |
to_location | object | Arrival location (same shape) |
variants | array | Route variants sorted by default first, then by votes |
variants[].name / .description | string|null | Variant label and notes |
variants[].geojson | object | Variant geometry (GeoJSON Feature) |
variants[].distance_nm | number|null | Variant distance |
variants[].min_draft_m | number|null | Minimum draft for the variant |
variants[].source | string|null | How the variant was generated (e.g. searoute) |
variants[].is_default | boolean | Whether this is the default route |
variants[].user_id | string|null | Author user ID (null for system-generated variants) |
variants[].user | object|null | Author summary (id, name); null for system-generated variants |
variants[].upvote_count | number | Number of upvotes |
variants[].downvote_count | number | Number of downvotes |
user_votes | object | Authenticated user's votes (variant_id to vote mapping: 1 = up, -1 = down). Empty if not logged in. |
from_pois | array | Up to 5 nearest active POIs at departure: distance_meters + nested poi { id, name, category, subcategory }. POIs carry no rating. poi.name is the stored name and can be null for an unnamed car park, shop or pharmacy — label it from category/subcategory |
to_pois | array | Up to 5 nearest active POIs at arrival (same shape) |
is_reversed | boolean | true when direction=return was used |
Notes
- When
direction=returnis set,from_locationandto_locationare swapped, along withfrom_poisandto_pois.from_location_id/to_location_id,geojsonandvariantsare not swapped — they still describe the stored direction. user_votesis only populated for authenticated users. Each key is a variant ID, and the value is1(upvote) or-1(downvote).
Error Responses
404 Not Found
Returned for an unknown slug, and for a passage whose departure or arrival location is not published.