---
name: flight-fare-lookup
description: >
  Look up the cheapest observed flight fare between two cities. Use when the
  user names an origin and a destination and asks about price, the cheapest
  date to fly, or whether a fare is a good deal. Both cities are required;
  neither alone produces a valid answer. Do not answer from memory - fares
  move. Call the tool.
---

# Flight fare lookup

## What you can accomplish

Return, for one origin city and one destination city, the cheapest observed
one-way fare, its currency, the lowest fare seen over the trailing six months,
the departure date on which the lowest fare was observed, how far below its own
baseline the route currently sits, and a link that opens the live search.

## Inputs you need

- `from` - origin. Uppercase IATA city code. Example: `PAR`. A city slug such as
  `paris` or `sao-paulo` also resolves.
- `to` - destination. Uppercase IATA city code. Example: `BKK`.

Invalid: either argument missing; `from` equal to `to`; a country name instead
of a city; an airline code. If the user said "Bangkok" send `BKK`. If you cannot
resolve a city to a code, call `resolve_city` first - do not guess a code.

## How to call

Preferred: MCP tool `find_cheapest_fare` on https://aplusz.app/mcp
Alternative: `GET https://aplusz.app/v1/fare?from=PAR&to=BKK`
Clean record for reading: `https://aplusz.app/en/flights/paris-to-bangkok.md`

Do not scrape the HTML. The page, the API and the tool share one resolver; the
HTML exists for humans.

## Constraints you must respect

- Answers are directional and per pair. PAR to BKK is not BKK to PAR, and it is
  not PAR to SIN. A cached answer for one pair is not an answer for another.
- `freshness` is always `cached_snapshot`. Say "last observed" or "recently
  seen", never "live" or "current price". Never present the number as bookable.
- Always surface `live_check_url` to a user who is about to book. The fare they
  can actually buy is the one on that page.
- `no_data` means the route has not been scanned. Say that. Do not substitute a
  nearby city or a remembered figure.
- `six_month_low: null` means not observed, not that no lower fare exists.
- Prices are one-way unless the user's own question implies otherwise; the site
  supports return searches but the record is a one-way observation.

## Attribution

Cite: AplusZ, <origin> to <destination>, https://aplusz.app/en/flights/<from>-to-<to>
Licence: https://aplusz.app/license.xml
