---
title: "Compare the best saved fares across dates"
method: GET
path: "/v1/fares/best"
tags: ["Fares"]
---

# Compare the best saved fares across dates

`GET /v1/fares/best`

## Request

- Base URL: `https://sweetsaverfare.com`
- URL: `https://sweetsaverfare.com/v1/fares/best`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://sweetsaverfare.com/oauth/auth`, token URL `https://sweetsaverfare.com/oauth/token`, scopes: `fares:read`)

Returns the latest comparable saved fare evidence across a requested date range, including unavailable dates and freshness metadata.

## Query parameters

- `route_id` 'TSA_SWB' | 'SWB_TSA' | 'TSA_DUK' | 'DUK_TSA' | 'TSA_NAN' | 'HSB_NAN' | 'NAN_HSB' | 'SWB_FUL' | 'FUL_SWB' | 'HSB_LNG' | 'LNG_HSB' | 'ERL_SLT' | 'SLT_ERL' | 'CMX_PWR' | 'PWR_CMX', required
- `profile_id` 'ADULT_NO_VEHICLE' | 'ADULT_STANDARD_VEHICLE' | 'ADULT_OVERHEIGHT_VEHICLE', required
- `from` string, date, required
- `to` string, date, required
- `passenger` 'ADULT' | 'SENIOR_65_PLUS' | 'CHILD_0_4' | 'CHILD_5_11'

## Response `200`

Best fares

- BestFareResponse
  - `observation_id` string, uuid, nullable, required
  - `observed_at` string, date-time, required
  - `stale_after` string, date-time, required
  - `freshness_state` 'fresh' | 'stale' | 'expired', required
  - `source_status` 'ok' | 'missing' | 'provider_queue_active' | 'session_expired' | 'blocked' | 'unknown', required
  - `data_source` 'demo' | 'fake_worker' | 'fixture' | 'live_provider' | 'schedule_reference', required
  - `parser_version` string, required
  - `observation_trace_id` string, nullable, required
  - `fixture_sha` string, nullable, required
  - `observation_outcome` 'verified' | 'partial' | 'unavailable' | 'failed'
  - `disclaimer` 'Ferry fares can change. Confirm final availability and price directly with BC Ferries before making travel decisions.', required
  - `route_id` 'TSA_SWB' | 'SWB_TSA' | 'TSA_DUK' | 'DUK_TSA' | 'TSA_NAN' | 'HSB_NAN' | 'NAN_HSB' | 'SWB_FUL' | 'FUL_SWB' | 'HSB_LNG' | 'LNG_HSB' | 'ERL_SLT' | 'SLT_ERL' | 'CMX_PWR' | 'PWR_CMX', required
  - `profile_id` 'ADULT_NO_VEHICLE' | 'ADULT_STANDARD_VEHICLE' | 'ADULT_OVERHEIGHT_VEHICLE', required
  - `from` string, date, required
  - `to` string, date, required
  - `booking_closed_dates` string[]
  - `data_unavailable_dates` string[], required
  - `data_unavailable_from` string, date, nullable, required
  - `reservation_horizon` ReservationHorizon, required
    - `not_open_from` string, date, required
    - `observed_at` string, date-time, required
    - `stale_after` string, date-time, required
    - `freshness_state` 'fresh' | 'stale' | 'expired', required
    - `source_status` 'ok' | 'missing' | 'provider_queue_active' | 'session_expired' | 'blocked' | 'unknown', required
  - `route_advisory` RouteAdvisory, required
    - `message` string, required
    - `source_url` string, uri, required
    - `reviewed_at` string, date, required
  - `best_fares` BestFareResult[], required
    - `travel_date` string, date, required
    - `departure_time` string, required
    - `reservation_state` 'BOOKABLE' | 'BOOKABLE_BUT_NO_SAVER' | 'NOT_RELEASED' | 'SOLD_OUT_OR_UNAVAILABLE' | 'NON_RESERVABLE' | 'UNKNOWN', required
    - `saver_fare_sailing_count` integer, required
    - `total_sailing_count` integer, required
    - `fare` FareOption, required
      - `observation_id` string, uuid, nullable, required
      - `observed_at` string, date-time, required
      - `stale_after` string, date-time, required
      - `freshness_state` 'fresh' | 'stale' | 'expired', required
      - `source_status` 'ok' | 'missing' | 'provider_queue_active' | 'session_expired' | 'blocked' | 'unknown', required
      - `data_source` 'demo' | 'fake_worker' | 'fixture' | 'live_provider' | 'schedule_reference', required
      - `parser_version` string, required
      - `observation_trace_id` string, nullable, required
      - `fixture_sha` string, nullable, required
      - `observation_outcome` 'verified' | 'partial' | 'unavailable' | 'failed'
      - `disclaimer` 'Ferry fares can change. Confirm final availability and price directly with BC Ferries before making travel decisions.', required
      - `fare_family` 'SAVER' | 'PREPAID' | 'RESERVATION_ONLY' | 'STANDARD', required
      - `price_cents` integer, nullable, required
      - `currency` 'CAD', required
      - `available` boolean, required
      - `seats_remaining` integer, nullable
      - `price_breakdown` object[]
        - `label` string, required
        - `price_cents` integer, nullable, required
    - `lowest_fare` FareOption, required
      - `observation_id` string, uuid, nullable, required
      - `observed_at` string, date-time, required
      - `stale_after` string, date-time, required
      - `freshness_state` 'fresh' | 'stale' | 'expired', required
      - `source_status` 'ok' | 'missing' | 'provider_queue_active' | 'session_expired' | 'blocked' | 'unknown', required
      - `data_source` 'demo' | 'fake_worker' | 'fixture' | 'live_provider' | 'schedule_reference', required
      - `parser_version` string, required
      - `observation_trace_id` string, nullable, required
      - `fixture_sha` string, nullable, required
      - `observation_outcome` 'verified' | 'partial' | 'unavailable' | 'failed'
      - `disclaimer` 'Ferry fares can change. Confirm final availability and price directly with BC Ferries before making travel decisions.', required
      - `fare_family` 'SAVER' | 'PREPAID' | 'RESERVATION_ONLY' | 'STANDARD', required
      - `price_cents` integer, nullable, required
      - `currency` 'CAD', required
      - `available` boolean, required
      - `seats_remaining` integer, nullable
      - `price_breakdown` object[]
        - `label` string, required
        - `price_cents` integer, nullable, required
    - `observed_at` string, date-time, required
    - `stale_after` string, date-time, required
    - `freshness_state` 'fresh' | 'stale' | 'expired', required
    - `source_status` 'ok' | 'missing' | 'provider_queue_active' | 'session_expired' | 'blocked' | 'unknown', required
    - `data_source` 'demo' | 'fake_worker' | 'fixture' | 'live_provider' | 'schedule_reference', required
    - `observation_outcome` 'verified' | 'partial' | 'unavailable' | 'failed', required
    - `outcome_reason` string, nullable, required

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Permission or plan entitlement required
- `429`: Request rate limit exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/sweetsaverfare/apis/sweet-saver-fare-public-api.md) · [All operations](https://skmtc.dev/sweetsaverfare/apis/sweet-saver-fare-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sweetsaverfare/apis/sweet-saver-fare-public-api/revisions/102cb8af7798?raw)
